MS SQL 2005 连接 sybase ASA 数据库远程链接问题

  1. 参考文章:

  2. https://support.microsoft.com/kb/280102/zh-cn?ppud=4&wa=wsignin1.0

  3.  

  4.  

  5.  

  6.  

  7.  

  8. Collapse image本文内容

    <style>.tocTitle, #tocDiv{display: none;}</style>

    Collapse image概要

     
    本分步指南介绍了如何设置链接服务器到运行 Microsoft SQL Server 的计算机上 Sybase 数据库服务器。此外,这篇文章包含了基本的故障排除步骤设置 Sybase 数据库服务器到链接服务器时可能出现的问题。

    设置链接服务器到 Sybase 数据库服务器

    若要设置到 Sybase 数据库服务器的链接服务器,请执行以下步骤:
    1. 登录到正在运行 SQL Server 的计算机上。
    2. 在计算机上安装的 Sybase 客户端软件。
    3. 要连接到 Sybase 数据库服务器,请在计算机上安装适当的驱动程序。可以使用 Microsoft OLE DB 提供程序的 ODBC 连接到 Sybase 数据库服务器。

      注意您还可以使用第三方驱动程序或提供程序连接到 Sybase 数据库服务器。如果您使用一个第三方驱动程序或提供程序,您必须与第三方供应商联系的任何问题的发生与该驱动程序或提供程序。
    4. Sybase 客户端软件安装后,重新启动计算机。
    5. 请确保您可以成功地连接到 Sybase 数据库服务器通过使用您在步骤 2 中安装的 Sybase 客户端软件。
    6. 启动 SQL 查询分析器中,并运行下面的事务处理 SQL 语句,以设置与 Sybase 数据库服务器的链接服务器。

      注意此脚本使用 Microsoft OLE DB 提供程序的 ODBC 连接到 ODBC 驱动程序针对 Sybase。适当的链接的服务器名称、 系统 DSN、 用户名称和密码替换Sybase Linked Server NameSybase System DSNUser NameStrong Password
      -- Adding linked server:
       exec sp_addlinkedserver @server = 'Sybase Linked Server Name' ,
      @srvproduct = 'Sybase',
      @provider = 'MSDASQL',
      @datasrc = 'Sybase System DSN'
       
      -- Adding linked server login:
      sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'Sybase Linked Server Name',
      @rmtuser = 'User Name',
      @rmtpassword = 'Strong Password'
      
    7. 若要确保正确设置链接的服务器,请运行下面的事务处理 SQL 语句:
      EXEC sp_linkedservers
      可能在输出中列出与 Sybase 数据库服务器连接链接服务器的名称。

    可能会出现的问题的疑难解答

    如果设置 Sybase 数据库服务器到链接服务器时出现问题,请按照下列步骤解决问题:
    1. 请确保在运行 SQL Server 的计算机上正确安装了 Sybase 客户端软件。
    2. 请确保在计算机上的 PATH 环境变量中包含以下路径:
      • Sybase_Home_Path\bin
      • Sybase_Home_Path\dll
      • Sybase_Home_Path\asep
      为此,请在命令提示符下,键入路径,然后按 enter 键。
    3. 验证客户端计算机和服务器计算机之间的网络连接。为此,请执行以下步骤:
      1. 正在运行 SQL Server 的计算机,在命令提示符处,键入下面的命令,然后按 enter 键:
        SybaseServerName ping
      2. 在 Sybase 数据库服务器,在命令提示符处,键入下面的命令,然后按 ENTER:
        SQLServerName ping

        如果您不能使用的服务器名称来 ping 服务器,但您可以通过使用 IP 地址连接到服务器,请联系您的网络管理员联系以解决此问题。
      3. 查看是否您可以通过使用您在运行 SQL Server 的计算机安装的 Sybase 客户端软件连接到 Sybase 数据库服务器。
      4. 如果配置分布式的事务,请确保 Microsoft 分布式事务处理协调器 (MS DTC) 服务正在运行。
      5. 使用sp_addlinkedsrvlogin系统存储过程将映射到正确的身份验证信息 Sybase 数据库服务器,然后再连接到 Sybase 数据库服务器。
      6. 若要配置并测试到 Sybase 数据库服务器的连接,请使用客户端工具。
    4. 请确认 ODBC DSN 相关的配置正确。
      1. 使用 ODBC 测试工具或类似的软件来测试 DSN 配置。
      2. 创建新的 Sybase 数据库服务器,DSN 然后使用新的 DSN 测试到 Sybase 数据库服务器的连接性。
      3. 如果 DSN 的问题没有得到解决,通过使用类似于下面的 SQL 脚本将链接的服务器添加到提供程序字符串与 Sybase 数据库服务器:
        EXEC sp_addlinkedserver 			
        @server = 'Sybase Linked Server Name',	
        @srvproduct='Sybase'
        @provider = 'MSDASQL' ,
        @provstr = 'DRIVER={<Driver Name};SRVR=Sybase Server Name;UID=User Name;PWD=Strong Password'
    5. Microsoft 数据访问组件 (MDAC) 安装和 Sybase ODBC 驱动程序的安装验证。
      1. 安装最新版本的 MDAC。
        数据访问技术
      2. 请确认下面的注册表项为 ODBC 系统 DSN 包含驱动程序路径的正确值:

        < ODBC 系统 DSN > HKEY_LOCAL_MACHINE\Microsoft\Software\ODBC\odbc.ini\ \Driver


        默认情况下,注册表项的值是 C:\WINNT\system32\Sysybnt.dll。
    6. 使用 SQL 查询分析器运行识别连接到链接服务器时可能出现的任何错误的链接服务器上的事务处理 SQL 语句。
      1. 运行下面的事务处理 SQL 语句,以确保 Sybase 数据库的表中可以查看:
        exec sp_tables_ex 'SybaseLinkedServerName'
      2. 运行下面的事务处理 SQL 语句,使用由四部分组成的名称的语法和 OPENQUERY 事务处理 SQL 语句查询 Sybase 数据库服务器:
        报表 1
        DBCC TRACEON(3604, 7300)
        go
        SELECT * FROM SybaseLinkedServerName.DatabaseName.Owner.TableName
        go
        语句 2
        DBCC TRACEON(3604, 7300)
        go
        SELECT * FROM OPENQUERY(SybaseLinkedServerName, "Select * from DatabaseName.Owner.TableName")
        go
        注意
    解决常见的问题
    如果您从连接到 Sybase 数据库服务器的链接服务器查询数据使用 SQL 查询分析器,您可能会遇到问题。
    问题 1
    您会收到以下错误消息:
    服务器: 消息 7399,16,状态 1 级行 1
    MSDASQL 的 OLE DB 提供程序报告了一个错误。
    检查以查看系统 DSN,用于创建链接的服务器是否正确。
    问题 2
    您会收到以下错误消息:
    服务器: 消息 7399,第 16 级状态 1,过程 sp_tables_ex 行 20
    MSDASQL 的 OLE DB 提供程序报告了一个错误。
    请检查配置或创建链接的服务器所使用的服务器名是否正确。
    问题 3
    您会收到以下错误消息:
    服务器: 消息 7399,16,状态 1 级行 1
    MSDASQL 的 OLE DB 提供程序报告了一个错误。
    请检查用户名和配置或创建链接的服务器所使用的密码是否正确。
    问题 4
    您会收到以下错误消息:
    服务器: Msg 7356 级别 16、 状态 1,行 1 OLE DB 提供程序 MSDASQL 提供的列的元数据不一致。
    如果您使用一种由四部分组成的名称的语法以查询链接的服务器数据库中的数据,您可能会收到此错误消息。
    DBCC TRACEON(7300)
    问题 5
    您会收到以下错误消息:
    由于系统错误 126 (Sybase 系统 11),无法加载指定的驱动程序
    Sybase 安装的 ODBC 驱动程序时,可能会收到此错误消息。
    问题 6
    如果您尝试链接的 Sybase 数据库服务器上运行的远程存储的过程,该链接的服务器可能会停止响应。

    Collapse image参考

    在 SQL Server 中的链接服务器的更多信息,请访问下面的 Microsoft Web 站点:
    http://msdn.microsoft.com/en-us/library/aa213786.aspx
    有关优化分布式的查询的详细信息,请访问下面的 Microsoft Web 站点:
    http://msdn.microsoft.com/en-us/library/aa178113.aspx
    有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    137637 INF: Sybase SQL 服务器的 ODBC 连接
    239883 修复: SYBASE CT-库客户端无法连接到 Microsoft SQL Server 7.0
    314530 PRB: 错误信息 7399:"超时已过期"使用链接的服务器查询时出现
    255097 错误: 错误 7356 从分布式查询
    本文讨论的第三方产品是由与 Microsoft 无关的公司生产的。

     
 
 


