Oracle 10g + SQL SERVER 2000 透明網關設置

 Oracle 10g + SQL SERVER 2000 透明網關設置

前提:在安裝oracle時選中安裝透明網關組件(默認不選中),如果未安裝可以重新選擇安裝此組件.
環境:Oracle 10g + SQL SERVER 2000
數據庫:Oracle:ZNDATA;SQL SERVER:ZNDB
目標:在oracle下建立一個tnsname用來訪問SQL SERVER的ZNDB數據庫.
(1)建立ZNDB數據庫在Oracle下的別名zheneng:
    進入%ORACLE_HOME%/tg4msql/admin目錄建立文件initzheneng.ora,裏面內容如下:
    HS_FDS_CONNECT_INFO="SERVER=192.168.0.197;DATABASE=ZNDB"
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
(2)建立listener:
    進入%ORACLE_HOME%/network/admin修改listener.ora文件增加:
    (SID_DESC =
          (SID_NAME = zheneng)   ###注意:要與前面建的文件名字initzheneng去掉init後一樣.
          (ORACLE_HOME = D:/oracle/product/10.1.0/db_1)
          (PROGRAM = tg4msql)
        )
(3)建立tnsnames.ora:
    與(2)相同目錄下修改tnsnames.ora文件增加一個TNSNAME:
    ZNDB =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.197)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = zheneng)
        )
        (HS = zheneng)
      )
(4)sqlplus測試:
    創建數據庫連接:
    sql>create   database   link   mssqlLink   connect   to   sa   identified   by   sa using 'ZNDB';
    sql>select * from akm@mssqlLink
    如果正確的話應該顯示sqlserver中的結果

