2011-01-11 288 views
2

可能會向誰回覆, 我們在Redhat Enterprise Linux 5.4上安裝了Oracle 11g r2。我們正試圖連接到Sql Server 2005,在應用一些註釋後,下面的錯誤是我們得到的結果: 「異構遠程代理中的ORA-28513內部錯誤」。Oracle 11gr2連接到使用dg4msql的Sql Server問題


的listener.ora是如下:

[[email protected] admin]$ less listener.ora 
) 
(SID_DESC = 
(SID_NAME = dg4msql) 
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) 
(PROGRAM = dg4msql) 
(ENVS=LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/db_1/dg4msql/lib:/u01/app/oracle/product/11.2.0/db_1/lib) 
) 
) 

LOGGING_LISTENER = on 

LISTENER = 
(DESCRIPTION_LIST = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521)) 
) 
) 

ADR_BASE_LISTENER = /u01/app/oracle 

TRACE_LEVEL_LISTENER = on 

的tnsnames.ora是如下:

[[email protected] admin]$ less tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora 
# Generated by Oracle configuration tools. 

fasdat = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521)) 
) 
(CONNECT_DATA = 
(SID = fasdat) 
) 
) 
dg4msql = 
(DESCRIPTION = 
(ADDRESS = 
(PROTOCOL= TCP) 
(HOST = oracledb) 
(PORT = 1521) 
) 
(CONNECT_DATA= 
(SID=dg4msql)) 
(HS=OK)) 

init4msql.ora是如下:

[[email protected] admin]$ less initdg4msql.ora 
# This is a customized agent init file that contains the HS parameters 
# that are needed for the Database Gateway for Microsoft SQL Server 

# 
# HS init parameters 
# 
HS_FDS_CONNECT_INFO=192.168.1.48:1433//NAVISION 
# alternate connect format is hostname/serverinstance/databasename 
#HS_FDS_TRACE_LEVEL=0 
HS_FDS_RECOVERY_ACCOUNT=RECOVER 
HS_FDS_RECOVERY_PWD=RECOVER 
#HS_LANGUAGE=turkish_turkey.WE8ISO8859P9 
HS_NLS_NCHAR=WE8ISO8859P9 
#HS_FDS_TRACE_LEVEL=DEBUG 

我們已經建立了一個系統DSN在SQL Server 2005中名爲「dg4msql」,選擇了驅動程序作爲「SQL服務器」和服務器的「本地」

我們將很高興聽到任何想法解決這個問題,

+0

skaffman,謝謝格式。 –

回答

1

您似乎使用網關的MySQL設置,而不是異構網關(用於ODBC連接)。這裏是過程的概述

在SQL Server上創建一個數據庫用戶,併爲其提供對希望通過Oracle數據庫鏈接讀取的數據庫/表的讀訪問權限。

在網關家裏要訪問應該位於$ OH/dg4msql /管理形式的initsid.ora其中SID是 數據庫中使用名稱的init.ora中 每個SQL Server數據庫鏈接(如initbob.ora),所以創建一個

HS_FDS_CONNECT_INFO=msserver1:1234//Example_Database 
HS_FDS_TRACE_LEVEL=OFF 
HS_FDS_RECOVERY_ACCOUNT=RECOVER 
HS_FDS_RECOVERY_PWD=RECOVER 
HS_TRANSACTION_MODEL=READ_ONLY 

您現在必須將新的SID添加至現有的SID_LIST內的額外SID_DESC節中的網關家裏的listener.ora,例如

(SID_DESC = 
(SID_NAME=bob) 
(ORACLE_HOME=/oracle/gateway/product/11.2.0) 
(ENVS=LD_LIBRARY_PATH=/oracle/gateway/product/11.2.0/dg4msql/driver/lib;/oracle/gateway/product/11.2.0/lib) 
(PROGRAM=dg4msql) 
) 

現在應該停止並重新啓動網關偵聽器,以便新的sid變爲 處於活動狀態。 NB重新加載是不夠的。

現在您必須在tnsnames.ora文件中爲每個要創建鏈接的每個 數據庫的偵聽器添加新的sid。您不需要在網關家中執行此操作,除非它也是您要在其中創建數據庫鏈接的數據庫主目錄。

bob = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = severname.example.com)(PORT = 1690)) 
(CONNECT_DATA = (SID = bob)) 
(HS = OK) 
) 

注:主機和端口是爲網關不是爲SQL Server數據庫

在每個數據庫需要鏈接到MS-SQL數據庫,你應該創建一個數據庫鏈接到新的網關SID。

CREATE PUBLIC DATABASE LINK bob 
CONNECT TO "ms_user" IDENTIFIED BY "ms-passwd" USING 'bob'; 

其中ms-user和ms-password是您在開始時創建的SQL Server用戶。現在

可以測試新的數據庫鏈接

SELECT COUNT(*) FROM "Table_Name"@bob; 

一旦你這個工作,就可以改變的initsid.ora文件中添加參數,以滿足您的連接。如果你這樣做,你可以通過網關輕鬆添加和管理許多不同的數據庫。

+0

抱歉,延遲。它已經推出了幾個月。我們已經解決了,但老實說不記得如何?您的解決方案自頂向下清單是好的。謝謝你的關心 –