Skip to content
Oracle Database

Oracle Error ORA-12560

database communication protocol error (TNS:protocol adapter error)

Applies to: Oracle Database 19c, 21c, 23ai and 26ai (wording differs: see below)
Last technically reviewed 24 October 2026 on Oracle Database Error Messages reference (26ai, 21c and 19c); not run locally
The full message
ORA-12560: Database communication protocol error.
Other forms of this message
Oracle Database 19c and 21c
ORA-12560: TNS:protocol adapter error
The same error as Oracle Net tools and logs number it (19c)
TNS-12560: TNS:protocol adapter error
Error code
ORA-12560
Product
Oracle Database
Versions
Oracle Database 19c, 21c, 23ai and 26ai (wording differs: see below)
Last reviewed
24 October 2026

What it means

ORA-12560 means a lower-level communication layer under Oracle Net failed (the protocol adapter for TCP, IPC or the local connection), so the real cause is in the rest of the error stack or, on Windows, very often an Oracle database service that is not running.

Oracle Net sends every connection through a protocol adapter: TCP or TCPS for network connections, IPC or a bequeath connection for local ones. ORA-12560 is the generic report that this layer failed. Oracle's reference asks you to look at the error stack for the lower-level transport error, to check the protocol specification in the address, and to turn on tracing if that is not enough. On its own the code says little; the lines around it say what went wrong.

The procedure for TNS-12560 and ORA-12560 in Oracle's Net Services troubleshooting guide (19c) is written for Microsoft Windows: make sure the OracleServiceSID Windows service is enabled and started. That matches the most common case: sqlplus / as sysdba on a Windows server where the database service is stopped. A local connection with no connect identifier goes to the instance named by ORACLE_SID (or the connect identifier in the Windows LOCAL parameter), so that has to name an instance that is running.

Common causes

  • On Windows, the OracleServiceSID service for the instance is stopped or disabled, so local connections have nothing to talk to.
  • ORACLE_SID is not set, or names a different instance from the one that is running, for a local connection such as sqlplus / as sysdba.
  • The ADDRESS in tnsnames.ora or the connect descriptor has an incorrect protocol specification or parameters.
  • A lower-level network or operating system error, which appears further down the error stack (for example a no-listener entry such as TNS-00511).
  • Operating system or Oracle Net resource limits, which Oracle lists as able to cause the same conditions as ORA-12540 and ORA-12549.

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.

Read the whole error stack

ORA-12560 is usually one line of several. The client writes the full stack to its sqlnet.log (in the ADR client directory by default; the trace and log locations are in the Net Services guide). The lowest entries, such as TNS-00511 No listener or an operating system error, name the actual problem.

Windows: are the Oracle services running?

Run on the database server in PowerShell. The database service is named OracleService followed by the SID.

Get-Service -Name 'Oracle*' | Format-Table Name, Status, StartType -AutoSize
What to look for

OracleServiceSALES with Status Running. Stopped or a StartType of Disabled explains ORA-12560 for local connections. The listener service is listed separately.

Which instance does a local connection go to?

# Windows (cmd)
echo %ORACLE_SID%
reg query HKLM\SOFTWARE\ORACLE /s /v ORACLE_SID

# Linux and UNIX
echo $ORACLE_SID
What to look for

The SID of the instance whose service is running. An empty value, or a SID of another (stopped) instance, means sqlplus / as sysdba tries the wrong one.

Check the protocol in the address

tnsping SALESDB
What to look for

The descriptor shown after "Attempting to contact" must use a valid PROTOCOL (TCP, TCPS or IPC) with the matching parameters: HOST and PORT for TCP and TCPS, KEY for IPC.

Separate the local path from the network path

If a network connection to the same database works while the local one fails, the database is up and the problem is the local environment (service, ORACLE_SID or Oracle home).

sqlplus shop@//localhost:1521/salespdb.example.com
What to look for

A successful login over TCP while sqlplus / as sysdba fails with ORA-12560 points at ORACLE_SID or the Windows service.

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.

