數據庫備份 空表不能導出的問題處理;
設置deferred_segment_creation 參數:
設置deferred_segment_creation 參數為FALSE來禁用"段推遲創建"(也就是直接創建segment),無論是空表還是非空表,都分配segment。
在sqlplus中,執行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
注意:該值設置后只對后面新增的表產生作用,對之前建立的空表(已經存在的)不起作用,仍不能導出。
並且要重新啟動數據庫,讓參數生效。
1. 創建執行腳本文件:我創建一個E:\sql_script.sql文件。內容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool C:\sql_allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
spool off;
2. 執行E:\sql_script.sql文件來生成“分配表空間的SQL代碼”的腳本文件sql_allocate.sql。
命令如下:
SQL>@ E:\sql_script.sql; (也可寫一個批處理文件,命令如下:sqlplus 用戶名/密碼@數據庫 @E:\sql_script.sql)
執行完畢后,得到E:\sql_allocate.sql腳本文件(里面是給所有空表分配segment的SQL代碼)。
打開該文件會看到,已經得到對所有空表分配空間的SQL語句
3. 執行E:\sql_allocate.sql文件來對表分配空間。
命令如下:SQL>@ E:\sql_allocate.sql
執行完畢,表已更改。之前存在的空表已分配segment空間!