分类: Oracle
2008-04-07 10:22:49
来源:赛迪网 作者:Ziv |
数据库热备份与完整恢复测试:
1.首先,必需保证数据库在归档模式下。
2.热备份数据文件,通过alter tablespace xxx begin backup把表空间设为备份状态,可以手工或在sql下运行host copy把数据文件复制到指定地方,最后把表空间改为正常状态(alter tablepace xxx end backup)。
3.数据库恢复:使用语句rcover datafile,alter database open即可以实现数据库的完整恢复。
具体的步骤如下:
SQL> conn / as sysdba
已连接。
//确定数据库在归档模式下。
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
//查询表空间对应的数据文件,一般表空间名跟对应数据文件名是相同的,可以跳过这一步。
SQL> select v$tablespace.name,v$datafile.name from v$tablespace, v$datafile
2 where v$tablespace.ts#=v$datafile.ts#;
NAME
------------------------------
NAME
--------------------------------------------------------------------------------
SYSTEM
F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF
UNDOTBS1
F:\ORACLE\ORADATA\EBOOK\UNDOTBS01.DBF
CWMLITE
F:\ORACLE\ORADATA\EBOOK\CWMLITE01.DBF
DRSYS
F:\ORACLE\ORADATA\EBOOK\DRSYS01.DBF
EXAMPLE
F:\ORACLE\ORADATA\EBOOK\EXAMPLE01.DBF
INDX
F:\ORACLE\ORADATA\EBOOK\INDX01.DBF
ODM
F:\ORACLE\ORADATA\EBOOK\ODM01.DBF
TOOLS
F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF
USERS
F:\ORACLE\ORADATA\EBOOK\USERS01.DBF
XDB
F:\ORACLE\ORADATA\EBOOK\XDB01.DBF
已选择10行。
//将表空间设为备份状态.
SQL> alter tablespace system begin backup;
表空间已更改。
//将数据文件备份到目录f:\oracle\backuparea下.
SQL> host copy f:\oracle\oradata\ebook\system01.dbf f:\oracle\backuparea\
已复制 1 个文件。
SQL> alter tablespace system end backup;
表空间已更改。 |
//建表test的目的为测试此恢复是否是完整恢复。
SQL> create table scott.test(t int);
表已创建。
SQL> insert into scott.test values(1);
已创建 1 行。
SQL> insert into scott.test values(2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
//删除system01.dbf或移动到其他目录造成数据库崩溃。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请大家参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'F:\ORACLE\ORADATA\EBOOK\SYSTEM01.DBF'
//将备份的数据文件复制回目录f:\oracle\oradata\ebook\下.
SQL> $ copy f:\oracle\backuparea\system01.dbf f:\oracle\oradata\ebook\
已复制 1 个文件。
//恢复数据文件system01.dbf。
SQL> recover datafile 'f:\oracle\oradata\ebook\system01.dbf';
完成介质恢复。
SQL> alter database open;
数据库已更改。
//此说明数据库是完整恢复了。
SQL> select * from scott.test;
T
----------
1
2
总结:
1.热备份必须在数据库归档模式下进行
2.在备份的同时,数据库的用户可以进行操作。因此,数据库对应的物理文件的内容是不断变化的,对这些物理文件内容的更新是保留到有关操作已经写到重做日至文件中
后再进行。(这句引自别人叙述,我对后半句正确与否存在疑问,希望大家讨论)。
3.归档日志必须是备份后的所有日至才可以实现数据库的完全恢复。
4.可以备份除临时文件以外的所有数据文件,如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法
5。 特别当损坏的不是系统表空间,可以先将损坏的表空间文件脱机,这时可以在恢复损坏文件前打开
数据库,再完成恢复。例如:
SQL> alter tablespace tools begin backup;
表空间已更改。
SQL> $ copy f:\oracle\oradata\ebook\tools01.dbf f:\oracle\backuparea
已复制 1 个文件。
SQL> alter tablespace tools end backup;
表空间已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
//删除tools01.dbf造成数据库无法正常启动.
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: 'F:\ORACLE\ORADATA\EBOOK\TOOLS01.DBF'
SQL> alter database datafile 'f:\oracle\oradata\ebook\tools01.dbf' offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> $ copy f:\oracle\backuparea\tools01.dbf f:\oracle\oradata\ebook\
已复制 1 个文件。
SQL>recover datafile 'f:\oracle\oradata\ebook\tools01.dbf';
介质恢复完成。