您的位置:首页 > 理论基础

计算机改名导致数据库链接的诡异问题

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

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

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

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

标题: Microsoft SQL Server Management Studio
------------------------------

无法为该请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)

有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476 
------------------------------
其他信息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

拒绝了对对象 'xp_prop_oledb_provider' (数据库 'mssqlsystemresource',架构 'sys')的 EXECUTE 权限。 (Microsoft SQL Server,错误: 229)

有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.4000&EvtSrc=MSSQLServer&EvtID=229&LinkId=20476 
------------------------------
按钮:

确定
------------------------------


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

exec sp_droplinkedsrvlogin'GEK-MIS01' ,'xxxxx'

exec sp_dropserver'GEK-MIS01'

USE master;

GO

IF SERVERPROPERTY('servername') <> @@SERVERNAME

BEGIN

DECLARE @server sysname;

SET @server =@@SERVERNAME;

EXEC sp_dropserver@server= @server;

SET @server = CAST(SERVERPROPERTY('servername') AS sysname);

EXEC sp_addserver@server=@server, @local='LOCAL';

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