###################################################################################### # [9].回滚段恢复 # ######################################################################################
参见1013221.6 28812.1 ################################ # [9.1].正常shutdown,回滚数据文件丢失, # 有备份,回滚段恢复 ################################
SQL> startup Oracle 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> archive log list 数据库日志模式 存档模式 自动存档 启用 存档终点 C:\oracle\oradata\testdb\archive 最早的概要日志序列 1 下一个存档日志序列 3 当前日志序列 3
SQL> select us#, name, status$ from undo$;
US# NAME STATUS$ ---------- ------------------------------ ---------- 0 SYSTEM 3 1 _SYSSMU1$ 3 2 _SYSSMU2$ 3
3 _SYSSMU3$ 3 4 _SYSSMU4$ 3 5 _SYSSMU5$ 3 6 _SYSSMU6$ 3 7 _SYSSMU7$ 3 8 _SYSSMU8$ 3 9 _SYSSMU9$ 3 10 _SYSSMU10$ 3
已选择11行。
SQL> select SEGMENT_NAME,STATUS from dba_rollback_segs;
SEGMENT_NAME STATUS ------------------------------ ---------------- SYSTEM ONLINE _SYSSMU1$ ONLINE _SYSSMU2$ ONLINE _SYSSMU3$ ONLINE _SYSSMU4$ ONLINE _SYSSMU5$ ONLINE
_SYSSMU6$ ONLINE _SYSSMU7$ ONLINE _SYSSMU8$ ONLINE _SYSSMU9$ ONLINE _SYSSMU10$ ONLINE
已选择11行。
RMAN> backup format 'c:\noarch_%s%p1.bak' database;
启动 backup 于 03-3月 -05 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在启动 full 数据文件备份集 通道 ORA_DISK_1: 正在指定备份集中的数据文件 在备份集中包含当前的 SPFILE 备份集中包括当前控制文件 输入数据文件 fno=00001 name=C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF 输入数据文件 fno=00002 name=C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF 输入数据文件 fno=00003 name=C:\ORACLE\ORADATA\TESTDB\INDX01.DBF 输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF 输入数据文件 fno=00004 name=C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05 通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05 段 handle=C:\NOARCH_211.BAK comment=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27 完成 backup 于 03-3月 -05
RMAN>
RMAN>
RMAN> copy current controlfile to 'c:\currcont.ctl';
启动 copy 于 03-3月 -05 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 已复制当前的控制文件 输出文件名=C:\CURRCONT.CTL 完成 copy 于 03-3月 -05
RMAN> exit
恢复治理器完成。
SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS ---------- ---------- --- ---------------- 1 5 NO CURRENT 2 3 YES ACTIVE 3 4 NO ACTIVE
SQL> shutdown -->>这里是正常shutdown,所以会做检查点,当前的数据文件不需要恢复状态
数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。
~~~~~~~~~~~~~~~~~~~~~~~~ 模拟删除UNDOTBS01.DBF 这时其他文件都是一致性的, 只需要UNDOTBS01.DBF恢复 ~~~~~~~~~~~~~~~~~~~~~~~~ 删除UNDOTBS01.DBF 还原一个UNDOTBS01.DBF的备份
SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 ORA-01113: 文件 2 需要介质恢复 ORA-01110: 数据文件 2: 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF'
SQL> recover database ; 完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST ---------- -- 6166 no 98656 ok ################################ # [9.2].shutdown abort(或者使用了别的老的数据文件), # 回滚数据文件丢失,有备份,回滚段恢复 , # 数据库没有活动事务 ################################ 略: 也能完全恢复 ~~~~~~~~~~~~~~~~~~~~~~ 虽然是abort,但是只是需要做一个检查点, 将数据写到数据文件中,但这部分数据直接 在在线日志中可以拿到了,只需要前滚, 不需要进行回滚 ~~~~~~~~~~~~~~~~~~~~~~
################################ # [9.3].shutdown abort(或者使用了别的老的数据文件), # 回滚数据文件丢失,有备份,回滚段恢复 , # 数据库有活动事务 ################################
SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> archive log list 数据库日志模式 存档模式 自动存档 启用 存档终点 C:\oracle\oradata\testdb\archive 最早的概要日志序列 1 下一个存档日志序列 3 当前日志序列 3
RMAN> backup format 'c:\noarch_%s%p1.bak' database;
启动 backup 于 03-3月 -05 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件 在备份集中包含当前的 SPFILE 备份集中包括当前控制文件 输入数据文件 fno=00001 name=C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF 输入数据文件 fno=00002 name=C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF 输入数据文件 fno=00003 name=C:\ORACLE\ORADATA\TESTDB\INDX01.DBF 输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF 输入数据文件 fno=00004 name=C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF 通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05 通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05 段 handle=C:\NOARCH_211.BAK comment=NONE 通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27 完成 backup 于 03-3月 -05
RMAN>
RMAN>
RMAN> copy current controlfile to 'c:\currcont.ctl';
启动 copy 于 03-3月 -05 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 已复制当前的控制文件 输出文件名=C:\CURRCONT.CTL 完成 copy 于 03-3月 -05
RMAN> exit
恢复治理器完成。
SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects; --这里没有commit
已创建6166行。
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS ---------- ---------- --- ---------------- 1 5 NO CURRENT 2 3 YES ACTIVE 3 4 NO ACTIVE
SQL> shutdown abort-->>这里是正常shutdown,所以会做检查点,当前的数据文件不需要恢复状态 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。
~~~~~~~~~~~~~~~~~~~~~~~~ 模拟删除UNDOTBS01.DBF 这时其他文件都是一致性的, 只需要UNDOTBS01.DBF恢复 ~~~~~~~~~~~~~~~~~~~~~~~~ 删除UNDOTBS01.DBF 还原一个UNDOTBS01.DBF的备份
SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 ORA-01113: 文件 2 需要介质恢复 ORA-01110: 数据文件 2: 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF'
SQL> recover database ;
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL> select count(*),status from arch group by status;
COUNT(*) ST ---------- -- 98656 ok ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8i假如有活动的事务,那么恢复回滚表空间时, 在前滚后后滚时要读自己回滚段里的数据, 而自己的数据文件已经损坏了,所以就不答应的, 所以在mount前将初始化参数 rollback_segments=(system) _corrupted_rollback_segments=(rbs0,rbs1,rbs2……) 而9I,测试中回撤表空间数据文件恢复跟常规表空间恢复一样 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
################################ # [9.4].shutdown abort(或者使用了别的老的数据文件), # 回滚数据文件丢失,没有备份,回滚段恢复 , # 数据库有活动事务 ################################ SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> shutdown abort ORACLE 例程已经关闭。 SQL> 丢失undo文件 SQL> startup mount; ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF' offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> select US#,NAME,ts#,STATUS$,FLAGS from undo$ where STATUS$ <> 3;
US# NAME TS# STATUS$ FLAGS ---------- ------------------------------ ---------- ---------- ---------- 1 _SYSSMU1$ 1 2
2 _SYSSMU2$ 1 2 3 _SYSSMU3$ 1 2 4 _SYSSMU4$ 1 2 5 _SYSSMU5$ 1 2 6 _SYSSMU6$ 1 2 7 _SYSSMU7$ 1 2 8 _SYSSMU8$ 1 2 9 _SYSSMU9$ 1 2 10 _SYSSMU10$ 1 2 11 _SYSSMU11$ 1 5
SQL> select count(*) from arch; --这里表是不能读取一致性了 select count(*) from arch * ERROR 位于第 1 行: ORA-00376: ???????? 2 ORA-01110: ???? 2: 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF'
SQL> shutdown 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL>
编辑INITtestdb_undo.ORA' *.undo_management='AUTO' *.undo_retention=10800 *.undo_tablespace='UNDOTBS1' _allow_resetlogs_corruption=true _corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$) _offline_rollback_segments=true
SQL> startup pfile='C:\oracle\ora92\database\INITtestdb_undo.ORA'; ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes
SQL> alter database open;
数据库已更改。
SQL> select count(*) from arch;
COUNT(*) ---------- 104822
再创建新的undo表空间 drop 坏的undo tablespace
最好做一个整库的导出,并导入到新系统
################################ # [9.5].shutdown abort(或者使用了别的老的数据文件), # 回滚数据文件丢失,没有备份,但控制文件有创建 # 该回撤段数据文件的所有历史日志,回滚段恢复 , # 数据库有活动事务 ################################ SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO
undo_retention integer 10800 undo_suppress_errors boolean FALSE undo_tablespace string UNDOTBS1 SQL> alter tablespace UNDOTBS1 add datafile 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS02 DBF' size 1m;
表空间已更改。
SQL> SQL> SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> SHUTDOWN ABORT ORACLE 例程已经关闭。
删除UNDOTBS02
SQL> STARTUP ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 6: 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS02.DBF'
SQL> ALTER DATABASE CREATE DATAFILE 'C:\ORACLE\ORADATA\TESTDB\UNDOTBS02.DBF';
数据库已更改。
SQL> RECOVER DATABASE; 完成介质恢复。 SQL> ALTER DATABASE OPEN;
数据库已更改。
SQL> COL NAME FORMAT A50; SQL> SELECT NAME,STATUS FROM V$DATAFILE;
NAME STATUS -------------------------------------------------- ------- C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF SYSTEM C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF ONLINE C:\ORACLE\ORADATA\TESTDB\INDX01.DBF ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF ONLINE C:\ORACLE\ORADATA\TESTDB\USERS01.DBF ONLINE C:\ORACLE\ORADATA\TESTDB\UNDOTBS02.DBF ONLINE
已选择6行。
################################ # [9.6].数据库打开时回撤表空间文件 # 损坏,没有备份 ################################
SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> create table arch (status varchar(2)) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'ok' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> insert into arch select * from arch;
已创建6166行。
SQL> /
已创建12332行。
SQL> /
已创建24664行。
SQL> /
已创建49328行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> commit;
提交完成。
SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS ---------- ---------- --- ---------------- 1 5 NO CURRENT 2 3 YES INACTIVE 3 4 YES ACTIVE
SQL> SQL> SQL> SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;
GROUP# SEQUENCE# ARC STATUS ---------- ---------- --- ---------------- 1 5 NO CURRENT 2 3 YES INACTIVE 3 4 YES ACTIVE
SQL> select us#, name, status$ from undo$;
US# NAME STATUS$
---------- ------------------------------ ---------- 0 SYSTEM 3 1 _SYSSMU1$ 3 2 _SYSSMU2$ 3 3 _SYSSMU3$ 3 4 _SYSSMU4$ 3 5 _SYSSMU5$ 3 6 _SYSSMU6$ 3 7 _SYSSMU7$ 3 8 _SYSSMU8$ 3 9 _SYSSMU9$ 3 10 _SYSSMU10$ 3
已选择11行。
SQL> select SEGMENT_NAME,STATUS from dba_rollback_segs;
SEGMENT_NAME STATUS ------------------------------ ----------------
SYSTEM ONLINE _SYSSMU1$ ONLINE _SYSSMU2$ ONLINE _SYSSMU3$ ONLINE _SYSSMU4$ ONLINE _SYSSMU5$ ONLINE _SYSSMU6$ ONLINE _SYSSMU7$ ONLINE _SYSSMU8$ ONLINE _SYSSMU9$ ONLINE _SYSSMU10$ ONLINE
已选择11行。
SQL> show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 10800 undo_suppress_errors boolean FALSE undo_tablespace string UNDOTBS1
~~~~~~~~~~~~~~~~~~~~~ 这里模拟回撤数据文件损坏 ~~~~~~~~~~~~~~~~~~~~~ 用ultraedit破坏UNDOTBS01.DBF
SQL> shutdown --因为要使用回滚,但回滚失败 ORA-00603: ORACLE 服务器会话因致命错误而终止
SQL> startup ORA-24324: 未初始化服务句柄 ORA-01041: 内部错误,hostdef 扩展名不存在 SQL> exit 从Oracle9i Enterprise Edition Release 9.2.0.1.0 - ProdUCtion With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production中断开
C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 3月 4 14:18:35 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已连接。 SQL> startup ORA-01081: cannot start already-running ORACLE - shut it down first SQL> shutdown ORA-01090: shutdown in progress - connection is not permitted SQL> shutdown abort --只有abort才可以关闭数据库,因为不需要回滚 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> select SEGMENT_NAME,STATUS from dba_rollback_segs;
SEGMENT_NAME STATUS ------------------------------ ---------------- SYSTEM ONLINE _SYSSMU1$ NEEDS RECOVERY _SYSSMU2$ NEEDS RECOVERY _SYSSMU3$ NEEDS RECOVERY _SYSSMU4$ NEEDS RECOVERY _SYSSMU5$ NEEDS RECOVERY _SYSSMU6$ NEEDS RECOVERY _SYSSMU7$ NEEDS RECOVERY _SYSSMU8$ NEEDS RECOVERY
_SYSSMU9$ NEEDS RECOVERY _SYSSMU10$ NEEDS RECOVERY
SQL> select us#, name, status$ from undo$;
US# NAME STATUS$ ---------- ------------------------------ ---------- 0 SYSTEM 3 1 _SYSSMU1$ 5 2 _SYSSMU2$ 5 3 _SYSSMU3$ 5 4 _SYSSMU4$ 5 5 _SYSSMU5$ 5 6 _SYSSMU6$ 5 7 _SYSSMU7$ 5 8 _SYSSMU8$ 5 9 _SYSSMU9$ 5
10 _SYSSMU10$ 5
已选择11行。
~~~~~~~~~~~~~~~~~~~~~ 这里我们注重能够打开数据库 但是这里状态是需要恢复 ~~~~~~~~~~~~~~~~~~~~~~ SQL> create pfile='c:\undopfile.ora' from spfile;
文件已创建。
SQL> create undo tablespace UNDOTBS2 datafile 'C:\oracle\oradata\testdb\UNDOTB2.DBF' size 50m;
表空间已创建。
SQL> select count(*),status from arch group by status;
COUNT(*) ST ---------- -- 6166 no 98656 ok SQL> insert into arch select 'af' from dba_objects; insert into arch select 'af' from dba_objects * ERROR 位于第 1 行: ORA-01552: 非系统表空间'USERS'无法使用系统回退段
SQL> shutdown 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 编辑c:\undopfile.ora, 将设置*.undo_tablespace='UNDOTBS2' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SQL> startup pfile='c:\undopfile.ora'
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> insert into arch select 'af' from dba_objects;
已创建6166行。
SQL> select 2 trunc(id1/power(2,16)) rbs, 3 bitand(id1,to_number('ffff','xxxx'))+0 slot, 4 id2 seq, 5 lmode,request 6 from v$lock,v$session 7 where v$lock.type = 'TX' 8 and v$lock.sid = v$session.sid 9 and v$session.username is not null;
RBS SLOT SEQ LMODE REQUEST ---------- ---------- ---------- ---------- ---------- 17 0 2 6 0
SQL> select SEGMENT_NAME,TABLESPACE_NAME,STATUS from dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- SYSTEM SYSTEM ONLINE _SYSSMU1$ UNDOTBS1 NEEDS RECOVERY _SYSSMU2$ UNDOTBS1 NEEDS RECOVERY _SYSSMU3$ UNDOTBS1 NEEDS RECOVERY _SYSSMU4$ UNDOTBS1 NEEDS RECOVERY _SYSSMU5$ UNDOTBS1 NEEDS RECOVERY _SYSSMU6$ UNDOTBS1 NEEDS RECOVERY _SYSSMU7$ UNDOTBS1 NEEDS RECOVERY _SYSSMU8$ UNDOTBS1 NEEDS RECOVERY
_SYSSMU9$ UNDOTBS1 NEEDS RECOVERY _SYSSMU10$ UNDOTBS1 NEEDS RECOVERY
SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- _SYSSMU11$ UNDOTBS2 ONLINE _SYSSMU12$ UNDOTBS2 ONLINE _SYSSMU13$ UNDOTBS2 ONLINE _SYSSMU14$ UNDOTBS2 ONLINE _SYSSMU15$ UNDOTBS2 ONLINE _SYSSMU16$ UNDOTBS2 ONLINE _SYSSMU17$ UNDOTBS2 ONLINE _SYSSMU18$ UNDOTBS2 ONLINE
_SYSSMU19$ UNDOTBS2 ONLINE _SYSSMU20$ UNDOTBS2 ONLINE
SQL> select US#,NAME,ts#,STATUS$,FLAGS from undo$;
US# NAME TS# STATUS$ FLAGS ---------- ------------------------------ ---------- ---------- ---------- 0 SYSTEM 0 3 1 _SYSSMU1$ 1 5 2 _SYSSMU2$ 1 5 3 _SYSSMU3$ 1 5 4 _SYSSMU4$ 1 5 5 _SYSSMU5$ 1 5 6 _SYSSMU6$ 1 5
7 _SYSSMU7$ 1 5 8 _SYSSMU8$ 1 5 9 _SYSSMU9$ 1 5 10 _SYSSMU10$ 1 5
US# NAME TS# STATUS$ FLAGS ---------- ------------------------------ ---------- ---------- ---------- 11 _SYSSMU11$ 6 3 12 _SYSSMU12$ 6 3 13 _SYSSMU13$ 6 3 14 _SYSSMU14$ 6 3 15 _SYSSMU15$ 6 3
16 _SYSSMU16$ 6 3 17 _SYSSMU17$ 6 3 --插入数据的回滚信息在这 18 _SYSSMU18$ 6 3 19 _SYSSMU19$ 6 3 20 _SYSSMU20$ 6 3
已选择21行。
这些非online的回撤段也需要在初始化参数中强制_corrupted_rollback_segments 且_offline_rollback_segments=true
这里跟9.4一样,设置初始化文件 编辑INITtestdb_undo.ORA' *.undo_management='AUTO' *.undo_retention=10800 *.undo_tablespace='UNDOTBS1' _allow_resetlogs_corruption=true _corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$) _offline_rollback_segments=true
然后打开数据库
看看TOM的例子 sys@ORA920.US.ORACLE.COM> shutdown Database closed. Database dismounted. ORACLE instance shut down.
sys@ORA920.US.ORACLE.COM> exit Disconnected from Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production
[ora920@tkyte-pc-isdn ora920]$ ls control01.ctl cwmlite01.dbf indx01.dbf redo02.log redo0B.log temp01.dbf users01.dbf control02.ctl drsys01.dbf odm01.dbf redo03.log redo0C.log tools01.dbf xdb01.dbf control03.ctl example01.dbf redo01.log redo0A.log system01.dbf undotbs01.dbf
[ora920@tkyte-pc-isdn ora920]$ mv undotbs01.dbf undotbs01.dbf.xxx
[ora920@tkyte-pc-isdn ora920]$ sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on Sat Sep 28 08:33:29 2002
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
idle> connect / as sysdba
Connected to an idle instance. idle> startup ORACLE instance started.
Total System Global Area 143725064 bytes Fixed Size 451080 bytes Variable Size 109051904 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: '/usr/oracle/ora920/OraHome1/oradata/ora920/undotbs01.dbf'
idle> show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 10800 undo_suppress_errors boolean FALSE undo_tablespace string UNDOTBS1
idle> alter system set undo_management = manual scope=spfile;
System altered.
Note: disabling the undo tablespace here, this'll let us go back to "rollback segments" and we'll use the system RBS to get back on our feet
idle> shutdown ORA-01109: database not open
Database dismounted. ORACLE instance shut down.
idle> exit Disconnected from Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production
[ora920@tkyte-pc-isdn ora920]$ !sql sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on Sat Sep 28 08:35:34 2002
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
idle> connect / as sysdba; Connected to an idle instance. idle> startup ORACLE instance started.
Total System Global Area 143725064 bytes Fixed Size 451080 bytes Variable Size 109051904 bytes
Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: '/usr/oracle/ora920/OraHome1/oradata/ora920/undotbs01.dbf'
Note: we still have to get rid of that thing..
idle> alter database datafile '/usr/oracle/ora920/OraHome1/oradata/ora920/undotbs01.dbf' 2 offline drop;
Database altered.
idle> alter database open;
Database altered.
idle> drop tablespace undotbs1;
Tablespace dropped.
idle> create UNDO tablespace undotbs1 2 datafile '/usr/oracle/ora920/OraHome1/oradata/ora920/undotbs01.dbf' size 25m 3 autoextend on next 1m maxsize 1024m;
Tablespace created.
idle> alter system set undo_management = auto scope=spfile;
System altered.
Now, we've put the undo tablespace "back" by creating a new one. Just bounce...
idle> shutdown Database closed. Database dismounted. ORACLE instance shut down. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|