博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机改名导致数据库链接的诡异问题
阅读量:5150 次
发布时间:2019-06-13

本文共 1823 字,大约阅读时间需要 6 分钟。

  前几天给开发部门部署测试数据库时,遇到一个很诡异的问题:创建一个链接服务器GEK-MIS01时,报错如下:

    消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行

    仍有对服务器 'GEK-MIS01' 的远程登录或链接登录。

脚本如下(略去登录名等关键信息): 

 View Code

 因为当时是一批脚本执行而且仅有这个脚本出错,当我准备查检查出错原因的时候,又有更紧急的事情要处理,就耽搁了处理这个问题,开发那边在测试过程发现这个数据库链接有问题,邮件反馈给我,我检查时居然发现很多不可思议的现象:

(1): 我用SSMS进入“服务器对象”——“链接服务器”下,居然看不到这个链接服务器对象,而通过sysservers等系统表又能查到这个服务器链接对象的信息,当时我就百思不得其解,纳尼啊?

(2) 重新执行上面脚本时发现删除链接服务器那段脚本根本删除不了该链接服务器,而添加链接服务器时则报错

   IF  EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'GEK-MIS01')

       EXEC master.dbo.sp_dropserver @server=N'GEK-MIS01', @droplogins='droplogins'

   GO

   EXEC master.dbo.sp_addlinkedserver @server = N'GEK-MIS01', @srvproduct=N'SQL Server'

  消息 15028,级别 16,状态 1,过程 sp_addlinkedserver,第 82 行

  服务器 'GEK-MIS01' 已存在。

(3):接下来我测试了下链接服务器的使用情况,发现有些登录名(Windows 身份认证,sysadmin角色)下使用该数据库链接没有问题,而SQL Server身份验证的登录名则会报下面错误:

  EXEC [GEK-MIS01].DatabaseName.dbo.Procedure  'xxxx'

  消息 916,级别 14,状态 1,第 1 行

  服务器主体 "username" 无法在当前安全上下文下访问数据库 "xxxxx"。

(4):而在SSMS下,在"服务器对象"—>“链接服务器”—> "GEK-MIS01"下单击目录时,报如下错误。

具体错误信息如下:

 View Code

解决办法: 查看当前USER为guest, 执行下面赋权语句即可解决问题

SELECT CURRENT_USER;

GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO guest;

但是对于现象1,2,3则困扰了我好久,一直以为是权限问题,最后经过吐血的漫长排查,终于发现一个让人吐血的原因:这台测试数据库服务器原先的计算机名称为gek-mis01,后来不知道啥原因被系统管理员用作测试服务器(历史原因了我就不多说了),改名为GETTESTNT15,而一台新的服务器命名为gek-mis01,结果我今天新建链接服务器时,就踩到了这个地雷。

接下来解决起来就比较顺利了,首先删除该链接服务器,修复计算机改名问题,重新新建该链接数据库,OK,问题解决了!

Code Snippet
  1. exec sp_droplinkedsrvlogin'GEK-MIS01' ,'xxxxx'
  2.  
  3. exec sp_dropserver'GEK-MIS01'
  4.  
  5.  
  6. USE master;
  7. GO
  8. IF SERVERPROPERTY('servername') <> @@SERVERNAME
  9. BEGIN
  10. DECLARE @server sysname;
  11. SET @server =@@SERVERNAME;
  12. EXEC sp_dropserver@server= @server;
  13. SET @server = CAST(SERVERPROPERTY('servername') AS sysname);
  14. EXEC sp_addserver@server=@server, @local='LOCAL';
  15. END

 

转载于:https://www.cnblogs.com/zhangyingai/p/7082509.html

你可能感兴趣的文章
servlet文件操作
查看>>
利用bootstrap-select.min.js实现bootstrap下拉列表的单选和多选
查看>>
C# 通过反射为一个对象赋值
查看>>
Asp.net上传文件后台通过二进制流发送到其他Url保存
查看>>
jquery的ajax同步和异步
查看>>
C# 调用PowerShell方法
查看>>
【Java入门提高篇】Day25 史上最详细的HashMap红黑树解析
查看>>
navicat for mysql 在Mac上安装后没有连接列表,就是左边的那一列连接项目怎么办?...
查看>>
[luogu1463 HAOI2007] 反素数 (约数)
查看>>
[luogu4161 SCOI2009]游戏 (DP)
查看>>
CSS--字体
查看>>
vs调试技巧
查看>>
edmx文件
查看>>
限定符注解
查看>>
Linux环境下安装python3
查看>>
触摸隐藏键盘
查看>>
jstl foreach 取index
查看>>
div+CSS3实现制作精美漂亮的圆角按钮特效代码
查看>>
protobuf 安装与卸载
查看>>
jQuery基础——事件
查看>>