下面测试来至于群 里面一位兄弟,在impdp导入数据后,sequence的值无变化,估计是由于在导入的时候对象应该存在,导致impdp忽略已经存在的对象。目前impdp只提供对表已经存在的处理方式(table_exists_action),如果是其它已经存在的对象,会报ORA-31684的提示信息,不会中断impdp导入进程,希望在以后的版本中能提供其它对象已经存在的处理方式。
 里面一位兄弟,在impdp导入数据后,sequence的值无变化,估计是由于在导入的时候对象应该存在,导致impdp忽略已经存在的对象。目前impdp只提供对表已经存在的处理方式(table_exists_action),如果是其它已经存在的对象,会报ORA-31684的提示信息,不会中断impdp导入进程,希望在以后的版本中能提供其它对象已经存在的处理方式。
1,测试环境
www.htz.pw > select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS for 64-bit Windows: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production www.htz.pw > host uname -a windows32 luoping 2.6.1 7601 i686-pc Intel unknown MinGW
2,创建测试序列
www.htz.pw > create user htz identified by oracle;
User created.
www.htz.pw > grant dba to htz;
Grant succeeded.
www.htz.pw > create sequence htz.test_sequence start with 1 increment by 1 cache 100;
Sequence created.
www.htz.pw > create table htz.htz (id1 number);
Table created.
www.htz.pw > begin
  2    for i in 1 .. 1000 loop
  3      insert into htz.htz values (htz.test_sequence.nextval);
  4    end loop;
  5  end;
  6  /
PL/SQL procedure successfully completed.
www.htz.pw > commit;
Commit complete.
www.htz.pw > select htz.test_sequence.currval from dual;
   CURRVAL
----------
      1000
3,生成序列的DDL语句
这里使用了dbms_metadata.get_ddl与使用查询dba_sequences的方式来生成创建索引的语句
3.1 get_ddl方式
www.htz.pw > set echo off lines 2000 pages 0 verify off heading off long 1024 feed off  termout  off trimout  off trimspool off
www.htz.pw > col getddl for a1024
www.htz.pw > spool d:\spool.txt
www.htz.pw > select dbms_metadata.get_ddl(upper('sequence'),
  2                               SEQUENCE_NAME,
  3                               SEQUENCE_OWNER) || ';' as getddl
  4    from dba_sequences
  5   where sequence_owner in ('HTZ', 'SYS');
可以生成如下的sequence的所有的脚本
d:\wendang\SkyDrive\rs2\sql>grep -v "^$" d:\spool.txt|grep "CREATE SEQUENCE"
   CREATE SEQUENCE  "HTZ"."TEST_SEQUENCE"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1001 CACHE 100 NOORDER  NOCYCLE ;
   CREATE SEQUENCE  "SYS"."APPLY$_DEST_OBJ_ID"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  NOORDER  NOCYCLE ;
   CREATE SEQUENCE  "SYS"."APPLY$_ERROR_HANDLER_SEQUENCE"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE ;
   CREATE SEQUENCE  "SYS"."APPLY$_SOURCE_OBJ_ID"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  NOORDER  NOCYCLE ;
   CREATE SEQUENCE  "SYS"."AQ$_ALERT_QT_N"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 41 CACHE 20 NOORDER  NOCYCLE ;
   CREATE SEQUENCE  "SYS"."AQ$_AQ$_MEM_MC_N"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  NOCYCLE ;
3.2 查询dba_sequences视图
www.htz.pw > set echo off lines 2000 pages 0 verify off heading off long 1024 feed off  termout  off trimout  off trimspool off
www.htz.pw > col getddl for a1024
www.htz.pw > spool d:\spool.txt
www.htz.pw > select 'CREATE SEQUENCE  ' || sequence_owner || '.' || sequence_name ||
  2         ' MINVALUE ' || min_value || ' MAXVALUE ' || max_value ||
  3         ' INCREMENT BY ' || increment_by || ' START WITH ' || last_number ||
  4         ' CACHE ' || cache_size || ' ' ||
  5         decode(CYCLE_FLAG, 'N', 'NOCYCLE', 'Y', 'CYCLE') || ' ' ||
  6         decode(order_flag, 'Y', 'ORDER', 'N', 'NOORDER') || ';' as getddl
  7    from dba_sequences
  8   where sequence_owner in ('HTZ', 'SYS');
