ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 今日实验之 close状态和open状态数据库的恢复(关于数据文件)

今日实验之 close状态和open状态数据库的恢复(关于数据文件)

原创 Linux操作系统 作者:mslucy 时间:2010-11-14 19:48:31 0 删除 编辑

今日实验之 close状态和open状态数据库的恢复(关于数据文件)
注意
关闭数据库的时候进行恢复:
如果系统表空间和undo表空间发生损坏 只能在数据库关闭的情况下进行恢复


实验梗概:
建立表空间app1,在这个表空间上建立表t做测试表,插入一些测试数据,确保该测试数据已经成功写到数据文件上;做冷备和热备模拟恢复的起点;破坏数据文件制造一些意外的损坏情况,今天暂时假设控制文件和日志文件完好无损。
冷备的时候只有一条记录,热备的时候有两条记录,热备完后加上第三条记录进去。

步骤:
1、建立表空间app1
2、在表空间app1上建立表t做测试
3、在表t上插入第一条数据
4、建立冷备份目录 cold
5、建立热备份目录 hot
6、干净的关闭数据库进行冷备份 冷备份所有的数据到cold
7、启动数据库 插入第二条数据 然后进行热备份 仅仅将app1表空间进行备份 然后 终止备份
8、插入第三条数据(注意:成功恢复的结果是三条数据都完好无损)
9、切换日志 多切换几次确保该日志已经被归档成功


模拟关闭状态下进行恢复过程:备份+归档
10、数据库启动的时候 删除所有的数据文件,模拟数据文件坏掉的情况
11、shutdown abort
12、从cold中拷贝所有的数据文件,注意这个时候拷贝回来的文件是不一致的。
13、打开数据库 提示需要进行介质恢复
14、select * from v$recover_file 查看需要进行恢复的数据文件
15、set autorecovery off;关闭自动恢复
recover database;恢复所有的文件
recover datafile 1;使用归档日志恢复指定的文件,会提示使用哪个日志
16、再查v$recover_file查看状态
17、继续恢复其余文件
18、打开数据库 查看数据是否完整,即三条记录是否完整恢复成功。

模拟数据库open状态下进行恢复:
由于数据库要对外工作,所以不能关闭恢复

19、插入第4条记录
20、切换日志 多切换几次
21、删除app1数据文件,模拟有人恶意损坏该文件
22、插入第5条记录 提交正常没有问题 因为是记录到logfile中故没有影响
23、查v$recover_file视图查看,数据库还不知道丢失数据文件
24、alter system checkpoint;会有报错因为数据在写到数据文件上时候找不到数据文件。
25、查看报警日志 bdump下alert文件的报错 哪个文件的问题
26、再次查看v$recover_file视图,这个时候会显示需要恢复的数据文件信息
27 将需要恢复的文件offline
28、将热备的文件拷贝过来 到相应的路径下,不一致的文件需要进行恢复
29、recover datafile 6;进行恢复
30、查看v$recover_file视图 该问题消失
31、查询v$datafile发现该数据文件还是offline
32、将数据文件置为online状态
32、查询 数据是否完整正确,要确定出一共有5个记录才对。

 


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1、创建表空间
SQL> show user;
USER 为 "SYS"
SQL> create tablespace app1 datafile 'e:\ora-product\oradata\XE\app1.dbf' size 5M autoextend on;

表空间已创建。

2、
SQL> create user apple identified by apple default tablespace app1;

用户已创建。

SQL> grant resource,connect to apple;

授权成功。

SQL> conn apple/apple
已连接。
SQL> create table t(id number,name varchar2(50));

表已创建。

3、
SQL> insert into t values(1,'aa');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID
----------
NAME
---------------------------------------------------------
         1
aa


SQL>

4&5、
D:\>md ora-backup

D:\>cd ora-backup

D:\ora-backup>md cold

D:\ora-backup>md hot

D:\ora-backup>dir
 驱动器 D 中的卷是 SOFTWARE
 卷的序列号是 8236-DBD6

 D:\ora-backup 的目录

2010-11-13  20:04   

          .
2010-11-13  20:04              ..
2010-11-13  20:04              cold
2010-11-13  20:04              hot
               0 个文件              0 字节
               4 个目录 39,304,757,248 可用字节


6、
SQL> conn / as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> quit
从 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production 断开


 E:\ora-product\oradata\XE 的目录

2010-10-18  22:01   

          .
2010-10-18  22:01              ..
2010-11-13  20:08       513,810,432 SYSAUX.DBF
2010-11-13  20:08       398,467,072 SYSTEM.DBF
2010-11-13  20:08       104,865,792 USERS.DBF
2010-11-13  20:08       104,865,792 UNDO.DBF
2010-11-13  20:08         7,094,272 CONTROL.DBF
2010-11-13  11:48        20,979,712 TEMP.DBF
2010-11-13  20:08         2,105,344 EXAMPLE01.DBF
2010-11-13  20:08         5,251,072 APP1.DBF
               8 个文件  1,157,439,488 字节
               2 个目录 41,693,544,448 可用字节

E:\ora-product\oradata\XE>copy *.dbf d:\ora-backup\cold\
SYSAUX.DBF
SYSTEM.DBF
USERS.DBF
UNDO.DBF
CONTROL.DBF
TEMP.DBF
EXAMPLE01.DBF
APP1.DBF
已复制         8 个文件。


