聲明,本實驗使用一臺機器,兩個實例來模擬表空間傳輸。
傳輸表空間的有點:dump出的是表空間的一些元數據信息,提交非常小,導出非常快,同時在恢復時候導入也非常快,至於時間的花費,大概就是用在拷貝表空間對應的數據文件上吧。
----源庫 prod
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
TEMP1
TEST
TEST1
EXPTEST
9 rows selected.
--檢查源庫字符集
SQL> select userenv('LANGUAGE') FROM DUAL;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
---目標庫 catdb
[oracle@ora11g ~]$ sqlplus sys/oracle@catdb as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 4 15:16:24 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
CATALOGTBS
EXPTEST
EXPTEST1
8 rows selected.
--檢查目標庫字符集
SQL> select userenv('LANGUAGE') FROM dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
--遷移源庫prod test表空間到目標庫catdb
-------檢測tablespace 的自包含 prod
-- 檢測一個表空間是否符合傳輸標準的方法
SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('test',true);
PL/SQL procedure successfully completed.
--如果沒有行選擇,表示該表空間只包含表數據,並且是自包含的
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
no rows selected
--修改表空間爲read only狀態
SQL> alter tablespace test read only;
Tablespace altered.
--使用數據泵傳輸表空間
[oracle@ora11g ~]$ expdp system/oracle@prod directory=dump dumpfile=expdp_tbs_test_%U.dmp logfile=ttbs.log TRANSPORT_TABLESPACES = test
Export: Release 11.2.0.4.0 - Production on Sat Jul 4 20:17:48 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/********@prod directory=dump dumpfile=expdp_tbs_test_%U.dmp logfile=ttbs.log transport_tablespaces=test
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/ora_data/dump/expdp_tbs_test_01.dmp
******************************************************************************
Datafiles required for transportable tablespace TEST:
/u01/app/oracle/oradata/prod/test02.dbf
/u01/app/oracle/oradata/test01_new.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Sat Jul 4 20:18:50 2015 elapsed 0 00:01:01
-----將源庫傳輸表空間的datafile 傳送到另一個庫上(這裏都在一臺機器上做實驗,如果在不同機器上做實驗要拷貝表空間數據文件及dump文件到目標機器)
SQL> select tablespace_name, file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------
USERS /u01/app/oracle/oradata/prod/users01.dbf
UNDOTBS1 /u01/app/oracle/oradata/prod/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/prod/sysaux01.dbf
SYSTEM /u01/app/oracle/oradata/prod/system01.dbf
TEST /u01/app/oracle/oradata/test01_new.dbf
TEST /u01/app/oracle/oradata/prod/test02.dbf
TEST1 /u01/app/oracle/oradata/prod/test1.dbf
EXPTEST /u01/app/oracle/oradata/prod/exptest01.dbf
EXPTEST1 /u01/app/oracle/oradata/prod/exptest101.dbf
9 rows selected.
[oracle@ora11g ~]$ cp /u01/app/oracle/oradata/test01_new.dbf /u01/app/oracle/oradata/catdb/test01.dbf
[oracle@ora11g ~]$ cp /u01/app/oracle/oradata/prod/test02.dbf /u01/app/oracle/oradata/catdb/test02.dbf
--在目標庫上用impdp導入表空間
[oracle@ora11g ~]$ impdp system/oracle@catdb directory=dump dumpfile=expdp_tbs_test_%U.dmp TRANSPORT_DATAFILES='/u01/app/oracle/oradata/catdb/test01.dbf','/u01/app/oracle/oradata/catdb/test02.dbf'
Import: Release 11.2.0.4.0 - Production on Sat Jul 4 20:29:22 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********@catdb directory=dump dumpfile=expdp_tbs_test_%U.dmp TRANSPORT_DATAFILES=/u01/app/oracle/oradata/catdb/test01.dbf,/u01/app/oracle/oradata/catdb/test02.dbf
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Sat Jul 4 20:29:28 2015 elapsed 0 00:00:06
--驗證
[oracle@ora11g ~]$ sqlplus sys/oracle@catdb as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 4 20:34:55 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
CATALOGTBS
EXPTEST
EXPTEST1
TEST
9 rows selected.
SQL> conn scott/oracle@catdb;
Connected.
SQL> select table_name, tablespace_name from user_tables where tablespace_name='TEST';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T1 TEST
TEST TEST
T6 TEST
T3 TEST
T1_OLD TEST
EMPLOYEE TEST
EMP TEST
DEPT TEST
8 rows selected.
--最後記得把源庫和目標庫的test表空間設置爲read write模式
SQL> conn / as sysdba
Connected.
SQL> select name from v$database;
NAME
---------
PROD
SQL> alter tablespace test read write;
Tablespace altered.
SQL> conn sys/oracle@catdb as sysdba
Connected.
SQL> select name from v$database;
NAME
---------
CATDB
SQL> alter tablespace test read write;
Tablespace altered.
SQL>
搞定。