a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

ORACLE與SQL之間的數據遷移

2024-08-29 13:49:23
字體:
來源:轉載
供稿:網友

  
高級數據遷移

       很多時間,要在異構數據庫之間進行數據遷移或抽取,假如在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函數可以使用,都很方便,筆記喜歡使用后者,交待一下,在數據存取方面,這四種方面效率相當。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一区二区中文字幕 | 九九视频这里只有精品 | 久久久国产精品免费 | 欧美日韩第一页 | 新超碰97| 欧洲一区二区视频 | 国产视频一视频二 | 国产精品日产欧美久久久久 | 国精产品一区一区三区免费完 | 日本www高清 | 成 人 免 费 网 站 | 欧美久久久久久久久久久久 | 中文字幕亚洲第一 | 亚洲精品久久久久久一区二区 | 一区二区三区国产亚洲网站 | 99在线视频观看 | 中文字幕精品一区二区三区精品 | 三级免费黄 | 九九久久免费视频 | 国产精品毛片无码 | 欧美精品一区二区三区在线 | 亚洲国产高清在线 | 欧美在线观看网站 | 再深点灬舒服灬太大了添少妇视频 | 婷婷色婷婷 | 日本精品视频 | 中文字幕在线观看第一页 | 91中文在线观看 | 欧洲色 | 日韩av网站在线 | 欧美激情不卡 | 国产一区二区三区久久久 | 精品久久久久久久久久久久久久 | 亚洲 精品 综合 精品 自拍 | 日本一区二区不卡 | 国产精品毛片久久久久久 | 亚洲视频二 | 午夜国产羞羞视频免费网站 | 毛片毛片毛片毛片毛片毛片 | 久久精品午夜 | 国产 日韩 欧美 在线 |