网站首页 > 文章中心 > 其它

oracle如何处理空表

作者:小编 更新时间:2023-10-18 07:35:19 浏览量:372人看过

oracle11g导出空表怎样设置

土嘎嘎的粉丝们大家好:如何在oracle 11g 中导出空表

由于oracle 11g的 延迟段创建的新特性,导致在没有数据插入时,oracle是不会分配数据段的,进而导致exp 是不能导出11g数据库的空表的.

当然采用expdp就不存在这个问题了.

oracle如何处理空表-图1

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');

ORACLE查询空表

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,显示的就是空表

如何在oracle11g中导出空表

之所以不能导出空表,是因为Oracle默认不会为空表分配segment,应对方法有三个

①.、把deferred_segment_creation这个参数设置为false,这样新创建任何表都会自动分配segment,这样用逻辑导出就可以导出空表了,但是注意,在更改这个设置之前的空表还是不会分配segment的

sqlcreate table TEST (XXX xxx,YYY yyy) segment creation immediate;

sqlalter table TEST allocate extent;

希望能帮到题主!

以上就是土嘎嘎小编为大家整理的oracle如何处理空表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章