在Management Studio中使用BEGIN交易有多危险?

时间:2019-06-12 14:16:38

标签: tsql transactions

在t-sql中以即时模式修改数据时,出于安全考虑,我会将更改包装在BEGIN TRAN / COMMIT | ROLLBACK中。但是,最近我开始担心未能发出COMMIT或ROLLBACK的影响。

在开发代码时,我通常每天都在打开SSMS窗口,并且不妨查看或重用一些sql。有安全的方法吗?如果关闭窗口,我知道所有未提交的事务都会解决。但是,如果我不关闭它怎么办?例如,如果有人告诉我要紧急更改生产表怎么办?如果我不这样做,显然会对我们的用户产生影响。

如何确定情况并非如此?当我执行COMMIT并看到消息“ COMMIT TRANSACTION请求没有相应的BEGIN TRANSACTION”时,该消息的作用域是什么?这是否意味着该窗格的默认数据库中没有任何内容,或者任何可用数据库中没有任何内容?如果我运行

SELECT * FROM sys.sysprocesses WHERE open_tran = 1 

没有结果,如果我随后执行COMMIT并看到它没有响应(即,存在未提交的事务),那是什么意思

简单地说,COMMIT的范围是什么?我如何影响呢?

1 个答案:

答案 0 :(得分:0)

在已部署的代码中使用事务不再是危险的。每一种方式都有您可能会做或创建的东西使交易保持打开状态的机会。因此,在每种情况下都应采取一些步骤来防止它发生。

当您发出“ commit tran”时,它只会尝试在您的连接中提交tran。查找要提交的trans不会超出您的连接范围。范围是您连接的本地范围。

在完成操作之前,只需从正在使用的任何窗口中运行“ select @@ trancount”即可。 @@ TRANCOUNT存储当前连接中打开的事务数。

我总是将我的工作与仅使用一个SSMS实例的纯选择/只读/研究类型的工作分开,如果我需要就地修改任何数据,则打开一个单独的SSMS。仅在需要时关闭,而在Im完成后将其关闭。

您不能影响“提交”命令(我知道)的范围。