- What versions are you using?
Oracle ATP 19.c
platform.platform: macOS-15.4-arm64-arm-64bit-Mach-O
sys.maxsize > 2**32: True
platform.python_version: 3.13.3
oracledb.version: 3.1.0
- Is it an error or a hang or a crash?
Segmentation Fault Crash
- What error(s) or behavior you are seeing?
https://gist.github.com/MCubek/ffa2806d8bf0a8e73fe3ac4436d888ed
This issue does not happen on Python 3.12.
- Does your application call init_oracle_client()?
Yes, thick mode is used.
- Include a runnable Python script that shows the problem.
Test script below couldn't reproduce the issue but represents how the pool is created...
# Minimal settings (replace placeholders)
username = "your_user"
password = "your_password"
dsn = "your_dsn"
wallet_path = "/path/to/your/oracle/wallet"
instant_client_path = "/path/to/your/instantclient"
if __name__ == "__main__":
# Initialize Oracle client (thick mode)
print("Initializing Oracle Client...")
oracledb.init_oracle_client(lib_dir=instant_client_path, config_dir=wallet_path)
# Attempt creating a connection pool (crashes here on Python 3.13)
print("Creating Oracle connection pool...")
pool = oracledb.create_pool(
user=username,
password=password,
config_dir=wallet_path,
dsn=dsn,
wallet_location=wallet_path,
wallet_password="",
min=1,
max=2,
increment=1,
)
print("Acquiring connection from pool...")
with pool.acquire() as connection:
print("Oracle DB version:", connection.version)
print("Test completed successfully (if no crash).")
In production FastAPI is used to create pool as shown in snippets:
@asynccontextmanager
async def lifespan(app: FastAPI):
# Create the connection pool
app.state.pool = create_db_connection_pool()
yield
# Close the connection pool on shutdown
app.state.pool.close()
logger.debug("Closed Oracle database connection pool.")
if os.getenv("ENV_FOR_DYNACONF") != "test":
# noinspection PyUnresolvedReferences
oracledb.init_oracle_client(
lib_dir=settings.db.instant_client_library, config_dir=wallet_path
)
def create_db_connection_pool() -> oracledb.ConnectionPool:
logger.debug("Creating Oracle database connection pool...")
pool = oracledb.create_pool(
user=username,
password=password,
config_dir=wallet_path,
dsn=dsn,
wallet_location=wallet_path,
wallet_password="",
min=1, # Minimum number of connections in the pool
max=5, # Maximum number of connections in the pool
increment=1, # Number of connections to add when more are needed
)
logger.debug("Created Oracle database connection pool.")
return cast("oracledb.ConnectionPool", pool)
Oracle ATP 19.c
platform.platform: macOS-15.4-arm64-arm-64bit-Mach-O
sys.maxsize > 2**32: True
platform.python_version: 3.13.3
oracledb.version: 3.1.0
Segmentation Fault Crash
https://gist.github.com/MCubek/ffa2806d8bf0a8e73fe3ac4436d888ed
This issue does not happen on Python 3.12.
Yes, thick mode is used.
Test script below couldn't reproduce the issue but represents how the pool is created...
In production FastAPI is used to create pool as shown in snippets: