Oracle 11G用EXP時,空表不能匯出解決方法

liqilin0429發表於2012-07-02
                Oracle 11G用EXP 時,空表不能匯出解決方法
第一 查詢空表到底有多少張,也就是查詢為分配分配segment的表有多少張
SQL> select table_name from user_tables where NUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已選擇10行。
第二 查詢在當前使用者下有總的有多少張表
SQL> select count(*) FROM  USER_TABLES;
  COUNT(*)
----------
        32
第三 匯出當前使用者下的資料
C:\Users\Administrator>exp lcpt/lcpt file=E:\0702bj\lcpt.dmp wner=lcpt log=E
702bj\lcpt.log
Export: Release 11.2.0.1.0 - Production on 星期一 7月 2 10:42:07 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Productio
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即將匯出指定的使用者...
. 正在匯出 pre-schema 過程物件和操作
. 正在匯出使用者 LCPT 的外部函式庫名
. 匯出 PUBLIC 型別同義詞
. 正在匯出專用型別同義詞
. 正在匯出使用者 LCPT 的物件型別定義
即將匯出 LCPT 的物件...
. 正在匯出資料庫連結
. 正在匯出序號
. 正在匯出簇定義
. 即將匯出 LCPT 的表通過常規路徑...
. . 正在匯出表                     ACCESSORIES匯出了          18 行
. . 正在匯出表                            AUTH匯出了         240 行
. . 正在匯出表                       DATA_TEMP匯出了           1 行
. . 正在匯出表                        FEEDBACK匯出了           1 行
. . 正在匯出表                        FUNCTION匯出了         112 行
. . 正在匯出表                           LIMIT匯出了           1 行
. . 正在匯出表                          MODULE匯出了          37 行
. . 正在匯出表                READ_ACCESSORIES匯出了           2 行
. . 正在匯出表                      REGIONINFO匯出了          19 行
. . 正在匯出表                    REPORT_EVENT匯出了           8 行
. . 正在匯出表                            ROLE匯出了           5 行
. . 正在匯出表                        ROLEAUTH匯出了         606 行
. . 正在匯出表                        STAFFLOG匯出了         512 行
. . 正在匯出表                       STAFFROLE匯出了          56 行
. . 正在匯出表                          STAFFS匯出了           7 行
. . 正在匯出表                        TASKINFO匯出了          51 行
. . 正在匯出表                    TASK_FILIALE匯出了           2 行
. . 正在匯出表           TASK_FILIALE_FEEDBACK匯出了           2 行
. . 正在匯出表                TASK_SWARAJ_READ匯出了          49 行
. . 正在匯出表                        TESTDATA匯出了         407 行
. . 正在匯出表                   THIRDFACTURER匯出了           3 行
. . 正在匯出表                        USESSION匯出了           1 行
. 正在匯出同義詞
. 正在匯出檢視
. 正在匯出儲存過程
. 正在匯出運算子
. 正在匯出引用完整性約束條件
. 正在匯出觸發器
. 正在匯出索引型別
. 正在匯出點陣圖, 功能性索引和可擴充套件索引
. 正在匯出後期表活動
. 正在匯出實體化檢視
. 正在匯出快照日誌
. 正在匯出作業佇列
. 正在匯出重新整理組和子組
. 正在匯出維
. 正在匯出 post-schema 過程物件和操作
. 正在匯出統計資訊
成功終止匯出, 沒有出現警告。
 
   結論:發現只匯出了22張表,說明還有10張表沒有匯出出來。
第四 再次查詢沒有匯出的空表
SQL> select table_name from user_tables where NUM_ROWS=0;
TABLE_NAME
------------------------------
DATA_BACKUP
EQUIPMENT
FEEDBACK_ACCESSORIES
SPECIALPIC
TASK_THIRD
TASK_THIRDBATCH
TASK_THIRD_DATA
TASK_THIRD_FEEDBACK
TESTDATA_THIRD
THIRD_ACCESSORIES
已選擇10行。
第五 查詢並構建對空表分配空間segment的SQL命令
SQL> select 'alter table ' ||table_name||' allocate extent;' from user_tables wh
ere num_rows=0;
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table DATA_BACKUP allocate extent;
alter table EQUIPMENT allocate extent;
alter table FEEDBACK_ACCESSORIES allocate extent;
alter table SPECIALPIC allocate extent;
alter table TASK_THIRD allocate extent;
alter table TASK_THIRDBATCH allocate extent;
alter table TASK_THIRD_DATA allocate extent;
alter table TASK_THIRD_FEEDBACK allocate extent;
alter table TESTDATA_THIRD allocate extent;
alter table THIRD_ACCESSORIES allocate extent;
已選擇10行。
SQL>
第六 執行構建好的SQL語句(儲存成指令碼執行)
set heading off;
set echo off;
set feedback off;
set termout on;
spool E:\0702bj\allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off;
SQL> alter table WGSM_SC allocate extent;
alter table WGSM_SC allocate extent
            *
第 1 行出現錯誤:
ORA-14254: 不能為 (組合) 範圍分割槽表或列表分割槽表指定 ALLOCATE
SQL> alter table WGSM_SC modify partition T1 allocate extent;
 
第七 再次執行匯出操作,就可以把所有的表匯出來了
第八 設定deferred_segment_creation 引數為FALSE後,無論是空表還是非空表,都分配segment。
第九 在sqlplus中,執行如下命令:SQL>alter system set deferred_segment_creation=false;
該值設定後對以前匯入的空表不產生作用,仍不能匯出,只能對後面新增的表產生作用。如需匯出上面的空表,只能用上面的方法。
第十 11G中有個新特性,當表無資料時,不分配segment,以節省空間
 
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-734303/,如需轉載,請註明出處,否則將追究法律責任。

相關文章