zoukankan      html  css  js  c++  java
  • 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据

    从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 、64位的机器和软件,需要用不同的驱动程序来实现。

     在32位的机器上,通过访问接口:Microsoft OLE DB Provide for Oracle,来实现。  

    1、机器环境和软件环境

    机器是一台虚拟机,安装了windows xp,SQL Server 20008R2,Oracle 10g 10.2.0.1.0。

    2、ORACLE环境的设置

    连接oracle:

    C:Documents and SettingsAdministrator>sqlplus / as sysdba
     
    SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 13 15:22:29 2014
     
    Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
     
    连接到:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    

    修改scott用户的密码为tiger,并给账户解锁,尝试登录,查询表:

    SQL> alter user scott identified by tiger;
     
    用户已更改。
     
    SQL> alter user scott account unlock;
     
    用户已更改。
     
    SQL> connect scott/tiger
    已连接。
    SQL> select count(*) from emp;
    
     COUNT(*)
    ----------
      14
    

    查看listener.ora是否正确:

    # listener.ora Network Configuration File: C:oracleproduct10.2.0db_1
    etworkadminlistener.ora
    # Generated by Oracle configuration tools.
     
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:oracleproduct10.2.0db_1)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (GLOBAL_DBNAME=orcl)
          (ORACLE_HOME = C:oracleproduct10.2.0db_1)
          (SID_NAME =orcl)
        )
      )
     
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
      )
    

    要特别注意里面的:
    (SID_DESC =
          (GLOBAL_DBNAME=orcl)
          (ORACLE_HOME = C:oracleproduct10.2.0db_1)
          (SID_NAME =orcl)
     )


    另外,查看tnsnames.ora是否正确:

    # tnsnames.ora Network Configuration File: C:oracleproduct10.2.0db_1
    etworkadmin	nsnames.ora
    # Generated by Oracle configuration tools.
     
    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )
     
    EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )
    

    特别是:
    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )

    SQL> host lsnrctl status
     
    LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-3月 -2014 15:23:31
     
    Copyright (c) 1991, 2005, Oracle.  All rights reserved.
     
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
    LISTENER 的 STATUS
    ------------------------
    别名                      LISTENER
    版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
    启动日期                  13-3月 -2014 14:20:27
    正常运行时间              0 天 1 小时 3 分 6 秒
    跟踪级别                  off
    安全性                    ON: Local OS Authentication
    SNMP                      OFF
    监听程序参数文件          C:oracleproduct10.2.0db_1
    etworkadminlistener.ora
    监听程序日志文件          C:oracleproduct10.2.0db_1
    etworkloglistener.log
    监听端点概要...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1ipc)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
    服务摘要..
    服务 "PLSExtProc" 包含 1 个例程。
      例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "orcl" 包含 1 个例程。
      例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    命令执行成功
    

    3、设置链接服务器。

    需要特别注意的是,数据源orcl指的是:tnsnames.ora文件中的orcl服务名。 

    第一步,选择“新建链接服务器”:

     

     第二步,一定要选择 Microsoft OLE DB Provide for Oracle:

     

     第三步,输入产品:oracle,数据源:orcl: 

     

     第四步,输入oracle的用户名和密码,这个需要根据实际情况设置,输入完后,点确定就好:

    4、测试查询

    select * from openquery(xxx, 'SELECT * FROM emp')
    

    返回结果:  

    5、用代码实现:

    EXEC master.dbo.sp_addlinkedserver 
            @server = N'ORACLE_SCOTT', 
            @srvproduct=N'ORACLE', 
            @provider=N'MSDAORA', 
            @datasrc=N'orcl'
    go
            
     /* For security reasons the linked server remote logins password is changed with ######## */
    EXEC master.dbo.sp_addlinkedsrvlogin 
            @rmtsrvname=N'ORACLE_SCOTT',
            @useself=N'False',
            @locallogin=NULL,
            @rmtuser=N'scott',
            @rmtpassword='tiger'
    GO
     
     
    select * from openquery(ORACLE_SCOTT, 'SELECT * FROM scott.emp')
    

    6、通过openrowset函数来实现,更简单。

    select *   
    from openrowset('MSDAORA','orcl';'scott';'tiger','select * from SCOTT.EMP')  
    

      

      

      



      

      

      

  • 相关阅读:
    C#程序调用cmd执行命令(转)
    命名管道跨进程通信实例2(转)
    C#异步编程的实现方式——ThreadPool线程池
    命名管道跨进程通信实例1(转)
    No_16_0324 Java基础学习第二十三天
    mac osx加入全局启动terminal快捷键
    UVa 164
    Android OpenGL加入光照和材料属性
    51系列小型操作系统精髓 简单实现
    ubuntu下安装tomcat
  • 原文地址:https://www.cnblogs.com/lgx5/p/11364946.html
Copyright © 2011-2022 走看看