透明閘道器的安裝配置及一般使用

lusklusklusk發表於2016-06-07

一個ORACLE如果配置多個透明閘道器資訊,則不需要安裝多次閘道器軟體,只需要安裝一次,然後配置多個$ORACLE_HOME/dg4msql/admin/init閘道器SID.ora檔案並新增多個靜態監聽和tns指向閘道器SID即可,Sqlserver使用者名稱和密碼只在oracle建立dblink時用得上

 

 

Oracle透明閘道器連結sqlserver

Oracle

OSRed Hat Enterprise Linux Server release 5.4 amd64

DBOracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit

Ip10.98.20.108

Hostnamelocalhost2.localdomain

 

Sqlserver

OSwindows server 2003 x86

DBsqlserver2005

IP10.98.20.101

HostnameMDSTestWeb9

例項名稱:MSSQLSERVER

指向的DBetsudc

 

 

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伺服器上重啟監聽檢視閘道器監聽的SIDSERVICE_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伺服器上tnspingdg4msql通不通,如果不通檢查下看看什麼原因,檢查tnsping沒有問題後繼續如下

個人操作的時候遇到tnshostiptnsping不通,但是把tns中的hostip改成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中的另一個例項SQLEXPRESSGinkgo

 

1.       必須給sqlserver例項SQLEXPRESS新增埠為1533

2.       oracle伺服器的$ORACLE_HOME/dg4msql/admincp 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伺服器上檢視新增閘道器的sidservice_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環境介紹

OSlinux

DBOracle 11GR2

兩個節點,節點1ip10.98.0.147,節點2ip10.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使用者目錄下

節點1listenerlistener_scan1兩個監聽器

節點2listener一個監聽器

6.  參考以上兩個例項的監聽資訊,我們瞭解到只能修改listener的監聽器的資訊,因為兩者都有這個監聽,節點2沒有listener_scan1這個監聽器,就算有,也不要修改這個監聽資訊,因為只有listener監聽在oracle使用者下面執行lsnrctl status有能看到資訊,而listener_scan1在oracle使用者下執行lsnrctl status listener_scan1壓根看不到任何資訊修改監聽的方法為在grid使用者下執行netmgr,具體如下圖

節點1修改為如下


節點2修改為如下



7.  重啟監聽資訊,在grid使用者下執行srvctl stop listenersrvctl start listener

8.  gridoracle使用者下執行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;








來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2116918/,如需轉載,請註明出處,否則將追究法律責任。

相關文章