Thin mode connection to standby database failed with TypeError on _MAX_OPEN_CURSORS · Issue #294 · oracle/python-oracledb (original) (raw)
After upgrading from oracledb 1.4.2 to 2.1.0b1, thin mode connections to a physical standby database opened MOUNTED fail with a TypeError.
Connections using thick mode work fine. Thin mode connections to a primary database opened READ WRITE are fine, but when opened MOUNTED the same issue.
- What versions are you using?
Database version: 19.21.0.0.0
platform.platform: Linux-5.4.17-2136.327.2.el7uek.x86_64-x86_64-with-glibc2.17
sys.maxsize > 2**32: True
platform.python_version: 3.9.18
oracledb.version: 2.1.0b1
- Is it an error or a hang or a crash?
Error
- What error(s) or behavior you are seeing?
When calling the connect()
function to connect to a standby database:oracledb.connect(dsn=connect_string, user=username, password=password, mode=mode)
The following error occurs:
Traceback (most recent call last):
File "/eco/mounts/eco_orabackup1/users/fokkingats/python_tests/test_oracledb_set_connectparams2.py", line 23, in <module>
oracledb.connect(dsn=connect_string, user=username, password=password, mode=mode)
File "/home/fokkingats/.local/lib/python3.9/site-packages/oracledb-2.1.0b1-py3.9-linux-x86_64.egg/oracledb/connection.py", line 1149, in connect
return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
File "/home/fokkingats/.local/lib/python3.9/site-packages/oracledb-2.1.0b1-py3.9-linux-x86_64.egg/oracledb/connection.py", line 523, in __init__
impl.connect(params_impl)
File "src/oracledb/impl/thin/protocol.pyx", line 376, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/connection.pyx", line 372, in oracledb.thin_impl.ThinConnImpl.connect
File "src/oracledb/impl/thin/connection.pyx", line 338, in oracledb.thin_impl.ThinConnImpl._connect_with_params
File "src/oracledb/impl/thin/connection.pyx", line 319, in oracledb.thin_impl.ThinConnImpl._connect_with_description
File "src/oracledb/impl/thin/connection.pyx", line 292, in oracledb.thin_impl.ThinConnImpl._connect_with_address
File "src/oracledb/impl/thin/protocol.pyx", line 315, in oracledb.thin_impl.Protocol._connect_phase_two
File "src/oracledb/impl/thin/protocol.pyx", line 397, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/protocol.pyx", line 376, in oracledb.thin_impl.Protocol._process_message
File "src/oracledb/impl/thin/messages.pyx", line 309, in oracledb.thin_impl.Message.process
File "src/oracledb/impl/thin/messages.pyx", line 187, in oracledb.thin_impl.Message._process_message
File "src/oracledb/impl/thin/messages.pyx", line 1577, in oracledb.thin_impl.AuthMessage._process_return_parameters
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
This refers to the line
self.conn_impl._max_open_cursors = \
int(self.session_data.get("AUTH_MAX_OPEN_CURSORS"))
For testing purposes I changed this as follows, and then connections are established without the TypeError:
self.conn_impl._max_open_cursors = \
int(self.session_data.get("AUTH_MAX_OPEN_CURSORS", 100))
- Does your application call init_oracle_client()?
No, the error occurs only in thin mode. In thick mode no errors.
- Include a runnable Python script that shows the problem.
import oracledb
username = "sys"
password = "change_on_install"
mode = oracledb.AUTH_MODE_SYSDBA
connect_string = "standby-host.oracle.com:1521/stby_db"
oracledb.connect(dsn=connect_string, user=username, password=password, mode=mode)