回覆列表
  • 1 # puzen304

    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使用樣例:ALLOCATEEXTENTALLOCATEEXTENT(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中及以前,密碼中的字母大小寫無所謂。

  • 中秋節和大豐收的關聯?
  • 春節臨近,身為貧困村的精英人士和普通外出人士,為村裡的未來該有什麼樣的作為呢?