DEV Community

umzzil nng
umzzil nng

Posted on Originally published at oraerror.com

Oracle ORA-12514 Error: Causes and Solutions Complete Guide

ORA-12514: TNS Listener Does Not Currently Know of Service Requested in Connect Descriptor

ORA-12514 is one of the most common Oracle connectivity errors, occurring when a client attempts to connect to a database service that the TNS listener cannot find in its current registry. Simply put, the listener is running and reachable, but the specific service name requested in the connection descriptor has not been registered with it. This error is frequently encountered after database restarts, environment migrations, or misconfigured tnsnames.ora files.


Top 3 Causes

1. Service Not Registered with the Listener

The database instance may be running, but the service hasn't dynamically registered with the listener yet (this can take up to 60 seconds after startup via PMON), or static registration is missing from listener.ora.

-- Check which services are currently registered
SELECT NAME, NETWORK_NAME FROM V$SERVICES;

-- Check the SERVICE_NAMES parameter
SHOW PARAMETER SERVICE_NAMES;

-- Force immediate re-registration with the listener
ALTER SYSTEM REGISTER;
Enter fullscreen mode Exit fullscreen mode

2. Mismatched Service Name in Connection Descriptor

The SERVICE_NAME in tnsnames.ora or your JDBC/application connection string doesn't exactly match what's registered on the listener — often due to typos, missing domain suffixes, or case sensitivity issues.

-- Find the correct service name on the database server
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'service_names';

-- Verify the exact service name including domain
SELECT NAME, NETWORK_NAME, CREATION_DATE
FROM   DBA_SERVICES
WHERE  NAME NOT IN ('SYS$BACKGROUND', 'SYS$USERS')
ORDER BY NAME;
Enter fullscreen mode Exit fullscreen mode

A correct tnsnames.ora entry should look like this:

-- tnsnames.ora example (client-side)
-- MYDB =
--   (DESCRIPTION =
--     (ADDRESS = (PROTOCOL = TCP)(HOST = db-host.example.com)(PORT = 1521))
--     (CONNECT_DATA =
--       (SERVER = DEDICATED)
--       (SERVICE_NAME = MYDB.example.com)  -- must match V$SERVICES.NAME exactly
--     )
--   )
Enter fullscreen mode Exit fullscreen mode

3. Listener Misconfiguration or Missing Static Registration

The listener.ora file may lack a SID_LIST entry for static registration, or point to a wrong host/port. Without static registration, there's a window after startup where connections will fail.

-- listener.ora static registration example (server-side)
-- SID_LIST_LISTENER =
--   (SID_LIST =
--     (SID_DESC =
--       (GLOBAL_DBNAME = MYDB.example.com)
--       (ORACLE_HOME   = /u01/app/oracle/product/19.3.0/dbhome_1)
--       (SID_NAME      = MYDB)
--     )
--   )

-- After editing listener.ora, reload without downtime:
-- lsnrctl reload LISTENER

-- Confirm instance details for listener.ora values
SELECT INSTANCE_NAME, HOST_NAME, STATUS FROM V$INSTANCE;
Enter fullscreen mode Exit fullscreen mode

Quick Fix Solutions

Step 1: Run lsnrctl status on the database server and compare the listed services against what your client is requesting.

Step 2: Force the database to re-register with the listener immediately:

-- Run as SYSDBA
ALTER SYSTEM REGISTER;
Enter fullscreen mode Exit fullscreen mode

Step 3: If the service still doesn't appear, create and start it manually:

BEGIN
    DBMS_SERVICE.CREATE_SERVICE(
        service_name => 'MY_SERVICE',
        network_name => 'MY_SERVICE'
    );
END;
/

BEGIN
    DBMS_SERVICE.START_SERVICE('MY_SERVICE');
END;
/
Enter fullscreen mode Exit fullscreen mode

Step 4: As a temporary workaround, use SID instead of SERVICE_NAME in your connection descriptor to bypass service registration issues while you troubleshoot.


Prevention Tips

1. Always configure both static and dynamic registration. Don't rely solely on dynamic registration (PMON-based) in production. Add a SID_LIST_LISTENER block to listener.ora so the listener recognizes the service immediately on startup, before PMON completes its first registration cycle.

2. Include connectivity validation in your change management checklist. Whenever you change SERVICE_NAMES, DB_DOMAIN, DB_NAME parameters, or restart the listener/database, always run a post-change verification:

-- Standard post-change connectivity test
SELECT SYS_CONTEXT('USERENV', 'DB_NAME')      AS DB_NAME,
       SYS_CONTEXT('USERENV', 'SERVICE_NAME') AS SERVICE_NAME,
       SYS_CONTEXT('USERENV', 'SERVER_HOST')  AS SERVER_HOST
FROM   DUAL;
Enter fullscreen mode Exit fullscreen mode

Combine this with tnsping <service_name> from the client side to confirm both the network path and service registration are healthy.


Related Errors

  • ORA-12505 – Same concept but triggered when using SID instead of SERVICE_NAME in the connect descriptor.
  • ORA-12541 – TNS: No Listener. The listener process itself isn't running; check this before investigating ORA-12514.
  • ORA-01034 – Oracle Not Available. The listener is fine, but the database instance itself is down.

📖 Want a more detailed guide?
Check out the full in-depth version (Korean) on oraerror.com — includes detailed analysis, additional SQL examples, and prevention tips.

Top comments (0)