oracle 傳輸表空間

 

 

傳輸表空間:注意事項:要傳輸的表空間只讀,字符集一致,endian_format 格式一致 ,元數據在system表空間。表空間的自包含,要傳輸的表空間裏的對象不能依賴於其他表空間的對象。

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章