Oracle 11g 預設不給空表分配空間,exp匯出備份不匯出空表!
11G中有個新特性,當表無資料時,不分配segment,以節省空間
解決方法:
1、insert一行,再rollback就產生segment了。
該方法是在在空表中插入資料,再刪除,則產生segment。匯出時則可匯出空表。
2、設定deferred_segment_creation 引數
show parameter deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
SQL> alter system set deferred_segment_creation=false;
系統已更改。
SQL> show parameter deferred_segment_creation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean FALSE
該引數值預設是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。
需注意的是:該值設定後對以前匯入的空表不產生作用,仍不能匯出,只能對後面新增的表產生作用。如需匯出之前的空表,只能用第一種方法。
搞了我好久,最後查到這個方法。
先查詢一下當前使用者下的所有空表
select table_name from user_tables where NUM_ROWS=0;
用以下這句查詢空表
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
把查詢結果匯出,執行匯出的語句
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_AQ$_MEM_MC_H allocate extent;
alter table AQ$_AQ$_MEM_MC_G allocate extent;
alter table AQ$_AQ$_MEM_MC_I allocate extent;
alter table AQ$_AQ_PROP_TABLE_T allocate extent;
alter table AQ$_AQ_PROP_TABLE_H allocate extent;
alter table AQ$_AQ_PROP_TABLE_G allocate extent;
alter table AQ$_AQ_PROP_TABLE_I allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;
然後再執行
exp 使用者名稱/密碼@資料庫名 file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log 成功!
還可以使用資料泵的方式備份匯出
先建立目錄:
create directory directoryname as '路徑';
授權:
grant read,write on directoryname to username;
透過命令進行匯入匯出:
expdp username/password@databasename directory=directoryname dumpfile=expname.dmp 成功!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/76103/viewspace-1474518/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OracleDatabase——資料庫表空間dmp匯出與匯入OracleDatabase資料庫
- [20210528]oracle大表空間預分配問題.txtOracle
- Oracle表空間Oracle
- oracle 表空間Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- MySQL 遷移表空間,備份單表MySql
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- 16、表空間 建立表空間
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- 當使用者無限制使用表空間配額且表空間有足夠空間時出現超出表空間的空間限額
- oracle建立使用者,表空間,臨時表空間,分配許可權步驟詳解Oracle
- oracle表空間的整理Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- SYSTEM 表空間管理及備份恢復
- [20210527]rman與undo表空間備份.txt
- oracle匯出使用者、表空間和角色的建立語句Oracle
- Oracle RMAN備份為什麼會大量使用temp表空間?Oracle
- oracle單表按時間匯出Oracle
- exp匯出表中特定條件的表
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- Oracle Temp 表空間切換Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle表空間收縮方案Oracle
- Oracle RMAN 表空間恢復Oracle
- 2.5.6 建立預設的永久表空間
- 2.5.7 建立預設臨時表空間
- Oracle新建使用者、表空間、表Oracle
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- oracle資料匯出匯入(exp/imp)Oracle
- Oracle 11g 透過expdp按日期匯出表Oracle
- 2.5.9.2 重寫預設表空間型別型別
- 2.5.9.1 指定預設表空間的型別型別
- PostgreSQL 表空間SQL
- PostgreSQL:表空間SQL
- Oracle的表空間quota詳解Oracle