Skip to content

Thin mode fails with ORA-24964 when trying to open a PDB migrated from Oracle 19c to 26ai #592

Description

@ytyapkin

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions