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 例程已经启动。