Oracle

SQL*Loader-926, ORA-04031 無法分配 x 字節的共享記憶體

  • October 5, 2015

客戶在導入多個文件時收到此錯誤。導入常式 (VB.NET) 在每個表上分別使用 SQL*Loader (Release 11.2.0.3.0) Process(總共 64 個),並且多年來每週呼叫一次。上週引發以下錯誤:

value used for ROWS parameter changed from 1024 to 795(所有表均使用 ROWS=1024 導入,未指定 BINDARRAY 參數)

SQL*Loader-926:對錶 x 執行刪除/截斷(由於 REPLACE/TRUNCATE 關鍵字)時出現 OCI 錯誤 ORA-04031:無法分配 4160 字節的共享記憶體(“共享池”、“未知對象”、“sga 堆” (1,0)",“修改”)

我搜尋了 ORA-4031 並確定了目前的記憶體資訊:

  • 3,08 GB(共享池)(select sum(bytes), pool from v$sgastat GROUP BY pool),
  • 922MB 可用記憶體 ( select * from v$sgastat where name = 'free memory';) 和
  • 1,18 GB 可共享記憶體 ( select sum(SHARABLE_MEM) from v$db_object_cache;)

為了解決這個問題,一些文章指出要查看意見v$SGA_TARGET, v$PGA_TARGET, v$SGA_TARGET_ADVICE, v$PGA_TARGET_ADVICE, v$SGA_DYNAMIC_COMPONENTS等,但我沒有 dba 特權。( table or view does not exist)。

因此,我想知道我是否只能通過 SQL*Loader 設置來解決問題,還是 DBA 必須對此進行調查?

編輯:

控製文件:LOAD DATA INFILE '<filepath>' INTO TABLE x TRUNCATE(<columns>)

呼叫:sqlldr.exe userid=... log=... ctl=... bad=... rows=1024

如果這是一次性錯誤,請嘗試再次執行 SQL*Loader。

如果這種情況反復發生,您將需要 DBA 的幫助。

上述觀點幾乎不包含與此問題相關的任何資訊。(也沒有V$SGA_TARGETor之類的視圖V$PGA_TARGET。)發生此錯誤時,數據庫實例會在數據庫伺服器上創建一個跟踪文件(警報和文件位置可以在警報日誌中找到),這就是您需要進一步調查的內容.

引用自:https://dba.stackexchange.com/questions/116972