我正在编写一个从Oracle数据库中提取数据的Node.js应用程序。 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;
}
});
答案 0 :(得分: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)
答案 1 :(得分:0)
尝试指定TNS_ADMIN
环境变量。
答案 2 :(得分:0)
这documentation帮助我使用node-oracle
连接到oracle数据库。在我出错的地方,我认为database
属性是数据库的名称,但实际上它是service_name
(即GLOBAL_DBNAME
文件中定义的listener.ora
Oracle数据库,而不是SID_NAME
)。
我可以告诉node-oracle
不支持tnsnames.ora
,因为它使用选项来构建连接字符串,例如//{hostname}:{port}/{database}
。