作者: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 | 删除二节点日志文 |
二、具体步骤
- 备份数据库
RMAN>
run{
allocate channel c1 type disk;
backup database format '/home/oracle/backup/full_%U';
backup archivelog all format '/home/oracle/backup/arch_%U';
}
- 传输备份文件到备机
scp zjrac2* 172.16.188.50:/backup
- 原库上创建pfile并传输给备机
create pfile='/tmp/initorcl.ora' from spfile;
- 备份库更改pfile,去掉原来rac的参数
删除参数文件中以下信息:
最前面instance1.__和instance2.__开头的参数,以上参数均属于动态参数。
*.cluster_database
*.remote_listener
instance1.instance_number
instance2.instance_number
- 启动备库到nomount状态
startup nomount pfile=’/oracle/initorcl.ora’;
- 恢复控制文件
rman target /
restore controlfile from '/backup/zjrac2_20150125034000_869901970';
'/backup/zjrac2_20150125034000_869901970'为控制文件的备份片
- 启动到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;
- 恢复数据文件
运行脚本,以下为例子:
#!/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;
- 恢复数据库
SQL> recover database
- 重命名日志文件
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;
- 删除二节点日志文件
alter database disable thread 2;
alter database clear unarchived logfile group 4;
alter database drop logfile group 4;
- 清理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.
- 监听配置
代码如下:
(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)检查网络及存储性能瓶颈。