[zt] Oracle與SQL Server的互連

tolywang發表於2009-05-08

作者:gototop    
  -------------------------------------------------------------------------  
   
  另一篇  
  http://www.csdn.net/develop/author/columnAuthor/hochihyi/Article/SqlServer/002.htm  
  -----------------------------------------------------------------------------------  
   
          不同資料庫平臺的互連一般稱之為資料庫的異構服務,現在各大資料庫之間都可以實現這樣的異構互連,只是各廠商的具體實現技術不一樣,如:在SQL   SERVER裡面叫做LINKED   SERVER,透過ODBC實現與其它資料庫的互聯。  
   
          而ORACLE實現異構服務的技術叫做透明閘道器(Transparent   Gateway),當然之前ORACLE還採用過通用連線技術。目前ORACLE利用透明閘道器可以實現和SQL   SERVER、SYBASE、DB2等多種資料庫的互聯。 Oracle   For   SQL   Server的透明閘道器在UNIX下無法實現,目前只支援WIN  
    
           透明閘道器的體系結構也很簡單,在ORACLE和SQL   SERVER之間使用ORACLE透明閘道器伺服器實現互連互通,其中透明閘道器伺服器可以與ORACLE或SQL   SERVER資料庫在同一臺主機上,也可以是在獨立的一臺主機上。  
   
  下面是具體步驟:

    
  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就可以了。下面實驗資料:  
   
  ------------     -------------   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行。  
   
  ------------     -------------   gototop   --------------  
   
  以上示例,oracle   server和透明閘道器server都是在同一臺機器上,像在開始說明的那樣,我們同樣可以在其他下面oracle   server中透過透明閘道器來訪問sql   server的資料。下面是示例:  
   
  現在這個oracle   server上新增tnsname。  
   
  ------------     -------------   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.  
   
  ------------     -------------   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、各資料庫中特殊的資料型別,需要在程式中實現轉換,應儘量避免使用無法轉換的資料型別。    

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

相關文章