Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3673191
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

分类: Oracle

2020-11-18 23:55:18


有时为了验证备份有效性,需要把备份恢复到另外一台机器上,期间几个步骤会提示这样那样的错误,对于一些比较认真的客户来说,嗯?怎么报错了,是不是备份有问题?

参考以下步骤,基本上看不见异常信息,可以让客户更放心些。

以oracle 11g为例

首先编辑一个初始化参数文件 i.ora,文件内容如下:
db_name=orcl  #假设原先数据库名称是这个
control_files='/u02/orcl/c1.ctl'  #控制文件存放位置
compatible=11.2.0.4.0  #兼容性
instance_name=orcl  #实例名
db_files=2000 #好像有时得加这个

指定一下SID环境变量,恢复环境通常会有多个库在一台主机上验证
export ORACLE_SID=orcl

启动数据库到nomount状态
sqlplus / as sysdba
startup nomount pfile='/home/oracle/i.ora';

通过rman恢复控制文件
rman target /
restore controlfile from '/bak/db0uvesnbe_1_1'; #这是控制文件备份片名称。通常你恢复时不知道,需要通过在生产库中的rman 里执行list backup of controlfile 找到{BANNED}最佳新的一个
 
启动到mount状态
alter database mount;
#sql 'alter database flashback off';  #如果生产库开了闪回,这里要取消一下
catalog start with '/bak' noprompt;  #注册一下{BANNED}最佳新的备份信息,加上noprompt会更安静

crosscheck backupset;    #校验一下
delete noprompt expired backupset;  #清理一下垃圾信息
list backup of archivelog all;  #找到{BANNED}最佳佳大一个sequence号,这里是236,注意下面的序号要+1

开始全库恢复
run{
set until sequence 237;    #这里要比{BANNED}最佳大sequence号多1个,即236+1
set newname for database to '/u02/orcl/%b';  #简化了不少
restore database; 
switch datafile all;
switch tempfile all;
recover database;
}

修改redo log位置,执行以下语句得到修改命令:
set lin 120 pages 100
select 'ALTER DATABASE RENAME FILE '''||member||''' to '||''''||'/u02/orcl/'||substr(member,instr(member,'/',-1)+1)||''';' txt from v$logfile;

顺便清理一下
select 'alter database clear logfile group '||group#||';' cc  from v$log;

万事俱备,打开数据库
alter database open resetlogs;

顺利的话,没任何错误提示,数据库直接打开。

阅读(1270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~