CREATE SEQUENCE  HTZ.TEST_SEQUENCE MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1001 CACHE 100 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.APPLY$_DEST_OBJ_ID MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 0 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.APPLY$_ERROR_HANDLER_SEQUENCE MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.APPLY$_SOURCE_OBJ_ID MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 0 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_ALERT_QT_N MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 41 CACHE 20 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_AQ$_MEM_MC_N MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_AQ_PROP_TABLE_N MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_CHAINSEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_IOTENQTXID MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 1000 NOCYCLE NOORDER;
CREATE SEQUENCE  SYS.AQ$_KUPC$DATAPUMP_QUETAB_N MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOCYCLE NOORDER;
4,expdp生成dump文件
expdp按htz用户来导出
d:\wendang\SkyDrive\rs2\sql>expdp htz/oracle directory=test dumpfile=test.dmp nologfile Export: Release 11.2.0.3.0 - Production on Mon Oct 6 10:25:42 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "HTZ"."SYS_EXPORT_SCHEMA_01": htz/******** directory=test dumpfile=test.dmp nologfile Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 64 KB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/COMMENT Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS . . exported "HTZ"."HTZ" 12.70 KB 1000 rows Master table "HTZ"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for HTZ.SYS_EXPORT_SCHEMA_01 is: E:\TEST\TEST.DMP Job "HTZ"."SYS_EXPORT_SCHEMA_01" successfully completed at 10:26:09
4.1 生成ddl语句
生成dump文件中所有的ddl语句
d:\wendang\SkyDrive\rs2\sql>impdp htz/oracle directory=test dumpfile=test.dmp sqlfile=ddl.sql
Import: Release 11.2.0.3.0 - Production on Mon Oct 6 10:27:18 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "HTZ"."SYS_SQL_FILE_FULL_01" successfully loaded/unloaded
Starting "HTZ"."SYS_SQL_FILE_FULL_01":  htz/******** directory=test dumpfile=test.dmp sqlfile=ddl.sql
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Job "HTZ"."SYS_SQL_FILE_FULL_01" successfully completed at 10:27:20
会生成如下的DDL语句
-- CONNECT HTZ
ALTER SESSION SET EVENTS '10150 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10904 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '25475 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10407 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '10851 TRACE NAME CONTEXT FOREVER, LEVEL 1';
ALTER SESSION SET EVENTS '22830 TRACE NAME CONTEXT FOREVER, LEVEL 192 ';
-- new object type path: SCHEMA_EXPORT/USER
-- CONNECT SYSTEM
 CREATE USER "HTZ" IDENTIFIED BY VALUES 'S:CCD8F4CC7CE4D8E642530AD01DADE4B6F505B99C4EE21D8B41ACDE516F5D;F0220981DBF870F4'
      DEFAULT TABLESPACE "USERS"
      TEMPORARY TABLESPACE "TEMP";
-- new object type path: SCHEMA_EXPORT/SYSTEM_GRANT
GRANT UNLIMITED TABLESPACE TO "HTZ";
-- new object type path: SCHEMA_EXPORT/ROLE_GRANT
 GRANT "DBA" TO "HTZ";
-- new object type path: SCHEMA_EXPORT/DEFAULT_ROLE
 ALTER USER "HTZ" DEFAULT ROLE ALL;
-- new object type path: SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
-- CONNECT HTZ
BEGIN
sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'HTZ', inst_scn=>'1464993');
COMMIT;
END;
/
-- new object type path: SCHEMA_EXPORT/SEQUENCE/SEQUENCE
 CREATE SEQUENCE  "HTZ"."TEST_SEQUENCE"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1001 CACHE 100 NOORDER  NOCYCLE ;
-- new object type path: SCHEMA_EXPORT/TABLE/TABLE
CREATE TABLE "HTZ"."HTZ"
   (        "ID1" NUMBER
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
5,向HTZ表插入数据,使用序列
这里使用序列是为了与impdp导入数据库对比序列的变化
www.htz.pw > begin
  2    for i in 1 .. 1000 loop
  3      insert into htz.htz values (htz.test_sequence.nextval);
  4    end loop;
  5  end;
  6  /
PL/SQL procedure successfully completed.
www.htz.pw > select count(*) from htz.htz;
  COUNT(*)
----------
      2000
www.htz.pw > select htz.test_sequence.currval from dual;
   CURRVAL
----------
      2000
6 impdp导入数据
d:\wendang\SkyDrive\rs2\sql>impdp htz/oracle directory=test dumpfile=test.dmp table_exists_action=truncate Import: Release 11.2.0.3.0 - Production on Mon Oct 6 10:30:46 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Master table "HTZ"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "HTZ"."SYS_IMPORT_FULL_01": htz/******** directory=test dumpfile=test.dmp table_exists_action=truncate Processing object type SCHEMA_EXPORT/USER ORA-31684: Object type USER:"HTZ" already exists Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE ORA-31684: Object type SEQUENCE:"HTZ"."TEST_SEQUENCE" already exists Processing object type SCHEMA_EXPORT/TABLE/TABLE Table "HTZ"."HTZ" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA . . imported "HTZ"."HTZ" 12.70 KB 1000 rows Job "HTZ"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 10:30:48 www.htz.pw > @sequence.sql All Sequences in Database Enter Search Sequence Owner (i.e. DEPT|ALL(DEFAULT)) : htz Enter Search Sequence Name (i.e. DEPT|ALL(DEFAULT)) : SEQUENCE_OWNER SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER ------------------------------ ------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- ----------- HTZ TEST_SEQUENCE 1 1.0000E+28 1 NO NO 100 2001 这里看到last_number的值为2001,说明impdp导入数据后,序列的信息没有发生变化
7 序列的处理
7.1 利用dmp文件中DDL语句重建序列
d:\wendang\SkyDrive\rs2\sql>grep "CREATE SEQUENCE" e:\test\ddl.sql CREATE SEQUENCE "HTZ"."TEST_SEQUENCE" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1001 CACHE 100 NOORDER NOCYCLE ; 这里也可以利用之前查询出来的序列的DDL语句来重建序列
7.2 生成drop语句
[root@www.htz.pw soft]#awk '/CREATE SEQUENCE/{printf ("DROP SEQUENCE %s;\n",$3)}' ddl.sql
DROP SEQUENCE "HTZ"."TEST_SEQUENCE";
www.htz.pw > DROP SEQUENCE "HTZ"."TEST_SEQUENCE";
Sequence dropped.
不过建议是从impdp日志文件中生成序列的drop语句,那样避免删除不重复的序列
[root@www.htz.pw soft]#awk '/ORA-31684/ {print $0}' /soft/import.log |awk -F: '/SEQUENCE/ {print $3}'|awk '{printf ("DROP SEQUENCE %s;\n",$1)}'
7.3 创建序列
www.htz.pw > @e:\test\ddl1.sql Sequence created. www.htz.pw > @sequence.sql All Sequences in Database Enter Search Sequence Owner (i.e. DEPT|ALL(DEFAULT)) : htz Enter Search Sequence Name (i.e. DEPT|ALL(DEFAULT)) : SEQUENCE_OWNER SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER ------------------------------ ------------------------------ ---------- ---------- ------------ ---------- ---------- ---------- ----------- HTZ TEST_SEQUENCE 1 1.0000E+28 1 NO NO 100 1001
测试结束,这里只测试序列的情况,其它除表以后的,其它的对象都会存在同样的问题。


impdp导入数据后序列的处理:等您坐沙发呢!