您的位置:首页 > 数据库

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

2014-12-16 15:01 531 查看



参考文章:

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



本文内容





概要



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



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



报表
1


语句
2



解决常见的问题



问题
1


问题
2


问题
3


问题
4


问题
5


问题
6



引用




属性


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



概要

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


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

若要设置到 Sybase 数据库服务器的链接服务器,请执行以下步骤:

登录到正在运行 SQL Server 的计算机上。
在计算机上安装的 Sybase 客户端软件。
要连接到 Sybase 数据库服务器,请在计算机上安装适当的驱动程序。可以使用 Microsoft OLE DB 提供程序的 ODBC 连接到 Sybase 数据库服务器。

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

注意此脚本使用 Microsoft OLE DB 提供程序的 ODBC 连接到 ODBC 驱动程序针对 Sybase。适当的链接的服务器名称、 系统 DSN、 用户名称和密码替换Sybase Linked Server Name、Sybase System DSN,User Name和Strong
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'


若要确保正确设置链接的服务器,请运行下面的事务处理 SQL 语句:


EXEC sp_linkedservers


可能在输出中列出与 Sybase 数据库服务器连接链接服务器的名称。

[/b]

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

如果设置 Sybase 数据库服务器到链接服务器时出现问题,请按照下列步骤解决问题:

请确保在运行 SQL Server 的计算机上正确安装了 Sybase 客户端软件。
请确保在计算机上的 PATH 环境变量中包含以下路径:

Sybase_Home_Path\bin
Sybase_Home_Path\dll
Sybase_Home_Path\asep

为此,请在命令提示符下,键入路径,然后按 enter 键。
验证客户端计算机和服务器计算机之间的网络连接。为此,请执行以下步骤:

正在运行 SQL Server 的计算机,在命令提示符处,键入下面的命令,然后按 enter 键:

SybaseServerName ping

在 Sybase 数据库服务器,在命令提示符处,键入下面的命令,然后按 ENTER:

SQLServerName ping

如果您不能使用的服务器名称来 ping 服务器,但您可以通过使用 IP 地址连接到服务器,请联系您的网络管理员联系以解决此问题。
查看是否您可以通过使用您在运行 SQL Server 的计算机安装的 Sybase 客户端软件连接到 Sybase 数据库服务器。
如果配置分布式的事务,请确保 Microsoft 分布式事务处理协调器 (MS DTC) 服务正在运行。
使用[b]sp_addlinkedsrvlogin
系统存储过程将映射到正确的身份验证信息 Sybase 数据库服务器,然后再连接到 Sybase 数据库服务器。
若要配置并测试到 Sybase 数据库服务器的连接,请使用客户端工具。

请确认 ODBC DSN 相关的配置正确。

使用 ODBC 测试工具或类似的软件来测试 DSN 配置。
创建新的 Sybase 数据库服务器,DSN 然后使用新的 DSN 测试到 Sybase 数据库服务器的连接性。
如果 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'


Microsoft 数据访问组件 (MDAC) 安装和 Sybase ODBC 驱动程序的安装验证。

安装最新版本的 MDAC。
数据访问技术
() http://msdn.microsoft.com/en-us/library/ms810810.aspx
请确认下面的注册表项为 ODBC 系统 DSN 包含驱动程序路径的正确值:

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

默认情况下,注册表项的值是 C:\WINNT\system32\Sysybnt.dll。

使用 SQL 查询分析器运行识别连接到链接服务器时可能出现的任何错误的链接服务器上的事务处理 SQL 语句。

运行下面的事务处理 SQL 语句,以确保 Sybase 数据库的表中可以查看:


exec sp_tables_ex 'SybaseLinkedServerName'


运行下面的事务处理 SQL 语句,使用由四部分组成的名称的语法和 OPENQUERY 事务处理 SQL 语句查询 Sybase 数据库服务器:
报表 1[/b]


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 数据库服务器上运行的远程存储的过程,该链接的服务器可能会停止响应。



回到顶端

|
提供反馈




参考


在 SQL Server 中的链接服务器的更多信息,请访问下面的 Microsoft Web 站点:
http://msdn.microsoft.com/en-us/library/aa213786.aspx
() http://msdn.microsoft.com/en-us/library/aa213786.aspx
有关优化分布式的查询的详细信息,请访问下面的 Microsoft Web 站点:
http://msdn.microsoft.com/en-us/library/aa178113.aspx
() http://msdn.microsoft.com/en-us/library/aa178113.aspx
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
137637
() https://support.microsoft.com/kb/137637/ INF: Sybase SQL 服务器的 ODBC 连接
239883
() https://support.microsoft.com/kb/239883/ 修复: SYBASE CT-库客户端无法连接到 Microsoft SQL Server 7.0
314530
() https://support.microsoft.com/kb/314530/ PRB: 错误信息 7399:"超时已过期"使用链接的服务器查询时出现
255097
() https://support.microsoft.com/kb/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:

[b][sql]
view
plaincopy





C:\Documents and Settings\Administrator>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] view
plaincopy





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是否正确:

[plain] view
plaincopy





# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME=orcl)

(ORACLE_HOME = C:\oracle\product\10.2.0\db_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:\oracle\product\10.2.0\db_1)

(SID_NAME =orcl)

)

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

[plain] view
plaincopy





# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.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)

)

)

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

[plain] view
plaincopy





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:\oracle\product\10.2.0\db_1\network\admin\listener.ora

监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log

监听端点概要...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))

(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、测试查询

[sql] view
plaincopy





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

返回结果:



5、用代码实现:

[sql] view
plaincopy





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(xxx, 'SELECT * FROM scott.emp')

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

[sql] view
plaincopy





select *

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

[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: