暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RMAN异机恢复

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
公众号/墨天轮:Digital Observer;CSDN/PGfans:施嘉伟;ITPUB:sjw1933

一、说明

1. 背景

原数据库为11g RAC环境(11.2.0.4),操作系统为Linux。目标新库为11g (11.2.0.4) 单机,操作系统为Linux。

2. 步骤

序号 步骤
1 备份原数据库
2 传输备份文件到备机
3 原库上创建pfile并传输给备机
4 备份库更改pfile,去掉原来rac的参
5 启动备库到nomount状态
6 恢复控制文件
7 启动到mount,注册备份信息
8 检测备份信息
9 还原数据文件
10 备份还原增量归档
11 恢复数据库
12 重命名日志文件
13 打开数据库
14 删除二节点日志文

二、具体步骤

  1. 备份数据库
RMAN> 
run{
allocate channel c1 type disk;
backup database format '/home/oracle/backup/full_%U';
backup archivelog all format '/home/oracle/backup/arch_%U';
}

  1. 传输备份文件到备机
scp zjrac2* 172.16.188.50:/backup

  1. 原库上创建pfile并传输给备机
create pfile='/tmp/initorcl.ora' from spfile;

  1. 备份库更改pfile,去掉原来rac的参数

删除参数文件中以下信息:
最前面instance1.__和instance2.__开头的参数,以上参数均属于动态参数。

*.cluster_database
*.remote_listener
instance1.instance_number
instance2.instance_number
  1. 启动备库到nomount状态
startup nomount pfile=’/oracle/initorcl.ora’;

  1. 恢复控制文件
rman target /
restore controlfile from '/backup/zjrac2_20150125034000_869901970';
'/backup/zjrac2_20150125034000_869901970'为控制文件的备份片

  1. 启动到mount,注册备份信息

以下是例子:

alter database mount;
catalog backuppiece '/backup/zjrac2_20150125034000_869888810';
catalog backuppiece '/backup/zjrac2_20150125034000_869901970';
catalog backuppiece '/backup/zjrac_arch_20150125034000_869888423';
catalog backuppiece '/backup/zjrac_arch_20150126034001_869974816';

以上命令的备份片是第一步备份出来的全库以及归档的备份片
8. 检测备份信息

crosscheck archivelog all;
crosscheck backup;

删除原来控制文件中记录的无效的备份信息

delete expired archivelog all;
delete expired backup;
list backup;

  1. 恢复数据文件

运行脚本,以下为例子:

#!/bin/bash
. ~/.bash_profile
export ORACLE_SID
rman target / nocatalog << EOF
run{
set newname for datafile 1  to '/oradata/zjrac/system.256.740951189';
set newname for datafile 2  to '/oradata/zjrac/undotbs1.258.740951189';
……
set newname for datafile 27 to '/oradata/zjrac/cmsbi.269.868790385';
restore database;
switch datafile all;
recover database;
}
EOF

注意 将数据文件的新名字写进脚本,此例中新建/oradata/zjrac目录,将数据文件存放在此目录下。
10. 备份和还原增量归档

1)备份增量归档

RMAN> 
run{
allocate channel c1 type disk;
backup archivelog all not backed up format '/backup/log_%d_%s_%p_%u.bak' tag='ARCHIVELOG';
}

2)注册备份信息

catalog backuppiece '/backup/ log_%d_%s_%p_%u.bak ';

3)还原归档

restore archivelog all;


  1. 恢复数据库
SQL> recover database


  1. 重命名日志文件
SQL>select 'alter database rename file '||''''||member||''''||' to '||''''||'/oradata/zjrac/'||substr(member,instr(file_name,'/',-1)+1)||''';' from v$logfile;

以下为例子:

alter database rename file '+RACDATA01/zjrac/onlinelog/redo02_1.log' to '/oradata/zjrac/redo02_1.log';
alter database rename file '+RACDATA01/zjrac/onlinelog/redo01_1.log' to '/oradata/zjrac/redo01_1.log';
alter database rename file '+RACDATA01/zjrac/onlinelog/redo03_2.log' to '/oradata/zjrac/redo03_2.log';
alter database rename file '+RACDATA01/zjrac/onlinelog/redo04_2.log' to '/oradata/zjrac/redo04_2.log';
alter database rename file '+RACDATA01/zjrac/onlinelog/redo05_1.log' to '/oradata/zjrac/redo05_1.log';
alter database rename file '+RACDATA01/zjrac/onlinelog/redo06_2.log' to '/oradata/zjrac/redo06_2.log';

注意 此例中将redo保存在和数据文件一致的/oradata/zjrac目录下
13. 打开数据库

alter database open resetlogs;

  1. 删除二节点日志文件
alter database disable thread 2;
alter database clear unarchived logfile group 4;
alter database drop logfile group 4;


  1. 清理undo、创建临时表空间
SQL> show parameter undo;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1
SQL> select tablespace_name from dba_tablespaces where contents='UNDO';
 
TABLESPACE_NAME
------------------------------
UNDOTBS1
UNDOTBS2
 
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
 
Tablespace dropped.
 
SQL> select name from v$tempfile;
SQL> select tablespace_name from dba_tablespaces where contents='TEMPORARY';
 
TABLESPACE_NAME
------------------------------
TEMP
 
SQL> create temporary tablespace TEMP1
  2  tempfile '/u01/oracle/oradata/ractest/data/temp01.dbf'
  3  size 50M;
 
Tablespace created.
 
SQL> alter database default temporary tablespace TEMP1;
 
Database altered.
 
SQL> drop tablespace TEMP including contents and datafiles;
 
Tablespace dropped.

  1. 监听配置

代码如下:

  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)(IP = FIRST))
      )      
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      )
    )
  )


三、相同机器恢复不同实例

恢复方法和以上步骤一致,重复4.6.2 1-16,注意点如下:
· 3中另建一个参数文件再放到相同的dbs目录下
create pfile=’/tmp/initoracle.ora’ from spfile;
参数文件放在dbs目录下:
scp initoracle.ora 172.16.188.50:$ORACLE_HOME/dbs
· 4中修改参数文件audit_file_dest、归档、控制文件到新的路径。
· 5中还原数据文件时,另建一个目录放新的数据文件:
set newname for datafile 1 to ‘/oradata/oracle/system.256.740951189’;
· 12中重命名日志文件到新的路径:
alter database rename file ‘+RACDATA01/zjrac/onlinelog/redo01.log’ to ‘/oradata/oracle/redo01.log’;
其他步骤基本一致。
2)检查网络及存储性能瓶颈。
hhh6.jpg

最后修改时间:2025-02-21 14:57:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论