ORACLE與SQL之間的資料移轉

來源:互聯網
上載者:User
oracle|資料
進階資料移轉

       很多時間,要在異構資料庫之間進行資料移轉或抽取,如果在SQL中提取ORACLE的資料,可以通過ODBC、OLEDB等多種方式,要從ORACLE提取SQL中的資料,大都是通過透明網關來實現的。

       在異構資料幫浦過程中,最好採用SQL92標準的文法編寫SQL代碼,同時要注意不同資料庫之間資料類型的轉換關係,如ORACLE的日期類型用DATE、SQL用Datetime等。

 

一 關於ORACLE的透明網關配置

       ORACLE安裝時(9i),將TRANSPARENT GATEWAY FOR MSSQL選中,在ORACLE主目錄\BIN中,有個tg4msql.exe程式,它是透明網關程式啦,同時在主目錄中還有tgrmsql的一個目錄,ORACLE_HOME\tg4msql\admin目錄中的inittg4msql.ora就是需要進行配置才能在ORACLE中串連SQL。



圖2.1 tg4msql

1 如何配置透明網關呢?開啟inittg4msql.ora:

#

# HS init parameters

# xzh代表SQL服務名,pubs代表要訪問的SQL資料庫

#

HS_FDS_CONNECT_INFO="SERVER=xzh;DATABASE=pubs"

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

2 監聽的配置oracle_home\network\admin\Listiner.ora

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521))

      )

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527))

      )

    )

  )

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = xzh.world)

      (ORACLE_HOME = D:\oracle\ora92)

      (SID_NAME = xzh)

    )

    (SID_DESC =

       (GLOBAL_DBNAME = tg4msql)

       (PROGRAM = tg4msql)

       (SID_NAME = tg4msql)

       (ORACLE_HOME = D:\oracle\ora92)

    )

  )

       加亮代碼是要在監聽檔案中新加部分,GLOBAL_DBNAME、SID_NAME可以任意,PROGRM必須指向tg4msql如圖2.1所示。

3 本地服務檔案的配置oracle_home\network\admin\TnsNames.ora

XZH =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = xzh.world)

    )

  )

 

TG4MSQL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527))

    )

    (CONNECT_DATA =

      (SID = tg4msql)

    )

    (HS = OK)

  )

       使用SQL的本地服務名為TG4MSQL,可以任意寫,SID必須是Listiner.ora中指定的那個SID_NAME,PORT也必須是監聽中指定的PORT,主機等都要符合一致。 到此為止,我們把透明網關大致已經配置好啦,如果要訪問SQL,還要使用資料庫鏈才方便。

4 在SQL中建立登入帳號xzh口令xzh,使用可以訪問PUBS資料庫。

CREATE  DATABASE  LINK sql CONNECT TO xzh IDENTIFIED BY xzh

USING ‘TG4MSQL’

這裡的USING ‘TG4MSQL’是tnsnames.ora中配置好的本地服務名,sql是我們以後要引用的資料庫鏈名。

SQL>SELECT * FROM sales@sql

如果有資料返回,表示我們訪問SQL資料庫的通道已經建成,請大膽使用吧,但對遠程異構資料庫不充許進行DDL操作。

SQL>CREATE TABLE all_users@tg4msql FRIN all_users;

                      *

ERROR 位於第 1 行:

ORA-02021: 不允許對遠端資料庫進行 DDL 操作

 

二 SQL訪問ORACLE的方法

1 通過行集合函式OPENDATASOURCE

       OPENDATASOURCE ( provider_name, init_string )

    SELECT  *

FROM OPENDATASOURCE(

         'MSDAORA',

         'Data Source=xzh.oracle;User ID=POS;Password=POS')..POS.A0325

       MSDAORA是OLEDB FOR ORACLE的驅動,初始化字串指定本地服務名、使用者名稱、口令。然後參考資料表中資料時要以伺服器..使用者名稱.表名。注意一定是四部分組成,使用者名稱與表名一定要大寫。

       SELECT * INTO PUBS.DBO.A0325 FROM

OPENDATASOURCE(

         'MSDAORA',

         'Data Source=xzh.oracle;User ID=POS;Password=POS' )..POS.A0325

     --將ORACLE中POS模式的A0325匯入SQL的PUBS資料庫。

 2 通過SQL的連結的伺服器引用ORACLE的資料

   --查看已經存在的連結的伺服器

   SELECT*FROM SYSSERVERS

   --添加連結的伺服器到SQL

   EXEC SP_ADDLINKEDSERVER

   @server = 'ORCL',                    --ORCL是SQL中連結的伺服器名稱

   @srvproduct = 'Oracle',        --Oracle        固定的            

   @provider = 'MSDAORA',             --MSDAORA   固定的

   @datasrc = 'xzh.oracle'                 --DataSrc      本地服務名

  

   EXEC SP_DROPSERVER ‘ORCL’       --刪除連結的伺服器

  

       在這裡聲明一下,如果現在就訪問ORACLE肯定不能,因為沒有提供登入ORACLE的使用者名稱/口令

       EXEC SP_ADDLINKEDSRVLOGIN 'ORCL', false, 'sa', 'POS', 'POS'

Sa是SQL本地登入帳號,POS/POS是ORACLE的登入帳號,但這句話對我們要達到的目的沒有協助。

SELECT * FROM ORCL..POS.A0325

還是四部分組成,注意事項同上,為什麼不行呢,本人一直在尋找解決辦法,最後發現通過SQL語句沒法解決,只有開啟SQL的企業管理器。



圖2.2 配置ORACLE的遠程帳號



圖2.3設定遠程登入帳號

SELECT * FROM ORCL..POS.A0325   --這次終於OK。

SELECT * FROM OPENQUERY(ORCL, 'SELECT * FROM POS.A0325')

3 使用SQL的OPENROWSET函數

SELECT a.*

FROM OPENROWSET('MSDAORA',

   'xzh.oracle';'POS';'POS', POS.A0325) AS a ORDER BY a.ID

 

有些地方要用別名才能引用,請大家注意。

 

4使用ODBC的方式

SELECT A.*

FROM OPENROWSET('MSDASQL','ORCL_ODBC';'POS';'POS',

   POS.A0325) AS  A

ORDER BY A.ID

 

ORCL_ODBC是ORACLE的ODBC資料來源,建立ODBC不用我說吧,以上所有代碼在SQL QUERY ANALYZE 中通過。

 

三 總結

       關於SQL訪問ORACLE有四種方式,其中通過ODBC與連結的伺服器的方式做起來難度較大,對手新手會麻煩一些,使用OLE DB FOR ORACL驅動時,有OPENDATASOURCE與OPENROWSET函數可以使用,都很方便,筆記喜歡使用後者,交待一下,在資料存取方面,這四種方面效率相當。

 


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.