SQL Server跨服务器取spid

yueqing 2010-10-21 04:29:42
现在有2个SQL server服务器 A 和 B

在A上执行 exec (select * from B.dbo.Table)

想获取 select * from B.dbo.Table 的进程号

有没有的大哥知道 如何获取?

exec (select @@spid select * from B.dbo.Table) ----用这个方法是不行的,这样的spid是A服务器的
...全文
116 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueqing 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 claro 的回复:]
没给钱也能用,估计只用了供应链部分。

确实可以!
[/Quote]
我是第三方,客户买的U8,现在我要将数据写到U8里,4楼的方法不行,虽然取了出来,但是进程号和我执行的进程号不同,除非我的代码要全部改动所有的都放 OPENROWSET 第五个参数里执行,否则进程号不同

目前我的做法是 在U8里创建了一个存储过程用来获取进程号,然后用同一个链接去执行这个存储过程获取进程号,再给下面使用,正在测试中,不知道是否能成功。
claro 2010-10-23
  • 打赏
  • 举报
回复
没给钱也能用,估计只用了供应链部分。

确实可以!
yueqing 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 claro 的回复:]
这里是建议一个思路。

原有的系统设置再通过扩展后,可能原本的设计会有冲突或不合理的地方。
如果能考虑变通是更好,不行的话要考虑架构调整。你的问题可能要找用友问问,毕竟你给了钱的,里面就包含服务费用。
[/Quote]
先用4楼的方法试,试不成功,怕是真要在U8数据库服务器上做手脚了,问用友,就是没有给钱啊,呵呵。
我是想最好不要去动U8的任何东西,怕出了问题把责任推给我
claro 2010-10-23
  • 打赏
  • 举报
回复
了解,祝好运!

claro 2010-10-22
  • 打赏
  • 举报
回复
这里是建议一个思路。

原有的系统设置再通过扩展后,可能原本的设计会有冲突或不合理的地方。
如果能考虑变通是更好,不行的话要考虑架构调整。你的问题可能要找用友问问,毕竟你给了钱的,里面就包含服务费用。
claro 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yueqing 的回复:]
U8的存储过程里,都用进程号来判断数据是哪来的,我外部数据放进去不加进程号,它都视而不见。加上进程号不是U8服务器的。
[/Quote]原来有前提。

这要看进程号是U8分配的,还是通过DBserv分配的。
claro 2010-10-22
  • 打赏
  • 举报
回复
如果同一机器上有2次操作 不就不可以了
当前库的机器名+时间,您认为还不行吗?
select @@SERVERNAME+ltrim(SYSDATETIME() )
yueqing 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 claro 的回复:]
所以要用进程号来判断是哪个进程创建的数据,只有当前进程能删除自己创建的数据

不妨试试判断

SQL code
select @@SERVERNAME
会好一些。
[/Quote]
U8的存储过程里,都用进程号来判断数据是哪来的,我外部数据放进去不加进程号,它都视而不见。加上进程号不是U8服务器的。
yueqing 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 claro 的回复:]
插入数据时,添加当前库的机器名用于区分以及时间,总比spid强。
[/Quote]
如果同一机器上有2次操作 不就不可以了

更主要的不是我想这么做,是U8里面这么做的,现在我要上传入库数据给U8,就是这个进程号的问题,搞的有时候库存量更新了(正好本地进程和U8服务器进程相同),大多时候库存量不变,搞死我了
claro 2010-10-22
  • 打赏
  • 举报
回复
所以要用进程号来判断是哪个进程创建的数据,只有当前进程能删除自己创建的数据

不妨试试判断
select @@SERVERNAME
会好一些。
claro 2010-10-22
  • 打赏
  • 举报
回复
插入数据时,添加当前库的机器名用于区分以及时间,总比spid强。
yueqing 2010-10-22
  • 打赏
  • 举报
回复
看了下,因该只有4楼理解了我的意思,还是感谢大家的
我的意思是
A服务器连接到B服务器去操作一些数据
那么会在B服务器上创建一个进程,A服务器操作数据的时候,同时会把当前进程号当成数据放入表中
与此同时,还有c,d,e,f机器在操作B服务器相同的表
那么接下来我要对A服务器在B服务器上插入的数据进行删除
如果不加判断那么会同时删除c,d,e,f创建的数据
所以要用进程号来判断是哪个进程创建的数据,只有当前进程能删除自己创建的数据
obuntu 2010-10-21
  • 打赏
  • 举报
