使用exp/imp來移動表空間到另一個資料庫中的例子

eric0435發表於2012-03-18
exp/imp還有一個TRANSPORT_TABLESPACE的功能,可以傳輸整個表空間的資料,就是把一個資料庫上的資料檔案加到另外一個資料庫中,而不是把資料匯出成Dmp檔案。用這個傳輸還有一定的限制:
關於傳輸表空間有一些規則,即:
·源資料庫和目標資料庫必須執行在相同的硬體平臺上。
·源資料庫與目標資料庫必須使用相同的字符集。
·源資料庫與目標資料庫一定要有相同大小的資料塊
·目標資料庫不能有與遷移表空間同名的表空間
·SYS的物件不能遷移
·必須傳輸自包含的物件集
·有一些物件,如物化檢視,基於函式的索引等不能被傳輸

可以用以下的方法來檢測一個表空間或一套表空間是否符合傳輸標準:
exec sys.dbms_tts.transport_set_check('tablespace_name',true);
select * from sys.transport_set_violation;
如果沒有行選擇,表示該表空間只包含表資料,可以傳輸。

其步驟:
1. 源資料庫表空間設為只讀:
alter tablespace hygeia read only;
2. 發出exp命令,使用者必須是sysdba:
C:\Documents and Settings\Administrator>exp 'sys/ocp as sysdba' transport_tables
pace=y tablespaces=hygeia file=d:\oracle\hygeia.dmp log=d:\oracle\hygeia.log

3.將匯出檔案hygeia.dmp和表空間hygeia的資料檔案hygeia01.dbf和hygeia02.dbf複製到目標機器上
4. 源資料庫表空間設為可讀寫:
alter tablespace hygeia read write;
如果在修改表空間為讀寫後再複製資料檔案和匯出的dmp檔案到目標資料庫那麼在執行imp匯入時會報
IMP-00003:遇到ORACLE錯誤19722
ORA-19722:資料檔案D:\oracle\hygeia版本錯誤
ORA-06512:在"SYS.DBMS_PLUGTS", line 2065
ORA-06512:在line 1
IMP-00000:未成功終止匯入

5.在目資料庫中建立一個hygeia使用者不用指定預設表空間
Create User insur_changde Identified By "changde"
6. 目標資料庫imp檔案:
C:\Documents and Settings\Administrator>imp 'sys/ocp as sysdba' file=d:\hygeia.d
mp  transport_tablespace=y tablespaces=hygeia datafiles=('D:\oracle\product\10.2
.0\oradata\ocp\HYGEIA01.DBF','D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF'
)
7.修改目標資料庫中insur_changde使用者的預設表空間為hygeia
Alter User insur_changde Default Tablespace hygeia
8. 目標資料庫表hygeia空間設為可讀寫:
alter tablespace users read write;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-718886/,如需轉載,請註明出處,否則將追究法律責任。

相關文章