0

Oracle 9i の xmldb 機能を使用して大きな xml ファイルを書き込む際に問題が発生しました。クエリは約 300 万行を生成し、oracle は次のエラー メッセージで応答します。

ERROR at line 1:
ORA-04030: out of process memory when trying to allocate 4012 bytes
(qmxtgCreateBuf,kghsseg: kolaslCreateCtx)
ORA-06512: at "....", line 1154
ORA-06512: at line 1
ERROR: 
ORA-00600: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s],
[%s], [%s]

アラート ログ:

Errors in file d:/db/admin/acc1/udump/acc1_ora_8112.trc:
ORA-00600: internal error code, arguments: [729], [104], [space leak], [], [], [], [], []

プロセス メモリを増やしてみましたが、ほとんど効果がありません。

オラクルがxmlに使用するメモリを少なくする方法はありますか(「怠惰な明示」/ライトスルースイッチなど?

4

1 に答える 1

2

BULK操作とLIMITED PAGEDクエリを使用して、プロセスによって消費されるメモリを管理する必要があります
。次に例を示します。

DECLARE
  CURSOR c_customer IS
    SELECT CUSTOMER.id, CUSTOMER.name from CUSTOMER;
  TYPE customer_array_type IS TABLE OF c_customer%ROWTYPE INDEX BY BINARY_INTEGER;
  customer_array customer_array_type;
  fetch_size     NUMBER := 5000; -- scale the value to manage memory
BEGIN
  -- Open(create) XML file
  OPEN c_customer;
  loop
    FETCH c_customer BULK COLLECT
      INTO customer_array LIMIT fetch_size;
    FOR i IN 1 .. customer_array.COUNT LOOP
      null; -- Add XML nodes
    END LOOP;
    EXIT WHEN c_customer%NOTFOUND;
  END LOOP;
  CLOSE c_customer;
  -- Close(flush) XML file
End;

ファイル サイズが OS のファイル サイズ制限を超える場合、複数のファイルを作成する必要があります。

于 2013-12-22T12:17:01.927 に答える