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 --
其实完全可以省略耗时的文件拷贝步骤,将损坏的数据文件直接指向热备份文件,然后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/