我的操作系统是red hat5.5 32位系统oracle11g
以我的系统为例:
冷备状态下,数据库必须是关闭的,但是我们现在要做一个实验,在开库的状态下分别查询出:
1.show parameter spfile
记录spfile的位置:/u01/oracle/dbs/spfileprod.ora
2.show parameter control
记录控制文件的位置:
/u01/oradata/prod/control01.ctl, /u01/flash_recovery_area/prod/control02.ctl
3.select name from v$datafile;
记录数据文件的位置:
/u01/oradata/prod/system01.dbf
/u01/oradata/prod/sysaux01.dbf/u01/oradata/prod/undotbs01.dbf/u01/oradata/prod/users01.dbf/u01/oradata/prod/example01.dbf4,select member from v$logfie;
记录日志文件的位置:
/u01/oradata/prod/redo03.log
/u01/oradata/prod/redo02.log/u01/oradata/prod/redo01.log然后shutdown immediate关闭数据库
mkdir -p /home/oracle/cold_backup
将上述查到各个文件的路径复制到cold_backup文件夹下
cp /u01/oracle/dbs/spfileprod.ora /home/oracle/cold_backup
cp /u01/oradata/prod/control01.ctl /home/oracle/cold_backup
cp /u01/flash_recovery_area/prod/control02.ctl /home/oracle/cold_backup
cp /u01/oradata/prod/*.dbf /home/oracle/cold_backup
cp /u01/oradata/prod/*.log /home/oracle/cold_backup(redo日志可备也可不备)
模拟数据库损坏
rm -rf /u01/oracle/dbs/spfileprod.ora
rm -rf /u01/oradata/prod/control01.ctl
rm -rf /u01/flash_recovery_area/prod/control02.ctl
rm -rf /u01/oradata/prod/*.dbf
rm -rf /u01/oradata/prod/*.log
这时打开数据发现报错缺失各种文件,然后按照县恢复参数文件---控制文件----数据文件的顺序对数据库进行恢复
mkdir -p /home/oracle/controlfile
mkdir -p /home/oracle/datafile
mkdir -p /redologfile
1》用备份出来的这些文件把原来的数据库给搭建起来
cp /home/oracle/cold_backup/*.ctl /home/oracle/controlfile
cp /home/oracle/cold_backup/*.dbf /home/oracle/datafile
cp /home/oracle/cold_backup/*.log /home/oracle/redologfile
cp /home/oracle/cold_backup/spfileprod.ora /u01/oracle/dbs(此目录就是先前spfile的目录)
2》打开库到nomount,如果发现打不开可能丢失一个文件件
在此查询创建:
show parameter audit
mkdir -p /u01/admin/prod/adump
3》如果可以启动到nomount,逻辑上重新创建控制文件
alter system set control_files='/home/oracle/controlfile/control01.ctl','/home/oracle/controlfile/control03.ctl' scope=spfile;
4》关库重启
5》逻辑上修改数据文件和日志文件的位置
数据文件:
select 'alter database rename file '||''''||name ||''''||' to '||replace(name,'/u01/oradata/prod','/home/oracle/datafile')||''';' from v$datafile;
日志文件:
select 'alter database rename file '||''''||member ||''''||' to '||replace(member,'/u01/oradata/prod','/home/oracle/redologfile')||''';' from v$logfile;
通过对数据文件和日志文件批批处理得出的SQL语句粘贴运行
6》alter database open;
冷备中手工备份和恢复至此完成,仅供参考!!