Oracle 11gR2导出空表问题与解决方案

需积分: 1 0 下载量 2 浏览量 更新于2024-09-15 收藏 1KB TXT 举报
"导出空表解决方法主要涉及到Oracle数据库11gR2的一个新特性——Deferred Segment Creation(延迟段创建)。此特性在默认情况下是启用的,这可能导致在某些操作中导出空表的问题。以下是一些解决这个问题的步骤和相关知识点。" 在Oracle 11gR2中, Deferred Segment Creation 是一个优化策略,目的是为了提高空间管理的效率。当创建表时,如果该表尚未插入任何数据,系统不会立即为表分配物理空间,而是等到首次插入数据时再进行分配。这在某些场景下可以避免浪费存储空间。然而,这也可能引发问题,比如在使用expdp(数据泵导出)工具时,如果表为空,可能会导致这些表在导出文件中也显示为空。 要解决导出空表的问题,首先需要检查当前数据库的 Deferred Segment Creation 参数设置。你可以通过执行 SQL 命令 `show parameter deferred_segment_creation` 来查看该参数的状态。如果其值为 TRUE,则表示该功能是启用的。 要禁用这个功能,可以使用 `ALTER SYSTEM SET DEFERRED_SEGMENT_CREATION=FALSE;` 这个命令。这样,即使表为空,也会在创建时立即分配空间,从而确保在expdp导出过程中能正确处理这些空表。 如果你的数据库字符集是ZHS16GBK,并且在修改字符集过程中遇到问题,例如在尝试执行 `ALTER DATABASE CHARACTER SET ZHS16GBK` 时收到错误,可能是因为还有其他活动会话。在这种情况下,需要按照特定步骤进行操作,包括: 1. 登录到sqlplus作为sysdba用户:`sqlplus /nolog`,然后 `conn /as sysdba` 2. 关闭数据库:`SHUTDOWN IMMEDIATE` 3. 以挂起模式启动数据库:`STARTUP MOUNT` 4. 使数据库进入受限模式:`ALTER SYSTEM ENABLE RESTRICTED SESSION` 5. 将作业队列进程设为0:`ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0` 6. 将AQ_TM_PROCESSES设为0:`ALTER SYSTEM SET AQ_TM_PROCESSES=0` 7. 打开数据库并更改字符集:`ALTER DATABASE OPEN` 8. 在存在其他活动会话的情况下,可以使用 `ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK` 先以内部使用模式更改字符集 9. 最后,关闭并重新启动数据库:`SHUTDOWN IMMEDIATE`,然后 `STARTUP` 以上步骤可帮助你解决11gR2中的 Deferred Segment Creation 特性导致的导出空表问题,以及在更改字符集时遇到的困难。确保在进行任何数据库配置更改时都有适当的备份,并遵循最佳实践,以防止数据丢失或系统不稳定。