databaseoracle-databaseamazon-web-servicesoracle11gdatabase-link

Oracle AWS RDS database link ORA-12545


I'm trying to create a database link from my Oracle AWS RDS instance to another Oracle database outside my VPC. I created the database link this: create database link test connect to myusername identified by "mypassword" using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=my.db.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicenameame)))';

However when I run a query against that database link I get the following: SQL> select sysdate from dual@test; select sysdate from dual@test * ERROR at line 1: ORA-12545: Connect failed because target host or object does not exist

I did some googling of ORA-12545 and the majority of the issues people are having with this error is either an intermittent connectivity failure (of which mine is not, it fails every time), or a misspelled hostname/incorrect port. My issue is also not an incorrect hostname/port because I am able to CONNECT to my.db.com using the same connection string and query the database that way.

Does anyone have any suggestions?

Source Oracle database is: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production Destination Oracle database I am trying to connect to is: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production


Solution

  • I (somewhat) found the answer I needed. The TLDR version is that after much googling and desk pounding I did an nslookup on the hostname of the database I am connecting to (the my.db.com portion of TNSNames). I modified the TNSNames to connect to the IPs returned by the nslookup. My final TNSNames looks something like the following:

    (DESCRIPTION=
    (ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
    (ADDRESS=(PROTOCOL=tcp)(HOST=w.x.y.z1)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=w.x.y.z2)(PORT=1521))
    (ADDRESS=(PROTOCOL=tcp)(HOST=w.x.y.z3)(PORT=1521)))
    (CONNECT_DATA=(SERVICE_NAME= servicenameame)))
    

    The long version is that the Oracle host I am connecting to is configured with a Single Client Access Name (SCAN). After looking at the discussion on this post I went with just looking up the host name. I initially tried to modify the REMOTE_LISTENER in the AWS RDS Parameter Group, but that was not modifiable.