当新挂载上去磁盘到asm里面,也建了新的asm磁盘组,想把一些数据迁移到新的asm磁盘组上面。
select 'copy datafile '''||file_name||''' to ''+data_dg/milk/datafile/'||tablespace_name||rownum||'.dbf'';' from dba_data_files where tablespace_NAME in('MILK');
2、通过select语句拼接datafile rename的语句
select 'alter database rename file '''||file_name||''''||' to '||'''+data_dg/milk/datafile/'||tablespace_name||rownum||'.dbf'||''''||';',file_id from dba_data_files where tablespace_NAME in('MILK');
保存上面两条语句的输出
脚本准备
1、将第一条语句的输出结果替代下面的copy datafile部分,并根据自己的环境更改相关变量
[oracle@milkrac1 ~]$ cat milk.sh
#!/bin/ksh
#!/bin/sh
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
export LANG=en_US
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
RMAN_LOG_FILE=/home/oracle/1.txt
export RMAN
ORACLE_SID=milk1
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog TARGET / msglog$RMAN_LOG_FILE append <<EOF
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
copy datafile '+VOT_DATA/milk/datafile/milk.257.959209603' to '+data_dg/milk/milk1.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.264.959209603' to '+data_dg/milk/milk2.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.265.959209601' to '+data_dg/milk/milk3.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.256.959209601' to '+data_dg/milk/milk4.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.266.959209963' to '+data_dg/milk/milk4.dbf';
release channel c2;
release channel c1;
}
EOF
echo >> $RMAN_LOG_FILE
exit
添加可执行权限
su - grid
srvctl stop database -d milk
2、将节点1的实例起到mout状态
su - grid
srvctl start database -d milk -o mount
3、通过RMAN COPY相关数据文件
sh milk.sh
数据库里rename数据文件
su - oracle
sqlplus / as sysdba
alter database rename file '+VOT_DATA/milk/datafile/milk.257.959209603' to '+data_dg/milk/milk1.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.264.959209603' to '+data_dg/milk/milk2.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.265.959209601' to '+data_dg/milk/milk3.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.256.959209601' to '+data_dg/milk/milk4.dbf';
alter databasse open;
下面就是将一些表空间迁移到新的asm磁盘的过程及步骤
迁移准备
1、通过select语句拼接rman copy的语句:select 'copy datafile '''||file_name||''' to ''+data_dg/milk/datafile/'||tablespace_name||rownum||'.dbf'';' from dba_data_files where tablespace_NAME in('MILK');
2、通过select语句拼接datafile rename的语句
select 'alter database rename file '''||file_name||''''||' to '||'''+data_dg/milk/datafile/'||tablespace_name||rownum||'.dbf'||''''||';',file_id from dba_data_files where tablespace_NAME in('MILK');
保存上面两条语句的输出
脚本准备
1、将第一条语句的输出结果替代下面的copy datafile部分,并根据自己的环境更改相关变量
[oracle@milkrac1 ~]$ cat milk.sh
#!/bin/ksh
#!/bin/sh
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
export LANG=en_US
export ORACLE_HOME
RMAN=$ORACLE_HOME/bin/rman
RMAN_LOG_FILE=/home/oracle/1.txt
export RMAN
ORACLE_SID=milk1
export ORACLE_SID
ORACLE_USER=oracle
export ORACLE_USER
chmod 666 $RMAN_LOG_FILE
$RMAN nocatalog TARGET / msglog$RMAN_LOG_FILE append <<EOF
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
copy datafile '+VOT_DATA/milk/datafile/milk.257.959209603' to '+data_dg/milk/milk1.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.264.959209603' to '+data_dg/milk/milk2.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.265.959209601' to '+data_dg/milk/milk3.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.256.959209601' to '+data_dg/milk/milk4.dbf';
copy datafile '+VOT_DATA/milk/datafile/milk.266.959209963' to '+data_dg/milk/milk4.dbf';
release channel c2;
release channel c1;
}
EOF
echo >> $RMAN_LOG_FILE
exit
添加可执行权限
chmod 777 milk.sh
操作流程
1、然后关闭所有节点的数据库su - grid
srvctl stop database -d milk
2、将节点1的实例起到mout状态
su - grid
srvctl start database -d milk -o mount
3、通过RMAN COPY相关数据文件
sh milk.sh
数据库里rename数据文件
su - oracle
sqlplus / as sysdba
alter database rename file '+VOT_DATA/milk/datafile/milk.257.959209603' to '+data_dg/milk/milk1.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.264.959209603' to '+data_dg/milk/milk2.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.265.959209601' to '+data_dg/milk/milk3.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.256.959209601' to '+data_dg/milk/milk4.dbf';
alter database rename file '+VOT_DATA/milk/datafile/milk.266.959209963' to '+data_dg/milk/milk5.dbf';
4、并将数据库openalter databasse open;
5、最后将其他数据库节点都拉起
重点::::::::
以上是针对12cR1及之前的版本,对于12cR2都可以在线迁移了啦啦啦啦啦啦啦啦啦