1. 目标端创建 directory
$ mkdir -p /home/oracle/tsdir --oracle用户下 SYS@PROD>create directory tsdir as '/home/oracle/tsdir'; SYS@PROD>grant all on directory tsdir to public;
2 在源库上建立测试表空间
SYS@PROD> col file_name for a60 SYS@PROD> select tablespace_name,file_name from dba_data_files;
SYS@PROD> create tablespace tbs1 datafile '/u01/app/oracle/oradata/PROD/tbs1.dfb' size 10M;
3 检查自包含
#什么叫自包含? 当前表空间中的对象不依赖该表空间之外的对象 例如:有 TEST 表空间,里面有个表叫 T1,如果在 T1 上建个索引叫 T1_idx, 而这个索引建在 USERS表空间上,由于 T1_idx 索引是依赖 T1 表的, 那么,TEST 表空间是自包含的,可以迁移,但会甩掉 T1_idx 索引, USERS 表空间不是自包含的,不符合迁移条件。 检查表空间是否自包含可以使用程序包 如上面的例子 SQL> execute dbms_tts.transport_set_check('USERS'); SQL> select * from TRANSPORT_SET_VIOLATIONS;
4 表空间只读
SYS@PROD> alter tablespace tbs1 read only; SYS@PROD> select tablespace_name,status from dba_tablespaces;
5 expdp 导出表空间
$ mkdir -p /home/oracle/tsdir --oracle用户下 SYS@PROD>create directory tsdir as '/home/oracle/tsdir'; SYS@PROD>grant all on directory tsdir to public; SYS@PROD> col directory_name for a25 SYS@PROD> col DIRECTORY_PATH for a80 SYS@PROD> select directory_name,directory_path from dba_directories;
$ expdp system/oracle directory=tsdir dumpfile=expdp_tbs1.dmp transport_tablespaces=tbs1
6 scp 到目标端
$ scp /home/oracle/tsdir/expdp_tbs1.dmp 192.168.6.112:/home/oracle/tsdir/ $ scp /u01/app/oracle/oradata/PROD/tbs1.dfb 192.168.6.112:/u01/app/oracle/oradata/PROD/
7.目标端创建对应用戶
SYS@PROD> grant connect,resource to damon identified by oracle;
8.目标端 EMREP导入
impdp system/oracle directory=tsdir dumpfile=expdp_tbs1.dmp TRANSPORT_DATAFILES=/u01/app/oracle/oradata/PROD/tbs1.dfb
SYS@PROD> select tablespace_name,status from dba_tablespaces;
9.两端readwirte
#目标库执行 SYS@PROD> alter tablespace tbs1 read write; SYS@PROD> select tablespace_name,status from dba_tablespaces;
#源库执行 SYS@PROD> alter tablespace tbs1 read write; SYS@PROD> select tablespace_name,status from dba_tablespaces;