土嘎嘎的粉丝们大家好:如何在oracle 11g 中导出空表
由于oracle 11g的 延迟段创建的新特性,导致在没有数据插入时,oracle是不会分配数据段的,进而导致exp 是不能导出11g数据库的空表的.
当然采用expdp就不存在这个问题了.
expdp hr/hr schemas=hr dumpfile=expdp.dmp directory=dbtest
conn hr/hr
select TABLE_NAME,NUM_ROWS from user_tables;
TABLE_NAME NUM_ROWS
------------------------------ ----------
EMP_1 0
PART_TIME_EMPLOYEES 0
PC_ALARM_SORT_TEST 1
T 0
SYS_EXPORT_SCHEMA_01
HOURLY_EMPLOYEES 0
ADMIN_EXT_EMPLOYEES
ADMIN_WORK_AREA
JOB_HISTORY 10
为什么这里的num_rows为空呢?
那是因为表刚建立,数据字典中还没有这个表相关的统计信息呢.
SQL select 'alter table '||table_name||' allocate extent;' from user_tables where
num_rows=0
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table PART_TIME_EMPLOYEES allocate extent;
alter table EMP_1 allocate extent;
alter table T allocate extent;
alter table HOURLY_EMPLOYEES allocate extent;
所以对于网上一些在oracle11g上先使用手工分配extent 再使用exp来导数据库,在实际上效果不怎么地,反而是多次一举直接使用expdp来导oracle 11g数据库中空表来的方便多了.
SQL select TABLE_NAME,NUM_ROWS from user_tables where NUM_ROWS=0;
补充信息:
USER_TABLES describes the relational tables owned by the current user. Its columns (except
for OWNER) are the same as those in ALL_TABLES. To gather statistics for this view, use the
DBMS_STATS package.
收集表的统计信息:
analyze table xxx compute statistics;
or
exec dbma_stats.gather_table_stats('USER', 'TABLE');
MSSQL不知道
oracle在plsql里执行如下代码:
DECLARE
v_table tabs.table_name%TYPE;
v_q NUMBER;
CURSOR c1 IS
SELECT table_name tn FROM tabs;
TYPE c IS REF CURSOR;
BEGIN
DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');
FOR r1 IN c1 LOOP
v_table :=r1.tn;
v_sql :='SELECT COUNT(*) q FROM '||v_table;
LOOP
IF v_q=0 THEN
DBMS_OUTPUT.PUT_LINE(v_table);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');
END;
然后点output,显示的就是空表
之所以不能导出空表,是因为Oracle默认不会为空表分配segment,应对方法有三个
①.、把deferred_segment_creation这个参数设置为false,这样新创建任何表都会自动分配segment,这样用逻辑导出就可以导出空表了,但是注意,在更改这个设置之前的空表还是不会分配segment的
sqlcreate table TEST (XXX xxx,YYY yyy) segment creation immediate;
sqlalter table TEST allocate extent;
希望能帮到题主!
以上就是土嘎嘎小编为大家整理的oracle如何处理空表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!