共计 2925 个字符,预计需要花费 8 分钟才能阅读完成。
最近在做一个 RAC 升级测试 11.2.0.1 升级到 11.2.0.4,为保证业务能在 11.2.0.4 版本下正常运行,现需要将数据库还原至 11.2.0.4 的单机环境下,数据库大小为 1.04T 左右,在这里总结下步骤。
环境简介:
1. 本次试验的环境为 11.2.0.4 的单机环境,存储为 Windows NTFS 文件系统,系统版本为 Windows server 2008R2 企业版。
2. 备份来自一个双节点的 RAC 环境,操作系统同为 Windows Server 2008R2, 存储为 ASM 磁盘组。
3.RAC 环境下文件总大小为 1.04T,备份集大小为 290G 左右。
还原步骤:
1. 将备份集拷贝至测试环境。
环境中 D 盘中安装有 Oracle11.2.0.4 版本的数据库,安装了默认的 orcl 实例,实例处于关闭状态。
本次将备份集拷贝至目录 ’D:\backup\’ 下。
2. 在 E 盘中新建 oradata 目录,路径为 ’E:\oradata’。
E 盘空间大小为 1.5T,用于存放本次的数据文件,新建 archive 目录用于存放归档日志。
3. 创建实例并强制启动到 nomount 状态。
oradim -new -sid leo – 创建了实例名为 leo 的 windows 服务
set oracle_sid=leo – 设置当前窗口环境变量
rman target /
startup nomount force – 强制启动到 nomount 状态以便进行 spfile 的恢复
4.RMAN 中还原 spfile。
在备份集中找到最小的几个文件,逐一尝试恢复 spfile 直到成功恢复,当然如果主库正常可以到主库服务器上进入 RMAN 执行 list backup of spfile 进行快速识别,图省事可以一个个试。
restore spfile from ‘D:\backup\xxx’;
startup nomount force;5. 生成 pfile 并删除 RAC 相关参数。
create pfile=’D:\pfileleo.txt’ from spfile;
删除其中所有的 RAC 相关参数,同时将 audit_file_dest 设置为 D 盘 oracle 安装目录下的 adump 目录,并制定 log_archive_dest_1 的值为 E:\archive,此外修改控制文件位置为 E:\oradata\control01.ctl,E:\oradata\control02.ctl 后保存。
6. 使用新的 pfile 启动到 nomount 状态。
startup force pfile=’D:\pfileleo.txt’;7.RMAN 恢复控制文件。
restore controlfile from ‘D:\backup\xxx’;–xxx 为时间最晚的控制文件备份
alter database mount;8.RMAN 注册备份集并恢复数据库。
catalog start with ‘D:\backup\’;– 后继输入 yes 即可 run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
set newname for datafile 1 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 2 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 3 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 4 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 5 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 6 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 7 to ‘E:\oradata\xxx.dbf’;
set newname for datafile 8 to ‘E:\oradata\xxx.dbf’;
… 有多少个数据文件加几个 set newname 语句。
restore database;
switch datafile all;
}
在这里可以使用如下类似 SQL 在原库生成 set newname 的语句:
select ‘set newname for datafile ‘||file_id||’ to <new_file_dest>’||substr(file_name,xxx) as “SQL” from dba_data_files;–xxx 的大小取决于文件目录的长度。
9.Recover 数据库。
Restore 之后接下来需要进行 Recover,选择的恢复终点如下:
1)通过 list archivelog all 命令找到归档日志的备份,找到每个 thread 的 sequence 值最大的备份集,记录下其 next scn 号及 sequence 值,假设分别为 seq1 scn1 和 seq2 scn2。
2)比较 scn1 和 scn2 选择其中较小的作为本次恢复终点, 假设本次较小者为 scn1,其对应 seq1 的序列号。
run {
set until sequence seq1 thread 1;
recover database;
}
10. 修改所有 redo 文件的目录
Alter database rename file ‘+DATA/xxx/onlinelog/redo01.log’ to ‘E:\oradata\redo01.log’;– 有多少个 redo 文件执行多少次。
…11. 以 upgrade 模式打开数据库。
shutdown immediate;
startup upgrade;
12. 删除原临时文件组并新建。
create temporary tablespace TEMP1 tempfile dbfE:\temp01.b’ size 2048M;
alter database default temporary tablespace TEMP1;
drop tablespace TEMP;
13. 重新以 upgrade 模式打开数据库并执行升级脚本。
shutdown immediate;
startup upgrade;
sqlplus / as sysdba
>@?/rbdms/admin/catupgrd.sql
14. 升级完毕后重启数据库。
shutdown immediate;
startup
注意升级完毕后可能会出现账号密码不正确的情况,手动修改吧。
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/142091.htm