-- Adding linked server:
 exec sp_addlinkedserver @server = 'server03' ,
@srvproduct = 'Sybase',
@provider = 'MSDASQL',
@datasrc = 'SQL Anywhere 12 Demo'
exec sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'demo12',
@rmtuser = 'dba',
@rmtpassword = 'sql'
EXEC sp_linkedservers

exec sp_tables_ex 'demo12'  --可以读取读取sybase asa 数据库表


--使用dbcc读取
DBCC TRACEON(3604, 7300)
go
SELECT * FROM OPENQUERY(demo12, 'Select * from demo12.GROUPO.SalesOrders')
go

 

--使用单独可以读取数据

SELECT * FROM OPENQUERY(demo12, 'Select * from demo12.dba.part')

 


 

 

 

 

___________________________________________________________________________________________________________________________________________

方法二:不使用ODBC直接使用     sysbase anywhere 的ole db 驱动来完成工作

select * from sybase..dba.part

需要配置信息为

如不配置会出现错误提示为:

备注出错

 结果如下

 

 

 

如果使用远程链接服务器插入操作那么他的语法为:

insert into   sybase..dba

 查询语句使用:以下视图处理

 SELECT     customer_id AS 客户代号, short_name AS 客户简称, full_name AS 客户全称, linkman AS 联系人, telephone AS 电话, mob_no AS 手机,
                      cust_add AS 客户详细地址
