对于备份Oracle信息而言,冷备份时最快和最安全的方法,此时,数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。
①查看控制文件,数据文件,日志文件路径:
查看控制文件路径:
SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/PROD/ora_control1.ctl /u01/app/oracle/oradata/enmo1/ora_control2.ctl /u01/app/oracle/oradata/enmo2/ora_control3.ctl /u01/app/oracle/oradata/enmo3/ora_control4.ctl
查看数据文件路径:
SQL> select name,file# from v$datafile;
NAME FILE#
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD/system01.dbf 1
/u01/app/oracle/oradata/PROD/sysaux01.dbf 2
/u01/app/oracle/oradata/PROD/undotbs01.dbf 3
/u01/app/oracle/oradata/PROD/users01.dbf 4
/u01/app/oracle/oradata/PROD/test101.dbf 5
/u01/app/oracle/oradata/PROD/test102.dbf 6
/u01/app/oracle/oradata/PROD/user02.dbf 7
7 rows selected.
查看日志文件:
SQL> select member,group# from v$logfile order by 1;
MEMBER GROUP#
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD/redo01a.log 1
/u01/app/oracle/oradata/PROD/redo02a.log 2
/u01/app/oracle/oradata/PROD/redo03a.log 3
/u01/app/oracle/oradata/PROD/redo04a.log 4
②创建冷备的目录:
[oracle@host02 ~]$ mkdir cold_bk
[oracle@host02 ~]$ cd cold_bk/
[oracle@host02 cold_bk]$ pwd
/home/oracle/cold_bk
③关库保证一致性:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
④备份参数文件,控制文件,数据文件以及日志文件:
备份参数文件:
[oracle@host02 cold_bk]$ cd $ORACLE_HOME/dbs
[oracle@host02 dbs]$ ls
hc_PROD.dat init.ora initPROD.ora lkPROD snapcf_PROD.f spfilePROD.ora
[oracle@host02 dbs]$ cp initPROD.ora /home/oracle/cold_bk
[oracle@host02 dbs]$ cd /home/oracle/cold_bk
[oracle@host02 cold_bk]$ ls
initPROD.ora
备份控制文件数据文件以及日志文件:
oracle@host02 ~]$ cd /u01/app/oracle/oradata/PROD/
[oracle@host02 PROD]$ ls
ora_control1.ctl redo03a.log system01.dbf temp_02.dbf undotbs01.dbf
redo01a.log redo04a.log temp_01.dbf test101.dbf user02.dbf
redo02a.log sysaux01.dbf temp01.dbf test102.dbf users01.dbf
[oracle@host02 PROD]$ cp * /home/oracle/cold_bk
[oracle@host02 PROD]$ cd /home/oracle/cold_bk
[oracle@host02 cold_bk]$ ls
initPROD.ora redo03a.log temp_01.dbf test102.dbf
ora_control1.ctl redo04a.log temp01.dbf undotbs01.dbf
redo01a.log sysaux01.dbf temp_02.dbf user02.dbf
redo02a.log system01.dbf test101.dbf users01.dbf
⑤模拟故障----删除数据库文件:
删除参数文件:
[oracle@host02 cold_bk]$ cd $ORACLE_HOME/dbs
[oracle@host02 dbs]$ ls
hc_PROD.dat init.ora initPROD.ora lkPROD snapcf_PROD.f spfilePROD.ora
[oracle@host02 dbs]$ rm initPROD.ora
[oracle@host02 dbs]$ rm spfilePROD.ora
[oracle@host02 dbs]$ ls
hc_PROD.dat init.ora lkPROD snapcf_PROD.f
删除控制文件数据文件以及日志文件:
[oracle@host02 PROD]$ cd /u01/app/oracle/oradata/PROD/
[oracle@host02 PROD]$ ls
ora_control1.ctl redo03a.log system01.dbf temp_02.dbf undotbs01.dbf
redo01a.log redo04a.log temp_01.dbf test101.dbf user02.dbf
redo02a.log sysaux01.dbf temp01.dbf test102.dbf users01.dbf
[oracle@host02 PROD]$ rm *
[oracle@host02 PROD]$ ls
[oracle@host02 PROD]$
启动数据库报错:
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initPROD.ora'
⑥现在开始恢复数据库文件:
第一步首先恢复参数文件pfile:
[oracle@host02 PROD]$ cd /home/oracle/cold_bk
[oracle@host02 cold_bk]$ ls
initPROD.ora redo03a.log temp_01.dbf test102.dbf
ora_control1.ctl redo04a.log temp01.dbf undotbs01.dbf
redo01a.log sysaux01.dbf temp_02.dbf user02.dbf
redo02a.log system01.dbf test101.dbf users01.dbf
[oracle@host02 cold_bk]$ cp initPROD.ora /u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@host02 cold_bk]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@host02 dbs]$ ls
hc_PROD.dat init.ora initPROD.ora lkPROD snapcf_PROD.f
此时将数据库启动到nomount状态没有问题:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2257840 bytes
Variable Size 536874064 bytes
Database Buffers 289406976 bytes
Redo Buffers 6565888 bytes
再根据pfile文件生成spfile:
SQL> create spfile from pfile;
File created.
⑦然后开始恢复控制文件,数据文件和日志文件:
[oracle@host02 ~]$ cd /home/oracle/cold_bk/
[oracle@host02 cold_bk]$ cp * /u01/app/oracle/oradata/PROD
[oracle@host02 cold_bk]$ cd /u01/app/oracle/oradata/PROD/
[oracle@host02 PROD]$ ls
initPROD.ora redo03a.log temp_01.dbf test102.dbf
ora_control1.ctl redo04a.log temp01.dbf undotbs01.dbf
redo01a.log sysaux01.dbf temp_02.dbf user02.dbf
redo02a.log system01.dbf test101.dbf users01.dbf
⑧此时数据库就已经恢复完成,启动数据库到open状态:
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
OK!