OCM难题:关于undo tablespace 丢失的恢复! 大侠请进!

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
数据库现在open状态,用omf建的库,数据库处于归档模式;
现在数据库的undo表空间只有一个数据文件 undo01.dbf ,现在该文件被删除掉,然后数据库shutdown abort;
请问该如何恢复? 数据当然是肯定要丢失的,但如何能把数据库给open?
注: 不考虑采用冷备份拷贝回来,利用归档日志进行恢复的方式!
在mount模式下,先
alter database datafile 'undo01.dbf' offline drop;
alter database open 或 alter database open resetlogs
该方法不行;
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
好问题
本人认为难度较大
等待大家的高见!
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
晕,光说不行是没有办法解决问题的,不行时报什么错?
这种情况比较好恢复的.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
我试过用重建控制文件的方法,在创建控制文件中选择的是resetlogs, 然后recover database using backup controlfile ,还是不行(其中的controlfile 在数据库shutdown abort之前已经做了trace 以及二进制的备份);
((btw: 用重建控制文件resetlogs的方法,对于数据库正在运行,current log 被删除,然后shutdown immediate的场景可以open数据库,而不用在init.ora中增加_allow_resetlogs_corruption=true ,呵呵,扯原了,其实大家也可以考虑一下有什么更好的方法没有)
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 146280688 bytes
Fixed Size 454896 bytes
Variable Size 79691776 bytes
Database Buffers 65536000 bytes
Redo Buffers 598016 bytes Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/data1/zzxiao/ora9i3/oradata/ora103/o1_mf_sys_undo_13fv6rg4_.dbf'
SQL> alter database datafile 2 offline drop;
Database altered.
SQL> alter database open;
alter database open * ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced

trc文件里面的内容:
*** 2005-03-23 15:25:44.638 KCRA: buffers claimed = 31/31, eliminated = 0 ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: '/data1/zzxiao/ora9i3/oradata/ora103/o1_mf_sys_undo_13fv 6rg4_.dbf'
然后做如下操作:
SQL> recover database;
Media recovery complete.
SQL> alter database open resetlogs;
alter database open resetlogs
* ERROR at line 1: ORA-01139: RESETLOGS option only valid after an incomplete database recovery
SQL> alter database create datafile 2 as '/data1/zzxiao/ora9i3/oradata/undo02.dbf';
Database altered.
SQL> select name from v$datafile;
NAME -------------------------------------------------------------------------------- /data1/zzxiao/ora9i3/oradata/ora103/o1_mf_system_13fv584w_.dbf
/data1/zzxiao/ora9i3/oradata/undo02.dbf

SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ---------- ------- ------- ERROR CHANGE# ----------------------------------------------------------------- ---------- TIME --------- 2 OFFLINE OFFLINE 5110 15-MAR-05
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 agoo 发布
[B]SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 146280688 bytes
Fixed Size 454896 bytes
Variable Size 79691776 bytes
Database Buffers 65536000 bytes
Redo Buffers 598016 bytes Database mounted.
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/data1/zzxiao/ora9i3/oradata/ora103/o1_mf_sys_undo_13fv6rg4_.dbf'
SQL> alter database datafile 2 offline drop;
Database altered.
SQL> alter database open;
alter database open * ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced

trc文件里面的内容:
*** 2005-03-23 15:25:44.638 KCRA: buffers claimed = 31/31, eliminated = 0 ORA-00604: error occurred at recursive SQL level 1
ORA-00376: file 2 cannot be read at this time
ORA-01110: data file 2: '/data1/zzxiao/ora9i3/oradata/ora103/o1_mf_sys_undo_13fv 6rg4_.dbf'
然后做如下操作:
SQL> recover database;
Media recovery complete.
SQL> alter database open resetlogs;
alter database open resetlogs
* ERROR at line 1: ORA-01139: RESETLOGS option only valid after an incomplete database recovery
SQL> alter database create datafile 2 as '/data1/zzxiao/ora9i3/oradata/undo02.dbf';
Database altered.
SQL> select name from v$datafile;
NAME -------------------------------------------------------------------------------- /data1/zzxiao/ora9i3/oradata/ora103/o1_mf_system_13fv584w_.dbf
/data1/zzxiao/ora9i3/oradata/undo02.dbf

SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ---------- ------- ------- ERROR CHANGE# ----------------------------------------------------------------- ---------- TIME --------- 2 OFFLINE OFFLINE 5110 15-MAR-05 [/B]

不用resetlogs,直接打开看看。看提示你是恢复成功了,应该是可以直接打开了。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
回滚段 损坏的情况下,又需要恢复,则需要使用 保留参数打开
google 搜索一下很多的
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
加回滚段的参数,强制启动数据库,然后exp/imp,不算什么难的吧,做过好多次了。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
呵呵,
1.to blue_prince10 :虽然提示恢复成功,但是 alter database open 是无法打开的,这个我没有贴上来
2.to others: 这个数据库是oracle9i (不是oracle817),初始化参数里面,undo_management=auto ,undo表空间是自动管理的,所以
_corrupted_rollback_segments这个参数感觉没有用; 但我试过再init中注销掉undo_management=auto,并且设置_corrupted_rollback_segments=(SYSTEM)(通过打开正常oracle9i数据库观察用的是该rollback segment 名称)
然后打开数据库,还是失败.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 agoo 发布
[B]呵呵,
1.to blue_prince10 :虽然提示恢复成功,但是 alter database open 是无法打开的,这个我没有贴上来
2.to others: 这个数据库是oracle9i (不是oracle817),初始化参数里面,undo_management=auto ,undo表空间是自动管理的,所以
_corrupted_rollback_segments这个参数感觉没有用; 但我试过再init中注销掉undo_management=auto,并且设置_corrupted_rollback_segments=(SYSTEM)(通过打开正常oracle9i数据库观察用的是该rollback segment 名称)
然后打开数据库,还是失败. [/B]

oracle9i原理是一样的,你修改undo_management=manual,然后再使用参数试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行