用NetBackup恢复Oracle数据库到异机
2007-05-13 12:27:53 来源:WEB开发网一、前提
假设备份已成功(不使用rman catalog)。假设要将数据库恢复到new_host的不同文件系统/data上。以Oracle8i语法为例,Oracle9i无svrmgrl,需用sqlplus "/ as sysdba"。
二、步骤
1. 在new_host上创建dba组和与old_host相同的Oracle用户。将/data的可写权限给Oracle用户。确定new_host上有足够的硬盘空间存放新的datafile及archive log file。
2. 修改.profile文件中相关的Oracle环境变量,ORACLE_SID保持与old_host中一致。
3. 安装与old_host相同版本的Oracle数据库软件,不创建数据库。
4. 将old_host中$ORACLE_HOME/dbs下的initSID.ora文件拷至new_host的$ORACLE_HOME/dbs下。如果initSID.ora中有ifile='xxx.ora',则将xxx.ora也进行拷贝。Oracle9i也可能用spinitSID.ora。
5. 创建initSID.ora(及xxx.ora)中所用到的目录。通常所需建立的目录为background_dump_dest、core_dump_dest、user_dump_dest、log_archive_dest。常见结构为:
$ORACLE_BASE /admin /SID /bdump
/cdump
/udump
6. 在new_host上安装和配置NetBackup client和Oracle Agent。注意在NetBackup Server的/usr/openv/netbackup/db/altnames目录下touch No.Restrictions(允许异机恢复)。
7. 从原机copy或从磁带异机恢复standard方式备份的最新的control file到new_host的/data目录下。
8. 修改initSID.ora(及xxx.ora),如果是OPS,将OPS相关的参数去掉:
(1) control_files = ("/data/controlfile_name")
(2) log_archive_dest="/data/arch"
(3) sort_area_size=20000000
# 如果sort_area_size不够大,恢复archive_log时可能出现ora-1220。
9. svrmgrl> startup mount
10. svrmgrl> select file# from v$datafile,记录file#。
11. svrmgrl> select * from v$logfile,记录log文件的目录。注意保证该目录存在并且为oracle用户可写。
12. 运行恢复脚本:
rman nocatalog target / cmdfile restore.rcv msglog restore.log
附一:restore.rcv脚本:
#################
connect target /
run {
allocate channel t1 type 'sbt_tape' parms="ENV=(NB_ORA_CLIENT=old_host)";
set newname for datafile 1 to '/data/datafile_1.dbf';
set newname for datafile 2 to '/data/datafile_2.dbf';
…
restore database;
switch datafile all;
recover database;
sql 'alter database open resetlogs';
}
如果恢复到与原机相同的位置,不需要set newname和switch datafile(RMAN在restore database 时只会将数据文件恢复回来;recover database时,才会restore所需的增量备份和archive log)。
附二:trouble shooting
1. 如果确认全部archive log都已用完,而recover仍提示需下一个archive log,或alter database open resetlogs时提示datafile1 need recover,可采用以下步骤:
svrmgrl > connect internal;
svrmgrl > recover database using backup controlfile until cancel;
根据提示,输入
cancel <回车>
svrmgrl > alter database open resetlogs;
附三:恢复到历史点
如果不是恢复到最新,而是恢复到某一时刻,rman脚本如下:
connect target /
run {
allocate channel t1 type 'sbt_tape' parms="ENV=(NB_ORA_CLIENT=old_host)";
set until time "to_date('06/30/02 13:00:00','MM/DD/YY HH24:MI:SS')"
restore database;
recover database;
sql 'alter database open resetlogs';
}
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接