环境说明 迁移流程 1. 前期准备 二. 现场步骤(停业务): 2.1 全库备份 2.2 copy 数据文件至新磁盘组 2.3 REDO 切换至新磁盘组 2.4 迁移OCR 磁盘组 2.5 迁移vote 磁盘组 2.6 迁移参数文件 2.7 迁移控制文件 2.8 rename 数据文件 2.9 重建TEMP 文件 2.10 打开数据库 2.11 检查 三. 回退措施
一 说明
环境说明
目前数据库为10gRAC 环境(10.2.0.4) ,操作系统为 ,采用ASM 磁盘组,需要对存储进行迁移,计划迁移采用oracle rman 迁移方案,确保迁移安全可控。本次迁移涉及ocr,vote 盘及DATA 磁盘组的数据迁移 环境如下:
操作系统: HP 数据库: 10.2.0.4 数据文件存储方式: ASM
数据量: 131GB
Data 盘大小: 800000MB Data 盘:
|
NAME |
PATH |
MODE_ST STATE |
|
DGAM_0000 |
/dev/vgora/rlvasm1 |
ONLINE NORMAL |
|
DGAM_0001 |
/dev/vgora/rlvasm2 |
ONLINE NORMAL |
|
DGAM_0002 |
/dev/vgora/rlvasm3 |
ONLINE NORMAL |
|
DGAM_0003 |
/dev/vgora/rlvasm4 |
ONLINE NORMAL |
Ocr 盘:
[u@h /oracle/product/10.2.0/crs/bin]$ ./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 1048300
Used space (kbytes) : 6476
Available space (kbytes) : 1041824
ID : 1756826852
Device/File Name : /dev/vgora/rlvocr1
Device/File integrity check succeeded
Device/File Name : /dev/vgora/rlvocr2
Device/File integrity check succeeded
Cluster registry integrity check succeeded Vote 盘: [u@h /oracle/product/10.2.0/crs/bin]$ ./crsctl query css votedisk
0. 0 /dev/vgora/rlvvot1 1. 0 /dev/vgora/rlvvot2 2. 0 /dev/vgora/rlvvot3
迁移流程
整体迁移流程: 不停业务准备:
|
步骤 |
流程计划 |
时间估算 |
|
1 |
操作系统扫描新磁盘 |
已完成 |
|
2 |
创建新NDATA 磁盘组 |
(不停机做) |
停业务做:
|
步骤 |
流程计划 |
时间估算 | |
|
1 |
数据库全备 |
50 分钟(业务停止) | |
|
2 |
数据文件迁移 |
90 分钟 (业务不停止) | |
|
3 |
REDO 日志切换到新存储NDATA 中 |
30 分钟(业务停止) | |
|
4 |
迁移OCR ,VOTE 盘 |
50 分钟 (业务停止) | |
|
5 |
重启三节点集群,确保OCR 及VOTE 切换正常 |
20 分钟 (业务停止) | |
|
6 |
迁移参数文件 |
20 分钟 (业务停止) | |
|
7 |
迁移控制文件 |
20 分钟 (业务停止) | |
|
8 |
rename 控制文件中数据文件路径 |
15 分钟 (业务停止) | |
|
9 |
重建TEMP 表空间 |
15 分钟 (业务停止) | |
|
10 |
打开数据库 |
30 分钟 (业务停止) | |
总结时间: 总计花费业务停机时间 340 分钟
1. 前期准备
挂载新磁盘 创建新磁盘组考虑磁盘较多,创建采用asmca 图形交互界面完成,创建新磁盘过程中需要调整ASM 磁盘组的版本参数,创建包括由5 张1G 磁盘组成的OCR 及VOTE 磁盘及若干数据盘组成的NDATA 磁盘组。
二. 现场步骤(停业务):
全库备份
run { allocate channel c1 type disk; sql 'alter system archive log current'; backup as backupset database format '/orabak/backup1126/rmanfull_%d_%T_%s_%p.bak' include current controlfile; sql 'alter system archive log current'; sql 'alter system archive log current'; sql 'alter system archive log current'; sql 'alter system archive log current'; sql 'alter system archive log current'; backup format '/orabak/backup1126/rmanarch_full%T%U' archivelog all; backup spfile format '/orabak/backup1126/spfile_%d_%T_%s_%p.bak'; backup current controlfile format '/orabak/backup1126/control_%d_%T_%s_%p.bak'; release channel c1; }
数据文件至新磁盘组
获取rman备份脚本:
select 'copy datafile '||''''||file_name||''''||' to '||''''||'+NDATA/rac/datafile/'||substr(file_name,instr(file_name,'/',-1)+1)||''';' from dba_data_files; 产生脚本文件,考虑到在不影响生产的情况下,采用一个进程处理,不开启并行拷贝:
切换至新磁盘组
redo 通过增减替换添加至新的磁盘组中 SQL> select GROUP#,THREAD#,BYTES,STATUS from v$log; GROUP# THREAD# BYTES STATUS---------- ---------- ---------- ---------------- 1 1 52428800 ACTIVE 2 1 52428800 CURRENT 3 2 52428800 ACTIVE 4 2 52428800 CURRENT 5 3 52428800 CURRENT 6 3 52428800 ACTIVE 7 1 52428800 ACTIVE 8 2 52428800 ACTIVE 9 3 52428800 ACTIVE 常用命令:alter database add logfile thread 2 group 14 ('+ndata') size 50m;alter database drop logfile group 1;alter system archive log current;alter system checkpoint; 备份控制文件backup current controlfile format '/tmp/control.bak';
迁移OCR 磁盘组
1) 确保 OCR 有最近的备份 A 、查看 OCR 的健康状态 ocrcheck ocrconfig -showbackup B 、如果没有,手工备份一下 ocrconfig -export /home/oracle/ocrbak.ocr -s online C 、使用 OCR 备份还原 ocrconfig -import /home/oracle/ocrbak.ocr D 、查看 OCR 的健康状态 ocrcheck 2) 添加新的 OCR 盘 该步骤会使用 rhdiskpower5 覆盖原有镜像 rhdisk8 ocrconfig -replace ocrmirror /dev/rhdiskpower5 ocrcheck 3) 移除原有 OCR 盘 该步骤会移除 rhdisk4 ,并且 rhdiskpower5 成为 OCR 盘 ocrconfig -replace ocr ocrcheck 4) 添加新的镜像 OCR 盘 该步骤会使 rhdiskpower6 盘成为 ocrmirror ocrconfig -replace ocrmirror /dev/rhdiskpower6 ocrcheck 注:移除 OCR 镜像盘,用不到该命令 ocrconfig -replace ocrmirror
迁移vote 磁盘组
当添加新的 vote 盘、或者替换时, vote 盘的内容自动从备份恢复 添加 vote 盘时,必须以 root 用户停止整个集群 1) 备份 vote 盘 ( 备份一份即可,无需全部备份 ) dd if=/dev/rhdisk22 of=/home/oracle/votebak6.vote dd if=/dev/rhdisk23 of=/home/oracle/votebak7.vote dd if=/dev/rhdisk24 of=/home/oracle/votebak8.vote 2) 停止集群 crsctl stop crs 注:所有节点都执行 3) 添加 vote 盘 crsctl add css votedisk /dev/rhdiskpower0 -force # crsctl add css votedisk /dev/rhdiskpower0 -force Now formatting voting disk: /dev/rhdiskpower0 successful addition of votedisk /dev/rhdiskpower0. 4) 移除原 vote 盘 crsctl delete css votedisk /dev/rhdisk22 -force 5) 启动集群 crsctl start crs 所有节点都执行 6) 验证当前 vote 盘路径 crsctl query css votedisk select name, path, mode_status, state from v$asm_disk order by name; 7) 检查集群资源状态 crs_stat –t
迁移参数文件
创建数据库pfile文件create pfile='/tmp/initorcl.ora' from spfile; 通过创建的pfile 启动数据库至nomount 状态create spfile='+NDATA/orcl/spfileorcl.ora' from pfile='/tmp/initorcl.ora'; 修改三节点 $ORACLE_HOME/dbs 下 initorcl.ora 文件,指向磁盘组中的参数文件位置 重新启动至nomount 状态 (startup nomount) (首先查看数据库的配置信息srvctl config database -d orcl -a 通过srvctl 修改spfile 的位置srvctl modify database -d orcl -p ‘+ndata/orcl/spfileorcl.ora’
迁移控制文件
重启实例是nomount状态: 修改参数文件中控制文件的路径: alter system set control_files='+NDATA/orcl/control01.ctl' scope=spfile sid='*'; Restore 控制文件: rman: restore controlfile to '+NDATA/orcl/control01.ctl' from '+DATA/ASM/CONTROLFILE/control01.ctl.286.968939085'; 启动数据库至mount状态
数据文件
select 'alter database rename file '||''''||name||''''||' to '||''''||'+NDATA/ORCL/DATAFILE/'||substr(name,instr(name,'/',-1)+1)||''';' from v$datafile;
获取以上脚本运行结果,rename 数据文件
alter database rename file '+DATA/orcl/datafile/system.259.967068683' to '+NDATA/orcl/datafile/SYSTEM.bdf';
alter database rename file '+DATA/orcl/datafile/sysaux.260.967068697' to '+NDATA/orcl/datafile/sysaux.bdf';
alter database rename file '+DATA/orcl/datafile/undotbs1.261.967068711' to '+NDATA/orcl/datafile/undotbs1.bdf';
alter database rename file '+DATA/orcl/datafile/undotbs2.263.967068729' to '+NDATA/orcl/datafile/undotbs2.bdf';
alter database rename file '+DATA/orcl/datafile/users.264.967068735' to '+NDATA/orcl/datafile/users.bdf';
重建TEMP 文件
s elect 'alter database rename file '||''''||name||''''||' to '||''''||'+data/orcl/datafile/'||substr(name,instr(name,'/',-1)+1)||''''||';' from v$tempfile;
打开数据库
查询数据文件及控制文件的scnselect name ,CHECKPOINT_CHANGE# from v$datafileselect name ,CHECKPOINT_CHANGE# from v$datafile_header; 三个节点正常打开数据库 归档路径检查。
检查
a. 参数文件、控制文件、数据库文件、临时文件等是否位于正确位置。 b.sqlplus / as sysasmdismount 旧的磁盘组 alter diskgroup ocrvt dismount; ( 三个节点)alter diskgroup data dismount; (三个节点) show parameter diskgroup; 修改此参数 NAME TYPE VALUE------------------------------------ ----------- ------------------------------asm_diskgroups string NDATA c.[oracle@rac2 ~]$ srvctl modify database -d orcl -a "ndata"[oracle@rac2 ~]$ srvctl config database -d orcl -aDatabase unique name: orclDatabase name: orclOracle home: /oracle/app/product/11.2.0/db_1Oracle user: oracleSpfile: +NDATA/orcl/spfileorcl.oraDomain:Start options: openStop options: immediateDatabase role: PRIMARYManagement policy: AUTOMATICServer pools: orclDatabase instances: orcl1,orcl2Disk Groups: DATAMount point paths:Services:Type: RACDatabase is enabledDatabase is administrator managed 修改权限 root:root 防止机器重启,自动拉起 d. 重启数据库和集群验证。 常用命令:select name,state,type from v$asm_diskgroup;select group_number,disk_number,state,name,path from v$asm_disk;
三. 回退措施
1. 修改三节点$ORACLE_HOME/dbs 下initorcl.ora 文件,指向原磁盘组中的参数文件位置
2. 启动数据库到nomount 状态
通过srvctl 修改spfile 的位置
srvctl modify database -d orcl -p ‘+data/orcl/spfileorcl.ora’
3. 还原参数文件中控制文件的路径:
alter system set control_files='+DATA/orcl/control01.ctl' scope=spfile sid='*';
4. 将数据库mount 起来,重建temp 表空间,检查数据文件位置,确认无误后,开启数据库。
5. 还原redo 文件
6. dismount 新建磁盘组,并更改其权限,避免它重新挂上来
7. 在线还原ocr 盘
8. 停库,停集群还原vote 盘
9. 重启集群,集群方法开启数据库。
