2016-09-23 64 views
0

我正在使用Oracle Database 12c(12.1.0.1.0 64位)。前一段時間我在pl/sql中編寫了一個軟件來導入幾個XML文件。這似乎工作得很好,但之後出現了一些問題。某些文件的大小爲5到25 MB,因此導入它們需要一兩分鐘的時間。但是對於一些文件來說,導入永遠不會結束,並且導入過程甚至不能停止,所以我必須重新啓動服務器才能擺脫它。在xmltable中插入時掛起進程

我跟蹤這個問題下面一行:

INSERT INTO SB_BUFFER_XML VALUES (XMLType(bfilename('XMLDATA', '840.xml'), nls_charset_id('AL32UTF8'))); 

表SB_BUFFER_XML的類型爲XMLTABLE和XMLDATA指向本地directoy。該命令永遠不會結束文件840.xml。但它完成文件613.xml。無論是大小相似的613.xml是更大:

  • 840.xml:6.329 KB
  • 613.xml:6.905 KB

於是我開始比較這兩個文件找該問題:

  • 這兩個文件都UTF-8無BOM
  • 都包含相同的結構,但不同的數據
  • 的XML的語法檢查完成成功
  • 即使在十六進制編輯器這兩個文件開始和
  • 這兩個文件都在同一個系統在同一個版本中創建相同的字符(所以世界上沒有其他隱藏的BOM或東西)完成

因此,我只是開始從840.xml中刪除內容以降低複雜性,並且我發現刪除並不重要。只要我刪除了特定數量的數據,即使它是一條評論,這個文件的導入也是完美無缺的。

奇怪的是,我已經做了相同的結構從文件大小超過20 MB的相同的系統導入XML文件。

你有什麼想法可能會導致這個問題或我可以檢查下一個?

+0

這是一個益智遊戲。你有沒有嘗試刪除並重新創建文件?當您可以導入文件時,文件的大小是多少? –

+0

不幸的是,源系統不允許重新創建xml文件,所以我不能嘗試。經過很多次嘗試後,我發現文件大小的下限是6.480.000字節。多一個字節並且導入不起作用。如果我使文件更大,例如6.506.276字節,它將導入得很好。 – Timo

+0

這兩個文件都在同一個文件系統上嗎? Oracle支持花了我兩個月的時間才發現我的備份失敗,因爲Oracle不支持新文件服務器的底層協議。我在Windows上使用Oracle,必須從UNC移到本地映射的驅動器。 我希望我對你有一個具體的答案,但我不認爲我能夠提供幫助。 –

回答

0

甲骨文可能會重現我們的問題,並指出我們對以下錯誤:

Bug 22843562 - IMPORT OF A XML FILE WITH A COMMENT AT THE END FAILS WITH ORA-27163 

此錯誤是固定在12.2。在12.1您可以嘗試此解決辦法來激活舊解析器:

ALTER SESSION SET EVENTS '31156 trace name context forever, level 0x400'; 

雖然錯誤標題沒有描述我們的問題,解決辦法爲我們工作仍。