每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          如何在Oracle里設置訪問多個SQL Server數據庫?假設我們要在ORACLE里同時能訪問SQL Server里默認的pubs和Northwind兩個數據庫。

          1、 在安裝了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows機器上(IP:192.168.0.2), 產品要選了透明網關(Oracle Transparent Gateway)里訪問Microsoft SQL Server數據庫

          $ORACLE9I_HOME\tg4msql\admin下新寫initpubs.ora和initnorthwind.ora配置文件.
          initpubs.ora內容如下:
          HS_FDS_CONNECT_INFO="SERVER=SQLSERVER_HOSTNMAE;DATABASE=pubs"
          HS_DB_NAME=pubs
          HS_FDS_TRACE_LEVEL=OFF
          HS_FDS_RECOVERY_ACCOUNT=RECOVER
          HS_FDS_RECOVERY_PWD=RECOVER
          initnorthwind.ora內容如下:
          HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=Northwind"
          HS_DB_NAME=Northwind
          HS_FDS_TRACE_LEVEL=OFF
          HS_FDS_RECOVERY_ACCOUNT=RECOVER
          HS_FDS_RECOVERY_PWD=RECOVER

          $ORACLE9I_HOME\network\admin 下listener.ora內容如下:
          LISTENER =
          (DESCRIPTION_LIST =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
          )
          )
          )

          SID_LIST_LISTENER =
          (SID_LIST =
          (SID_DESC =
          (GLOBAL_DBNAME = test9)
          (ORACLE_HOME = d:\oracle\ora92)
          (SID_NAME = test9)
          )
          (SID_DESC=
          (SID_NAME=pubs)
          (ORACLE_HOME=d:\Oracle\Ora92)
          (PROGRAM=tg4msql)
          )
          (SID_DESC=
          (SID_NAME=northwind)
          (ORACLE_HOME=d:\Oracle\Ora92)
          (PROGRAM=tg4msql)
          )
          )


          重啟動這臺做gateway的windows機器上(IP:192.168.0.2)TNSListener服務.

          (凡是按此步驟新增可訪問的SQL Server數據庫時,TNSListener服務都要重啟動)

          2、ORACLE8I,ORACLE9I的服務器端配置tnsnames.ora, 添加下面的內容:

          pubs =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
          )
          (CONNECT_DATA =
          (SID = pubs)
          )
          (HS = pubs)
          )

          northwind =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
          )
          (CONNECT_DATA =
          (SID = northwind)
          )
          (HS = northwind)
          )
          保存tnsnames.ora后,在命令行下
          tnsping pubs
          tnsping northwind


          出現類似提示,即為成功

          Attempting to contact (DESCRIPTION = (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
          (PORT = 1521))) (CONNECT_DATA = (SID = pubs)) (HS = pubs))
          OK(20毫秒)
          Attempting to contact (DESCRIPTION = (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
          (PORT = 1521))) (CONNECT_DATA = (SID = northwind)) (HS = northwind))
          OK(20毫秒)


          設置數據庫參數global_names=false。

          設置global_names=false不要求建立的數據庫鏈接和目的數據庫的全局名稱一致。global_names=true則要求, 多少有些不方便。

          oracle9i和oracle8i都可以在DBA用戶下用SQL命令改變global_names參數

          alter system set global_names=false;


          建立公有的數據庫鏈接:

          create public database link pubs 
          connect to testuser identified by testuser_pwd using 'pubs';
          create public database link northwind
          connect to testuser identified by testuser_pwd using 'northwind';
          (假設SQL Server下pubs和northwind已有足夠權限的用戶登陸testuser,
          密碼為testuser_pwd)


          訪問SQL Server下數據庫里的數據:

          select * from stores@pubs;
          ...... ......
          select * from region@northwind;
          ...... ......


          3、使用時的注意事項

          ORACLE通過訪問SQL Server的數據庫鏈接時,用select * 的時候字段名是用雙引號引起來的。

          例如:

          create table stores as select * from stores@pubs;
          select zip from stores;
          ERROR 位于第 1 行:
          ORA-00904: 無效列名
          select "zip" from stores;
          zip
          -----
          98056
          92789
          96745
          98014
          90019
          89076


          已選擇6行。

          用SQL Navigator或Toad看從SQL Server轉移到ORACLE里的表的建表語句為:

          CREATE TABLE stores
          ("stor_id" CHAR(4) NOT NULL,
          "stor_name" VARCHAR2(40),
          "stor_address" VARCHAR2(40),
          "city" VARCHAR2(20),
          "state" CHAR(2),
          "zip" CHAR(5))
          PCTFREE 10
          PCTUSED 40
          INITRANS 1
          MAXTRANS 255
          TABLESPACE users
          STORAGE (
          INITIAL 131072
          NEXT 131072
          PCTINCREASE 0
          MINEXTENTS 1
          MAXEXTENTS 2147483645
          )
          /


          總結:

          WINDOWS下ORACLE9i網關服務器在$ORACLE9I_HOME\tg4msql\admin目錄下的initsqlserver_databaseid.ora

          WINDOWS下ORACLE9i網關服務器listener.ora里面

          (SID_DESC=
          (SID_NAME=sqlserver_databaseid)
          (ORACLE_HOME=d:\Oracle\Ora92)
          (PROGRAM=tg4msql)
          )
          UNIX或WINDOWS下ORACLE8I,ORACLE9I服務器tnsnames.ora里面
          northwind =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
          )
          (CONNECT_DATA =
          (SID = sqlserver_databaseid)
          )
          (HS = sqlserver_databaseid)
          )


          sqlserver_databaseid一致才行.
          posted on 2006-07-27 19:49 Alex 閱讀(352) 評論(0)  編輯  收藏 所屬分類: dataBase
          主站蜘蛛池模板: 井研县| 桐梓县| 东海县| 琼结县| 黎平县| 当涂县| 奉节县| 天祝| 汕头市| 丘北县| 二连浩特市| 巫溪县| 呼和浩特市| 莒南县| 浠水县| 衡阳市| 新巴尔虎左旗| 铁岭县| 东辽县| 牙克石市| 安吉县| 闵行区| 龙南县| 乌兰县| 凤阳县| 嘉义县| 宣威市| 洮南市| 徐闻县| 晋州市| 泗水县| 中卫市| 阿拉善盟| 湖北省| 北辰区| 清徐县| 建德市| 嵊州市| 奉化市| 亳州市| 安溪县|