參考網上文章:
不同數據庫平臺的互連一般稱之爲數據庫的異構服務,現在各大數據庫之間都可以實現這樣的異構互連,只是各廠商的具體實現技術不一樣,如:在SQL   SERVER裏面叫做LINKED   SERVER,通過ODBC實現與其它數據庫的互聯。    
  而ORACLE實現異構服務的技術叫做透明網關(Transparent   Gateway),當然之前ORACLE還採用過通用連接技術。目前ORACLE利用透明網關可以實現和SQL   SERVER、SYBASE、DB2等多種數據庫的互聯。  
   
  透明網關的體系結構也很簡單,在ORACLE和SQL   SERVER之間使用ORACLE透明網關服務器實現互連互通,其中透明網關服務器可以與ORACLE或SQL   SERVER數據庫在同一臺主機上,也可以是在獨立的一臺主機上。  
   
  下面是具體步驟,如有疑問歡迎和我聯繫,MSN:   [email protected]。  
   
  1、在SQL   SERVER數據庫上創建測試賬號和表  
   
  這裏我用的是10.16.74.140的PUBS數據庫,賬號cyx,  
   
  create   table   t   (c   char(10));  
   
  2、我測試所用數據庫和透明網關是在同一臺機器上,在我本機:10.16.98.16,透明網關在oracle默認安裝時是不安裝的,所以如果你想用需要選擇這一選項。  
   
  3、安裝透明網關for   sql   server的軟件後,可以在$ORACLE_HOME下看到tg4msql目錄,編輯$ORACLE_HOME/tg4msql/admin/inittg4msql.sql文件確認這一行正確:  
   
  HS_FDS_CONNECT_INFO="SERVER=10.16.74.140;DATABASE=pubs"  
   
  4、修改透明網關server上的listener.ora,在SID_LIST中加入以下內容:  
   
  (SID_NAME   =   tg4msql)   #   SID自己命名    
   
  (ORACLE_HOME   =   c:)    
   
  (PROGRAM   =   tg4msql)    
   
  5、在oracle   server上的tnsnames.ora中加入到透明網關的tnsname,內容如下:  
   
  sql2k   =    
   
  (DESCRIPTION   =    
   
  (ADDRESS_LIST   =    
   
  (ADDRESS   =   (PROTOCOL   =   TCP)(HOST   =   10.16.98.16)(PORT   =   1521))   #此處HOST填的是透明網關SERVER的地址  
   
  )    
   
  (CONNECT_DATA   =   (SID   =   tg4msql)   )   #此SID應和透明網關SERVER上設定的SID相同  
   
  (HS=OK)    
   
  )    
   
  6、修改ORACLE   SERVER的初始化參數,將global_names設爲false,因爲我們並不使用GLOBAL   NAME。然後重起數據庫。  
   
  7、現在在ORACLE   SERVER上創建DB   LINK就可以了。下面實驗數據:  
   
  ------------   www.ncn.cn   -------------   gototop   --------------  
   
  C:>sqlplus   /nolog  
   
  SQL*Plus:   Release   9.2.0.1.0   -   Production   on   星期三   6月   25   13:29:41   2003  
   
  Copyright   (c)   1982,   2002,   Oracle   Corporation.   All   rights   reserved.  
   
  SQL>   conn   sys/change_on_install   as   sysdba  
   
  已連接。  
   
  SQL>   create   user   cyx   identified   by   cyx   default   tablespace   users;  
   
  用戶已創建  
   
  SQL>   grant   connect   to   cyx;  
   
  授權成功。  
   
  SQL>   grant   resource   to   cyx;  
   
  授權成功。  
   
  SQL>   conn   cyx/cyx  
   
  已連接。  
   
  SQL>   create   database   link   tosql2k   connect   to   cyx   identified   by   cyx   using    
   
  2   'sql2k';  
   
  數據庫鏈接已創建。  
   
  SQL>   select   *   from   t@tosql2k;  
   
  c  
   
  ----------  
   
  abc  
   
  aaa  
   
  bbb  
   
  cyx  
   
  gototop  
   
  ncn  
   
  11111  
   
  已選擇7行。  
   
  SQL>   insert   into   t@tosql2k   values('ncn.cn');  
   
  已創建   1   行。  
   
  SQL>   commit;  
   
  提交完成。  
   
  SQL>   select   *   from   t@tosql2k;  
   
  c  
   
  ----------  
   
  abc  
   
  aaa  
   
  bbb  
   
  cyx  
   
  gototop  
   
  ncn  
   
  11111  
   
  ncn.cn  
   
  已選擇8行。  
   
  ------------   www.ncn.cn   -------------   gototop   --------------  
   
  以上示例,oracle   server和透明網關server都是在同一臺機器上,像在開始說明的那樣,我們同樣可以在其他下面oracle   server中通過透明網關來訪問sql   server的數據。下面是示例:  
   
  現在這個oracle   server上添加tnsname。  
   
  ------------   www.ncn.cn   -------------   gototop   --------------  
   
  hawk3$sqlplus   cyx  
   
  SQL*Plus:   Release   8.1.7.0.0   -   Production   on   Wed   Jun   25   14:00:34   2003  
   
  (c)   Copyright   2000   Oracle   Corporation.   All   rights   reserved.  
   
  Enter   password:  
   
  Connected   to:  
   
  Oracle8i   Enterprise   Edition   Release   8.1.7.0.0   -   Production  
   
  With   the   Partitioning   option  
   
  JServer   Release   8.1.7.0.0   -   Production  
   
  SQL>   create   database   link   hawk3_sql2k   connect   to   cyx   identified   by   cyx  
   
  2   using   'sql2k';  
   
  Database   link   created.  
   
  SQL>   select   *   from   t@hawk3_sql2k;  
   
  c  
   
  --------------------  
   
  abc  
   
  aaa  
   
  bbb  
   
  cyx  
   
  gototop  
   
  ncn  
   
  11111  
   
  ncn.cn  
   
  8   rows   selected.  
   
  ------------   www.ncn.cn   -------------   gototop   --------------  
   
  gototop   2003.7.25注:很多朋友問到關於透明網關的一些問題,在此加以說明如下:  
   
  1、Oracle   For   SQL   Server的透明網關在UNIX下無法實現,目前只支持WIN;   原因很簡單,SQL   Server本身不支持UNIX,所以Oracle也無法直接在UNIX下訪問SQL   Server。  
   
  2、Oracle   For其它數據庫的透明網關,如SYBASE等有UNIX本版本的數據庫在UNIX可以實現。    
   
  3、Oracle透明網關軟件在Oracle   8i時是需要花錢另買的,大約1萬$;到Oracle   9i時是作爲數據庫的一個組件免費發佈的。安裝時在組件種選擇即可。    
   
  4、針對我們的實際應用,如果有需要實現Oracle   到SQL   Server的互連,我們需要另外用一臺WIN下的Oracle   9i來做透明網關服務器,其它UNIX下的Oracle通過這個透明網關來訪問SQL   Server。    
   
  5、不同數據庫間的數據處理需使用標準SQL來實現。    
   
  6、各數據庫中特殊的數據類型,需要在程序中實現轉換,應儘量避免使用無法轉換的數據類型。
發佈了69 篇原創文章 · 獲贊 4 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章