node-oracledb TNS: прослушиватель в настоящее время не знает об услуге, запрошенной в дескрипторе подключения

Недавно я перешел с предварительных баз данных, где использовал Oracle 11g, на облако, где мне нужно было подключиться к Oracle 12c. Мое приложение nodejs работало нормально на prem, но в облаке выдавало ошибку ниже

error: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Ниже приведен фрагмент кода, который использовало мое приложение.

oracledb.createPool({
    user: config.DB_USER,
    password: config.DB_PASS,
    connectString: config.DB_HOST + ':' +
    config.DB_PORT + '/' +
    config.DB_NAME,
    poolMin: 20,
    poolIncrement: 0,    
    poolMax: 20
}

После поиска и перебора нескольких вариантов, включая замену : на /, похоже, ничего не сработало. Наконец-то мне удалось получить рабочее решение, и я ответил на этот вопрос ниже. Я надеюсь, что это поможет кому-то


person Jonathan Kibet    schedule 11.03.2020    source источник


Ответы (1)


Решением этой проблемы было изменение строки подключения, как показано во фрагменте кода ниже.

oracledb.createPool({
    user: config.DB_USER,
    password: config.DB_PASS,
    connectString:"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host="+config.DB_HOST+")(Port="+config.DB_PORT+"))(CONNECT_DATA=(SID="+config.DB_NAME+")))",
    poolMin: 20,
    poolIncrement: 0,    
    poolMax: 20
},
person Jonathan Kibet    schedule 11.03.2020
comment
Как вы обнаружили, синтаксис Easy Connect поддерживает имена служб базы данных Oracle, а не старые системные идентификаторы (SID). oracle.github .io/node-oracledb/doc/ См. следующее о получении имени службы: stackoverflow.com/questions/22399766/ - person Dan McGhan; 11.03.2020
comment
Вы должны изучить, почему вы не можете использовать имя службы. Службы — это новый способ подключения (ну, они существовали во многих выпусках), и они используются для обеспечения аварийного переключения, непрерывности приложений и других функций высокой доступности. Все автономные облачные базы данных предоставляют имена служб для подключения. - person Christopher Jones; 13.03.2020