回复
试试

select * from b.master.sys.sysprocesses where hostname='A'
claro 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
进程号 ?
这个还真不知道怎么取,帮顶了.
[/Quote]
估计他应该从sys.processes取SPID。
claro 2010-10-21
  • 打赏
  • 举报
回复
突发奇想的获取,参考4F。
长期获取,正确的方式是先建立链接服务器,再查询异地SERV的数据库SPID。

yueqing 2010-10-21
  • 打赏
  • 举报
回复
我想了半天也没想出来,测试了下,非常不错,等等我用起来后再来结贴
billpu 2010-10-21
  • 打赏
  • 举报
回复
SELECT a.*
FROM OPENROWSET('SQLOLEDB','server';'sa';'password',
'SELECT @@spid') AS a
GO
yueqing 2010-10-21
  • 打赏
  • 举报
回复
痛苦死了 md
dawugui 2010-10-21
  • 打赏
  • 举报
回复
进程号 ?

这个还真不知道怎么取,帮顶了.
加载更多回复(1)
支持 MS SQL 2005 之前的版本 不支持 sql 2008 介绍 Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的其他事物不间断执行。 他可以支持SQLServer7.0、SQLServer2000和SQLServer2005,提标准数据库的日志文件或者备份文件中的信息。 其中提供两个强大的工具:日志分析浏览,对象恢复。具体功能如下: l 日志文件浏览 l 数据库变更审查 l 计划和授权变更审查 l 将日志记录导出到文件或者数据库表 l 实时监控数据库事物 l 计算并统计负荷 l 通过有选择性的消或者重做事物来恢复数据 l 恢复被截断或者删除表中的数据 l 运行SQL脚本 产品 LogExplore包含两部分 l 客户端软件 l 服务器代理 服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读在线事物日志块并通过网络传给客户端软件,由客户端软件来读这些原始的数据块来完成Log Explore所提供的所有功能。 他依赖来的网络协议包括: l Named Pipe:局域网中适用 l Tcp/Ip:广域网中适用 数据库相关介绍 事物日志(Transaction Log) SQLServer的每个数据库都包含事物日志,它以文件的形式存储,可以记录数据库的任何变化。发生故障时SQLServer就是通过它来保证数据的完整性。 操作(Operation) 操作是数据库中定义的"原子行为",每个操作都在日志文件中保存为一条记录。它可以是用户直接输入的SQL语句,比如标准的insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) 事物是一系列操作组成的序列。他可以理解为直观的不可分割的一笔业务,可以执行成功或者失败。典型的事物比如由应用程序发出的具有开启-提交功能的一组SQL语句。不同的事物靠事物Id号(transaction ID)来区分,具有相同ID的事物记录的日志也相同。 在线事物日志(Online Transaction Log) 在线事物日志是指当前活动数据库所用的日志。可以通过如下命令来确定其对应文件 Select * from SYSFILES 他的文件后缀名一般是.LDF 离线事物日志(Offline Transaction Log) 离线事物日志是指非活动数据库所用的日志。当其数据库处于关闭(ShutDown)才状态下可以进行复制备份操作。他的结果同在线事物日志完全相同。 备份文件 备份文件是保存食物日志备份的文件,通常管理员通过运行SQL语句或者企业管理器来生成该文件。备份文件的内部结构和事物日志不同,他采用称为MTF的格式来保存数据。一个备份文件可以包含一个日志的多组备份,甚至包括多个数据库的混合备份. 设置为自动收缩 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 强烈要求该项不要选中.否则SQLServer将已循环的方式来覆盖先前的日志记录,将会导致LogExplore无法恢复错误. 数据恢复介绍 LogExplore允许你恢复应为误操作或者程序错误而导致的数据丢失或者更改.比如执行update\Delete语句时丢失了where子句,或者错误使用了Dts功能. LogExplore不支持直接修改数据库.他可以生成事物的逆操作脚本. 如果log是delete table where ...的话,生成的文件代码就是insert table .... 你可以通过SQL查询分析器,或者LogExplore的Run SQL Script功能来执行生成脚本. 关于Undo Undo功能可以逆操作一组指定的用户事物。包括insert,delete和update,其局限性如下: l 事物类别:LogExplore只能undo用户事物。用户事物是指在用户表上定义的事物,不支持系统表的更新恢复。同时,他也不支持计划变更的回滚。 l Blob类型:包括text,ntext,image类型。LogExplore只支持这些类型的insert和delete恢复,不支持update语句恢复。 关于redo Redo功能可以再次运行一组指定事物。它可以在以下情况中用到: 丢失数据库而且没有任何备份文件。 l 如果原始日志文件没有丢失可以通过Redo来实现恢复。 l
介绍 Log Explorer主要用于对MSSQLServer的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的其他事物不间断执行。 他可以支持SQLServer7.0和SQLServer2000,提标准数据库的日志文件或者备份文件中的信息。 其中提供两个强大的工具:日志分析浏览,对象恢复。具体功能如下: l 日志文件浏览 l 数据库变更审查 l 计划和授权变更审查 l 将日志记录导出到文件或者数据库表 l 实时监控数据库事物 l 计算并统计负荷 l 通过有选择性的消或者重做事物来恢复数据 l 恢复被截断或者删除表中的数据 l 运行SQL脚本 产品 LogExplore包含两部分 l 客户端软件 l 服务器代理 服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读在线事物日志块并通过网络传给客户端软件,由客户端软件来读这些原始的数据块来完成Log Explore所提供的所有功能。 他依赖来的网络协议包括: l Named Pipe:局域网中适用 l Tcp/Ip:广域网中适用 数据库相关介绍 事物日志(Transaction Log) SQLServer的每个数据库都包含事物日志,它以文件的形式存储,可以记录数据库的任何变化。发生故障时SQLServer就是通过它来保证数据的完整性。 操作(Operation) 操作是数据库中定义的"原子行为",每个操作都在日志文件中保存为一条记录。它可以是用户直接输入的SQL语句,比如标准的insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) 事物是一系列操作组成的序列。他可以理解为直观的不可分割的一笔业务,可以执行成功或者失败。典型的事物比如由应用程序发出的具有开启-提交功能的一组SQL语句。不同的事物靠事物Id号(transaction ID)来区分,具有相同ID的事物记录的日志也相同。 在线事物日志(Online Transaction Log) 在线事物日志是指当前活动数据库所用的日志。可以通过如下命令来确定其对应文件 Select * from SYSFILES 他的文件后缀名一般是.LDF 离线事物日志(Offline Transaction Log) 离线事物日志是指非活动数据库所用的日志。当其数据库处于关闭(ShutDown)才状态下可以进行复制备份操作。他的结果同在线事物日志完全相同。 备份文件 备份文件是保存食物日志备份的文件,通常管理员通过运行SQL语句或者企业管理器来生成该文件。备份文件的内部结构和事物日志不同,他采用称为MTF的格式来保存数据。一个备份文件可以包含一个日志的多组备份,甚至包括多个数据库的混合备份. 设置为自动收缩 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 强烈要求该项不要选中.否则SQLServer将已循环的方式来覆盖先前的日志记录,将会导致LogExplore无法恢复错误. 数据恢复介绍 LogExplore允许你恢复应为误操作或者程序错误而导致的数据丢失或者更改.比如执行update\Delete语句时丢失了where子句,或者错误使用了Dts功能. LogExplore不支持直接修改数据库.他可以生成事物的逆操作脚本. 如果log是delete table where ...的话,生成的文件代码就是insert table .... 你可以通过SQL查询分析器,或者LogExplore的Run SQL Script功能来执行生成脚本. 关于Undo Undo功能可以逆操作一组指定的用户事物。包括insert,delete和update,其局限性如下: l 事物类别:LogExplore只能undo用户事物。用户事物是指在用户表上定义的事物,不支持系统表的更新恢复。同时,他也不支持计划变更的回滚。 l Blob类型:包括text,ntext,image类型。LogExplore只支持这些类型的insert和delete恢复,不支持update语句恢复。 关于redo Redo功能可以再次运行一组指定事物。它可以在以下情况中用到: 丢失数据库而且没有任何备份文件。 l 如果原始日志文件没有丢失可以通过Redo来实现恢复。 l 通过完整备份文件来把数据库恢复到某指定时间点,再通过redo功能完整恢

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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