|
select * fromV$transportable_Platform --ENDIAN_FORMAT 格式要一致
先查看兩個平臺的endian_format
SQL> conn sys/oracle@orclutf as sysdba
已連接。
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROMV$TRANSPORTABLE_PLATFORM tp, V$
ATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME
-------------------------------------------------------------------------------
ENDIAN_FORMAT
----------------------------
Microsoft Windows IA (32-bit)
Little
SQL> conn sys/oracle@ocp as sysdba
已連接。
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROMV$TRANSPORTABLE_PLATFORM tp, V$D
ATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME
--------------------------------------------------------------------------------
ENDIAN_FORMAT
----------------------------
Linux 64-bit for AMD
Little
創建測試環境
1、建立表空間
sys@OCP> CREATE TABLESPACE test_transport
2 datafile'/u01/app/oracle/oradata/OCP/datafile/test_transport.dbf' size 1M autoextend onnext 1M;
2、創建用戶
CREATE USER test_user IDENTIFIED BY test_user
DEFAULT TABLESPACE test_transport TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON test_transport
/
3、授權用戶
sys@OCP> GRANT CREATE SESSION,CREATE TABLE TO test_user;
4、創建表
1 CREATE TABLE test_tab(
2 id NUMBER,
3 descriprion VARCHAR2(30),
4 CONSTRAINT pk_test_tab PRIMARY KEY (id)
5* )
test_user@OCP> /
5、插入數據
1 INSERT /*+ APPEND */ INTO test_tab (id,descriprion)
2 SELECT level,
3 'Description for ' || level
4 FROM dual
5* CONNECT BY level <=10000
test_user@OCP> /
test_user@OCP> commit;
6、源數據庫端檢查:
檢查表空間裏的對象是否自包含
idle> conn / as sysdba
Connected.
sys@OCP> EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK(ts_list => 'TEST_TRANSPORT', incl_constraints =>TRUE);
PL/SQL procedure successfully completed.
7、查詢是否有違反
sys@OCP> SELECT * FROM transport_set_violations;
no rows selected
8、檢查成功後,切換表空間爲只讀
sys@OCP> ALTER TABLESPACE test_transport READ ONLY;
Tablespace altered.
9、先進行文件格式轉換再導出表空間的源數據,源數據在system表空間上,使用expdp必須創建目錄對象
RMAN> convert tablespace test_transport to platform 'MicrosoftWindows IA (32-bit)' format '/home/oracle/tbs_transport.dbf' ;
sys@OCP> CREATE OR REPLACE DIRECTORY dir1 as'/u01/app/oracle/ocp/directories/dir1';
Directory created.
sys@OCP> GRANT READ,WRITE ON DIRECTORY dir1 to system;
現在開始導出表空間的源數據
[oracle@station10 dir1]$ expdp userid=system/oracle directory=dir1transport_tablespaces=test_transport dumpfile=test_transport1.dmplogfile=test_transport.log
Export: Release 10.2.0.1.0 - 64bit Production on Saturday, 03August, 2013 14:59:49
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": userid=system/******** directory=dir1transport_tablespaces=test_transport dumpfile=test_transport1.dmplogfile=test_transport.log
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table"SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfullyloaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/u01/app/oracle/ocp/directories/dir1/test_transport.dmp
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"successfully completed at 15:00:18
如果你使用的是exp那麼就不用目錄對象了直接使用下面語句就可以
exp userid='system/oracle as sysdba' transport_tablespace=y tablespaces=test_transport file=test_data.dmp log=test_data_exp.log
10、目標數據庫:
因爲要傳輸的表空間屬於test_user用戶所有所以,目標數據庫必須也要有存在一個叫做test_user的用戶。
QL> conn sys/oracle@orclutf
SQL> conn sys/oracle@orclutf as sysdba
SQL> CRATE USER test_user identified by test_user;
SQL> CREATE USER test_user identified by test_user;
SQL> GRANT CREATE SESSION, CREATE TABLE TO test_user;
11、創建目錄對象授權,將文件傳到目標數據庫的目錄對象下
SQL> CREATE OR REPLACE DIRECTORY dir1 as 'c:\ dir2';
目錄已創建。
SQL> GRANT READ,WRITE ON directory dir1 to system;
授權成功。
11開始導入表空間
導入成功後檢查數據
SQL> conn test_user/test_user@orclutf
已連接。
SQL> select count(*) from test_tab;
COUNT(*)
----------
10000
12、將目標數據庫和源數據庫的表空間改爲讀寫
查詢表空間是否是導入的可以查看dba_tablespaces plugged_in 字段
SQL> select tablespace_name,plugged_in from dba_tablespaces;
TABLESPACE_NAME PLUGGE
------------------------------------------------------------ ------
SYSTEM NO
UNDOTBS1 NO
SYSAUX NO
TEMP NO
USERS NO
TEST_TRANSPORT YES
SQL> conn sys/oracle@orclutf as sysdba
已連接。
SQL> select status from dba_tablespaces;
STATUS
------------------
ONLINE
ONLINE
ONLINE
ONLINE
ONLINE
READ ONLY
已選擇6行。
SQL> alter tablespace test_transport read write;
表空間已更改。
sys@OCP> alter tablespace test_transport read write;
Tablespace altered.