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>