【备份恢复】使用“热备份”恢复表空间故障之提速

Oracle有一种备份方式叫做“热备份”(没有听说过的朋友需先行Google)。通常有一种声音,说该方法是小型数据库的备份与恢复策略,在数据量比较大的情况下,使用这种方法进行恢复所耗用的时间是无法忍受的。之所以有这种声音,是因为在使用热备份进行恢复时,通常需将备份文件拷贝并覆盖原故障数据文件,如果文件过大,此步骤将非常耗时。
其实完全可以省略耗时的文件拷贝步骤,将损坏的数据文件直接指向热备份文件,然后recover即可。使用这种方法将极大的提高恢复效率,不妨一试。(即便如此,对于包含海量数据的超大型数据库系统,使用该方法也是无法满足需求的,对于大型数据库可以考虑使用Dataguard或存储厂商提供的灾备方案。)
简单演示一下这个恢复过程,供参考。

1.创建实验用表空间tbs_secooler_d,后面将通过手工删除该表空间的数据文件的方式,来模拟表空间故障。
sys@ora10g> create tablespace tbs_secooler_d datafile '/oracle/oradata/ora10g/tbs_secooler_d.dbf' size 50m;

Tablespace created.

2.创建测试用户secooler,并授予权限。
sys@ora10g> create user secooler identified by secooler default tablespace tbs_secooler_d;

User created.

sys@ora10g> grant connect, resource to secooler;

Grant succeeded.

3.在secooler用户下创建一个实验表并初始化一条数据。此步骤目的是为了对后面恢复后的的结果进行验证。
sys@ora10g> conn secooler/secooler
Connected.
secooler@ora10g> create table t (x int);

Table created.

secooler@ora10g> insert into t values (20081111);

1 row created.

secooler@ora10g> commit;

Commit complete.

secooler@ora10g> select * from t;

         X
----------
  20081111

4.使用热备份方法对表空间tbs_secooler_d进行备份。
1)将表空间tbs_secooler_d置于备份状态
secooler@ora10g> conn / as sysdba
Connected.
sys@ora10g> alter tablespace tbs_secooler_d begin backup;

Tablespace altered.

2)使用操作系统命令拷贝数据文件到备份目录
sys@ora10g> ! cp /oracle/oradata/ora10g/tbs_secooler_d.dbf /orabak/hotbackup/tbs_secooler_d.dbf

3)停止表空间的备份,完成对表空间tbs_secooler_d的热备份。
sys@ora10g> alter tablespace tbs_secooler_d end backup;

Tablespace altered.

5.模拟表空间损坏
1)关闭数据库。这里之所以先关闭数据库,是为了在启动数据库时我们可以清晰的得到有关故障的报错信息。
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

2)人为的删除表空间tbs_secooler_d对应的数据文件
ora10g@asdlabdb01 /home/oracle$ rm -f /oracle/oradata/ora10g/tbs_secooler_d.dbf

6.启动数据库,此时便可得到故障提示信息。
1)提示10号数据文件(即我们手工删除的数据文件)不可用
NotConnected@> startup;
ORACLE instance started.

Total System Global Area 5368709120 bytes
Fixed Size                  2080320 bytes
Variable Size             905970112 bytes
Database Buffers         4445962240 bytes
Redo Buffers               14696448 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 10 - see DBWR trace file
ORA-01110: data file 10: '/oracle/oradata/ora10g/tbs_secooler_d.dbf'

2)此时数据库是无法open的,数据库处于mounted状态。
NotConnected@> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

7.想办法先将数据库open。此步骤很重要,因为如果是生产环境,数据库停机时间越长,损失越大。
1)既然是10号数据文件存在问题,为快速open数据库,我们暂时将10号数据文件offline。
NotConnected@> alter database datafile 10 offline;

Database altered.

2)此时尝试open数据库,成功。如果是生产环境遇到此类问题,若能将数据库第一时间open并使其对外提供服务(虽然个别数据不可用),也是很振奋人心的。
NotConnected@> alter database open;

Database altered.

8.关键步骤在此。我们此时为了加快恢复速度,不选择拷贝备份文件到原数据文件的位置的方法,而是直接将表空间的数据文件指向备份文件。
sys@ora10g> alter tablespace tbs_secooler_d rename datafile '/oracle/oradata/ora10g/tbs_secooler_d.dbf' to '/orabak/hotbackup/tbs_secooler_d.dbf';

Tablespace altered.

9.恢复故障数据文件
sys@ora10g> recover datafile 10;
Media recovery complete.

10.将恢复完成的数据文件online,完成所有的恢复任务。
sys@ora10g> alter database datafile 10 online;

Database altered.

11.最后的验证。OK,一切尽在掌握。
sys@ora10g> conn secooler/secooler
Connected.
secooler@ora10g> select * from t;

         X
----------
  20081111


12.小结
通过这篇文章,大家应该对“热备份”的备份与恢复方法有一个感性的认识。虽然使用直接修改数据文件指向的方法仅是“权宜之计”,不过在大数据量场景下使用这种方法进行恢复,速度是惊人的,值得采用。
在任何数据库故障面前,作为DBA必须深谙“第一时间使数据库恢复生产”的重要性,这也是DBA价值之所在。

Good luck.

secooler
09.12.13

-- The End --

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

转载于:http://blog.itpub.net/519536/viewspace-622330/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值