2008-10-29 113 views
1

我想用MS訪問連接到Oracle數據庫。 我不斷收到以下錯誤信息:Oracle - ODBC連接使用MS Access錯誤(ORA-12154)

ORA-12154:TSN-無法解析連接標識符secified

Oracle驅動程序的OracleClient10g可以驗證數據庫服務器存在。

我在tsnnames.ora文件中的部分看起來像這樣: UBASEP10G = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)(HOST = bxxx-xxx.yyyy.com) (PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = UBASE) ) )

按我嘗試收到此錯誤解決我已將此添加到sqlnet.ora文件:

名。 DIRECTORY_PATH =(HOSTNAME,ONAMES, TNSNAMES,LDAP,EZCONNECT)

當使用它會要求提供以下 Windows的ODBC驅動程序配置實用程序以下信息 數據源名稱:MYSOURCE NAME TSN服務名稱:UBASEP10G 用戶名:MYUSERID

有什麼建議? ????

回答

2

我沒有訪問,但使用Excel 2007,我必須做到以下幾點:

  1. 打開ODBC管理器(管理員控制面板)
  2. 對於任何一個用戶DSN或系統DSN,單擊Add ...
  3. 選擇 「甲骨文OraDb10g_home1」 作爲司機
  4. 在Oracle ODBC驅動程序配置,我輸入:
    • 數據叟RCE名稱:myOracleDsn
    • 說明:這是我對我的Oracle數據庫
    • TNS服務名稱DSN:oratns
    • 用戶ID:斯科特
  5. 單擊測試連接,並進入 「虎」 爲密碼。顯然,我正在連接到我的scott/tiger示例Oracle數據庫。另外,當我安裝Oracle時,我選擇了oratns作爲我的TNS名稱。上面的其他兩個值是任意的 - 您將在Excel中的對話框中看到它們。
  6. 如果測試有效,請單擊確定。
  7. 轉到Excel並建立到DSN的新連接。該對話框將顯示「myOracleDsn」作爲選項。選擇它,再次輸入「老虎」作爲密碼,你應該得到一個工作連接。
0

嘗試在您的TNSNAMES.ora文件中將(CONNECT_DATA =(SID = UBASE))更改爲(CONNECT_DATA =(SID = UBASE))。

ServiceName和SID不一定相同,因此並不總是可以互換的。

SERVICENAME參數引用數據庫服務器上的listener.ora文件中指定的特定GLOBAL_DBNAME。它是服務器上實例的別名。您可以在引用相同SID的服務器上擁有多個servicenames。 SID參數指的是該服務器上的特定實例。

在客戶端使用servicename的優點是,DBA可以更改服務名稱引用的實際實例,以透明地向使用該名稱的客戶端發送。我可以有這個服務器上的listener.ora文件:

(SID_DESC = 
    (GLOBAL_DBNAME = THESERVICE) 
    (ORACLE_HOME = d:\oracle\10.2.0_DB) 
    (SID_NAME = SID1) 

後來,我可以改變實際的數據庫通過切換的listener.ora配置被引用:

(SID_DESC = 
    (GLOBAL_DBNAME = THESERVICE) 
    (ORACLE_HOME = d:\oracle\10.2.0_DB) 
    (SID_NAME = SID2) 

而且沒有人對明智的客戶端。在客戶端上的tnsnames.ora文件中不需要進行任何更改。

+0

感謝您的建議 - 但我仍然在嘗試測試連接時出現錯誤消息「TSN:無法解析指定的連接標識符」 – Joe 2008-10-29 16:43:34

0

你可以通過SQL * Plus登錄到有問題的數據庫嗎?從具有工作連接的另一臺計算機(或數據庫服務器本身)執行此操作也可以。

如果是這樣,這條命令:

select value from v$parameter where name='service_names'; 

在你的TNSNAMES.ORA,使用的SERVICE_NAME所列的值之一。

在你ODBC連接,所有你需要的是設置TNS服務名稱到你上面所用的名字,「UBASEP10G」

+0

我相信我正在這樣做,它不起作用....數據源名稱:MYSOURCE名稱TSN服務名稱:UBASEP10G USERID:MYUSERID ....通知服務名稱:UBASEP10G是不是你剛纔建議的? – Joe 2008-10-29 16:58:15

+0

TNSNAMES.ORA中的「SERVICE_NAME」和ODBC對話框中的「TNS服務名稱」有所區別。在對話框中,「TNS服務名稱」需要與TNSNAMES.ORA文件(「UBASEP10G」)中的=左邊的內容完全相同。 – 2008-10-29 17:15:19

+0

但是,您的問題是您無法解析TNSNAMES.ORA中的SERVICE_NAME。這就是爲什麼我讓你直接從數據庫實例認爲它正在監聽的地方獲得這個值。 – 2008-10-29 17:16:29

0

讓我們回到了原點。打開命令窗口,並連接到數據庫:

的sqlplus myuserid /輸入mypassword @ UBASEP10G

這是否連接成功?

既然答案是否定的,有沒有一種方法可以成功連接到這個數據庫? BQ是正確的,你的問題是UBASE的服務名稱。您需要確定服務器上的偵聽器認爲該數據庫的名稱是什麼。你有權訪問服務器?你可以在服務器上執行命令「lsnrctl status」嗎?這將告訴你與聽衆註冊的服務,看起來像這樣:

Services Summary... 
Service "UBASE" has 1 instance(s). 
    Instance "UBASE", status READY, has 1 handler(s) for this service... 
0

嘗試t登並報告結果。

壞:

C:\>tnsping notreal.world 

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:56:47 

Copyright (c) 1997 Oracle Corporation. All rights reserved. 

Used parameter files: 
C:\oracle\ora92\network\admin\sqlnet.ora 

TNS-03505: Failed to resolve name 

好:

O:\>tnsping real.world 

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:57:42 

Copyright (c) 1997 Oracle Corporation. All rights reserved. 

Used parameter files: 

C:\oracle\ora92\network\admin\sqlnet.ora 

Used TNSNAMES adapter to resolve the alias 
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) 
(HOST = DBSERVER.DOMAIN.COM)(PORT = 1521)) (LOAD_BALANCE = YES) (FAILOVER = YES)) 
(CONNECT_DATA = (SERVICE_NAME = REAL.WORLD) 
(FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 10) (DELAY = 3)))) 
OK (40 msec)