Oracle手工物理备份和恢复

一、Oracle手工冷备份步骤:
关闭数据库,备份所有的数据文件、日志文件、控制文件、PFILE、SPFILE。

 

二、基于冷备份的恢复方法

如果机器故障,重装操作系统后的恢复方法总结如下(不重装系统的过程较简单):
(一)有数据文件、控制文件和日志文件备份情况下的恢复
1、重装Oracle软件,建立和之前一模一样结构的数据库;
2、删除掉新建数据库的所有数据文件、控制文件和日志文件;
3、Copy原数据库的数据文件、控制文件和日志文件到对应目录下。(如果安装目录和原来不一致,则步骤4之前需要重建控制文件)
4、启动数据库,如果找不到密码文件,需要重建。
 SQL>startup nomount
 SQL>alter database mount
 ……找不到密码文件
 SQL>shutdown immediate
 SQL>host orapwd file=c:/oracle9i/database/PWDdemo.ora password=oracle Entries=10
 SQL>startup nomount
 SQL>alter database mount
 SQL>alter database open

(二)如果只有数据文件,没有控制文件和PFILE情况下的恢复
恢复方法一:仅安装数据库软件,通过新建oracle服务,引用数据文件来创建一个实例。
1、安装Oracle软件,不创建数据库;
2、创建初始化参数文件PFILE;
3、使用oradim创建实例和口令文件;
 $oradim -new -sid demo -intpwd oracle
4、配置监听和服务
5、复制数据文件到目标文件夹
6、重建控制文件
 //启动实例,读取参数文件
 SQL> startup nomount file= c:/demo/pfile/initdemo.ora
 //重建控制文件,因为没有日志文件,因此要使用RESETLOGS选项
 CREATE CONTROLFILE REUSE DATABASE "demo" RESETLOGS NOARCHIVELOG
 MAXLOGFILES 50
 MAXLOGMEMBERS 5
 MAXDATAFILES 100
 MAXINSTANCES 8
 MAXLOGHISTORY 226
 LOGFILE
 GROUP 1 'c:/demo/oradata/demo/redo01.log' SIZE 50M,
 GROUP 2 'c:/demo/oradata/demo/redo02.log' SIZE 50M,
 GROUP 3 'c:/demo/oradata/demo/redo03.log' SIZE 50M
 DATAFILE
 'c:/demo/oradata/demo/system01.dbf',
 'c:/demo/oradata/demo/odm01.dbf',
 CHARACTER SET zhs16gbk
7、恢复数据库
 SQL> recover database using backup controlfile until cancel;
 SQL> alter database open resetlogs;
8、重新进行数据库全备份。

恢复方法二:安装数据库,创建一个实例,用备份的数据文件代替新创建实例的数据文件。
1.删除安装目录下所有的datafile、comtrolfile、logfile.
2.Copy备份的数据文件到oradata目录下
3.重建控制文件(和方法一类似)
 SQL> shutdown immediate
 SQL> CREATE controlfile ...
4.恢复数据库(和方法一类似)
 SQL> recover database using backup controlfile until cancel;
 SQL> alter database open resetlogs;
5、重新进行数据库全备份。

三、Oracle手工联机备份方法
1、设置数据库为归档日志模式。
 alter database archivelog;
2、手工强制切换日志,确保备份开始之前所有更改已经归档;
 alter system switch logfile;
3、逐一对所有表空间进行备份:
 FOR EACH TABLESPACE
 BEGIN
 ALTER TABLESPACE ... BEGIN BACKUP;
 Copy all datafiles belonging to this tablespace
 ALTER TABLESPACE ... END BACKUP;
 END
4、再次手工强制切换日志,以保证热备过程中创建的中动作得以归档。
 alter system switch logfile;
5、备份控制文件。
 alter database backup controlfile to '&dir/backup.ctl' REUSE;
6、下一个没有归档的重做日志文件组进行归档;
 alter system archive log next;
7、COPY所有归档日志,归档日志信息见v$archived_log。
8、恢复数据库为非归档日志模式。
 alter database noarchivelog;

四、基于联机备份的完全脱机恢复方法
前提:如果操作系统已经被破坏,需要重建实例,一开始的恢复的方法同冷备份的恢复方法;如果实例没有被破坏,只是部分数据文件被破坏,需要重建,则先COPY备份的数据文件覆盖被破坏的文件。
下面着重描述如何应用日志:
1、startup mount数据库,由于还没有应用归档日志,控制文件中的SCN大于实际数据文件头的SCN,查询v$recover_file视图,可以看到需要恢复的数据文件列表。
2、将归档日志文件应用到数据文件或表空间:
 --可以在recover命令中指定日志路径和数据文件名;
 SQL> RECOVER FROM 'D:/oracle/PRACTICE/ARCHIVE';
 DATAFILE 'D:/oracle/PRACTICE/USERS01.DBF',
 'D:/oracle/PRACTICE/TOOLS01.DBF';
 --也可以指定文件号
 SQL> RECOVER FROM '….' DATAFILE 5;
 --也可以指定整个表空间
 SQL> RECOVER FROM '….' TABLESPACE TOOLS;
 --也可以在执行recover之前指定归档日志来源
 SQL> SET LOGSOURCE 'D:/oracle/PRACTICE/ARCHIVE';
 --也可以恢复整个数据库
 SQL> RECOVER DATABASE;
3、打开数据库,重置日志SCN:
 ALTER DATABASE OPEN RESETLOGS。

五、基于联机备份的完全联机恢复方法
如果数据库在运行的过程中部分数据文件出错需要恢复,则操作方法是:
1、将数据库文件脱机解除操作系统对文件的锁定,然后进行删除。出错的文件可从V$RECOVER_FILE查询得到;
 SQL> ALTER DATABASE DATAFILE 'D:/oracle/PRACTICE/tools01.dbf' offline;
2、应用日志,恢复还原的数据文件,方法同脱机恢复;
3、使文件重新联机;
 SQL> ALTER DATABASE DATAFILE 'D:/oracle/PRACTICE/tools01.dbf' online;

六、基于联机备份的部分脱机恢复方法
如果由于某些错误操作导致数据库出错,需要将数据库恢复到较早前的某个状态,可以使用下面的方法:
 --基于时间点的恢复
 SQL> ALTER DATABASE RECOVER AUTOMATIC UNTIL TIME '2010-01-12 07:48:02'; 
----基于变化的恢复 指定一个SCN值用于恢复,该方法是三种方法最为准确
 SQL> ALTER DATABASE RECOVER AUTOMATIC UNTIL SCN 518720; 
--基于取消的恢复 使用CANCEL关键字,执行不完全数据库恢复。重做日志是一个接一个应用直到对应时间点的那个重做日志文件。
 SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;

参考文章:

http://www.bitscn.com/pdb/oracle/200904/160446.html
http://www.fengfly.com/html/shujuku/Oracle/Oracle_beifenhuifu/

 

 

你可能感兴趣的:(Oracle手工物理备份和恢复)