Oracle11g解决空表导出问题:exp与deferred_segment_creation

需积分: 44 4 下载量 116 浏览量 更新于2024-09-11 收藏 41KB PDF 举报
"Oracle11g使用exp导出空表以解决备份中空表缺失的问题。这涉及到Oracle11g数据库的默认配置和空表的segment分配策略。" 在Oracle11g数据库中,遇到使用exp工具导出数据时空表无法被导出的情况,主要是由于两个原因: 1. Oracle11g默认情况下不会为空表分配segment。Segment是Oracle数据库中存储表和索引数据的基本逻辑单元,当表没有数据时,系统为了节省空间,可能不会立即创建对应的segment。 2. 另一个原因是`deferred_segment_creation`参数默认设置为TRUE。这个参数控制是否在创建表时立即分配segment,如果设置为TRUE,Oracle会延迟segment的创建,直到有数据插入到表中。 为了解决这个问题,有以下两种方法: **方法一:修改系统参数** 可以通过执行SQL命令来临时更改`deferred_segment_creation`参数的值,使其为FALSE,这样新创建的空表就会分配segment。具体操作如下: ```sql SQL> alter system set deferred_segment_creation=false; ``` 然后检查参数设置是否生效: ```sql SQL> show parameter deferred_segment_creation; ``` 请注意,这种方法仅对设置之后创建的空表有效,对于已经存在的空表,需要采取其他措施。 **方法二:手动分配Extent** 对于已经存在的空表,可以使用`ALTER TABLE`语句结合`ALLOCATE EXTENT`命令来手动为这些空表分配Extent。Extent是segment内的物理存储单元。例如,你可以执行以下命令: ```sql alter table aTableName allocate extent; ``` `ALLOCATE EXTENT`命令有不同的选项,如指定大小(SIZE integer[K|M])、数据文件名(DATAFILE 'filename')或实例号(INSTANCE integer)。你需要根据实际需求选择合适的语法。 这两种方法可以帮助你在Oracle11g环境中成功导出包含空表的数据。在进行备份和恢复操作时,确保所有需要的表,无论是否为空,都能正确地被导出和导入,这对于完整的数据库备份至关重要。在完成导出后,如果你不希望空表占用额外的空间,可以考虑将`deferred_segment_creation`参数恢复为默认值TRUE。