首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。
然后,现在要解决的话,需要先把undo tablespace设置成手动,启动数据库,创建新的undo tablespace。把新的设置成默认的。
假设你的库现在是mounted状态
1 创建PFILE(如果已有就是更新)
SQL>create pfile from spfile;
2 关闭数据库
SQL>shutdown immediate
3 在你的$ORACLE_HOME/dbs目录下面找个叫做
init<数据库>ora的文件,把其中有undo_management=AUTO的一行改成
undo_management=MANUAL
如果没有就在文件末尾填一行
4 以sysdba身份连接数据库
SQL>connect "/ as sysdba"
用刚才改过的文件启动数据库
SQL> startup pfile=<刚才的文件全路径和名字>
这步是最关键的,如果成功,后面就没问题了
5 drop掉原来的表空间
SQL> drop tablespace <原来的undo表空间名字> including contents;
6 创建新的undo表空间
SQL> create UNDO tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02dbf' size 100M autoextend on;
7 关闭数据库,
SQL>shutdown immediate
在开始那个init文件里设置UNDO_MANAGEMENT=AUTO
和 UNDO_TABLESPACE=UNDOTBS2
8 再做一次第四步
9 更新spfile
SQL>create spfile from pfile;
10 关闭数据库,正常重新启动
SQL>shutdown immediate
SQL>startup
11 去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做
12 让你的工程师去学oracle 培训
以上步骤的中的第5步可能会出问题。我不确认。。。 但是即使第5步不成功,问题应该也不大
如果没有备份的话从应用角度讲是无法恢复的,只能找专业的数据恢复公司恢复数据,而且由于原文件被覆盖,找专业数据恢复公司也不一定能把丢失数据全部找回来(视覆盖程度)。
如果是十分重要的数据,可以找数据恢复公司,另外可能还得配合ORACLE相关的专门恢复工具,恢复其中的信息,如果只是测试环境那就不必了。
很简单:首先要确定有没有备份,是什么备份的问题;其次确定是否打开了归档模式,归档是否都有保留的问题。
如果有备份,那么是rman备份?物理备份?逻辑备份?
1、rman备份,那直接restore然后recover很简单。
2、物理备份,就是使用了将表空间置为backup状态(可以是停库的冷备)后copy的备份,这个也是一样restore,但是会有数据丢失。
3、逻辑备份,exp类的备份,只备份了用户数据,那么也可以进行一定程度的恢复,不过丢数据是在所难免的。
如果没有备份,那么是否开启了归档?归档是否有保留?
1、如果开启了归档,并且归档都有所保留(即,从你建立table表空间的时间开始到目前为止的归档日志),那么你可以尝试重建数据文件的形式来恢复,具体的例子以前我写过,你可以查一查。
2、如果没有归档,而所有表都在这个表空间(没有分区表之类的)那么直接删了吧,反正是恢复不了了o(∩_∩)o 。如果有分区表,那么导出其他分区好了,损失少一点是一点。
Oracle DBA神器:PRM-DUL灾难恢复工具可以直接从这种受损的Oracle数据库中将数据拯救出来。
当你的数据库因为ORA-00600/ORA-07445或其他ORA-报错,或丢失关键的system表空间数据文件,或ASM diskgroup损坏时均可以考虑采用PRM-DUL来做恢复。PRM-DUL采用独创的DataBridge恢复技术,直接从数据文件中抽取数据后可以像DBLINK那样直接插入到新建数据库中,而无需数据落地成为DMP文件占用空间。
以上就是关于oracle undo表空间被删除,数据库无法启动,请问如何恢复全部的内容,包括:oracle undo表空间被删除,数据库无法启动,请问如何恢复、不小心把ORACLE 的 ORADATA下面的DBF和控制文件都用之前的文件覆盖,后来才发现数据少了,没有dmp备份,、oracle数据库问题 我发现我的数据库物理文件table.dbf不见了。怎么恢复呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)