現在、我々はDCORacle2 Python用のOracleバインディングを使用しています。DCOracle2のセグメンテーション・フォルトPython用Oracle Databaseバインディング
DCOracle2はこれ以上維持されませんが、従来の制約のために使用しています。 データサイズが大きい「SQLT_CLOB」を作成しようとするたびに、クラッシュします(セグメンテーション違反)。このPythonコードセグメンテーションフォールトで
を再現することができます。
from DCOracle2 import DCOracle2,dbi
connection = DCOracle2.connect(user='username', password='password',database='DBname')
lob_locator = connection.LobLocator('SQLT_CLOB')
data = '1' * 90000
lob_locator.write(data)
connection.procedures.your_schema_name.your_procedure_name(lob_locator) # This line causes segmentation fault
connection.close()
これは、私が作成した簡単な手順です:
create or replace function proceclob(i_clob clob) return clob as
l_tmp clob;
begin
l_tmp := i_clob;
return l_tmp;
end;
これは私がセグメンテーション違反の後に見ることができますトレースバックです。
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff69f5d80 in ??() from /lib/x86_64-linux-gnu/libc.so.6
(gdb) where
#0 0x00007ffff69f5d80 in ??() from /lib/x86_64-linux-gnu/libc.so.6
#1 0x0000000000462e51 in PyString_FromStringAndSize()
#2 0x00007ffff5da612f in listDescriptors (self=0x7ffff7e898f0, parmh=0x7ffff00ec768, entry=0x7ffff5fb0fa0, current=<optimized out>) at src/dco2.c:2293
#3 0x00007ffff5da69ea in ServerContext_describe (self=0x7ffff7e898f0, args=<optimized out>) at src/dco2.c:2425
#4 0x000000000056d4a4 in PyEval_EvalFrameEx()
#5 0x000000000056dc92 in PyEval_EvalFrameEx()
#6 0x000000000056dc92 in PyEval_EvalFrameEx()
#7 0x00000000005747c0 in PyEval_EvalCodeEx()
#8 0x00000000005697b0 in ??()
#9 0x000000000043a8b6 in PyObject_Call()
#10 0x000000000043b626 in PyEval_CallObjectWithKeywords()
#11 0x00000000004fdc2a in ??()
#12 0x000000000056d54e in PyEval_EvalFrameEx()
#13 0x00000000005747c0 in PyEval_EvalCodeEx()
#14 0x0000000000569ee1 in PyRun_FileExFlags()
#15 0x000000000056a6b3 in PyRun_SimpleFileExFlags()
#16 0x000000000056ba75 in Py_Main()
#17 0x00007ffff68cd76d in __libc_start_main() from /lib/x86_64-linux-gnu/libc.so.6
#18 0x000000000041bb11 in _start()
PS:このコードはPython 2.6と完全に動作しますが、Python 2.7ではクラッシュしますおよび上記のバージョン。
私はGDBでPythonをデバッグしようとしましたが、特定の理由が見つかりませんでした。 DCOracle2のバージョンは1.3(最新)
可能であれば、ヒントをご提供ください。