有的时候我们需要迁移ASM下的数据文件到其他ASM磁盘组,前几天刚迁移了3T左右的数据,个人认为纯属体力工作,现在把步骤记录下来,以后有这样的工作直接复制粘贴就好了。
我的方法是利用rman的copy命令,所以必须得在归档方式下进行,
以下为具体实施步骤:
--先检查下备份信息
list datafilecopy all;
crosscheck copy;
delete expired copy;
--确认要迁移的数据文件
col name for a60
select file#,name,status,bytes/1024/1024 sizeMB from v$datafile;
--对于普通数据文件直接在RMAN命令行下执行
(对于UNDO数据文件,要注意offline undo datafiles 需要在两个节点分别进行,并且最好在sqlplus环境下一步一步执行,因为offline和recover的时候会报错,这时退出重进就好了)
sql "alter database datafile 5 offline";
copy datafile 5 to '+DATA2/';
switch datafile 5 to copy;
recover datafile 5;
sql "alter database datafile 5 online";
delete noprompt datafilecopy '+DATA/tcendba/datafile/undotbs2.355.855996443';
--对于SYSTEM、SYSAUX表空间就需要在mount状态下操作了,针对datafile
shutdown immediate;
startup mount;
copy datafile 2 to '+DATA2/';
switch datafile 2 to copy;
recover database;
sql "alter database open";
delete datafilecopy '+DATA/bwc/datafile/sysaux.2430.886960935';
--
对于SYSTEM、SYSAUX表空间的第二种方法
,针对tablespace
backup as copy tablespace system format '+DATA2/';
backup as copy tablespace sysaux format '+DATA2/';
shutdown immediate;
startup mount;
switch tablespace system to copy;
switch tablespace sysaux to copy;
recover database;
sql "alter database open";
delete noprompt datafilecopy '+DATA/tcendba/datafile/system.336.855996319';
delete noprompt datafilecopy '+DATA/tcendba/datafile/sysaux.344.855996319';
--对于TMEP表空间,新建一个temp文件,之后再删除老的temp文件就可以了
select file_id,file_name,tablespace_name,bytes/1024/1024 sizeMB,status from dba_temp_files;
alter tablespace temp add tempfile '+DATA2/' size 32000m; autoextend on maxsize 2g;
alter database tempfile '+DATA/tcendbd/tempfile/temp.470.856022841' offline;
alter tablespace temp drop tempfile '+DATA/tcendba/tempfile/temp.356.855996395';