關於partition table import的問題

jeanron100發表於2013-05-24

今天有個同事想把一個一部分資料匯入到測試庫上做測試,我給他提供了幾個dump檔案,但是在匯入的時候,碰到了一些問題,總結如下。

scenario 1:一部分表在schema下已經存在

匯入資料貌似還算正常,但是在匯入後報出了一系列錯誤,如下

IMP-00017: following statement failed with ORACLE error 20000:
 "DECLARE  SREC DBMS_STATS.STATREC; BEGIN SREC.MINVAL := 'C20444'; SREC.MAXVA"
 "L := 'C3394C2D'; SREC.EAVS := 0; SREC.CHVALS := NULL; SREC.NOVALS := DBMS_S"
 "TATS.NUMARRAY(367,567544); SREC.BKVALS := DBMS_STATS.NUMARRAY(0,1); SREC.EP"
 "C := 2; DBMS_STATS.SET_COLUMN_STATS(NULL,'"AGREEMENT_PARAM"','"OFFER_IN"
 "STANCE_ID"','"AMAXVALUE"',NULL,NULL,30643,.0000326338804947296,386120,srec,"
 "3,6); END;"
IMP-00003: ORACLE error 20000 encountered
ORA-20000: AMAXVALUE invalid partition name
ORA-06512: at "SYS.DBMS_STATS", line 1790
ORA-06512: at "SYS.DBMS_STATS", line 5427
ORA-06512: at line 1
Import terminated successfully with warnings.

根據提示,好像是partition的命名規則不同,查詢了一下,也確實,源庫上有10多個partition,但這個測試庫只有1個max partition,而且命名也不一樣。和同事商量了下,先把max partition的名字改一下,匯入之後再改回來,重新嘗試,還是報如上的錯誤。

仔細看了看報錯,發現時在調dbms_stats, 才明白是去取statistic的資訊,然後我在imp的時候多加了一個引數 statistics=none,問題解決。

. importing PRDAPPO's objects into JEANRON
. importing PRDAPPO's objects into JEANRON
. . importing partition     "AGREEMENT_PARAM":"A0"          0 rows imported
. . importing partition     "AGREEMENT_PARAM":"A1"       6493 rows imported
. . importing partition     "AGREEMENT_PARAM":"A2"       6355 rows imported
. . importing partition     "AGREEMENT_PARAM":"A3"       6663 rows imported
. . importing partition     "AGREEMENT_PARAM":"A4"       6695 rows imported
. . importing partition     "AGREEMENT_PARAM":"A5"       6658 rows imported
. . importing partition     "AGREEMENT_PARAM":"A6"       6869 rows imported
. . importing partition     "AGREEMENT_PARAM":"A7"       6782 rows imported
. . importing partition     "AGREEMENT_PARAM":"A8"       6811 rows imported
. . importing partition     "AGREEMENT_PARAM":"A9"       6817 rows imported
. . importing partition "AGREEMENT_PARAM":"AMAXVALUE"     597659 rows imported
Import terminated successfully without warnings.

scenario2: 一部分表在該schema上不存在

由於兩個庫的表空間不同,在匯入的時候報出了tablespace 的問題,

由於資料庫是遠端服務,沒有直接的許可權去操作遠端的庫,而且隨意建表空間也會被監控,於是使用dbms_metadata從源庫上生成了ddl語句,

指令碼如下:

SET SERVEROUTPUT ON;
SET LINESIZE 500;
SET FEEDBACK OFF;
SET LONG 99999999     ;  
SET PAGESIZE 1000 ; 
set head off;
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'TABLESPACE',true);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SEGMENT_ATTRIBUTES',false);
EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'REF_CONSTRAINTS',false); select DBMS_METADATA.GET_DDL('TABLE','AGREEMENT_PARAM','PRDAPPO')from dual;

匯出後,把tablespace改一下,執行就可以了,然後直接匯入。

 

 

 

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

相關文章