2

我正在编写一个从 Oracle 数据库中提取数据的 Node.js 应用程序。DBA 最近将数据库迁移到另一台机器上,一切都崩溃了。

我尝试重新创建 tnsnames.ora 和 sqlnet.ora 文件。我相当确定它们是正确的,因为 sqlplus 可以很好地连接到服务。但是 node-oracle 不断报告错误:“ORA-12154: TNS:could not resolve the connect identifier specified”。

这对我来说是莫名其妙的。在我看来,如果我设置了 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;
            }

        });
4

3 回答 3

2

我能够使用 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)
于 2015-12-01T10:48:45.230 回答
0

文档帮助我使用node-oracle. 我出错的地方是我认为database属性是数据库的名称,但实际上它是service_name(即在 Oracle 数据库上GLOBAL_DBNAME的文件中定义的,而不是)。listener.oraSID_NAME

据我所知node-oracle,它不支持tnsnames.ora,因为它使用选项来构建连接字符串,例如//{hostname}:{port}/{database}.

于 2012-12-05T16:42:45.813 回答
0

尝试指定TNS_ADMIN环境变量。

如何配置我的 Oracle tnsnames 文件位置?

于 2012-07-19T20:59:10.597 回答