国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

ORACLE與SQL之間的數據遷移

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

高級數據遷移

       很多時間,要在異構數據庫之間進行數據遷移或抽取,如果在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 [email protected]

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

sql>create table [email protected] 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函數可以使用,都很方便,筆記喜歡使用后者,交待一下,在數據存取方面,這四種方面效率相當。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云梦县| 尚志市| 永年县| 洱源县| 南汇区| 榆社县| 丰城市| 彭州市| 甘南县| 义马市| 白水县| 叶城县| 策勒县| 达孜县| 平武县| 怀集县| 临武县| 太仓市| 屏东县| 永州市| 扎赉特旗| 库伦旗| 合水县| 渝中区| 巴青县| 怀仁县| 宜都市| 怀安县| 六枝特区| 宜川县| 安西县| 湄潭县| 宽甸| 陇西县| 福泉市| 栖霞市| 西丰县| 西峡县| 阳城县| 罗江县| 阜康市|