Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2617872
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2009-03-11 20:31:26

我直接把测试结果记录下来了。
 
SQL> alter system switch logfile;
系统已更改。
 
热备份脚本如下:
alter tablespace system begin backup;
host copy E:\ORACLE\ORASJH\SYSTEM01.DBF E:\oracle\hotbak\SYSTEM01.DBF
alter tablespace system end backup;
alter tablespace undotbs1 begin backup;
host copy E:\ORACLE\ORASJH\UNDOTBS01.DBF E:\oracle\hotbak\UNDOTBS01.DBF
alter tablespace undotbs1 end backup;
alter tablespace sysaux begin backup;
host copy E:\ORACLE\ORASJH\SYSAUX01.DBF E:\oracle\hotbak\SYSAUX01.DBF
alter tablespace sysaux end backup;
alter tablespace users begin backup;
host copy E:\ORACLE\ORASJH\USERS01.DBF E:\oracle\hotbak\USERS01.DBF
alter tablespace users end backup;
alter tablespace sjh begin backup;
host copy E:\ORACLE\ORASJH\SJH.DBF E:\oracle\hotbak\SJH.DBF
alter tablespace sjh end backup;

SQL> @E:\oracle\hot_scripts\hot_data_bak.sql  --执行热备份
表空间已更改。
已复制         1 个文件。

表空间已更改。

表空间已更改。
已复制         1 个文件。

表空间已更改。

表空间已更改。
已复制         1 个文件。

表空间已更改。

表空间已更改。
已复制         1 个文件。

表空间已更改。

表空间已更改。
已复制         1 个文件。

表空间已更改。
SQL>

SQL> select * from sjh.test;
        ID
----------
        10
SQL> insert into sjh.test values(12);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into sjh.test values(16);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into sjh.test values(18);
已创建 1 行。
SQL> commit;
提交完成。
SQL> alter system switch logfile;
系统已更改。
SQL>
 
--以上插入几条记录,让DML操作对应的日志在不同的归档。
 
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
 
--以下开始执行恢复。
 
首先删除现有的数据文件,然后从E:\oracle\hotbak\下将热备的数据文件copy到原数据文件所在的目录。
当前的日志文件和控制文件保持不变。
 
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              71304572 bytes
Database Buffers           88080384 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORASJH\SYSTEM01.DBF'
 
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 452576 (在 03/11/2009 17:19:24 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00007_0681149880.001
ORA-00280: 更改 452576 (用于线程 1) 在序列 #7 中

指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 452698 (在 03/11/2009 17:21:55 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00008_0681149880.001
ORA-00280: 更改 452698 (用于线程 1) 在序列 #8 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00007_0681149880.001'

指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。  --应用一个归档。

SQL> alter database open read only;
SQL> select * from sjh.test;
        ID
----------
        10
        12
SQL> insert into sjh.test values(20);
insert into sjh.test values(20)
                *
第 1 行出现错误:
ORA-01552: 非系统表空间 'USERS' 不能使用系统回退段
 
--test表的只恢复了一部分,目前数据库只能读。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              71304572 bytes
Database Buffers           88080384 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 452698 (在 03/11/2009 17:21:55 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00008_0681149880.001
ORA-00280: 更改 452698 (用于线程 1) 在序列 #8 中

指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 452757 (在 03/11/2009 17:22:50 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00009_0681149880.001
ORA-00280: 更改 452757 (用于线程 1) 在序列 #9 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00008_0681149880.001'

指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。    --应用第二个归档。

SQL> alter database open read only;
数据库已更改。
 
--还剩最后一个归档没有使用。
 
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area  167772160 bytes
Fixed Size                  1247876 bytes
Variable Size              71304572 bytes
Database Buffers           88080384 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 452757 (在 03/11/2009 17:22:50 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00009_0681149880.001
ORA-00280: 更改 452757 (用于线程 1) 在序列 #9 中

指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 452770 (在 03/11/2009 17:23:14 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00010_0681149880.001
ORA-00280: 更改 452770 (用于线程 1) 在序列 #10 中
ORA-00278: 此恢复不再需要日志文件
'E:\ORACLE\ORASJH\ARCHIVE\ARC00009_0681149880.001'

指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\orasjh\REDO01.LOG
ORA-00310: 归档日志包含序列 8; 要求序列 10
ORA-00334: 归档日志: 'E:\ORACLE\ORASJH\REDO01.LOG'

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 452770 (在 03/11/2009 17:23:14 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00010_0681149880.001
ORA-00280: 更改 452770 (用于线程 1) 在序列 #10 中

指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\orasjh\REDO02.LOG
ORA-00310: 归档日志包含序列 9; 要求序列 10
ORA-00334: 归档日志: 'E:\ORACLE\ORASJH\REDO02.LOG'

SQL>  recover database using backup controlfile until cancel;
ORA-00279: 更改 452770 (在 03/11/2009 17:23:14 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORASJH\ARCHIVE\ARC00010_0681149880.001
ORA-00280: 更改 452770 (用于线程 1) 在序列 #10 中

指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\orasjh\REDO03.LOG
已应用的日志。
完成介质恢复。    --应用重做日志。
 
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from sjh.test;
        ID
----------
        10
        12
        16
        18
 
--表的数据都恢复出来了。
 
--这个实验的关键点在于,既然是用了当前的控制文件,为什么要using backup controlfile?这样本来可以完全恢复的,造成后来只能用resetlogs打开。原因就在于能保证数据库能以read only打开。使用backup controlfile选项恢复数据库使oracle在recover时认为控制文件是旧的,这样recover就会更新控制文件中的所有datafile的检查点SCN记录,只有这样,才能保证alter database open read only前,数据库中每个数据文件头部记录的检查点SCN和controlfile中记录的是一致的,只有这样才能够以read only打开数据库,否则,oracle会认为数据库不一致,不允许read only打开。

 
阅读(821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~