7、
SQL> conn apple/apple
已连接。
SQL> insert into t values(2,'bb');
已创建 1 行。

SQL> commit;
提交完成。
SQL> select * from t;
        ID
----------
NAME
-----------------------------------
         2
bb

         1
aa


SQL> conn / as sysdba
已连接。
SQL> alter tablespace app1 begin backup;
表空间已更改。

SQL> quit
从 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production 断开
C:\>copy e:\ora-product\oradata\XE\app1.dbf d:\ora-backup\hot\
已复制         1 个文件。

SQL> alter tablespace app1 end backup;

表空间已更改。

8、
SQL> conn apple/apple
已连接。
SQL> insert into t values(3,'cc');

已创建 1 行。

SQL> commit
  2  ;

提交完成。

SQL> select id from t;

        ID
----------
         2
         3
         1

9、

SQL> conn / as sysdba
已连接。
SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     68
下一个存档日志序列   69
当前日志序列           69

SQL> alter system switch logfile;

系统已更改。

E:\ora-product\app\oracle\flash_recovery_area\XE\ARCHIVELOG\2010_11_13>DIR
 驱动器 E 中的卷是 ORACLE
 卷的序列号是 C352-49C7

 E:\ora-product\app\oracle\flash_recovery_area\XE\ARCHIVELOG\2010_11_13 的目录

2010-11-13  11:46   

          .
2010-11-13  11:46              ..
2010-11-13  11:46        21,433,856 O1_MF_1_63_6FW2KHGN_.ARC
2010-11-13  14:48         8,828,928 O1_MF_1_64_6FWF6HG5_.ARC
2010-11-13  20:21         4,252,160 O1_MF_1_65_6FX0OLL2_.ARC
2010-11-13  20:21             3,584 O1_MF_1_66_6FX0ORMK_.ARC
2010-11-13  20:21             1,024 O1_MF_1_67_6FX0OSSD_.ARC
2010-11-13  20:21             1,024 O1_MF_1_68_6FX0P01Y_.ARC
2010-11-13  20:24           421,376 O1_MF_1_69_6FX0VOVC_.ARC
2010-11-13  20:24             7,680 O1_MF_1_70_6FX0WMQX_.ARC
               8 个文件     34,949,632 字节
               2 个目录 41,688,530,944 可用字节

 

10&11由于我这实验是在window下做的 无法再数据库打开的情况下删除这些数据文件,所以将11和10颠倒顺序 先将数据库关闭然后再删除数据文件。
E:\ora-product\oradata\XE>del *.dbf
E:\ora-product\oradata\XE\SYSAUX.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\SYSTEM.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\USERS.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\UNDO.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\CONTROL.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\TEMP.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\EXAMPLE01.DBF
另一个程序正在使用此文件,进程无法访问。
E:\ora-product\oradata\XE\APP1.DBF
另一个程序正在使用此文件,进程无法访问。


E:\ora-product\oradata\XE>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 11月 13 20:32:32 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> quit
从 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production 断开

E:\ora-product\oradata\XE>del *.dbf
E:\ora-product\oradata\XE>dir
 驱动器 E 中的卷是 ORACLE
 卷的序列号是 C352-49C7

 E:\ora-product\oradata\XE 的目录

2010-10-18  22:01   

          .
2010-10-18  22:01              ..
               0 个文件              0 字节
               2 个目录 42,846,158,848 可用字节

12、拷贝回冷备的数据文件
E:\ora-product\oradata\XE>copy d:\ora-backup\cold\* .
d:\ora-backup\cold\SYSAUX.DBF
d:\ora-backup\cold\SYSTEM.DBF
d:\ora-backup\cold\USERS.DBF
d:\ora-backup\cold\UNDO.DBF
d:\ora-backup\cold\CONTROL.DBF
d:\ora-backup\cold\TEMP.DBF
d:\ora-backup\cold\EXAMPLE01.DBF
d:\ora-backup\cold\APP1.DBF
已复制         8 个文件。

13、启动数据库 当时控制文件的scn和恢复回来的数据文件的scn是不一样的
C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 11月 13 20:39:37 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  599785472 bytes
Fixed Size                  1288820 bytes
Variable Size             176162188 bytes
Database Buffers          419430400 bytes
Redo Buffers                2904064 bytes
数据库装载完毕。
ORA-00314: 日志 1 (用于线程 1) 要求的序号  与  不匹配
ORA-00312: 联机日志 1 线程 1:
'E:\ORA-PRODUCT\APP\ORACLE\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_6CRNWJ3X_.LO
G'


恢复的视图中没有任何信息
SQL> select * from v$recover_file;

未选定行


由于之前颠倒了关闭数据库和删除数据文件的顺序,所以实验出现了不一样的问题,我们来看看怎样解决它?

SQL> recover database until cancel;
完成介质恢复。

SQL> alter database open resetlogs;

数据库已更改。
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE

数据库成功打开!但是丢失了备份以后的数据。。。并且由于使用了resetlogs之前的所有备份也都失效,无法使用,需要再重新进行备份了,所以后面的实验也就不能再做了。

。。。。。。。悲剧

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

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

注册时间:2010-10-22

  • 博文量
    32
  • 访问量
    42840