客户的环境为linux rac 11.2.0.4
首先下载oracle 透明网关,正常我们安装rac只需要使用前三个软件包,其中第一个是集群软件,第二和第三是数据库软件
第四是客户端软件,而透明网关在oracle安装包的第五个软件包中.
执行runInstall.sh进行安装.安装过程中选择sqlserver的组件,
下一步,输入IP地址,实例名,数据库名
其中,实例名可以通过服务来查看到,默认一般为MSSQLSERVER
安装完成之后,下面就开始配置了,所有的配置都需要在两个节点运行
1.配置initdg4msql.ora
这里安装完成之后自动已经配置完成了,你只需要检查一下,如果需要修改地址,可以进行修改
cd /u01/app/oracle/product/11.2.0/db_1/dg4msql/admin
[oracle@oracle1 admin]$ cat 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=[10.36.250.15]:1433//ris_basic
# alternate connect format is hostname/serverinstance/databasename
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
其中连接信息,如果不是默认的实例名则配置如下:
HS_FDS_CONNECT_INFO=[192.168.30.31]:54515//RIS//RIS_BASIC
如果你想配置多个数据源,则需要配置多个配置文件,例如initdg4msql1.ora initdg4msql2.ora ...
如下:
-rw-r--r-- 1 oracle oinstall 10976 Nov 30 2011 dg4msql_cvw.sql
-rw-r--r-- 1 oracle oinstall 746 Jun 8 2007 dg4msql_tx.sql
-rw-r--r-- 1 oracle oinstall 365 Feb 21 12:15 initdg4msql_lis.ora
-rw-r--r-- 1 oracle oinstall 368 Feb 21 11:27 initdg4msql.ora
-rw-r--r-- 1 oracle oinstall 426 Feb 21 13:34 initdg4msql_pacs.ora
-rw-r--r-- 1 oracle oinstall 366 Feb 21 12:14 initdg4msql_xindian.ora
-rw-r--r-- 1 oracle oinstall 412 Feb 21 11:27 listener.ora.sample
-rw-r--r-- 1 oracle oinstall 244 Feb 21 11:27 tnsnames.ora.sample
2.配置listener
如果是非rac环境,直接在oracle用户下进行配置,如果是RAC则需要在grid用户下配置
在刚刚的目录下面有相关的配置模板,下面为我们的配置:
cd /u01/11.2.0/grid/network/admin
[grid@oracle1 admin]$ cat listener.ora
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
LISTENER2=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1531))
)
SID_LIST_LISTENER2=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4msql)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
(PROGRAM=dg4msql)
)
)
注意:
这里我们新建了一个监听,为listener2是为了不和当前的监听冲突,配置的端口号为1531
这里的sid_name就是你上面配置的配置文件的名称
program用默认的dg4msql表示使用msql的接口
如果配置了多个数据源,则在SID_LIST下面写上多个SID的描述,例如:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = dg4msql1)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\tg_1)
(PROGRAM = dg4msql)
)
(SID_DESC =
(SID_NAME = dg4msql2) ##这里的sid name保持和文件名的后缀一致
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\tg_1)
(PROGRAM = dg4msql)
)
)
3.配置tnsnames.ora
这里配置tns的服务名,由于是在oracle中调用,所以需在ORACLE_HOME下配置,而不是在GRID_HOME下配置,示例如下:
DG4MSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1531))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = dg4msql) #这里的SID保持和listener中的一致
)
(HS=OK)
)
这里的IP就是上面监听的IP地址,这里由于gateway和oracle安装在本地,所以可以写127.0.0.1
如果连接多个数据源,则写上多个,注意服务名和SID进行区分
4.创建dblink
在oracle中创建dblink,示例如下:
SQL> create public database link to_pacs connect to dsg identified by Dsg_123 using 'dg4msql';
Database link created.
这里的dg4msql就是tnsnames中配置的服务名.
测试一下dblink的连通:
SQL> select count(*) from role@to_pacs;
COUNT(*)
----------
9
成功连接.
5.遇到的问题
(1) 查询报错:
SQL> select count(*) from role@to_pacs;
select count(*) from role@to_pacs
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server]用户 'XXX' 登录失败。
{28000,NativeErr = 18456}
ORA-02063: preceding 2 lines from TO_PACS
这个问题很明显,是sqlserver中提供的用户名密码错误!
(2)查询报错:
SQL> select count(*) from role@to_pacs;
select count(*) from role@to_pacs
ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Oracle][ODBC SQL Server Wire Protocol driver][SQL
Server]无法打开登录所请求的数据库 "ris_basic"。登录失败。 {08001,NativeErr =
4060}[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server]用户 'dicom'
登录失败。 {28000,NativeErr = 18456}
ORA-02063: preceding 2 lines from TO_PACS
这里是由于sqlserver中所给的用户没有访问指定数据库的权限导致.