問題描述:如何將oracle 10g中的資料庫物件遷移到9i中.這個10g和9i的伺服器分別搭建在區域網的兩個機器上,可以相互訪問.
問題分析:在網上查了一些資料,表明要想將10g匯出的dmp檔案匯入到9i中,是不可實現的.只能實現9i往10g中導.如果想要把10g中的資料匯入到9i中,可以先到9i那臺伺服器上配置一個tnsnames.ora串,用於訪問10g資料庫,之後在9i伺服器中用9i客戶端提供的exp命令實現匯出,再用imp命令實現匯入.
10g匯出的dmp往9i中匯入,可能會報以下錯誤.
在安裝有9i客戶端執行匯入命令時會報:
Import started on 2013-3-13 14:17:13
E:\oracle\ora92\bin\IMP.EXE log=C:\DOCUME~1\wangzh\LOCALS~1\Temp\plsimp.log file=D:\yusj\dqjz\dqjz20130308.dmp userid=dqjz/dqjz@ORCL buffer=30720 commit=no full=yes grants=yes ignore=yes indexes=yes rows=yes show=no constraints=yes
連線到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
IMP-00010: 不是有效的匯出檔案,標題驗證失敗
IMP-00000: 未成功終止匯入
Import finished on 2013-3-13 14:17:13
在安裝有10g客戶端執行匯入命令時會報:
Import started on 2013-3-13 上午 11:13:02
D:\oracle\product\10.2.0\db_1\bin\imp.exe log=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\plsimp.log file=C:\dqjz20130308.dmp userid=dqjz/dqjz@ORCL_232 buffer=30720 commit=no full=yes grants=yes ignore=yes indexes=yes rows=yes show=no constraints=yes
IMP-00058: 遇到 ORACLE 錯誤 6550
ORA-06550: 第 1 行, 第 33 列:
PLS-00302: 必須說明 'SET_NO_OUTLINES' 元件
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
IMP-00000: 未成功終止匯入
Import finished on 2013-3-13 上午 11:13:03
問題解決:
1. 在安裝有9i客戶端的機器中配置tnsnames.ora,保證可以正常連線到10g資料庫.
2. 在安裝有9i客戶端的機器中執行exp命令匯出dmp檔案之前,需要解決一個問題,那就是對BLOB的支援,如果要匯出的表中含有BLOB欄位,那麼在執行exp命令的時候會報EXP-00003錯誤,解決方法如下:需要先連線到10資料庫,用sys使用者登入,找到exu9tne檢視(view),備份出來.再把執行下面SQL語句:
CREATE OR REPLACE VIEW SYS.EXU9TNE
(tsno, fileno, blockno, length)
AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1
UNION ALL
SELECT "TSNO","FILENO","BLOCKNO","LENGTH" FROM SYS.EXU9TNEB;
注意,在匯出完資料之後,一個要把這個view恢復到初始值.
我本地的初始值為:
CREATE OR REPLACE VIEW SYS.EXU9TNE
(tsno, fileno, blockno, length)
AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1;
3. 在安裝有9i客戶端的機器中執行imp命令,完成匯入操作(注意在匯入之前一定要先建立相應的表空間,使用者等).