Node.js和node-oracle:连接到Oracle数据库时出现问题

pieyvz9o  于 2023-06-22  发布在  Oracle
关注(0)|答案(3)|浏览(205)

我正在编写一个Node.js应用程序,从Oracle数据库中提取数据。DBA最近将数据库迁移到另一台机器上,结果一切都坏了。
我已经尝试重新创建tnsnames.ora和sqlnet.ora文件。我相当肯定它们是正确的,因为sqlplus可以很好地连接到服务。但是node-oracle一直报告错误:“ORA-12154:TNS:无法解析指定的连接标识符“”。
这对我来说是无法解释的。在我看来,如果我设置了ORACLE_HOME环境变量,那么node-oracle和sqlplus的功能应该是相同的。我做错了什么?
我尝试切换到node-db-oracle,但它报告了同样的问题。我被难倒了
编辑:这是我连接的方式:

database = new oracle.Database({
            hostname: Preferences["oracle_host"],  // FQDN of the database
            port: Preferences["oracle_port"],
            user: Credentials["oracle_login"],
            password: Credentials["oracle_password"],
            database: Preferences["oracle_database"]
        });

    connection = database.connect(function(error) {
            if(error) {
                Utilities.logger.error(error);
            }
            else {
                Utilities.logger.info("Connected to Oracle database " + Preferences["oracle_host"]);    
                if(callback) callback.call(this, collection, options);
                connection = this;
            }

        });
u59ebvdq

u59ebvdq1#

我可以使用sqlplus连接,但不能使用nodejs。我是这样做的连接

oracledb.getConnection(
  {
    user          : "test",
    password      : "test",
    connectString : "150.150.50.50:1521/MYDB"
  }

对我有效的解决方案是编辑sqlnet.ora文件并更改

names.directory_path = (TNSNAMES)

names.directory_path = (TNSNAMES, EZCONNECT)
lvjbypge

lvjbypge3#

这个文档帮助我使用node-oracle连接到oracle数据库。我的错误之处在于我认为database属性是数据库的名称,但实际上它是service_name(即service_name)。在Oracle数据库的listener.ora文件中定义的GLOBAL_DBNAME,而不是SID_NAME)。
从我可以告诉node-oracle不支持tnsnames.ora,因为它使用选项来构建连接字符串,如//{hostname}:{port}/{database}

相关问题