萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> 如何在oracle 11g 中導出空表

如何在oracle 11g 中導出空表

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

copyright © 萬盛學電腦網 all rights reserved