zoukankan      html  css  js  c++  java
  • Sqlserver2000联系Oracle11G数据库进行实时数据的同步

     Sqlserver2000联系Oracle11G数据库进行实时数据的同步

    1,前提条件

    我有sqlserver2000环境,已经存在oracle11g环境,准备这两个数据库,建立各自的訪问账号,两者之间须要ping通,telnetport也要能通,目的是将sqlserver里面的数据自己主动同步到oracle数据库里面去。

    Sqlserver里面有链路服务器(linked server)能够实现。

    2,在sqlserver上面建立odbc数据源

    有2种方式:“Microsoft ODBC for Oracle”选项以及“Oracle inOraDb10g_home3”选项

    2.1,“Microsoft ODBC for Oracle”驱动方式

      进入“控制面板”->“管理工具”->“数据源 (ODBC)”,双击打开。

      进入“系统 DSN”。点击“加入”button,在弹出的“选择你想为其安装数据源的驱动程序”选择框里面。选择在列表框中选择“Microsoft ODBC for Oracle”选项。单击“完毕”按纽。

    PS:这里不要选择安装oracleclient时候生成的“Oracle in OraDB10g_home3”这个驱动。

    例如以下图1.png所看到的:

    之后在弹出的界面里面,设置

    Data Source Name:这里就是数据源名称。是tnsnames.ora里面配置的数据源名称,能够用tnsping xxx能測试ok的数据源名称。

    Description:描写叙述,任意填写

    User Name:用户,连接oracle数据库的username,比方scott

    Server:软件服务器,默觉得Oracle

    这里。依据自己的实际情况,设置例如以下图2.png所看到的:


    之后点击“确定”button,就会生成新的ODBC数据源。

    2.2,“Oracle in OraDb10g_home3”驱动选项

    进入“控制面板”-> “管理工具”->“数据源 (ODBC)”,双击打开。

      进入“系统 DSN”。点击“加入”button,在弹出的选择框里面,选择在“选择你想为其安装数据源的驱动程序”列表框中选择“Oracle in OraDb10g_home3”选项。单击“完毕”按纽。例如以下图3.png所看到的:


    之后再弹出的界面。设置

    Data Source Nam:随便输入一个名字,这个名字就要后面sqlserver要用到的

    Description:描写叙述,任意填写

    TNS Service Name:下拉列表中就是oracle中配置好的TNS信息,假设你開始没有配置的话这里就为空的.你选一个TNS名字后,能够点下test connection验证下看连接上了不.

    User ID:就是连接oracle数据库的username。比方scott。

    例如以下图5.png所看到的:

    点击“Test Connection”button。输入连接oracle数据库的usernamepassword,假设成功就会弹出“Connection successful”的提示框。

    之后点击“OK”button,完毕创建。在“ODBC 数据源管理器”界面就会生成新的TEST数据源,例如以下图6.png所看到的:

    3,在“企业管理器”创建连接oracle数据库的链路服务器

    在前面创建好ODBC数据源之后,就能够開始建立连接oracle数据库的链路服务器了,进入sqlserver企业管理器“控制台文件夹”-> “SQL Server组”->“(LOCAL) (Windows NT)”-> “安全性”->“链路服务器”。

    在右边的空白窗体界面,右键点击选择“新建链路服务器”。開始设置:

    在常规标签界面里面:

    (0),定义连接名称;
    (1)。选其它数据源;指定程序名称为:Microsoft OLE DB Provider for Oracle; 
    (2)。产品名称可不填。 
    (3),数据源指定刚才ODBC中定义好的数据源名称; 
    (4),提供程序字符串按 
    下面格式填写:UserID=username;PassWord=userpasswd
    (或者按例如以下格式:UID=username;PWD=userpasswd),
    这里的username和password相应所要连接的oracle数据库中的username和password。 


    在安全性标签页里:

    设置用此安全上下文进行,并录入oracle的数据库username和password。


    服务器选项标签页:可默认,

    最后点击“确定”button完毕链路服务起的建立工作,例如以下图7.png所看到的:

     

    4,验证链路服务器

    进入sqlserver企业管理器“控制台文件夹”-> “SQL Server组”->“(LOCAL) (Windows NT)”-> “安全性”->“链路服务器”->“TEST”,点击表,就可以在右边窗体看到该oracle数据库用户拥有的的全部表名。例如以下图8.png所看到的:

     

    5,在sqlserver的查询分析器窗体验证链路服务器

    -- 运行查询

    SELECT * FROM OPENQUERY(TEST_ORCL, 'SELECT* FROM SCOTT.ZZZ_TEST') ;

    -- 录入数据

    insert into openquery(TEST_ORCL,'SELECT *FROM SCOTT.ZZZ_TEST')

    values(2,'b');

    SELECT * FROM OPENQUERY(TEST_ORCL, 'SELECT* FROM SCOTT.ZZZ_TEST') ;

    --删除数据

    DELETE FROM openquery(TEST_ORCL,'SELECT *FROM SCOTT.ZZZ_TEST')

    WHERE ID=2;

    SELECT * FROM OPENQUERY(TEST_ORCL, 'SELECT* FROM SCOTT.ZZZ_TEST') ;

    -- 改动数据

    UPDATE openquery(TEST_ORCL,'SELECT * FROM SCOTT.ZZZ_TEST')SET NAME='A2' WHERE ID=1;

    SELECT * FROM OPENQUERY(TEST_ORCL, 'SELECT* FROM SCOTT.ZZZ_TEST') ;

    6,查看后台的链路服务器的ddl语句

    在sqlserver的企业管理器里面看不到,能够通过SQL Manager 2008 for SQL Server工具来查看。你能够不通过sqlserver的管理器来操作。能够直接使用ddl语句来创建。ddl语句例如以下所看到的:

    EXEC master.dbo.sp_addlinkedserver @server= N'TEST_ORCL',
     @srvproduct = 'Oracle',
     @provider = 'MSDAORA', @datasrc = 'TEST_ORCL',
     @location = '',
     @provstr = 'UID=username;PWD=paxxx',
     @catalog = ''
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'collation compatible',
     @optvalue = 'false'
    GO
     
     EXECmaster.dbo.sp_serveroption @server = N'TEST_ORCL',
     @optname = 'collation name',
      @optvalue= 'null'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'data access',
     @optvalue = 'true'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'connect timeout',
     @optvalue = '0'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'query timeout',
     @optvalue = '0'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'rpc',
     @optvalue = 'false'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'rpc out',
     @optvalue = 'false'
    GO
     
    EXEC master.dbo.sp_serveroption @server =N'TEST_ORCL',
     @optname = 'use remote collation',
     @optvalue = 'true'
    GO
     
    EXEC master.dbo.sp_addlinkedsrvlogin@rmtsrvname = N'TEST_ORCL',
     @locallogin = NULL,
     @useself = 'false',
     @rmtuser = N'username',
     @rmtpassword = 'password'
    GO


    7。一些报错信息汇总

    错误 7399: OLE DB 提供程序 MSDAORA' 报错。

    OLEDB 错误跟踪 [OLE/DB Provider 'MSDAORA' IDBInitialire::Initializereturned 0x80004005:  ]

    例如以下图:20150310/1.png

    第一种解决方式:

    代理中的sQl server 连接的问题,不能用windows身份验证,得用sysadmin登陆,

    详细设置方法例如以下:在企业管理器中->管理->SQL Server 代理->右键菜单"属性"->分页选项卡上选"连接"->"使用SQL

    Server 身份验证",之后"应用"跟"确定"就能够了。

    另外一种解决方式:

    在建立odbd数据源的时候,不要用默认oracleclient的“Oracle in OraDb10g_home3”驱动选项,要用“MicrosoftODBC for Oracle”驱动选项。


     ----------------------------------------------------------------------------------------------------------------
    <版权所有。同意转载,但必须以链接方式注明源地址,否则追究法律责任!>
    原博客地址:       http://blog.itpub.net/26230597/viewspace-1457700/
    原作者:黄杉 (mchdba)
    ----------------------------------------------------------------------------------------------------------------

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4850877.html
Copyright © 2011-2022 走看看