关于partition table import的问题

作者: admin 分类: Oracle,公众号存档            0 次浏览 发布时间: 2013-05-24 13:46

今天有个同事想把一个一部分数据导入到测试库上做测试,我给他提供了几个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 技术博客存档(2013 年),原文链接:https://blog.itpub.net/23718752/viewspace-761936/

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注