2016-03-29 14 views
0

現在、我々は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(最新)

可能であれば、ヒントをご提供ください。

答えて

0

私は問題を解決できました。 問題: Oracleヘッダーでは、一部のプラットフォームではtypedef 'ub4'を 'unsigned int'と定義し、プラットフォームによっては 'unsigned long int'を定義しています。 私のプラットフォームでは、 'ub4'を 'unsigned int'と定義していました。これは、より大きなデータチャンクを指すポインターに対して「範囲外」例外を引き起こしていました。

関連する問題