📄 备份与恢复测试.txt
字号:
SQL> recover database using backup controlfile until cancel; -->>这个cancel是表示每次应用一个日志时都提示一下,直到输入cancel后结束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 对于线程 1 是按序列 # 13 进行的
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cancel通常好于change和time的恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel --输入cancel恢复成功 -->>cancel选项允许每次前滚一个日志文件,当需要停止恢复时,输入cancel
,在这种方式下不会自动运用联机日志文件.
介质恢复已取消。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
1069388
SQL> select count(*) from test;
COUNT(*)
----------
24660 --丢失了数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里可以应用在线日志实现完全恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
那我们使用备份控制文件恢复,是不是一定恢复不了在线日志中的数据吗?
答案是错误的,其实也能完全恢复(当然我们用trace更好)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#######################################################
# [测试5.1]我们现在模拟控制文件损坏,有控制文件备份,先于控制文件备份的所有数据文件备份
# 使用在线日志进行完全恢复
#######################################################
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 ACTIVE
3 4 YES ACTIVE
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69410
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
还原备份控制文件,还原所有备份数据文件
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 open;
alter database open
*
ERROR 位于第 1 行:
ORA-00314: 日志 1 (线程 1),预计序号 与 不匹配
ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69257
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 69362 (在 03/04/2005 11:21:25 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69362 对于线程 1 是按序列 # 4 进行的
ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的
ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69408
~~~~~~~~~~~~~~
到此是不完全恢复
那我们是不是可以
应用在线日志呢,那
我们先应用SEQUENCE=3和4
的日志C:\oracle\oradata\testdb\REDO02.LOG
C:\oracle\oradata\testdb\REDO03.LOG
我们可以看到恢复时这个文件不需要
~~~~~~~~~~~~~~~
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO02.LOG
ORA-00310: 存档日志包含序列 3;要求序列 5
ORA-00334: 归档日志: 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO03.LOG
ORA-00310: 存档日志包含序列 4;要求序列 5
ORA-00334: 归档日志: 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69408
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们看到非活动在线日志没有被应用
我们应用SEQUENCE=5
的日志C:\oracle\oradata\testdb\REDO01.LOG
我们可以看到恢复时这个文件是需要的
~~~~~~~~~~~~~~~
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 69408 (在 03/04/2005 11:21:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69408 对于线程 1 是按序列 # 5 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
C:\oracle\oradata\testdb\REDO01.LOG --这步是关键
已应用的日志。
完成介质恢复。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69418 --在SEQUENCE=5中的SCN被应用了
SQL> alter database open resetlogs;
数据库已更改。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
69418 69516
SQL> select count(*),status from arch group by status;
COUNT(*) ST
---------- --
6166 no
98656 ok
-->>完全恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~
这里主要是由于应用了活动在线日志
C:\oracle\oradata\testdb\REDO01.LOG的恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~
#######################################################
# [测试6]那我们看看,有老的数据文件备份,备份控制文件后插
# 入的数据在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> 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> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69611
SQL>
SQL> insert into arch select 'no' from dba_objects;
已创建6166行。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69611
SQL> commit;
提交完成。
SQL> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;
RESETLOGS_CHANGE#-1 CONTROLFILE_CHANGE#
------------------- -------------------
68658 69611
SQL> shutdown abort
ORACLE 例程已经关闭。
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月 2 14:25:25 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已连接到空闲例程。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -