oracle11g導出空表怎樣設置?
1、Oracle11g默認對空表不分配segment,故使用exp導出Oracle11g數據庫時,空表不會導出。
2、設置deferred_segment_creation參數為FALSE后,無論是空表還是非空表,都分配segment。 在sqlplus中,執行如下命令: sql>altersystemsetdeferred_segment_creation=false;? 查看: SQL>showparameterdeferred_segment_creation; 該值設置后只對后面新增的表產生作用,對之前建立的空表不起作用。
3、可以使用手工為空表分配Extent的方式,來解決導出之前建立的空表的問題。說明如下: 3.1使用ALLOCATEEXTENT的說明 使用ALLOCATEEXTENT可以為數據庫對象分配Extent。其語法如下: ----------- allocateEXTENT{SIZEinteger[K|M]|DATAFILE'filename'|INSTANCEinteger} ----------- 可以針對數據表、索引、物化視圖等手工分配Extent。 ALLOCATEEXTENT使用樣例: ALLOCATEEXTENT? ALLOCATEEXTENT(SIZEinteger[K|M])? ALLOCATEEXTENT(DATAFILE'filename')? ALLOCATEEXTENT(INSTANCEinteger)? ALLOCATEEXTENT(SIZEinteger[K|M]?DATAFILE'filename')? ALLOCATEEXTENT(SIZEinteger[K|M]?INSTANCEinteger)? 針對數據表操作的完整語法如下: ----------- ALTERTABLE[schema.]table_nameALLOCATEEXTENT[({SIZEinteger[K|M]|DATAFILE'filename'|INSTANCEinteger})] ----------- 故,需要構建如下樣子簡單的SQL命令: ----------- altertableaTabelNameallocateextent ----------- 3.2構建對空表分配空間的SQL命令, 查詢當前用戶下的所有空表(一個用戶最好對應一個默認表空間)。命令如下: ----------- SQL>Selecttable_namefromuser_tableswhereNUM_ROWS=0; ----------- 根據上述查詢,可以構建針對空表分配空間的命令語句,如下: ----------- SQL>Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0 ----------- 批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內容如下: ----------- setheadingoff; setechooff; setfeedbackoff; settermouton; spoolC:\allocate.sql; Select'altertable'||table_name||'allocateextent;'fromuser_tableswherenum_rows=0; spooloff; ----------- 執行C:\createsql.sql,命令如下: ----------- SQL>@C:\createsql.sql; ----------- 執行完畢后,得到C:\allocate.sql文件。 打開該文件會看到,已經得到對所有空表分配空間的命令SQL語句。 3.4執行SQL命令,對空表分配空間: 執行C:\allocate.sql,命令如下: ----------- SQL>@C:\allocate.sql; ----------- 執行完畢,表已更改。 3.4此時執行exp命令,即可把包括空表在內的所有表,正常導出。 另外:Oracle11g中,對密碼是大小寫敏感的,即密碼中的字母是區分大小寫的。 在Oracle10g中及以前,密碼中的字母大小寫無所謂。