下一页 1 2 3 4
######################################################################################
# [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,但是只是需要做一个检查点,
将数据写到数据文件中,但这部分数据直接
在在线日志中可以拿到了,只需要前滚,
不需要进行回滚
~~~~~~~~~~~~~~~~~~~~~~