程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> 如何在oracle 11g 中導出空表

如何在oracle 11g 中導出空表

編輯:關於Oracle數據庫

       如何在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');

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved