Подключение к удаленной БД Oracle с помощью Nodejs через драйвер Oracledb

Привет, я действительно пытаюсь понять, как подключиться к удаленной тестовой БД Oracle, и у меня нет опыта работы с Java. Так что, если бы я мог получить вашу помощь, я был бы бесконечно благодарен.

У меня есть удаленная тестовая база данных, к которой я пытаюсь подключиться, и у меня есть соединение jdbc со старым SID. По этой ссылке: https://github.com/oracle/node-oracledb/blob/master/doc/api.md#notjdbc, я должен создать файл tnsnames.ora, чтобы установить соединение, например:

tnsnames.ora:

appDB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
   (CONNECT_DATA =
     (SID = ORCL)
   )
 )

а затем я должен ссылаться на него в моем файле node server.js, например,

server.js:

const oracledb = require('oracledb');
oracledb.getConnection(
  {
    user          : process.env.ORACLE_USER,
    password      : process.env.ORACLE_PASSWORD,
    connectString : "appDB"
  },
  function(err, connection)
  {
    if (err) {
      console.error(err.message);
      return;
    }
    connection.execute(
      "SELECT * " +
        "FROM BOS_course",
      function(err, result)
      {
        if (err) {
          console.error(err.message);
          doRelease(connection);
          return;
        }
        console.log(result.rows);
        doRelease(connection);
      });
  });

module.exports = {
    oracledb
};

Однако я понятия не имею, куда я должен поместить файл tnsnames.ora. Я нашел эту ссылку в Интернете $ORACLE_HOME/network/admin, но не знаю, к чему она относится. У меня ограниченный доступ к базе данных. Извините за незнание Java. Как я могу использовать это соединение в моем приложении узла, которое полностью отделено от базы данных? Как мое приложение узнает, что такое appDB, и как найти его в файле tnsnames.ora?

Заранее спасибо!


person Brooke Clonts    schedule 26.04.2017    source источник


Ответы (3)


поместите полный адрес подключения в переменную connectString

{ user : process.env.ORACLE_USER, password : process.env.ORACLE_PASSWORD, connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))" }

person lsalamon    schedule 26.04.2017
comment
Ты сейчас мой любимый человек. Спасибо, @Isalamon! - person Brooke Clonts; 27.04.2017
comment
Это намного лучше, чем возиться с tnsnames.ora, и это гораздо более портативно. Ты чемпион! - person Steve Workman; 10.04.2018

Чтобы технически ответить на вопрос, установите переменную среды TNS_ADMIN. Затем node-oracledb (и другие API-интерфейсы на основе OCI, такие как Python cx_Oracle, PHP OCI8, Ruby ruby-oci8 и т. Д.) Будут искать $TNS_ADMIN/tnsnames.ora.

person Christopher Jones    schedule 03.05.2017

У меня есть аналогичный случай, когда у меня две виртуальные машины на лазурном сервере. Один для Oracle12c DB, а другой для пакета nodejs oracledb с клиентскими библиотеками Oracle. Это моя строка подключения со стороны клиента для подключения к удаленной БД.

module.exports = {
  user          : process.env.NODE_ORACLEDB_USER || "hr",
  password      : process.env.NODE_ORACLEDB_PASSWORD || "welcome",
  connectString : process.env.LOCAL || "myipaddress:1521/servicename",
};
person user557657    schedule 18.08.2017