Oracle下安装透明网关,透明网关的安装配置及一般使用

一个ORACLE如果配置多个透明网关信息,则不需要安装多次网关软件,只需要安装一次,然后配置多个$ORACLE_HOME/dg4msql/admin/init网关SID.ora文件并新增多个静态监听和tns指向网关SID即可,Sqlserver用户名和密码只在oracle创建dblink时用得上

Oracle透明网关链接sqlserver

Oracle:

OS:Red Hat Enterprise

Linux Server release 5.4 amd64

DB:Oracle Database 11g

Enterprise Edition Release 11.2.0.1.0 - 64bit

Ip:10.98.20.108

Hostname:localhost2.localdomain

Sqlserver

OS:windows server 2003

x86

DB:sqlserver2005

IP:10.98.20.101

Hostname:MDSTestWeb9

实例名称:MSSQLSERVER

指向的DB:etsudc

1.在oracle服务器上安装和DB一样版本的网关软件,目录选择和DB一样的ORACLE_HOME

3de7daa662eecd403b29d642cf22e89c.png

cdc08d9f3b9a7b79427fedbd24a5eba8.png

2.在oracle服务器查看刚刚安装好的网关软件对应的文件(initdg4msql.ora其中的dg4msql是默认的网关SID,当然也可以把文件名手工修改成initwangguan.ora,这样的话后面涉及到网关SID都要修改成wangguan了),确保和如下图一致(虽然上面安装界面要输入sqlserver的实例名称,但是下面的配置中并未出现实例名称,只出现了端口,因为sqlserver数据库,不同的实例具有不同端口,端口即代表了实例)

cat $ORACLE_HOME/dg4msql/admin/initdg4msql.ora

bd7b061a2bcf177b3b7f146888ddfff8.png

3.在oracle服务器上配置监听增加如下网关监听信息

(SID_DESC =

(SID_NAME =

dg4msql) #此处为配置文件SID,要与initdg4msql.ora中的名字对应(ORACLE_HOME

=/orahome/11.2/db_1)

(PROGRAM = dg4msql) #此处为配置文件目录名称,$ORACLE_HOME/dg4msql/admin/initdg4msql.ora

)

f38cf95356f82944b7dba2a4a56b658a.png

当然如果想让网关监听信息不用1521端口也可以如下实验1522端口

LISTENER_getways

=

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =

10.98.20.108)(PORT = 1522))

)

)

SID_LIST_LISTENER_getways

=

(SID_LIST =

(SID_DESC=

(SID_NAME = dg4msql)

(ORACLE_HOME = /orahome/11.2/db_1)

(PROGRAM = dg4msql)

)

)

4.在oracle服务器上重启监听查看网关监听的SID和SERVICE_NAME是什么

bdf2c3d6814bd66c152cd38220253072.png

5.在oracle服务器上配置tns信息,新增如下(可以使用网关监听的service_name也可以使用sid,如下使用的是service_name)

dg4msql =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =

10.98.20.108)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = dg4msql)

)

(HS = OK)

)

与一般配置不同的就是(HS=OK)这句,这句指定是外部程序而不是Oracle数据库实例

6.在oracle服务器上tnsping下dg4msql通不通,如果不通检查下看看什么原因,检查tnsping没有问题后继续如下

个人操作的时候遇到tns中host是ip时tnsping不通,但是把tns中的host从ip改成hostname后正常,再改回ip也正常了,目前不知道是什么原因

52a6a140f687b41186a67bd0dd5b588a.png

6ba37093521c8ce57498791f6dbae276.png

7.在oracle服务器上创建dblink(最好创建成public)

createpublicdatabaselinkSQLSERVERLINKconnecttosaidentifiedby"123456"using'dg4msql';

8.在oracle服务器上验证

select*fromhr_social@SQLSERVERLINK;

网关服务器的使用其实就是dblink的使用,dblink不能执行DDL

Select * fromtest_123@SQLSERVERLINK

insertintotest_123@SQLSERVERLINKvalues(1)

deletefromtest_123@SQLSERVERLINK

update test_123@SQLSERVERLINK set

hid=8

3030c0774799d673f92328bfbd24e135.png

如果需要在ORACLE上再建立一个透明网关指向另一台sqlserver服务器或指向sqlserver服务器的另一个sqlserver实例或指向sqlserver服务器该实例的另一个数据库,则只需要在步骤2中为新增一个initSID.ora文件、步骤3中为新增一个静态监听SID_DESC指向新的SID,再增加tns和创建dblink即可

