2012-07-19 111 views
2

我正在編寫一個從Oracle數據庫中提取數據的Node.js應用程序。 DBA最近將數據庫遷移到另一臺機器上,一切都破裂了。Node.js和node-oracle:連接到Oracle數據庫的問題

我試過重新創建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

的例子爲在github上顯示兩個驅動程序'connect'中定義的主機名等;那麼你確定他們甚至提到'tnsnames.ora'? (我從來沒有用過,清楚!)你可以發佈你如何連接? – 2012-07-19 22:04:17

+0

編輯以顯示我如何連接 – Aqueous 2012-07-24 14:49:06

+0

好吧,那麼您是否已在更新'Preferences'值的地方更新了'oracle_host',以便它指向新的服務器?這不會經過'tnsnames.ora'。 – 2012-07-24 14:55:07

回答

0

documentation幫助我連接到使用node-oracle Oracle數據庫。出錯的地方是我認爲database屬性是數據庫的名稱,但實際上它是service_name(即在Oracle數據庫的listener.ora文件中定義的GLOBAL_DBNAME,而不是SID_NAME)。

從我可以告訴node-oracle不支持tnsnames.ora,因爲它使用的選項,打造一個連接字符串,如//{hostname}:{port}/{database}

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)