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

一个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

 

 

 

 

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

cat $ORACLE_HOME/dg4msql/admin/initdg4msql.ora

 

 

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

)

 

 

 

当然如果想让网关监听信息不用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是什么

 

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也正常了,目前不知道是什么原因

 

 

 

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

create public database link SQLSERVERLINK connect to sa identified by "123456" using 'dg4msql';

8.       在oracle服务器上验证

select * from hr_social@SQLSERVERLINK;

 

 

 

 

 

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

Select * from test_123@SQLSERVERLINK

insert into  test_123@SQLSERVERLINK values (1)

delete from test_123@SQLSERVERLINK

update test_123@SQLSERVERLINK set hid=8

 

 

 

 

 

如果需要在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都不行)

 

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

 

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

 

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

 

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

 

 

 

 

 

透明网关遇到的一些问题

select * from tablename@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,不会出现实例是因为端口即代表了实例)

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

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

节点2有listener一个监听器

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

节点1修改为如下


节点2修改为如下


 

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

create public database link SQLSERVERLINK connect to sa identified by "123456" using 'sqlserver_DB';

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

select * from tablename@SQLSERVERLINK;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值