ORACLE 8i的普通串連技術的介紹

來源:互聯網
上載者:User
oracle
ORACLE 8i的普通串連技術的介紹

====================================

歡迎大家同我交流:小白  enhydra_boy@tom.com

歡迎轉載,請保留本聲明,謝謝!

====================================

 

Oracle 8.1.6 中引入普通串連技術的概念(Generic connectivity),這一串連解決方案滿足了對許多異種資料庫儲存的資料訪問需求,同時並不需要安裝ORACLE的透明網關(ORACLE Transparent Gateway)。該特性允許使用業界標準 ODBC 和 OLEDB 建立透明串連。

什麼是普通串連(Generic connectivity)

普通串連是ORACLE的一個低端Data Integration解決方案,目標是提供ORACLE 8i可以串連到非oracle資料庫的能力。它的實現,是通過異種服務代理(Heterogeneous Services)來實現的。

異種服務代理的類型:
ODBC agent for accessing ODBC data providersOLE DB agent for accessing OLE DB data providers that support SQL processing--sometimes referred to as OLE DB (SQL)ODBC agent for acceng OLE DB data providers without SQL processing support--sometimes referred to as OLE DB (FS)
普通串連的系統結構圖



ORACLE用戶端程式訪問非ORACLE資料庫的過程:用戶端程式是通過SQL*NET串連ORACLE伺服器,關於異種資料庫的訪問,交給HS代理實現。

HS代理通過下面的功能組件實現:ODBC管理器->ODBC驅動程式->資料庫的網路用戶端->目標資料庫。

如果異種庫和ORACLE資料庫位於同一台伺服器上,一般來說驅動程式是可以直接和原生資料庫通訊,就可以省去資料庫的網路用戶端這一層。

資料類型的轉換

ORACLE自動實現ODBC和OLEDB資料類型到ORACLE資料類型的轉換,具體的對應轉換可以參考ORACLE的線上說明http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76960/datatype.htm。

普通串連的限制

1          含有BLOB列的表必須要有一個主鍵欄位;

2          BLOB/CLOB資料不直接通過pass-through的查詢方式;

3          在WHERE子句中包括了函數的Updates或deletes語句不被允許;

4          不支援預存程序的調用;

HS代理(odbc/oledb)不支援分散式交易(distributed transactions),只支援單點的事務(single-site transactions)。

普通串連代理的配置

下面,我介紹一下,利用普通串連的ODBC配置。利用HS odbc代理串連SQL SERVER 2000。

第一步初始設定檔案的建立

首先,你必須要建立初始設定檔案。ORACLE提供了範例初始設定檔案,名字是init<agent>.ora,<agent>可能是hsodbc,hsoledb,hsolefs,分別代表了三種類型的代理,位於$ORACLE_HOME/HS/ADMIN下。

把對應的檔案複製一份出來,並且改名為init<HS_SID>.ora,<HS_SID>是你SQL SERVER ODBC代理起的別名。

複製並建立了一個inithssql2k.ora檔案,編輯inithssql2k.ora檔案。參數有:


# This is a sample agent init file that contains the HS parameters that are

# needed for an ODBC Agent.

 

#

# HS init parameters

#

#HS_FDS_CONNECT_INFO = <odbc data_source_name>

#HS_FDS_TRACE_LEVEL = <trace_level>

HS_FDS_CONNECT_INFO = SQL2K

HS_FDS_TRACE_LEVEL = ON

HS_AUTOREGISTER = TRUE

 

#

# Environment variables required for the non-Oracle system

#

#set <envvar>=<value>


第二步 建立異種服務代理的資料字典

執行$ORACLE_HOME/rdbms/admin/caths.sql,建立相關的系統資料表和視圖。

第三步 建立異種服務代理的工作環境

添加hssql2k的偵聽服務,$ORACLE_HOME/NETWORK/ADMIN/listener.ora


SID_DESC=

     (SID_NAME=hssql2k)

       (ORACLE_HOME=d:\oracle\ora81)

      (PROGRAM=hsodbc)

    )


修改$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,添加一個網路服務名

sql2k,將在後面建立資料庫聯結時用到。


sql2k =

(DESCRIPTION=

     (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))

     (CONNECT_DATA=(SID=hssql2k))

     (HS=OK)

 )


重新啟動偵聽,並且察看服務狀態


LSNRCTL for 32-bit Windows: Version 8.1.7.0.0 - Production on 02-JUL-2003 12:49:

30

 

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

 

Welcome to LSNRCTL, type "help" for information.

 

LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SAM)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for 32-bit Windows: Version 8.1.7.0.0 - Produ

tion

Start Date                02-JUL-2003 11:08:31

Uptime                    0 days 1 hr. 41 min. 2 sec

Trace Level               off

Security                  OFF

SNMP                      OFF

Listener Parameter File   d:\oracle\ora81\network\admin\listener.ora

Listener Log File         d:\oracle\ora81\network\log\listener.log

Services Summary...

  ORCL          has 1 service handler(s)

  ORCL          has 3 service handler(s)

  PLSExtProc            has 1 service handler(s)

  hssql2k               has 1 service handler(s)

The command completed successfully

LSNRCTL>


Hssql2k的偵聽服務已經正常運行了。

 

第四步 修改資料庫啟動參數檔案

修改資料庫啟動參數檔案,設定global_names=false,如果設定為true(預設),那麼資料庫連接名和全域資料庫名一樣,這將會導致ORA-02085的錯誤。

 

第五步 建立訪問non-oracle資料庫的串連(Database Link)

   在sqlplus中,執行create database link命令。Connect to 指定了串連到SQL SERVER的使用者名稱和密碼。


 

SQL>create public database link sql2k connect to sa identified by manager using ‘sql2k’;

Database link created.

 


 

第六步 測試


Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production

With the Partitioning option

JServer Release 8.1.7.0.0 - Production

 

SQL> connect scott/tiger;

Connected.

SQL> select count(*) from sysobjects@sql2k;

 

  COUNT(*)

----------

       135


 

現在,oracle已經可以訪問sqlserver資料庫了。以上都是,筆者參考了oracle的線上說明,並且實際測試的經過。筆者同時也發現,採用hsodbc其實也並不是很穩定,有的sql語句會引起hsodb agent的致命錯誤,同時有很多限制,採用透明網關應該就可以獲得很好的效果。

但是, oracle 8i的這個特性,可以不安裝額外的Transparent Gateway產品。因此,只要能夠滿足應用的資料訪問要求,採用Generic connectivity也不失為一個快速,經濟的方法。

筆者的測試環境:Windows2000 Server+ORACLE 8i(8.1.7)


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.