使用python将虚拟机连接到oracle时出错(错误DPY-4011)



我正在使用oracledb库将我的python应用程序连接到oracle数据库。我可以在电脑上使用python正常连接,但我有一台运行Ubuntu的虚拟机,它使用的网络与电脑相同,无法连接。这是我尝试时的输出:

Python:3.8.10
Oracle:SE19
Conn。string:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP((HOST=IP((PORT=1521(((CONNECT_DATA=(SERVICE_NAME=NAME((SERVER=专用((

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/arthur/.local/lib/python3.8/site-packages/oracledb/connection.py", line 995, in wrapped
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
File "/home/arthur/.local/lib/python3.8/site-packages/oracledb/connection.py", line 124, in __init__
impl.connect(params_impl)
File "src/oracledb/impl/thin/connection.pyx", line 309, in oracledb.thin_impl.ThinConnImpl.connect
File "src/oracledb/impl/thin/connection.pyx", line 169, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src/oracledb/impl/thin/protocol.pyx", line 188, in oracledb.thin_impl.Protocol._connect
File "src/oracledb/impl/thin/protocol.pyx", line 255, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 233, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 301, in oracledb.thin_impl.Protocol._receive_packet
File "src/oracledb/impl/thin/buffer.pyx", line 1080, in oracledb.thin_impl.ReadBuffer.receive_packet
File "src/oracledb/impl/thin/buffer.pyx", line 426, in oracledb.thin_impl.ReadBuffer._receive_packet_helper
File "src/oracledb/impl/thin/buffer.pyx", line 293, in oracledb.thin_impl.ReadBuffer._get_data_from_socket
File "/home/arthur/.local/lib/python3.8/site-packages/oracledb/errors.py", line 103, in _raise_err
raise exc_type(_Error(message)) from cause
oracledb.exceptions.DatabaseError: DPY-4011: the database or network closed the connection

搜索这个错误,我发现它可能是防火墙问题,但它在V.M.中被停用了

我还能尝试什么?

编辑:设置ENV变量后,这里是输出(我隐藏了一些敏感数据(

2022-08-04 16:40:44.246 [socket: 3] Sending packet:
0000 : 01 10 00 00 01 00 00 00 |........|
0008 : 01 3E 01 2C 0C 01 20 00 |.>.,....|
0016 : FF FF 4F 98 00 00 00 01 |..O.....|
0024 : 00 C6 00 4A 00 00 00 00 |...J....|
0032 : 80 80 00 00 00 00 00 00 |........|
0040 : 00 00 00 00 00 00 00 00 |........|
0048 : 00 00 00 00 00 00 00 00 |........|
0056 : 00 00 00 00 20 00 00 00 |........|
0064 : FF FF 00 00 00 00 00 00 |........|
0072 : 00 01 28 44 45 53 43 52 |..(DESCR|
0080 : 49 50 54 49 4F 4E 3D 28 |IPTION=(|
0088 : 41 44 44 52 45 53 53 3D |ADDRESS=|
0096 : 28 50 52 4F 54 4F 43 4F |(PROTOCO|
0104 : 4C 3D 54 43 50 29 28 48 |L=TCP)(H|
0112 : 4F 53 54 3D 31 37 32 2E |OST=IPP.|
0120 : 32 30 2E 33 2E 32 35 34 |IP.I.IPP|
0128 : 29 28 50 4F 52 54 3D 31 |)(PORT=1|
0136 : 35 32 31 29 29 28 43 4F |521))(CO|
0144 : 4E 4E 45 43 54 5F 44 41 |NNECT_DA|
0152 : 54 41 3D 28 53 45 52 56 |TA=(SERV|
0160 : 49 43 45 5F 4E 41 4D 45 |ICE_NAME|
0168 : 3D 46 4F 52 54 45 53 45 |=SERVICE|
0176 : 43 29 28 53 45 52 56 45 |C)(SERVE|
0184 : 52 3D 64 65 64 69 63 61 |R=dedica|
0192 : 74 65 64 29 28 43 49 44 |ted)(CID|
0200 : 3D 28 50 52 4F 47 52 41 |=(PROGRA|
0208 : 4D 3D 2F 75 73 72 2F 62 |M=/usr/b|
0216 : 69 6E 2F 70 79 74 68 6F |in/pytho|
0224 : 6E 33 29 28 48 4F 53 54 |n3)(HOST|
0232 : 3D 61 72 74 68 75 72 2D |=arthur-|
0240 : 56 69 72 74 75 61 6C 2D |Virtual-|
0248 : 4D 61 63 68 69 6E 65 29 |Machine)|
0256 : 28 55 53 45 52 3D 61 72 |(USER=ar|
0264 : 74 68 75 72 29 29 29 29 |thur))))|
2022-08-04 16:40:44.391 [socket: 3] Receiving packet:
0000 : 00 08 00 00 0B 00 00 00 |........|
2022-08-04 16:40:44.391 [socket: 3] Sending packet:
0000 : 01 10 00 00 01 00 00 00 |........|
0008 : 01 3E 01 2C 0C 01 20 00 |.>.,....|
0016 : FF FF 4F 98 00 00 00 01 |..O.....|
0024 : 00 C6 00 4A 00 00 00 00 |...J....|
0032 : 80 80 00 00 00 00 00 00 |........|
0040 : 00 00 00 00 00 00 00 00 |........|
0048 : 00 00 00 00 00 00 00 00 |........|
0056 : 00 00 00 00 20 00 00 00 |........|
0064 : FF FF 00 00 00 00 00 00 |........|
0072 : 00 01 28 44 45 53 43 52 |..(DESCR|
0080 : 49 50 54 49 4F 4E 3D 28 |IPTION=(|
0088 : 41 44 44 52 45 53 53 3D |ADDRESS=|
0096 : 28 50 52 4F 54 4F 43 4F |(PROTOCO|
0104 : 4C 3D 54 43 50 29 28 48 |L=TCP)(H|
0112 : 4F 53 54 3D 31 37 32 2E |OST=IPP.|
0120 : 32 30 2E 33 2E 32 35 34 |IP.I.IPP|
0128 : 29 28 50 4F 52 54 3D 31 |)(PORT=1|
0136 : 35 32 31 29 29 28 43 4F |521))(CO|
0144 : 4E 4E 45 43 54 5F 44 41 |NNECT_DA|
0152 : 54 41 3D 28 53 45 52 56 |TA=(SERV|
0160 : 49 43 45 5F 4E 41 4D 45 |ICE_NAME|
0168 : 3D 46 4F 52 54 45 53 45 |=SERVICE|
0176 : 43 29 28 53 45 52 56 45 |C)(SERVE|
0184 : 52 3D 64 65 64 69 63 61 |R=dedica|
0192 : 74 65 64 29 28 43 49 44 |ted)(CID|
0200 : 3D 28 50 52 4F 47 52 41 |=(PROGRA|
0208 : 4D 3D 2F 75 73 72 2F 62 |M=/usr/b|
0216 : 69 6E 2F 70 79 74 68 6F |in/pytho|
0224 : 6E 33 29 28 48 4F 53 54 |n3)(HOST|
0232 : 3D 61 72 74 68 75 72 2D |=arthur-|
0240 : 56 69 72 74 75 61 6C 2D |Virtual-|
0248 : 4D 61 63 68 69 6E 65 29 |Machine)|
0256 : 28 55 53 45 52 3D 61 72 |(USER=ar|
0264 : 74 68 75 72 29 29 29 29 |thur))))|
2022-08-04 16:40:44.526 [socket: 3] Receiving packet:
0000 : 00 2D 00 00 02 00 00 00 |.-......|
0008 : 01 3E 0C 01 00 00 00 00 |.>......|
0016 : 01 00 00 00 00 2D C1 00 |.....-..|
0024 : 00 00 00 00 00 00 00 00 |........|
0032 : 00 00 20 00 00 00 FF FF |........|
0040 : 00 00 00 00 01          |.....   |
2022-08-04 16:40:44.526 [socket: 3] Sending packet:
0000 : 00 00 00 0B 0C 00 00 00 |........|
0008 : 01 00 02                |...     |
2022-08-04 16:40:44.526 [socket: 3] Sending packet:
0000 : 00 00 00 8F 06 00 00 00 |........|
0008 : 00 00 DE AD BE EF 00 85 |........|
0016 : 0B 20 02 00 00 04 00 00 |........|
0024 : 04 00 03 00 00 00 00 00 |........|
0032 : 04 00 05 0B 20 02 00 00 |........|
0040 : 08 00 01 00 00 10 1C 66 |.......f|
0048 : EC 28 EA 00 12 00 01 DE |.(......|
0056 : AD BE EF 00 03 00 00 00 |........|
0064 : 04 00 04 00 01 00 02 00 |........|
0072 : 03 00 01 00 03 00 00 00 |........|
0080 : 00 00 04 00 05 0B 20 02 |........|
0088 : 00 00 02 00 03 E0 E1 00 |........|
0096 : 02 00 06 FC FF 00 02 00 |........|
0104 : 02 00 00 00 00 00 04 00 |........|
0112 : 05 0B 20 02 00 00 01 00 |........|
0120 : 01 00 00 03 00 02 00 00 |........|
0128 : 00 00 00 04 00 05 0B 20 |........|
0136 : 02 00 00 01 00 01 00    |....... |

根据Anthony Tuininga的建议,禁用oob(带外中断(:disable_oob= True解决了这个问题。谢谢

在我们的案例中,我们使用了Oracle数据库本机网络加密(而不是TLS(,但我们看到了同样的错误。经过大量搜索,我们终于发现这是python oracledb包在"薄模式";。

发件人https://python-oracledb.readthedocs.io/en/latest/user_guide/appendix_b.html#native-网络加密和校验和

python oracledb精简模式不支持使用Oracle数据库本机网络加密或校验和的连接。您可以启用TLS,而不是使用本机网络加密。如果需要本机网络加密或校验和,则在Thick模式下使用python oracledb。请参阅启用python oracledb厚模式。

例如,如果您使用python oracledb瘦模式,并尝试连接到Oracle云基础设施(OCI(Oracle基础数据库,默认情况下,OCI Oracle基础数据库服务器的sqlnet.ora文件中的本机网络加密设置为REQUIRED,则连接将失败,并返回错误:

DPY-6000:无法连接到数据库。侦听器拒绝连接。(类似于ORA-12660(

有趣的是,他们一定在oracledb 1.3.0版本中更新了错误消息(DPY-6000到DPY-4011(,但未能相应地更新文档。

相关内容

最新更新