Database 板


LINE

※ 引述《pobie (嗯)》之铭言: : ※ 引述《TeemingVoid (TeemingVoid)》之铭言: : : 有两个方案提供给您参考 -- : : 甲案,在 Trigger 以 xp_cmdShell 跑 WSH,然後透过 WSH 叫用 PHP。详细作法如下: : : 1. 在(例如) c:\temp 建立一个 ShellRun.vbs 程式档案。(存档时,编码请用 Ansi) : : 程式内容: : : Set Shell = WScript.CreateObject("WScript.Shell") : : Shell.Run WScript.Arguments(0) : : 2. 在你的 Trigger 叫用 ShellRun.vbs : : 感谢大大的帮忙~! 在下使用方案一,确实有达到需求~真的非常感谢 : 但有个疑问是会不会有 deadlock 的情况出现呢? 应该不会,不过,还是要看你的程式怎麽写。 : 我的 trigger 做法是将 SQL 执行 DML 後被修改的资料(delete 时是修改前资料) : 做成一份 RAW XML 丢进 dbo.Log 资料表里 : 之後在执行 xp_cmdshell 去执行我的 php,将 dbo.Log 资料取出 : 并组成字串透过 WebService 送到另一端 DB 去 : 原始作法是使用 xp_cmdshell 执行 php.exe,却不幸发生 deadlock 的状况 原PO叙述得很清楚,所以虽然没有你的程式,大概还是可以了解原因: 1. 你的 trigger 是因为 update 而触发的; 2. trigger 期间又新增一笔记录,所以,至少专属锁定(eXclusive)了两个 key; 3. 由於 trigger 一定是 transaction 的一部分,这个还没结束的 transaction 又以同步模式跑 php 程式,但 php 因为资料锁定因而卡住无法读取资料 。 (除非php那边使用的 transaction isolation level 是 read uncommitted) 4. 偏偏应该继续以便最後解除锁定的 trigger 又因为程式就卡在 xm_cmdShell 那一行,所以,全面停摆。 : 虽然使用 ShellRun.vbs 解决了 deadlock 的问题 : 但往後会不会在资料量大与频繁时又发生 deadlock 的情况呢? 我那支 VB Script 在利用 Shell.Run 背景叫出浏览器之後,就算执行完毕了 (不管後来的 php 执行的情况如何),这样,就有点非同步执行的味道了。 既然 xp_cmdShell 不会卡住得以继续,等到 transaction 结束自然放开锁定, 排队等着读资料的php那头也就继续。 然而,如果 php 那头先加锁一些「别的」才进入等待状态,而这些「别的」, 又是 trigger 这边後续需要的,就有可能 deadlock。 说了半天,就当你的 php 程式跟任何一支 php 一样,虽然是 trigger 间接 诱发的,但是跟手动叫出浏览器连接网址没两样。所以,会不会 dead lock 要看你後来程式的作法,关於这点,麻烦请 google 一下: sql server deadlock best practice。 对了,因为那支 VB Script 是在背景执行浏览器,时间一久,可能会有一大堆 没有关掉的 iexplore.exe 行程(以 IE 为例),所以,trigger 最好加上: exec xp_cmdshell 'taskkill /F /IM iexplore.exe' 例如: create trigger DataTableUpdate on DataTable for update as declare @xml varchar(max) set @xml = (select * from deleted for xml raw) insert into LogTable (data) values (@xml) declare @logid varchar(8) = convert(varchar(8), @@identity) declare @cmd varchar(255) = 'c:\temp\ShellRun.vbs "http://localhost/testLab/test.aspx?id=' + @logid + '"' exec xp_cmdshell 'taskkill /F /IM iexplore.exe' exec xp_cmdshell @cmd go --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.41.97.149
1F:推 pobie:感谢!! 受教了 :) 11/17 19:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP