oracle11_导出空表
Oracle 11无法导出空表的问题,主要源于Oracle 11g的一个特性,即当表无数据时,不分配segment以节省空间。这导致在使用如exp等传统导出工具时,空表不会被导出。针对这个问题,以下是具体的分析和解决方法:
-
问题分析
Oracle 11g的特性:Oracle 11g默认对空表不分配segment,因此在导出时,这些空表往往被忽略。
deferred_segment_creation参数:Oracle中有一个名为deferred_segment_creation的参数,其默认值为TRUE。当此参数为TRUE时,空表不分配segment。 -
解决方法
2.1 修改系统参数
设置deferred_segment_creation为FALSE:在sqlplus中执行以下命令,将deferred_segment_creation参数设置为FALSE,这样无论是空表还是非空表,都会分配segment。
SQL> alter system set deferred_segment_creation=false;
注意:该设置只对之后新增的表有效,对于之前已经存在的空表,需要采用其他方法。
2.2 为已存在的空表分配Extent
使用SQL查询空表:首先,需要找出所有的空表。可以使用以下SQL语句查询当前用户下的所有空表:
SELECT table_name FROM user_tables WHERE num_rows = 0;
为空表分配Extent:然后,可以使用以下SQL语句为这些空表分配Extent:
SELECT 'ALTER TABLE ' || table_name || ' ALLOCATE EXTENT;'
FROM user_tables
WHERE num_rows = 0;
将查询结果中的SQL语句执行,即可为这些空表分配Extent。
2.3 使用数据泵工具(expdp/impdp)
Oracle提供了expdp和impdp这两个数据泵工具,可以更灵活地导出和导入数据。可以尝试使用这些工具来导出空表。
- 注意事项
在执行任何修改系统参数或数据库结构的操作之前,请确保已经备份了数据库或相关的数据,以防万一。
修改deferred_segment_creation参数后,可能需要重新启动数据库或重新连接以使更改生效。
在为大量空表分配Extent时,可能会消耗一定的系统资源和时间,请确保系统有足够的资源来处理这些操作。

浙公网安备 33010602011771号