代码之家  ›  专栏  ›  技术社区  ›  Robert H Odomontois

使用Java连接到Amazon RDS实例时,如何解决ORA-12154问题

  •  2
  • Robert H Odomontois  · 技术社区  · 13 年前

    我正在尝试使用JDBC连接到我的RDS实例。当我尝试通过代码时,我会得到一个:

    Listener refused the connection with the following error:
    ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
    

    错误消息。我可以使用相同的凭据、SID等从SQL Developer进行连接,没有任何问题。

    对于那些没有使用过亚马逊RDS的人来说,这是一个在他们的AWS服务上提供的托管数据库。因为它是管理的,所以我无法访问与本地安装相同的设施,到目前为止,我还没有弄清楚是否或如何访问 tnsnames.ora 文件,以便获取侦听器信息。

    我的代码如下:

    public Connection connectToDatabase() {
            String url = "jdbc:oracle:thin:@//blahblahyadayada-eastnorthest-1.rds.amazonaws.com:1521/ORCL,username,password";
            try {
                return DriverManager.getConnection(url); // <-- error is here
            } catch (SQLException e) {
                e.printStackTrace();
                try {
                    return DriverManager.getConnection(url);
                } catch (SQLException e1) {
                    e1.printStackTrace(); 
    
                }
            }
            return null;
        }
    
    
    public static void main(String[] args) {
    
        Connection conn = db.connectToDatabase();
            try {
                ResultSet results = db.executeQuery("select 1;", conn);
                if (results.next()) {
                    LOGGER.info("Results of query: {}",
                            String.valueOf(results.getInt(1)));
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     ....
    

    编辑

    通过以下语句找到了以下侦听器信息:

    show parameter db_name;
    show parameter remote_listener;
    show parameter listener_networks
    show parameter local_listener;
    
    NAME                                               TYPE        VALUE                                                                                                
    -------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
    db_name                                            string      ORCL                                                                                                 
    
    NAME                                               TYPE        VALUE                                                                                                
    -------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
    remote_listener                                    string                                                                                                           
    
    NAME                                               TYPE        VALUE                                                                                                
    -------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
    listener_networks                                  string                                                                                                           
    
     NAME                                               TYPE        VALUE                                                                                                
    -------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- 
    local_listener                                     string      (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))   
    

    侦听器的RDS参数是不可修改的,并且显示为动态。

    select * from DBA_SERVICES; 显示:

    SERVICE_ID NAME                                                              NAME_HASH NETWORK_NAME                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     CREATION_DATE CREATION_DATE_HASH FAILOVER_METHOD                                                  FAILOVER_TYPE                                                    FAILOVER_RETRIES FAILOVER_DELAY MIN_CARDINALITY MAX_CARDINALITY GOAL         DTP ENABLED AQ_HA_NOTIFICATIONS CLB_GOAL EDITION                      
    ---------- ---------------------------------------------------------------- ---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------- ------------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------- -------------- --------------- --------------- ------------ --- ------- ------------------- -------- ------------------------------
             1 SYS$BACKGROUND                                                    165959219                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  13-05-01                       0                                                                                                                                                                                                   NONE         N   NO      NO                  SHORT                                   
             2 SYS$USERS                                                        3427055676                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  13-05-01                       0                                                                                                                                                                                                   NONE         N   NO      NO                  SHORT                                   
             3 ORCL_A                                                           3453147048 ORCL_A  
    

    我修改了连接字符串以尝试 ORCL_A 具有相同的错误。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Robert H Odomontois    13 年前

    JDBC连接字符串不正确。

    字符串应为: jdbc:oracle:thin:[user/password]@//<host><:port>/<service>

    更改连接字符串解决了问题。

        2
  •  0
  •   Tariq    6 年前

    如果你正在使用任何第三方服务,比如 AWS RDS

    oracledb.getConnection(
      {
        user          : "hr",
        password      : mypw,  // mypw contains the hr schema password
        connectString : "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mymachine.example.com)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))"
      }