现在oracle11g,oracle12c 都可以用rman 在线克隆数据库。但那时如果没有在线克隆数据库我们该如何操作了?下面我们概略性的介绍一下oracle 异地恢复。
1 准备工作
准备一台新的机器用作备机standby,原来的机器是host。把host 数据库参数文件中指定的路径都再standby备机上新建一遍。
SQL> create pfile='/tmp/pfile.ora' from spfile;
File created.
# 先spfile创建成一个pfile,下面再在创建号的pfile里面找到指定的目录,进行新建做准备工作
[oracle@dghost ~]$ cat /tmp/pfile.ora |grep u01
orcl.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment
*.audit_file_dest='/u01/oracle/admin/orcl/adump'
*.control_files='/u01/oracle/oradata/orcl/control01.ctl','/u01/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_recovery_file_dest='/u01/oracle/fast_recovery_area'
*.diagnostic_dest='/u01/oracle'
#找到需要新建的路径
[oracle@dghost ~]$ mkdir -p /u01/oracle/admin/orcl/adump^C
[oracle@dghost ~]$ mkdir -p /u01/oracle/oradata/orcl^C
[oracle@dghost ~]$ mkdir -p /u01/oracle/fast_recovery_area/orcl^C
把数据文件,控制文件从host主机上拷贝到standby 备机上
在rman中查看当前备份的文件:list backup
其中带n的就是数据文件,带c的就是控制文件
用命令把数据文件和控制文件从主机上拷贝到备机上
rsync -avlr 'controlfile_name' -e ssh IP:/
rsync -avlr 'datafile_name' -e ssh IP:/
解释:上面controlfile_name 就是上面找到的备份的控制文件,datfile_name 就是找的备份数据文件,IP就是备机的IP地址
2 恢复
2.1 在备用机上设置环境变量ORACLE_BASE,ORACLE_HOME,ORACLE_SID,PATH
2.2 在rman 下把数据库启动到nomount状态下
2.3 恢复参数文件
restore spfile from 'spfile_name'
2.4 关闭
shutdown abort,用string 读取参数文件,并对参数文件中的路径进行创建
2.5 启动到nomount,恢复控制文件
startup nomount;
restore controlfile from 'controlfile_name'
说明:这里的控制文件就是从主库拷贝过来的控制文件
启动到mount
alter database mount;
2.6 打开数据库
alter database open resetlogs;
注意:如果前面从主库拷贝过来的时候是连归档日志一起拷贝的话,上面的操作就能正确恢复。但是如果没有拷贝归档日志到备库的话,open会出错误,因为我们只拷贝的控制文件和数据文件,是没有日志文件的。open的时候控制文件会比对查证日志,结果找不到日志就报错。如果出错操作如下:
2.6.1 在参数文件中添加隐藏参数,让控制文件忽略对日志文件的检查。在参数文件中添加._allow_resetlogs_corruption=true
启动到start mount pfile=‘spfile_name'
打开数据库
alter databae open resetlogs;