在下面的场景中,将会使用expdp和impdp以及DBMS_FILE_TRANSFER将XPORT_DW表空间从dw数据库复制到racl数据库。下面给出具体的步骤:
(1)在源和目标数据库上为转储文件集和表空间数据文件设置目录(一次性设置)。
(2)使用DBMS_TTS.TRANSPORT_SET_CHECK 检査表空间的自相容性。
(3)使用expdp为XPORT_DW表空间创建元数据。
(4)使用DBMS_FILE_TRANSFER 将转储文件集和数据文件复制到目标数据库。
(5)在目标数据库上,使用impdp来插入表空间。
1.设置目录对象
在源数据库dw上,需要创建保存转储文件集的目录对象,以及一个指向XPORT_DW表空间的数据文件的存放位置的目录对象。这里给出ord数据库上的SQL命令,文件系统目录/Temp 是所有服务器通用的:
create directory src_dpump_dir as '/Temp';
create directory src_dbf_dir as '/u02/oradata';
提示:
如果源表空间或目标表空间存储在ASM磁盘组中,则必须使用ftp与XML DB存储库中的/sys/asm虚拟目录,或者使用DBMS_FILE_TRANSFER,或者使用asmcmd实用程序中的cp命令.
在目标数据库mcl上,将会执行类似的命令,如下所示:
create directory dest_dpump_dir as '/Temp';
create directory dest_dbf_dir as '/u05/oradata';
2.检査表空间的自相容性
在迁移XPORT_DW表空间之前,应该使用DBMS_TTS.TRANSPORT_SET_CHECK程序进行检査,以确保表空间中的所有对象都是自包含的,如下所示:
exec dbms_tts.transport_set_check('xport_dw', TRUE);
select * from tranaport_set_violations;
没有在TRANSPORT_SE匸VIOLATIONS中査找到任何行,这意味着表空间没有外部相关对象或归SYS拥有的任何对象。每次运行DBMS_TTS.TRANSPORT_SET_CHECK时都会重新创建该视图。
3.使用expdp创建元数据
在ord数据库上,在设置XPORT_DW表空间为只读后,执行expdp命令来导出与 XPORT_DW表空间相关联的元数据:
alter tablespace XPORT_DW read only;
为了运行expdp命令,打开操作系统命令提示符,并按照如下方式执行元数据导出:
expdp rjb/rjb dumpfile=expdat.dmp directory=src_dpump_dir transport_tablespaces=xport_dw
ls -l /temp/exp*
4.使用 DBMS_FILE_TRANSFER 复制文件
在这一步骤中,使用DBMS_FILE_TRANSFER把表空间的数据文件复制到远程数据库, 如下所示(也可以在这一步骤中使用/Temp目录):
execute dbms_file_transfer.put_file(
'src_dbf_dir', 'xport_dw.dbf',
'dest_dbf_dir', 'xport_dw.dbf', 'racl1
);
由于该表空间是用OMF创建的,所以必须使用DB_FILE_CREATE_DEST的值以及一些探测性操作或者使用动态性能视图V
5.使用impdp导入元数据
在最后一个步骤中,在目标数据库上运行impdp,以便读取元数据并导入表空间数据文件。这里给出此操作的输出:
impdp rjb/rjb directory=dest_dpump_dir dumpfile=expdat.dmp transport_datafiles=/u05/ozadata/xport_dw.dbf
sqlplus /as sysdba
select * from v$tablespace;
alter tablespace xport_dw read write;
需要注意的是,必须将表空间从READ ONLY改为READ WRITE.当将一个表空间迁移到另一个数据库时,默认情况下此表空间的副本是联机但只读的。如果在非RMAN表空间迁移操作期间将源表空间改变为只读,则在表空间迁移完成之后,也需要将源表空间改回为READ WRITE.




