先来看一下例子。我们创建一张表T2。
尝试使用exp将此表导出。
报错说这张表并不存在。这是让很多客户费解的地方,在测试库中创建应用的表结构,然后再将表结构exp到产品库中去,这是很多客户常用的方法,但是在11gR2中如果这些表是新创建的没有插入过任何一条记录,那么将会碰到上面这样的错误。
原因在于11gR2中的新功能 – Deferred Segment Creation(延迟段创建),默认情况下这个功能是启用的。
SQL>
延迟段创建的含义是当此新创建一个可能会有Segment的对象时(比如表、索引、物化视图等),如果这个对象中还没有任何记录需要消耗一个Extent,那么将不会在创建对象时自动创建Segment,这样做的好处无疑是在创建对象时大大提高了速度。
对于上例中的T2表,我们在创建结束就立刻检查DBA_SEGMENTS视图,会发现没有任何记录。
而对于exp程序而言,当仅仅存在Object的定义而没有相应的Segment时,就会报出EXP-00011对象不存在的错误。
解决方法就很简单了,以下方法任选其一。
1. 设置DEFERRED_SEGMENT_CREATION为FALSE,这样创建对象时就会自动创建Segment
2. 在创建对象时,明确指定立刻创建Segment
create table t2 (n number) SEGMENT CREATION IMMEDIATE;
3. 使用expdp替代exp(Datapump本身就是Oracle10g以后的推荐工具)
- SQL> create table t2 (n number);
- Table created.
- SQL> desc t2
- Name Null? Type
- ----------------------------------------- -------- ----------------------------
- N NUMBER
尝试使用exp将此表导出。
- D:\Temp>exp kamus/oracle tables=t2
- Export: Release 11.2.0.1.0 - Production on Fri Apr 16 18:11:51 2010
- Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
- Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
- With the Partitioning, Oracle Label Security, Data Mining and Real Application Testing opt
- ions
- Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
- About to export specified tables via Conventional Path ...
- EXP-00011: KAMUS.T2 does not exist
- Export terminated successfully with warnings.
报错说这张表并不存在。这是让很多客户费解的地方,在测试库中创建应用的表结构,然后再将表结构exp到产品库中去,这是很多客户常用的方法,但是在11gR2中如果这些表是新创建的没有插入过任何一条记录,那么将会碰到上面这样的错误。
原因在于11gR2中的新功能 – Deferred Segment Creation(延迟段创建),默认情况下这个功能是启用的。
- SQL> show parameter DEFERRED_SEGMENT_CREATION
- NAME TYPE VALUE
- ------------------------------------ -------------------- --------------------
- deferred_segment_creation boolean TRUE
延迟段创建的含义是当此新创建一个可能会有Segment的对象时(比如表、索引、物化视图等),如果这个对象中还没有任何记录需要消耗一个Extent,那么将不会在创建对象时自动创建Segment,这样做的好处无疑是在创建对象时大大提高了速度。
对于上例中的T2表,我们在创建结束就立刻检查DBA_SEGMENTS视图,会发现没有任何记录。
- SQL> select segment_name from user_segments where segment_name='T2';
- rows selected
而对于exp程序而言,当仅仅存在Object的定义而没有相应的Segment时,就会报出EXP-00011对象不存在的错误。
解决方法就很简单了,以下方法任选其一。
1. 设置DEFERRED_SEGMENT_CREATION为FALSE,这样创建对象时就会自动创建Segment
2. 在创建对象时,明确指定立刻创建Segment
create table t2 (n number) SEGMENT CREATION IMMEDIATE;
3. 使用expdp替代exp(Datapump本身就是Oracle10g以后的推荐工具)
- D:\Temp>expdp kamus/oracle tables=t2
- Export: Release 11.2.0.1.0 - Production on Fri Apr 16 18:14:41 2010
- Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
- Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
- With the Partitioning, Oracle Label Security, Data Mining and Real Application Testing opt
- ions
- Starting "KAMUS"."SYS_EXPORT_TABLE_01": kamus/******** tables=t2
- Estimate in progress using BLOCKS method...
- Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
- Total estimation using BLOCKS method: 0 KB
- Processing object type TABLE_EXPORT/TABLE/TABLE
- . . exported "KAMUS"."T2" 0 KB 0 rows
- Master table "KAMUS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
- ******************************************************************************
- Dump file set for KAMUS.SYS_EXPORT_TABLE_01 is:
- D:\ORACLE\ADMIN\ORCL\DPDUMP\EXPDAT.DMP
- Job "KAMUS"."SYS_EXPORT_TABLE_01" successfully completed at 18:15:10