关于truncate table remote学习笔记

xiaoxiao2021-02-28  80

        昨天有个十多年的项目突然无法正常查询,通过排查发现其使用truncate table remote远程数据库上的表,第一眼有点懵逼。从没有使用过这种方法,通过百度得出

要想在本地访问服务器上的数据库数据得先执行两个存储过程:

exec sp_addlinkedserver '[目标服务器]','','SQLOLEDB','[服务器]' exec sp_addlinkedsrvlogin '[目标服务器]', 'false', NULL, '[数据库账号]', '[数据库密码]' 执行完后便可以访问了 select * into [表名] from [目标服务器].[数据库].dbo.[表名]

故以本机执行以下T-SQL

--gamedb declare @ServerName varchar(128) declare @IP varchar(15) declare @Database varchar(128) declare @Password varchar(128) set @ServerName ='服务器名' set @IP ='服务器IP' set @Database ='访问数据库库名' set @Password ='密码' exec sp_addlinkedserver @server = @ServerName, @srvproduct = '', @provider = 'SQLOLEDB', @datasrc = @IP, @catalog = @Database exec sp_addlinkedsrvlogin @rmtsrvname = @ServerName, @useself = 'true', @rmtuser = '访问账号', @rmtpassword = @Password exec sp_serveroption @server = @ServerName, @optname = 'RPC', @optvalue = 'true' exec sp_serveroption @server = @ServerName, @optname = 'RPC out', @optvalue = 'true' EXEC sp_addlinkedsrvlogin @ServerName, 'TRUE'

报错提示用户没有操作权限,我登录的账号是管理员的账号,于是乎

 查看当前USER为guest,执行下面赋权语句

SELECT CURRENT_USER;

GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO guest;

此过程并没有解决相关问题,通过查询,可能和计算机名有关,只好远程到数据库服务器。通过服务器本机执行

首先查询select * from sysservers

看到系统存储有该访问linkedserver,判断可能是访问数据库密码更换原因

决定先删除重新执行

进行删除操作

sp_configure 'allow updates', 1 RECONFIGURE WITH OVERRIDE delete from sysservers where srvname='连接对方数据库IP' sp_configure 'allow updates', 0 RECONFIGURE WITH OVERRIDE

 

注:(此过程需逐步执行)

最后执行上面的T-SQL成功解救问题

转载请注明原文地址: https://www.6miu.com/read-800150.html

最新回复(0)