oracle / oracle/python-oracledb
Thin mode fails with ORA-24964 when trying to open a PDB migrated from Oracle 19c to 26ai
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 451
- Forks
- 119
- PR merge metrics
- No merged PRs in 30d
Description
1. What versions are you using?
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0
platform.platform: Linux-5.15.0-319.201.4.2.el8uek.x86_64-x86_64-with-glibc2.28
sys.maxsize > 2**32: True
platform.python_version: 3.12.13
oracledb.__version__: 4.0.1
2. Is it an error or a hang or a crash?
Command ALTER PLUGGABLE DATABASE test OPEN READ WRITE fails with ORA-24964: ALTER SESSION SET CONTAINER error when run in oracledb thin mode
3. What error(s) or behavior you are seeing?
First, I detach a PDB from 19c with commands:
ALTER PLUGGABLE DATABASE test UNPLUG INTO '/tmp/test.pdb';
Then I attach it to 26ai:
create pluggable database test as clone using '/tmp/test.pdb';
Finally, I'm trying to open it:
ALTER PLUGGABLE DATABASE test OPEN READ WRITE;
If I run last command using sqlplus or oracledb in thick mode, PDB gets automatically upgraded and open after 20 minutes.
If I run last command using oracledb in thin mode, last command fails with error ORA-24964 after fer seconds.
4. Does your application call init_oracle_client()?
Failing application does not call init_oracle_client(), it runs in thin mode.
I tried same command with calling init_oracle_client() and using thick mode and it worked fine.
5. Include a runnable Python script that shows the problem.
This fails:
import oracledb
# Thin mode is default
print("Running in Thin mode:", oracledb.is_thin_mode())
dsn = "hostname:1521/CDB"
connection = oracledb.connect(
user="sys",
password="password",
dsn=dsn,
mode=oracledb.SYSDBA
)
cursor = connection.cursor()
try:
cursor.execute(
"ALTER PLUGGABLE DATABASE test OPEN READ WRITE"
)
connection.commit()
print("PDB opened successfully in Thin mode")
except Exception as e:
print("Thin mode error:")
print(e)
finally:
cursor.close()
connection.close()
$ python3.12 test_thin.py
Running in Thin mode: True
Thin mode error:
ORA-24964: ALTER SESSION SET CONTAINER error
Help: https://docs.oracle.com/error-help/db/ora-24964/
This succeeds:
import oracledb
# Enable Thick mode
oracledb.init_oracle_client(
lib_dir="/u01/app/oracle/product/23/dbhome_1/lib"
)
print("Running in Thin mode:", oracledb.is_thin_mode())
dsn = "hostname:1521/CDB"
connection = oracledb.connect(
user="sys",
password="password",
dsn=dsn,
mode=oracledb.SYSDBA
)
cursor = connection.cursor()
try:
cursor.execute(
"ALTER PLUGGABLE DATABASE test OPEN READ WRITE"
)
connection.commit()
print("PDB opened successfully in Thick mode")
except Exception as e:
print("Thick mode error:")
print(e)
finally:
cursor.close()
connection.close()
$ python3.12 test_thick.py
Running in Thin mode: False
PDB opened successfully in Thick mode
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the supplied test_thin.py and test_thick.py scripts against the described migrated PDB, then compare the thin- and thick-mode handling of ALTER PLUGGABLE DATABASE test OPEN READ WRITE. Trace the thin-mode entry point responsible for the ORA-24964 response; done means the thin-mode command opens the PDB successfully without that error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design, databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100