FROM         DEMO12..dba.customer AS customer_1
WHERE     (customer_id NOT IN
                          (SELECT     F1047
                            FROM          dbo.tabDIYTable101))

——————————————————————————————————————————————————————————————————————————————

 

 

【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:

 

[sql]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. C:\Documents and Settings\Administrator>sqlplus / as sysdba  
  2.   
  3. SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 13 15:22:29 2014  
  4.   
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  6.   
  7.   
  8. 连接到:  
  9. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production  
  10. With the Partitioning, OLAP and Data Mining options  


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

 

[sql]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQL> alter user scott identified by tiger;  
  2.   
  3. 用户已更改。  
  4.   
  5. SQL> alter user scott account unlock;  
  6.   
  7. 用户已更改。  
  8.   
  9. SQL> connect scott/tiger  
  10. 已连接。  
  11. SQL> select count(*) from emp;  
  12.   
  13.   COUNT(*)  
  14. ----------  
  15.         14  

 


查看listener.ora是否正确:

 

[plain]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora  
  2. # Generated by Oracle configuration tools.  
  3.   
  4. SID_LIST_LISTENER =  
  5.   (SID_LIST =  
  6.     (SID_DESC =  
  7.       (SID_NAME = PLSExtProc)  
  8.       (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)  
  9.       (PROGRAM = extproc)  
  10.     )  
  11.     (SID_DESC =  
  12.       (GLOBAL_DBNAME=orcl)  
  13.       (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)  
  14.       (SID_NAME =orcl)  
  15.     )  
  16.   )  
  17.   
  18. LISTENER =  
  19.   (DESCRIPTION_LIST =  
  20.     (DESCRIPTION =  
  21.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))  
  22.       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  
  23.     )  
  24.   )  

 


要特别注意里面的:
(SID_DESC =
      (GLOBAL_DBNAME=orcl)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
      (SID_NAME =orcl)
 )


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

 

[plain]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. # tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora  
  2. # Generated by Oracle configuration tools.  
  3.   
  4. ORCL =  
  5.   (DESCRIPTION =  
  6.     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  
  7.     (CONNECT_DATA =  
  8.       (SERVER = DEDICATED)  
  9.       (SERVICE_NAME = orcl)  
  10.     )  
  11.   )  
  12.   
  13. EXTPROC_CONNECTION_DATA =  
  14.   (DESCRIPTION =  
  15.     (ADDRESS_LIST =  
  16.       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))  
  17.     )  
  18.     (CONNECT_DATA =  
  19.       (SID = PLSExtProc)  
  20.       (PRESENTATION = RO)  
  21.     )  
  22.   )  


特别是:

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


查看监听器的状态是否正常:

 

[plain]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQL> host lsnrctl status  
  2.   
  3. LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-3月 -2014 15:23:31  
  4.   
  5. Copyright (c) 1991, 2005, Oracle.  All rights reserved.  
  6.   
  7. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))  
  8. LISTENER 的 STATUS  
  9. ------------------------  
  10. 别名                      LISTENER  
  11. 版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production  
  12. 启动日期                  13-3月 -2014 14:20:27  
  13. 正常运行时间              0 天 1 小时 3 分 6 秒  
  14. 跟踪级别                  off  
  15. 安全性                    ON: Local OS Authentication  
  16. SNMP                      OFF  
  17. 监听程序参数文件          C:\oracle\product\10.2.0\db_1\network\admin\listener.ora  
  18. 监听程序日志文件          C:\oracle\product\10.2.0\db_1\network\log\listener.log  
  19. 监听端点概要...  
  20.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))  
  21.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))  
  22. 服务摘要..  
  23. 服务 "PLSExtProc" 包含 1 个例程。  
  24.   例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...  
  25. 服务 "orcl" 包含 1 个例程。  
  26.   例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...  
  27. 命令执行成功  



 

3、设置链接服务器。

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


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



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



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



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



4、测试查询

 

[sql]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. select * from openquery(xxx, 'SELECT * FROM emp')  

 


返回结果:



5、用代码实现:

 

[sql]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. EXEC master.dbo.sp_addlinkedserver   
  2.         @server = N'ORACLE_SCOTT',   
  3.         @srvproduct=N'ORACLE',   
  4.         @provider=N'MSDAORA',   
  5.         @datasrc=N'orcl'  
  6. go  
  7.           
  8.  /* For security reasons the linked server remote logins password is changed with ######## */  
  9. EXEC master.dbo.sp_addlinkedsrvlogin   
  10.         @rmtsrvname=N'ORACLE_SCOTT',  
  11.         @useself=N'False',  
  12.         @locallogin=NULL,  
  13.         @rmtuser=N'scott',  
  14.         @rmtpassword='tiger'  
  15. GO  
  16.   
  17.   
  18. select * from openquery(xxx, 'SELECT * FROM scott.emp')  


 


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

 

[sql]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. select *     
  2. from openrowset('MSDAORA','orcl';'scott';'tiger','select * from SCOTT.EMP')    


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mfkpie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值