如还需要在oracle服务器10.98.20.108中新建一个透明网关指向10.98.20.101中的另一个实例SQLEXPRESS的Ginkgo

1.必须给sqlserver实例SQLEXPRESS新增端口为1533

2.在oracle服务器的$ORACLE_HOME/dg4msql/admin下cp initdg4msql.ora initginko.ora,再修改initginko.ora为如下(好像只能使用[10.98.20.101]:1533//Ginkgo这样的配置,其他如[10.98.20.101]:1533/SQLEXPRESS/Ginkgo或[10.98.20.101]/SQLEXPRESS/Ginkgo都不行)

399c80335ee95cfb78437d70f1287e47.png

3.再在oracle服务器上配置监听增加如下网关监听信息

18ee0cac859c9a6e09cec6f0848227ce.png

4.重启监听后再在oracle服务器上查看新增网关的sid和service_name是什么

6b7a2b75b8fbd1fff2d863182151438e.png

5.再在oracle服务器上配置tns增加如下信息

38868c0f7a941e3285280e4a48ddd96e.png

6.再在oracle服务器上创建dblink,验证即可

透明网关遇到的一些问题

select*fromtablename@SQLSERVERDBLINK时报错ORA-00600:内部错误代码,参数: [HO define: Long fetch]

原因:sqlserver表中的数据类型有大文本类型或字段太多超出了限制,不要使用*,直接写出字段名

Select字段名报错ORA-00904无效的列名或者标识符

原因:sqlserver建的表时用了双引号括起来的列名,select column时”column”加双引号

RAC配置透明网关的方法

RAC环境介绍

OS:linux

DB:Oracle 11GR2

两个节点,节点1的ip10.98.0.147,节点2的ip10.98.0.148

1.没有安装透明网关之前,两个节点的oracle用户下面的$ORACLE_HOME都不存在dg4msql目录

2.下载getways软件放到任意一个节点上(放到一个节点上就可以了),并授予oracle:oinstall权限,chown –R oracle:oinstall getways

3.在有安装包的节点上使用Oracle用户安装getways,安装界面默认自动勾选cluster installation,会自动安装到两个节点上

4.  两个节点的oracle用户下面的$ORACLE_HOME都有dg4msql目录了,查看两个节点的/u01/app/oracle/product/11.2.0/db_1/dg4msql/admin/initdg4msql.ora都有类似如下配置(IP、端口、DB,不会出现实例是因为端口即代表了实例)

f3d70cde786dce23634101e58b7675c9.png

5.修改监听前,节点1和节点2的的监听信息如下,RAC的监听信息在grid用户目录下

节点1有listener和listener_scan1两个监听器

cd4eceb55fffca6a74fe77fe1a7e3918.png

节点2有listener一个监听器

d9b658a9fa28e45df5b3d3f7b3cede92.png

6.参考以上两个实例的监听信息,我们了解到只能修改listener的监听器的信息,因为两者都有这个监听,节点2没有listener_scan1这个监听器,就算有,也不要修改这个监听信息,因为只有listener监听在oracle用户下面执行lsnrctl status有能看到信息,而listener_scan1在oracle用户下执行lsnrctl statuslistener_scan1压根看不到任何信息,修改监听的方法为在grid用户下执行netmgr,具体如下图

节点1修改为如下

454eed9dfa54f2cda00a578f17a1c5b4.png

b97866410dbfab97bbde4aeaabb8393d.png

beb3e8a567392a57e4dab53f06f646ce.png

节点2修改为如下

b085aa601186eac751f1f2d765a41c21.png

f5cf7792769f5994b2a3db892964769d.png

7.重启监听信息,在grid用户下执行srvctl stop listener、srvctl start listener

8.在grid或oracle用户下执行lsnrctl status都发现了透明网关的service

9.修改两个节点的oracle用户下的$ORACLE_HOME/network/admin/tnsname.ora文件,新增如下配置

节点1

Sqlserver_DB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =10.98.0.147)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dg4msql)

)

(HS = OK)

)

节点2

Sqlserver_DB =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST =10.98.0.148)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dg4msql)

)

(HS = OK)

)

10.Oracle用户下执行tnsping sqlserver_DB看是否正常

11.创建DBlink

createpublicdatabaselinkSQLSERVERLINKconnecttosaidentifiedby"123456"using'sqlserver_DB';

12.执行查询,看是否正常

select*fromtablename@SQLSERVERLINK;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值