如何在oracle 11g 中匯出空表

來源:互聯網
上載者:User

如何在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
------------------------------ ----------
LOCATIONS                              23
EMP_1                                   0
PART_TIME_EMPLOYEES                     0
TEST3                                   5
TEST1                                   5
TEST                                    5
PC_WELL_TEST                            2
PC_ALARM_SORT_TEST                      1
MVIEW_PC_WELL_TEST                      2
MV_CAPABILITIES_TABLE                  14
T                                       0
TEST2
SYS_EXPORT_SCHEMA_01
SYS_EXPORT_SCHEMA_02
HOURLY_EMPLOYEES                        0
COUNTRIES                              25
ADMIN_EXT_EMPLOYEES
ADMIN_WORK_AREA
EMPLOYEES                             107
DEPARTMENTS                            27
DIGITS                                  2
REGIONS                                 4
JOB_HISTORY                            10
JOBS                                   19

24 rows selected.


為什麼這裡的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資料庫中空表來的方便多了。
當然對那些要從11g導低版本,還是可以的採用這個辦法,但是要注意,要麼對所有相關的表進行分析系,然後使用上述那個批量指令碼。或者不分析表,直接手工用ue編輯分配extent的命令。

SQL> select TABLE_NAME,NUM_ROWS from user_tables where NUM_ROWS=0; 

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
PART_TIME_EMPLOYEES                     0
EMP_1                                   0
T                                       0
HOURLY_EMPLOYEES                        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');

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.