归档模式(ARCHIVELOG)下数据库打开(open)状态下如何手工恢复表空间?

归档模式(ARCHIVELOG)下数据库打开(open)状态下如何手工恢复表空间?

 

oracle数据库在open状态,如果非关键表空间损坏了,基于表空间的完全恢复本质上还是表空间对应的datafile的恢复

模拟非关键表空间损坏,数据库会保持于open状态,不会造成 Oracle 的崩溃

处理方法:只需针对损坏的的 tablespace 进行在线恢复操作,也就是说恢复操作时 数据库整体是 online 的,而局部表空间是 offline 的,数据库不需要 shutdown。

 

恢复表空间实验(删除了 tablespace 下的所有的 datafile)

0)准备工作

SQL> shutdown immediate

[oracle@oracle ORCL]$ cd /u01/app/oracle/oradata/orcl/

[oracle@oracle orcl]$ mkdir osbak2

[oracle@oracle orcl]$ cp *.dbf osbak2/

[oracle@oracle orcl]$ cp *.ctl osbak2/

SQL> startup

 

 

1)了解一下当前状态,有个 test_ts 表空间,

 

SQL> select a.file#,

       a.TABLESPACE_NAME,

       a.name,

       a.checkpoint_change# dfh_scn,

       b.checkpoint_change# ctrf_scn

  from v$datafile_header a, v$datafile b

 where a.file# = b.file#;

 

 

     FILE#         TABLESPACE_NAME         NAME       DFH_SCN CTRF_SCN

1       1       SYSTEM    /u01/app/oracle/oradata/orcl/system01.dbf 4031815  4031815

2       2       SYSAUX    /u01/app/oracle/oradata/orcl/sysaux01.dbf  4031815  4031815

3       3       UNDOTBS1       /u01/app/oracle/oradata/orcl/undotbs01.dbf        4031815  4031815

4       4       USERS       /u01/app/oracle/oradata/orcl/users01.dbf    4031815  4031815

5       5       RMAN_TS         /u01/app/oracle/oradata/orcl/rmants.dbf     4031815  4031815

6       6       EXAMPLE /u01/app/oracle/oradata/orcl/example.dbf   4031815  4031815

7       7       TEST_TS   /u01/app/oracle/oradata/orcl/test_ts.dbf     4031815  4031815

 

 

 

SQL> select * from test.test_tab;

 

        ID

----------

         3

         1

         2

         4

 

 

2)模拟表空间test_ts损坏,数据库处于 open 下,直接删除表空间下的数据文件

 

[oracle@oracle orcl]$ cd  /u01/app/oracle/oradata/orcl/

[oracle@oracle orcl]$ rm test_ts.dbf

 

3)查证该表空间上的表不可访问了

SQL> alter system flush buffer_cache;         //清除 data buffer

SQL> conn / as sysdba     //换个 session 登陆,访问 test.test_tab; 表,因内存里已清除了buffer 块,只好去做物理读,所以报错!

Connected.

 

SQL> select * from test.test_tab;

select * from test.test_tab

*

ERROR at line 1:

ORA-01116: error in opening database file 7

ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl/test_ts.dbf'

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

 

4)看看 scn 的情况

SQL> select a.file#,

       a.TABLESPACE_NAME,

       a.name,

       a.checkpoint_change# dfh_scn,

       b.checkpoint_change# ctrf_scn

  from v$datafile_header a, v$datafile b

 where a.file# = b.file#;

 

     FILE#         TABLESPACE_NAME         NAME       DFH_SCN CTRF_SCN

1       1       SYSTEM    /u01/app/oracle/oradata/orcl/system01.dbf 4031815  4031815

2       2       SYSAUX    /u01/app/oracle/oradata/orcl/sysaux01.dbf  4031815  4031815

3       3       UNDOTBS1       /u01/app/oracle/oradata/orcl/undotbs01.dbf        4031815  4031815

4       4       USERS       /u01/app/oracle/oradata/orcl/users01.dbf    4031815  4031815

5       5       RMAN_TS         /u01/app/oracle/oradata/orcl/rmants.dbf     4031815  4031815

6       6       EXAMPLE /u01/app/oracle/oradata/orcl/example.dbf   4031815  4031815

7       7                                                                 0         4031815

 

 

5)表空间 offline

SQL> alter tablespace TEST_TS offline immediate;        //immediate 使表空间能立即脱机,不等 Oracle 对任何数据文件做检查

6)数据库 open 下,使用备份还原这个表空间下的所有数据文件

 

[oracle@oracle orcl]$ cd  /u01/app/oracle/oradata/orcl/

[oracle@oracle orcl]$ cp osbak2/test_ts.dbf ./

 

7)恢复 tablespace

 

SQL> recover tablespace TEST_TS;

Media recovery complete.

 

完成介质恢复。

8)使表空间 online

SQL> alter tablespace TEST_TS online;          //注意:此时数据库状态一直是 open 的。

9) 验证

 

SQL> select * from test.test_tab;

 

        ID

----------

         3

         1

         2

         4

 

SQL> select a.file#,

       a.TABLESPACE_NAME,

       a.name,

       a.checkpoint_change# dfh_scn,

       b.checkpoint_change# ctrf_scn

  from v$datafile_header a, v$datafile b

 where a.file# = b.file#;

 

     FILE#         TABLESPACE_NAME         NAME       DFH_SCN CTRF_SCN

1       1       SYSTEM    /u01/app/oracle/oradata/orcl/system01.dbf 4031815  4031815

2       2       SYSAUX    /u01/app/oracle/oradata/orcl/sysaux01.dbf  4031815  4031815

3       3       UNDOTBS1       /u01/app/oracle/oradata/orcl/undotbs01.dbf        4031815  4031815

4       4       USERS       /u01/app/oracle/oradata/orcl/users01.dbf    4031815  4031815

5       5       RMAN_TS         /u01/app/oracle/oradata/orcl/rmants.dbf     4031815  4031815

6       6       EXAMPLE /u01/app/oracle/oradata/orcl/example.dbf   4031815  4031815

7       7       TEST_TS   /u01/app/oracle/oradata/orcl/test_ts.dbf     4034085  4034085

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值