ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据库备份与恢复测试 8

数据库备份与恢复测试 8

原创 数据库开发技术 作者:scoreking 时间:2006-02-15 18:40:14 0 删除 编辑
######################################################################################
# [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:oracleoradatatestdbarchive
最早的概要日志序列 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:ORACLEORADATATESTDBSYSTEM01.DBF
输入数据文件 fno=00002 name=C:ORACLEORADATATESTDBUNDOTBS01.DBF
输入数据文件 fno=00003 name=C:ORACLEORADATATESTDBINDX01.DBF
输入数据文件 fno=00005 name=C:ORACLEORADATATESTDBUSERS01.DBF
输入数据文件 fno=00004 name=C:ORACLEORADATATESTDBTOOLS01.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:ORACLEORADATATESTDBUNDOTBS01.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:oracleoradatatestdbarchive
最早的概要日志序列 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:ORACLEORADATATESTDBSYSTEM01.DBF
输入数据文件 fno=00002 name=C:ORACLEORADATATESTDBUNDOTBS01.DBF
输入数据文件 fno=00003 name=C:ORACLEORADATATESTDBINDX01.DBF
输入数据文件 fno=00005 name=C:ORACLEORADATATESTDBUSERS01.DBF
输入数据文件 fno=00004 name=C:ORACLEORADATATESTDBTOOLS01.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:ORACLEORADATATESTDBUNDOTBS01.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:ORACLEORADATATESTDBUNDOTBS01.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:ORACLEORADATATESTDBUNDOTBS01.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:oracleora92databaseINITtestdb_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:ORACLEORADATATESTDBUNDOTBS02
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:ORACLEORADATATESTDBUNDOTBS02.DBF'


SQL> ALTER DATABASE CREATE DATAFILE 'C:ORACLEORADATATESTDBUNDOTBS02.DBF';

数据库已更改。

SQL> RECOVER DATABASE;
完成介质恢复。
SQL> ALTER DATABASE OPEN;

数据库已更改。

SQL> COL NAME FORMAT A50;
SQL> SELECT NAME,STATUS FROM V$DATAFILE;

NAME STATUS
-------------------------------------------------- -------
C:ORACLEORADATATESTDBSYSTEM01.DBF SYSTEM
C:ORACLEORADATATESTDBUNDOTBS01.DBF ONLINE
C:ORACLEORADATATESTDBINDX01.DBF ONLINE
C:ORACLEORADATATESTDBTOOLS01.DBF ONLINE
C:ORACLEORADATATESTDBUSERS01.DBF ONLINE
C:ORACLEORADATATESTDBUNDOTBS02.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 Settingslifeng.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:oracleoradatatestdbUNDOTB2.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.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/257699/viewspace-815194/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-04

  • 博文量
    40
  • 访问量
    209274