转载请注明出处
一、需求背景
客户数据库存储空间接近存满,需购置一台新的存储,进行数据迁移,客户允许少量停机时间。
二、实施方法讨论
利用ASM rebalance 进行迁移
可以实现0宕机进行迁移,过程简单,但迁移时间周期太长。利用rman copy进行迁移
需要少量停机时间,迁移时间短,过程复杂。
结合客户的需求,最终采用的是rman copy进行存储迁移。
三、实施项目步骤
- 添加新ASM磁盘
- 备份
- 数据迁移
- 删除原存储
3.1 添加新ASM盘
3.1.1 查询原ASM磁盘信息
运行以下sql命令
SET PAGES 1000
SET LINES 1000
COL PATH FOR A30
SELECT A.GROUP_NUMBER,
B.NAME ASM_NAME,
A.NAME DISK_NAME,
A.FAILGROUP,
A.PATH,
B.TYPE,
A.TOTAL_MB,
A.FREE_MB
FROM V$ASM_DISK A, V$ASM_DISKGROUP B
WHERE A.GROUP_NUMBER = B.GROUP_NUMBER;
3.1.2 划分磁盘
存储工程师安照需求划分存储,并采用多路径软件。
略
3.1.3 绑定ASM 盘
根据不同的操作系统,使用不同的方法进行绑定。
绑定过程略
3.2 备份
备份包括ocr、votedisk
3.2.1 备份ocr与votedisk
# ocrconfig -manualbackup --手工备份 (需root用户)
# ocrconfig -showbackup --查看备份
# ocrconfig -restore <filename> --恢复ocr
11G 中只需只需上面的命令,就能同时备份ocr与vote
3.3 数据迁移
3.3.1 创建ASM Diskgroup
利用asmca命令创建以下diskgroup:
ocrdg --存放ocr与vote
newdata --存放数据文件
3.3.2 迁移ocr,vote
添加ocr信息至ocrdg上(root用户)
# ocrconfig -add +OCRDG
检查ocr
# ocrcheck
查看votedisk信息(grid用户)
$ crsctl query css votedisk
迁移votedisk(grid用户)
$ crsctl replace votedisk +OCRDG
3.3.3 创建asm实例spfile至ocrdg上
SQL> create pfile='/home/grid/asmspfile.ora' from spfile;
SQL> create spfile='+OCRDG' from pfile='/home/grid/asmspfile.ora';
3.3.4 迁移数据库文件至新磁盘上
3.3.4.1 创建数据库spfile至newdata上
SQL> create pfile='/home/oracle/orcl_pfile.ora' from spfile='+DATADG/orcl/spfileorcl.ora';
SQL> create spfile='+NEWDATA' from pfile='/home/oracle/orcl_pfile.ora';
3.3.4.2 查询数据文件信息
SQL> select ''''||file_name||'''' from dba_data_files;
3.3.4.3 利用rman copy备份数据库
$ vi rman_copy.sh
----------
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
rman target / nocatalog log=/tmp/rman_copy.log<<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
copy
datafile '+DATADG/orcl/datafile/system.259.874699969' to '+NEWDATA',
datafile '+DATADG/orcl/datafile/sysaux.260.874699995' to '+NEWDATA',
datafile '+DATADG/orcl/datafile/undotbs1.261.874700013' to '+NEWDATA',
datafile '+DATADG/orcl/datafile/undotbs2.263.874700041' to '+NEWDATA',
datafile '+DATADG/orcl/datafile/users.264.874700049' to '+NEWDATA';
}
EOF
rman target / nocatalog log=/tmp/rman_copy.log append <<EOF
copy current controlfile to '+NEWDATA';
EOF
--赋予执行权限
$ chmod +x rman_copy.sh
3.3.4.4 拷贝控制文件,并确认控制文件新的存放位置
ASMCD> cd +newdata/orcl/CONTROLFILE
ASMCMD> ls
Backup.261.960651757
ASMCMD> cp Backup.261.960651757 control01.dbf
ASMCMD> cp Backup.261.960651757 control02.dbf
3.3.4.5 修改spfile参数
#control_files:
SQL> alter system set control_files='+newdata/orcl/CONTROLFILE/control01.dbf','+newdata/orcl/CONTROLFILE/control02.dbf' scope=spfile;
#db_create_file_dest
SQL> alter system set db_create_file_dest='+NEWDATA' SCOPE=SPFILE;
#archive:
SQL> alter system set log_archive_dest_1='LOCATION=+NEWDATA'
3.3.4.6 利用集群命令,更改数据库状态(oracle用户)
停止数据库
$ srvctl stop database -d orcl
启动至mount状态
$ srvctl start database -d orcl -o mount
SQL> show parameter control_files
3.3.4.7 rename数据库
数据文件
SQL> alter database rename file '+DATADG/orcl/datafile/sysaux.260.874699995' to '+newdata/orcl/datafile/SYSAUX.258.960651703';
SQL> alter database rename file '+DATADG/orcl/datafile/system.259.874699969' to '+newdata/orcl/datafile/SYSTEM.256.960651621';
SQL> alter database rename file '+DATADG/orcl/datafile/undotbs1.261.874700013' to '+newdata/orcl/datafile/UNDOTBS1.257.960651621';
SQL> alter database rename file '+DATADG/orcl/datafile/undotbs2.263.874700041' to '+newdata/orcl/datafile/UNDOTBS2.259.960651707';
SQL> alter database rename file '+DATADG/orcl/datafile/users.264.874700049' to '+newdata/orcl/datafile/USERS.260.960651735';
temp文件
SQL> alter database rename file '+DATADG/orcl/tempfile/temp.262.874700019' to '+newdata';
3.3.4.8 recover 数据库
$ rman target /
RMAN> recover database;
3.3.4.9 以open resetlogs方式打开数据库
SQL> alter database open resetlogs;
3.3.4.10 修改redo日志
--增加redo日志组
alter database add logfile thread 1 group 5 '+Newdata' size 50m;
alter database add logfile thread 1 group 6 '+Newdata' size 50m;
alter database add logfile thread 2 group 7 '+Newdata' size 50m;
alter database add logfile thread 2 group 8 '+Newdata' size 50m;
--删除redo日志组
select GROUP#,status from v$log;
当status状态为inactive和unused状态时可以删除。
alter database drop logfile group 4;
alter database drop logfile group 2;
alter database drop logfile group 1;
alter database drop logfile group 3;
3.3.4.11 集群修改信息
$ srvctl modify database -d orcl -n orcl -p +NEWDATA/orcl/spfileorcl.ora
$ srvctl modify database -d orcl -n orcl -a NEWDATA
3.3.4.12 以集群方式启动数据库
$ srvctl stop database -d orcl
$ srvctl start database -d orcl
3.4 删除原存储
--删除原OCR,vote磁盘组
# ocrconfig -delete +CRSDG
# ocrcheck
确认信息
# crsctl query css votedisk
--dismount disk(每个节点)
$ sqlplus / as sysasm
SQL> ALTER DISKGROUP CRSDG DISMOUNT;
SQL> alter diskgroup DATADG dismount;
--drop disk(任一节点执行)
$ sqlplus / as sysasm
SQL> drop diskgroup CRSDG force including contents;
SQL> drop diskgroup DATADG force including contents;
--delete resource(任一节点执行)
$ crsctl delete resource ora.NEWOCR.dg
$ crsctl delete resource ora.DATADG.dg