配置從 SQL Server 2016 到 Oracle 12c 的新連結伺服器
我在 SQL Server 2016 中創建連結伺服器以與遠端 Oracle 數據庫通信時遇到困難。
我已經安裝了 Oracle 數據庫客戶端 12c。首先我安裝了 InstantClient,然後我意識到我需要更多的功能安裝執行時。在安裝過程中,我接受
C:\Oracle\product\12.1.0\client_1
了 Oracle 主目錄。對於 Oracle Home 使用者,我使用了 Windows 內置帳戶NT AUTHORITY\LOCAL SERVICE
。我使用 Oracle Net Configuration Assistant 創建了一個帶有 alias =
MyAlias
和 service name =的 tnsnames.ora 文件MyServiceName
。在我為遠端數據庫提供憑據後,Net Configuration Assistant 能夠成功測試數據庫連接。Oracle Net Configuration Assistant 創建的 tnsnames.ora 文件位於以下文件夾中:
C:\Oracle\product\12.1.0\client_1\network\admin
在 Powershell 提示符下,我執行
tnsping MyAlias
並得到了OK (200 msec)
.我認為(希望!)這意味著我得到了 Oracle 方面的正確性。
在 Microsoft 方面,我安裝了 .NET Framework 3.5。然後我從這裡下載並安裝了 Oracle 數據訪問組件 (ODAC) 。具體來說,我下載了 ODAC122010Xcopy_x64.zip並按照包含的自述文件中的說明進行操作。我在安裝過程中使用的命令行選項是:
.\install.bat all c:\oracle odac true true
上述命令的參數為:
- component_name =
all
(安裝所有 Oracle Providers)- oracle_home_path =
c:\oracle
(應該是 Oracle 基礎文件夾還是子文件夾?)- oracle_home_name =
odac
(確定系統資料庫項路徑)- install_dependents =
true
- machine_wide_configuration =
true
(這個參數是一個猜測;我希望它適用於這台機器的所有使用者)然後我將 C:\oracle 和 C:\oracle\bin 添加到環境變數 PATH 的開頭。在 Powershell 中,這是:
[Environment]::SetEnvironmentVariable("Path","C:\oracle;C:\oracle\bin;" + $env:Path, [System.EnvironmentVariableTarget]::Machine)
在 SQL Server Management Studio 中,我可以在連結伺服器提供程序列表中看到 OraOLEDB.Oracle。
現在嘗試創建連結伺服器。這是我的配置:
為了安全起見,我現在正在嘗試使用固定的安全上下文,使用在測試與 Oracle Net Configuration Assistant 的連接時有效的相同憑據。
它不起作用。這是一般錯誤:
已創建連結伺服器,但連接測試失敗。您要保留連結伺服器嗎?
無法為連結伺服器“MYLINKEDSERVER”初始化 OLE DB 提供程序“OraOLEDB.Oracle”的數據源對象。連結伺服器“MYLINKEDSERVER”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息“ORA-12154:TNS:無法解析指定的連接標識符”。(Microsoft SQL Server,錯誤:7303)
我錯過了什麼?哪些診斷測試有價值?
嘗試將您的數據源和提供者字元串更改為 MYALIAS。查看我的伺服器上的三個 Oracle 連結伺服器,這就是我設置它們的方式。
我今天在我的 MS SQL 2016 和 oracle 12c 上檢查了它,並且工作正常。
您不需要 oracle 即時客戶端 - 只有 oracle ole db 提供程序和
tnsnames.ora
你必須
set "TNS_ADMIN=C:\oracle\network\admin"
和"ORA_CLIENT_PATH=C:\oracle" and add "c:\oracle;c:\oracle\bin"
PATH在“連結伺服器”設置中,您必須使用來自
tnsname.ora
. “產品名稱”可以為空羅爾夫