SQL*Loader-926, ORA-04031 無法分配 x 字節的共享記憶體
客戶在導入多個文件時收到此錯誤。導入常式 (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_TARGET
or之類的視圖V$PGA_TARGET
。)發生此錯誤時,數據庫實例會在數據庫伺服器上創建一個跟踪文件(警報和文件位置可以在警報日誌中找到),這就是您需要進一步調查的內容.