Oracle中的傳輸資料表空間功能, 用來將一個執行個體中的資料表空間和資料檔案移到另一個執行個體中. 執行起來方便, 快捷.
但是要使用該功能有一些限制:
需要兩個平台一致.
必須有相同的字元集和多語言字元集.
要求兩個執行個體的db block size 大小相等, 如不相等則需要相容9.0以上等.
具體步驟如下:
SQL> alter tablespace example read only;
Tablespace altered
SQL> --example資料表空間實驗
SQL> connect sys/system as sysdba
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as SYS
SQL> execute dbms_tts.transport_set_check('EXAMPLE',TRUE);
PL/SQL procedure successfully completed
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
--------------------------------------------------------------------------------
SQL> --如果上面的查詢可以查到記錄,則說明不適合資料表空間傳輸條件, 需要根據實際
SQL> --情況將對象移到別的資料表空間;
SQL>
C:/Documents and Settings/hawk>exp userid='sys/system as sysdba' transport_table
space=y tablespaces=EXAMPLE file ='d:/a.dmp';
Export: Release 10.1.0.2.0 - Production on 星期三 7月 12 14:46:27 2006
Copyright (c) 1982, 2004, Oracle. All rights reserved.
串連到: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
已匯出 ZHS16GBK 字元集和 AL16UTF16 NCHAR 字元集
注: 將不匯出表資料 (行)
即將匯出可傳輸的資料表空間中繼資料...
對於資料表空間 EXAMPLE...
. 正在匯出簇定義
. 正在匯出表定義
. . 正在匯出表 REGIONS
. . 正在匯出表 COUNTRIES
. . 正在匯出表 LOCATIONS
. . 正在匯出表 DEPARTMENTS
. . 正在匯出表 JOBS
. . 正在匯出表 EMPLOYEES
. . 正在匯出表 JOB_HISTORY
. . 正在匯出表 CUSTOMERS
. . 正在匯出表 WAREHOUSES
. . 正在匯出表 ORDER_ITEMS
. . 正在匯出表 ORDERS
. . 正在匯出表 INVENTORIES
. . 正在匯出表 PRODUCT_INFORMATION
. . 正在匯出表 PRODUCT_DESCRIPTIONS
. . 正在匯出表 PROMOTIONS
. . 正在匯出表 ORDERS_QUEUETABLE
. . 正在匯出表 AQ$_ORDERS_QUEUETABLE_S
. . 正在匯出表 AQ$_ORDERS_QUEUETABLE_T
. . 正在匯出表 AQ$_ORDERS_QUEUETABLE_H
. . 正在匯出表 AQ$_ORDERS_QUEUETABLE_G
. . 正在匯出表 AQ$_ORDERS_QUEUETABLE_I
. . 正在匯出表 STREAMS_QUEUE_TABLE
. . 正在匯出表 AQ$_STREAMS_QUEUE_TABLE_S
. . 正在匯出表 AQ$_STREAMS_QUEUE_TABLE_T
. . 正在匯出表 AQ$_STREAMS_QUEUE_TABLE_H
. . 正在匯出表 AQ$_STREAMS_QUEUE_TABLE_G
. . 正在匯出表 AQ$_STREAMS_QUEUE_TABLE_I
. . 正在匯出表 TIMES
. . 正在匯出表 PRODUCTS
. . 正在匯出表 CHANNELS
. . 正在匯出表 PROMOTIONS
. . 正在匯出表 CUSTOMERS
. . 正在匯出表 COUNTRIES
. . 正在匯出表 SUPPLEMENTARY_DEMOGRAPHICS
. . 正在匯出表 CAL_MONTH_SALES_MV
. . 正在匯出表 FWEEK_PSCAT_SALES_MV
. . 正在匯出表 SALES
. . 正在匯出表 COSTS
. . 正在匯出表 MVIEW$_EXCEPTIONS
. . 正在匯出表 ONLINE_MEDIA
. . 正在匯出表 PRINT_MEDIA
. 正在匯出參考完整性約束條件
. 正在匯出觸發器
. 結束匯出可傳輸的資料表空間中繼資料
成功終止匯出, 沒有出現警告。
C:/Documents and Settings/hawk>
C:/Documents and Settings/hawk>
C:/Documents and Settings/hawk>copy D:/system/ora10g/oradata/ora10g/EXAMPLE01.DB
F d:/EXAMPLE01.DBF
已複製 1 個檔案。
--平台轉換
當需要在不同的平台上傳輸資料表空間時, 需要執行平台轉換.
RMAN> convert tablespace example
2> to platform 'Microsoft Windows IA (32-bit)'
3> format 'd:/d1';
啟動 backup 於 12-7月 -06
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案 fno=00005 name=D:/SYSTEM/ORA10G/ORADATA/ORA10G/EXAMPLE01.DBF
已轉換的資料檔案 = D:/D1
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:25
完成 backup 於 12-7月 -06
RMAN> convert datafile 'd:/d1' db_file_name_convert 'd:/d1' 'e:/d.dbf'
2> ;
啟動 backup 於 12-7月 -06
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動資料檔案轉換
輸出檔案名=D:/D1
已轉換的資料檔案 = E:/D.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:37
完成 backup 於 12-7月 -06
RMAN>
--在不同的平台上進行傳輸資料表空間, 則使用上面的e:/d.dbf 檔案.
C:/Documents and Settings/hawk>imp userid='sys/system as sysdba' file='d:/a.dmp'
transport_tablespace=y datafiles='d:/EXAMPLE01.DBF'
Import: Release 10.1.0.2.0 - Production on 星期三 7月 12 15:00:31 2006
Copyright (c) 1982, 2004, Oracle. All rights reserved.
串連到: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
經由常規路徑由 EXPORT:V10.01.00 建立的匯出檔案
即將匯入可傳輸的資料表空間中繼資料...
已經完成 ZHS16GBK 字元集和 AL16UTF16 NCHAR 字元集中的匯入
. 正在將 SYS 的對象匯入到 SYS
IMP-00017: 由於 ORACLE 錯誤 29349, 以下語句失敗:
"BEGIN sys.dbms_plugts.beginImpTablespace('EXAMPLE',6,'SYS',1,0,8192,1,438"
"998,1,2147483645,8,128,8,0,1,0,8,3914340468,1,33,320552,NULL,0,334814,NULL,"
"NULL); END;"
IMP-00003: 遇到 ORACLE 錯誤 29349
ORA-29349: 資料表空間 'EXAMPLE' 已存在
ORA-06512: 在 "SYS.DBMS_PLUGTS", line 1728
ORA-06512: 在 line 1
IMP-00000: 未成功終止匯入
--因為測試是在同一個執行個體中進行,所以出現上面的資料表空間已存在錯誤.
SQL> alter tablespace example read write;
Tablespace altered
C:/Documents and Settings/hawk>