每日一得

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

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

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

          $ORACLE9I_HOME\tg4msql\admin下新寫initpubs.ora和initnorthwind.ora配置文件.
          initpubs.ora內(nèi)容如下:
          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內(nèi)容如下:
          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內(nèi)容如下:
          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數(shù)據(jù)庫時,TNSListener服務都要重啟動)

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

          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


          出現(xiàn)類似提示,即為成功

          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毫秒)


          設置數(shù)據(jù)庫參數(shù)global_names=false。

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

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

          alter system set global_names=false;


          建立公有的數(shù)據(jù)庫鏈接:

          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下數(shù)據(jù)庫里的數(shù)據(jù):

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


          3、使用時的注意事項

          ORACLE通過訪問SQL Server的數(shù)據(jù)庫鏈接時,用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轉(zhuǎn)移到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網(wǎng)關服務器在$ORACLE9I_HOME\tg4msql\admin目錄下的initsqlserver_databaseid.ora

          WINDOWS下ORACLE9i網(wǎng)關服務器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
          主站蜘蛛池模板: 岑巩县| 太保市| 金门县| 磐石市| 旅游| 贵港市| 宾阳县| 镇平县| 托克托县| 沭阳县| 吉木萨尔县| 三门县| 新平| 贡嘎县| 霍林郭勒市| 兴安盟| 云安县| 瑞昌市| 大化| 连云港市| 如东县| 鹤壁市| 康定县| 汤原县| 南汇区| 平武县| 泽库县| 准格尔旗| 鲜城| 昂仁县| 厦门市| 平泉县| 汉中市| 西畴县| 中牟县| 赞皇县| 和平县| 台东市| 定兴县| 泸州市| 新营市|