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

首頁 > 數據庫 > SQL Server > 正文

ORACLE與SQL Server之間的數據遷移

2024-08-31 00:52:04
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辰溪县| 琼结县| 禹州市| 子洲县| 黄平县| 天峻县| 庆元县| 吉林市| 平度市| 昆明市| 崇州市| 达州市| 舒兰市| 祁东县| 健康| 滦南县| 西吉县| 钟山县| 镇宁| 清镇市| 舒城县| 泰州市| 根河市| 洪江市| 将乐县| 建瓯市| 姜堰市| 温宿县| 神池县| 滨州市| 武城县| 宜春市| 长葛市| 娄烦县| 阿拉善左旗| 武邑县| 额济纳旗| 杭锦后旗| 夏邑县| 平顺县| 民乐县|