我有一个在Linux(x64)上运行的Oracle 11g(11.2.0.1)数据库。 在数据库中,我有一个模式和33个表(全部在同一个表空间)。 当我通过sqlpluslogin时,我可以列出所有的表格
SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';
但是,当我导出表空间使用
exp ... BUFFER=65536 FULL=N COMPRESS=N CONSISTENT=Y TABLESPACES=... FILE=...
那么它只能输出33个表中的24个。 我试图通过导出缺less的表
exp ... TABLES=<missing_table> ...
但后来我得到一个错误:
EXP-00011: <schema>.<missing_table> does not exist
我怎么知道这里有什么问题?
我怎样才能导出所有的表格?
更新:
在遵循Gary的build议之后,我发现了导出和缺失表格之间的以下区别。 导出表的DDL:
CREATE TABLE "MY_SCHEMA"."EXPORTED_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
现在,一个不导出的表的DDL:
CREATE TABLE "MY_SCHEMA"."MISSING_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
上述DDL由企业pipe理器生成。 用sqlplus创build的那些没有包含缺less表的STORAGE部分 。
我发现,当我重新组织它们并将STORAGE INITIAL值设置为64K时,这些表就会被导出。
问题解决了。 (希望 ;))
为其中一个工作的表做一个SELECT DBMS_METADATA.GET_DDL('TABLE','yourTableName') ,一个不工作。 然后玩点差异。 (请注意yourTableName区分大小写。)
可能是像BLOB / CLOB或分区在不同的表空间,依赖于另一个模式,不被导出所拥有的types…
从Oracle 11gR2(11.2.0.1)开始,有一个新function:延迟段创build:发送的表的创build被推迟到第一行被插入。 这是因为dba_segments中没有列出空表,并且没有被exp实用程序导出。
最简单的解决scheme是使用expdp工具。
如果必须使用exp实用程序,则必须对所有空表运行以下命令:
ALTER TABLE tablename ALLOCATE EXTENTS
表存在于数据库中,但除非您为此表分配一个范围,否则不能导出它。
经过:00:00:00.04 14:44:54 PIMUSER @ mdmqa> alter table RECORDAPPROVALHISTORY分配盘区;
我得到类似的错误,并认为它也与同义词有关。
我可以描述数据库中的特定表并从中select(零行)。 我也可以从公共同义词中描述select
但是当我导出该表时,我得到了011不存在的错误,名称或synoynm。 当我插入一行(即解决了一个问题),我可以通过表名输出,但不能通过同义词。
当然,这一切在11.1工作
首先我听说过expdp。 将看看这个
是您导出的相同表空间中的表? 检查这个查询:
SELECT table_name, tablespace_name FROM user_tables
这是一个新的Oracle11function。 只在企业版中。 空表将不会被导出。
是的,表格存在于同一个模式中。 一些没有导出的表包含数据,只有less数几个表的数量是零,其余的都有数据。
问候
分配范围起作用。 您可以使用以下语句查找表格:
select 'alter table '||table_Name||' allocate extent;' from user_Tables where temporary='N' and table_name not in (select segment_name from user_segments)