Search code examples
pythonoracle-databasepython-oracledb

What does 'DPY-6001: cannot connect to database' mean with python-oracledb?


With Python code that uses the python-oracledb driver:

import oracledb
import os

un = os.environ.get("PYTHON_USERNAME")
pw = os.environ.get("PYTHON_PASSWORD")
cs = "localhost/doesnotexist"

c = oracledb.connect(user=un, password=pw, dsn=cs)

what does this error message mean?

DPY-6001: cannot connect to database. Service "doesnotexist" is not registered with the listener at host "localhost" port 1521. (Similar to ORA-12514)

Solution

  • The error means that Python successfully reached a computer (in this case "localhost" using the default port 1521) that is running a database. However the database service you wanted ("doesnotexist") doesn't exist there.

    Technically the error means the listener doesn't know about the service at the moment. So you might also get this error if the DB is currently restarting.

    This error is similar to the ORA-12514 error that you would see when connecting with python-oracledb in Thick mode, or might see with some other Oracle tools.

    The solution is to use a valid service name, for example:

    cs = "localhost/xepdb1"
    

    You can:

    • Check and fix any typos in the service name you used

    • Check the hostname and port are correct

    • Ask your DBA for the correct values

    • Wait a few moments and re-try in case the DB is restarting

    • Review the connection information in your cloud console or cloud wallet, if you are using a cloud DB

    • Run lsnrctl status on the database machine to find the known service names