You might think all ORA errors are all thrown by databases. Actually, some ORA errors are thrown by JDBC drivers, listeners or Oracle clients. For example, when I was trying to connect an offline database, sqlplus will thrown ORA errors to notify the connection failure.
[oracle@localhost ~]$ sqlplus hr/hr
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Obviously, ORA-01034 and ORA-27101 were thrown by sqlplus, not the database or listener itself.
Knowing that some errors are thrown by clients or listeners could become important to judge the root cause, because connections could fail before reaching the database. Possibly, the database is healthy, but the network is poor or Oracle clients are misconfigured or incompatible with databases in versions.
This might be a key concept when you are trying to resolve problems or secure your position in meetings or arguments with system administrators, network administrators or application developers.
You can see a real case in the real world in my post: How to Resolve ORA-12170 on Client Sides.
In that case, the database is healthy and the packets of connections were blocked or filtered in the midway to the database.
This post does not intend to list all ORA errors thrown by clients, but you should be aware of this.