求助,SQLSERVER2005链接服务器到Sybase(而sqlserver2000中可以)

chencl0617 2007-04-11 09:18:00
各位好,我的问题如下:

环境:
服务器:windows2003 Enterprise+sp1,
SQLSERVER 2005 Enterprise +sp2,
sybase client 12.5
远程sybase服务器:windows 2000 + sybase 12.5,IP:10.52.0.57

我用SQLSERVER 2005 Enterprise +sp2中的链接服务器功能建立到远程Sybase服务器的链接却不成功;而在我的电脑上却成功(xp home,sqlserver 2000 sp4,sybase client 12.5)。
操作过程: 用ODBC方式本地建立数据源,协议用NAME PIPE(tcp方式连不上),(sybase的dsedit能ping通sybase服务器,odbc中也能ping通)。建立链接服务器的方法如下:
-- Adding linked server:
exec sp_addlinkedserver @server = 'SME' ,@srvproduct = 'Sybase',@provider = 'MSDASQL',@datasrc = 'SME'

-- Adding linked server login:
sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'SME',@rmtuser = 'sa',@rmtpassword = ''

而用select * from SME.DB.dbo.testtable查询时返回如下错误消息:

链接服务器"SME"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[DataDirect][ODBC Sybase Wire Protocol driver]Connection login time has expired."。
链接服务器"SME"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[DataDirect][ODBC Sybase Wire Protocol driver]Connection refused. Verify Host Name and Port Number."。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "SME" 的 OLE DB 访问接口 "MSDASQL" 的数据源对象。

而同样的方法在我的电脑(xp home,sqlserver 2000 sp4,sybase client 12.5)上却没问题,select也能正确返回数据,郁闷。一开始认为时sqlserver2005没打补丁,打了sp2后依然如此。


求助请各位高手,谢谢!!!
...全文
684 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chencl0617 2007-04-21
  • 打赏
  • 举报
回复
happydreamer兄,启用openrowset和opendatasource 这个选项启用了。

在我的这台服务器上,用链接可以访问sqlserver、oracle9i,tcp/ip的sybase,只是不能访问Name pipe方式的sybase,因为对方的windows+sybase是用Name Pipe的,tcp方式禁用了,不能去更改对方sybase/ini/sql.ini的配置文件。
happydreamer 2007-04-14
  • 打赏
  • 举报
回复
配置工具->外围应用配置器->功能的外围应用配置器->即席远程查询->启用openrowset和opendatasource 这个选项打开了吗?

或者可能是sp2的问题,我这边的服务器是生产环境,不方便升级到sp2(怕暴了),你换成sp1试试
chencl0617 2007-04-12
  • 打赏
  • 举报
回复
happydreamer兄,我所用的方法和您说的基本上一致,在sqlserver 2005中有问题,而在sqlserver2000 中可以链接,也可以查询数据,不过我用的Name Pipes 协议,不知道什么原因。

我用tcp协议链接另一台solaris+sybase12.5确没问题。


是不是sqlserver2005用Namepipe协议需要作什么其它的设置啊?
happydreamer 2007-04-12
  • 打赏
  • 举报
回复
sql2005+sp1下测试的,sp2没试过
sql server如何访问sybase数据库的表

一 安装sybase客户端
版本:Sybase Client 11.9.2 for NT

1)安装完成后,运行开始->程序->sybase->Dsedit

2)选择菜单的'Server Object',-> 'Add' 输入服务名 比如 1.70

3)然后在Server列表中选择'1.70',双击右边的对话框server address栏,在Network Address Attribute对话框中 选择add 填入ip地址,比如132.228.1.70,4300,ok 确定

4)选择工具栏的Ping Server按钮测试是否能连通服务器 (红色的类似闪电的按钮)


二 在ODBC中建立DSN
管理工具->数据源ODBC
新建一个系统DSN,名称设为 1.70
在创建新数据源对话框中选择'Sybase System11'数据源驱动程序,
General属性的DSN datasouce name: 填入 1.70,
database: 填入sybase数据库名

确定保存


三 建立链接服务器

企业管理器->安全性->建链接服务器->新建链接服务器
1)常规标签栏目中
名称sybase,
服务器类型选其他数据源,在提供程序的名称中选择Microsoft OLE DB Provider FOR ODBC,
数据源:填入DSN名字 1.70

2)安全性栏目中
本地登陆填入sa
远程用户和远程密码填入sybase的用户名和密码

3)使用此安全上下文建立连接
远程登陆 输入sybase的用户名和密码
使用密码 输入密码
确定保存


四 用sa身份登陆查询分析器

执行以下sql语句就能查出sybase数据

select * from 链接服务器名(本例子为sybase).sybase的数据库名.dbo.sybase的表名

问题: 如果在执行查询时发现这个问题: 链接服务器 "sybase" 的 OLE DB 访问接口 "MSDASQL" 为列提供的元数据不一致。对象 "eom.dbo.shm_rd" 的列 "c_apprv_role" (编译时序号为 10)在编译时有 1024 的 "LENGTH",但在运行时有 255。
解决办法:: 不要直接用select * from sybase.dbname.dbo.tablename这种语句,换个语句,就可以解决问题了。语句如下:select * from openquery(sybase,'select * from dbname.dbo.tablename ')

chencl0617 2007-04-12
  • 打赏
  • 举报
回复
在sqlserver2005中已启用Name pipes协议!

6,128

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