Start the Oracle database service on Windows

Changes database state

Oracle documents starting it from the Services dialog or with NET START OracleServiceSID. If the service is disabled, enable it first (Oracle's troubleshooting guide does this through MSCONFIG; the Services dialog works too). If the service does not exist at all, Oracle says to create it with ORADIM.

Caution: Starting the service makes the instance available again; check that it was not stopped on purpose for maintenance or a restore.

# Windows (cmd), elevated
NET START OracleServiceSALES

# or PowerShell, elevated
Start-Service -Name OracleServiceSALES

Point local connections at the right instance

Client or network side

Set ORACLE_SID in the session before a local connection, as Oracle's Windows guide does when several instances run on one machine.

# Windows (cmd)
SET ORACLE_SID=SALES
sqlplus / as sysdba

# Linux and UNIX
export ORACLE_SID=SALES
sqlplus / as sysdba

Correct the protocol address

Client or network side

Fix the ADDRESS in tnsnames.ora so the protocol and its parameters match what the listener uses (lsnrctl status lists them as listening endpoints).

(ADDRESS = (PROTOCOL = TCP)(HOST = sales-server)(PORT = 1521))

# a local IPC address uses a KEY instead of HOST and PORT
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

Trace the connection when the stack is not enough

Client or network side

Oracle's action for ORA-12560 is to turn on network tracing, repeat the operation and turn tracing off again. Add the trace parameters to the client sqlnet.ora, reproduce once, then remove them.

Caution: Trace files grow quickly and can contain connection details; switch tracing off (TRACE_LEVEL_CLIENT = OFF) as soon as you have reproduced the error, and treat the files as sensitive.

# client sqlnet.ora, temporarily
# levels: OFF, USER, ADMIN, SUPPORT; with ADR (the default) the trace
# goes to the client's ADR trace directory
TRACE_LEVEL_CLIENT = SUPPORT

Examples

A local SYSDBA login on Windows with the database service stopped

Not reproduced here: no Oracle Database is installed for this site. The result is the 19c and 21c wording from Oracle's error reference, which is what most Windows installations still print; current releases print "ORA-12560: Database communication protocol error." The scenario follows the Windows remedy in Oracle's Net Services troubleshooting guide (enable and start OracleServiceSID).

C:\> sqlplus / as sysdba
Expected result (documented format, not run)
ORA-12560: TNS:protocol adapter error

ORA-12560 as one line of a deeper stack

Not reproduced here: no Oracle Database is installed for this site. The stack is illustrative: each entry is a documented Oracle message, but the exact lines (and any operating system error added below them) vary by platform and release. Here the protocol adapter error only reports that the lower layer found no listener, so the fix is the one for ORA-12541.

lsnrctl status
Expected result (documented format, not run)
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener

How to prevent it

On Windows servers, set the Oracle database and listener services to start automatically and check them after every reboot or patch. On machines with several Oracle homes or instances, set ORACLE_SID (and the Oracle home) explicitly in scripts instead of relying on whatever the environment happens to contain.

Read and keep the whole Oracle Net error stack in support tickets and logs, not only the first line: for ORA-12560 the useful detail is always further down.

Common questions

How do I fix ORA-12560 on Windows?

Check that the OracleServiceSID Windows service is enabled and running, start it with NET START OracleServiceSID if not, and make sure ORACLE_SID names that instance before running sqlplus / as sysdba. If a network connection fails instead, read the rest of the error stack.

What does protocol adapter error actually mean?

It is a generic error from the layer that carries Oracle Net over TCP, IPC or a local connection. It says that layer failed, not why; the lower entries in the error stack, the sqlnet.log file or a client trace give the reason.

Why does the new wording say Database communication protocol error?

Oracle reworded many Oracle Net messages in current releases. ORA-12560 is the same error as "TNS:protocol adapter error" in 19c and 21c, with the same causes and checks.

Official documentation

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.

Still stuck on an Oracle error?

Browse the full Oracle error library, or get hands-on help from an experienced SQL professional.