- Error code
- ORA-12514
- Product
- Oracle Database
- Versions
- Oracle Database 19c, 21c, 23ai and 26ai (wording differs: see below)
- Category
- Connectivity & Listener
- Last reviewed
- 24 October 2026
On this page
What it means
ORA-12514 means the client reached an Oracle listener, but the service name in the connect string is not one the listener currently knows, so it could not hand the connection to a database.
Every connection first goes to a listener, which looks at the SERVICE_NAME in the connect descriptor and passes the connection to a database instance offering that service. Databases tell the listener about their services themselves (dynamic service registration, done by the LREG background process), or a DBA lists them statically in listener.ora. If the requested service is in neither list, the listener refuses the connection with ORA-12514.
Getting this error is useful information: the host and port are right and a listener is running (otherwise you would see ORA-12541 or ORA-12170). What is wrong is the service name, or the database that should offer it is not up or not registered with this listener. Oracle notes it can also be temporary, just after the listener starts and before the instance has registered. Current releases name the service, the listener address and a CONNECTION_ID you can find in trace files; 19c and 21c print only the generic text.
Common causes
- The service name is wrong: a typo, a missing or extra domain (salespdb instead of salespdb.example.com), or the SID or container database name used where a pluggable database service is needed.
- The database instance is down, or the pluggable database that offers the service is not open.
- The listener was restarted recently and the instance has not registered again yet.
- The database registers with a different listener: the listener runs on a non-default port or address and the LOCAL_LISTENER parameter does not point to it.
- A service that the application expects was never started on this database, or was moved to another instance.
Diagnose it
Read-only These queries only read the data dictionary (USER_, ALL_ and DBA_ views) and dynamic performance views (V$). They do not change data, privileges or settings, so they are safe to run first. DBA_ and V$ views need the matching privileges.
List the services the listener knows
Run on the machine where the listener runs. Add the listener name if it is not the default LISTENER. For cloud services, use the connection strings shown in the service console instead.
lsnrctl status
lsnrctl services LISTENER Lines such as Service "salespdb.example.com" has 1 instance(s). and Instance "sales", status READY. Compare the service names character for character with the one in your connect string. Status UNKNOWN means a static entry from listener.ora; READY means the instance registered itself.
Which services does the database offer?
Run on the database while connected locally as a DBA (V$ views need SELECT_CATALOG_ROLE or a DBA account).
SELECT name, network_name, con_name
FROM v$active_services
ORDER BY con_name, name; NETWORK_NAME is the name clients use as SERVICE_NAME. If the service you need is missing, the database is not offering it, so no listener can know it.
Is the instance open, and is the pluggable database open?
SELECT instance_name, status, startup_time
FROM v$instance;
SELECT name, open_mode
FROM v$pdbs; STATUS OPEN for the instance and READ WRITE (or READ ONLY) for the PDB. Oracle's reference lists a database or PDB that is not running among the checks for this error, so a PDB left in MOUNTED state is a prime suspect.
Which listener does the database register with?
SELECT name, value
FROM v$parameter
WHERE name IN ('local_listener', 'remote_listener', 'service_names'); An empty LOCAL_LISTENER means the default address (TCP port 1521 on the local host). If your listener uses another port, compare this value with the "Listening Endpoints Summary" of lsnrctl status.
How to fix it
Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.
Use a service name the listener reports
Client or network sideCopy the exact service name from lsnrctl services (or from the cloud console) into SERVICE_NAME in tnsnames.ora or into the Easy Connect string. For a container database, applications normally connect to the pluggable database's service, not to the root.
sqlplus shop@//sales-server.example.com:1521/salespdb.example.com
# or in tnsnames.ora
# (CONNECT_DATA = (SERVICE_NAME = salespdb.example.com))
Wait and retry right after a listener restart
Read-onlyOracle's reference describes this as a possibly temporary condition. Without an explicit registration, clients may be unable to reach the services for up to about 60 seconds after the listener starts (Oracle SQL Language Reference, ALTER SYSTEM REGISTER).
Open the pluggable database
Changes database stateIf V$PDBS shows the PDB as MOUNTED, open it from the root container. SAVE STATE keeps it open after the next restart of the container database.
Caution: Needs an administrative connection (for example SYSDBA) to the root container. Check with the DBA first: the PDB may be closed on purpose for maintenance.
ALTER PLUGGABLE DATABASE salespdb OPEN;
ALTER PLUGGABLE DATABASE salespdb SAVE STATE;
Register the services now
Changes database stateALTER SYSTEM REGISTER tells the database to register with its listeners immediately instead of waiting for the next automatic registration.
Caution: Requires the ALTER SYSTEM privilege. It changes no parameters; if the services still do not appear, LOCAL_LISTENER does not point to this listener.
ALTER SYSTEM REGISTER;
Point the database at a listener on a non-default port
Changes configurationWhen the listener does not listen on TCP port 1521, set LOCAL_LISTENER to its address so the database registers there, then register.
Caution: Changes an instance parameter for the whole database. Copy the address exactly from the listener's "Listening Endpoints Summary"; a wrong value moves registration away from the listener clients use.
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS=(PROTOCOL=TCP)(HOST=sales-server.example.com)(PORT=1522))' SCOPE = BOTH;
ALTER SYSTEM REGISTER;
Examples
A service name with one character missing
Not reproduced here: no Oracle Database is installed for this site. The result shows the message format documented in Oracle's error reference for current releases. The way the host and port are printed and the CONNECTION_ID value are illustrative; the ID differs for every attempt.
-- Oracle Database Free offers the PDB service FREEPDB1
sqlplus shop@//localhost:1521/FREEPDB
ORA-12514: Cannot connect to database. Service FREEPDB is not registered with the listener at host 127.0.0.1 port 1521. (CONNECTION_ID=Qm9vZ3VzQ29ubmVjdElEMg==)
Connecting just after the listener was restarted
Not reproduced here: no Oracle Database is installed for this site. This is the 19c and 21c wording from Oracle's error reference, which describes the error as possibly temporary until the instance registers with the new listener. A retry a little later, or ALTER SYSTEM REGISTER on the database, ends it.
-- on the server
lsnrctl stop
lsnrctl start
-- on a client, within a few seconds
sqlplus shop@SALESDB
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
How to prevent it
Give applications a dedicated service name for the pluggable database they use, and copy it from lsnrctl services or V$ACTIVE_SERVICES rather than typing it. Keep the full name with its domain in configuration, so a NAMES.DEFAULT_DOMAIN setting on one client does not change the lookup.
After maintenance, check that the PDBs are open (SAVE STATE keeps them open across restarts) and that lsnrctl status lists their services before reopening the application. If the listener does not use port 1521, set LOCAL_LISTENER so registration does not depend on the default address.
Common questions
How do I fix ORA-12514?
Run lsnrctl services on the database server and compare the registered service names with the SERVICE_NAME in your connect string. Correct the name, open the PDB or start the instance if its service is missing, and use ALTER SYSTEM REGISTER if the listener was just restarted.
What is the difference between ORA-12514 and ORA-12505?
Both come from a listener that does not know what you asked for. ORA-12514 is for a SERVICE_NAME in the connect descriptor, ORA-12505 for a SID. Modern connect strings use SERVICE_NAME, which is also what Easy Connect strings send.
I can connect on the server with sqlplus / as sysdba but clients get ORA-12514. Why?
A local "/ as sysdba" connection does not go through the listener, so it works even when no service is registered. Clients over the network need the listener to know the service, which only happens once the instance (and the PDB) is open and registered.
Learn more on CodeWithSQL
Official documentation
- ORA-12514 (Oracle Database Error Messages)
- Configuring and administering Oracle Net Listener (Net Services Administrator's Guide 19c)
- V$ACTIVE_SERVICES (Oracle Database Reference 19c)
- ALTER SYSTEM (Oracle SQL Language Reference 19c)
Last technically reviewed 24 October 2026; examples and diagnostics run on Oracle Database Error Messages reference (26ai, 21c and 19c); not run locally. Messages and explanations follow Oracle's Database Error Messages reference; no Oracle Database was available, so the examples were not run locally.