数据库进程被杀死后,数据库回退到数天前的数据

这个是我很久很久以前的存稿。。。。。

今天在使用SQLServer2008时,出现了一个大问题:

数据库表被锁住了,查看被锁住的进程时,发现有很多。

查看数据库进程的sql语句:

select request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) 
tableName from   sys.dm_tran_locks where resource_type='OBJECT';

然后作死的杀死了所有进程:

    declare @spid  int 
    Set @spid  = 62 --锁表进程
    declare @sql varchar(1000)
    set @sql='kill '+cast(@spid  as varchar)
    exec(@sql)

杀死进程后,发现数天没关的电脑上的数据库的数据居然回退到几天前的数据了!让我生无可恋。不知道为何会出现这种情况,因此问了很多大牛,终于搞清楚了!

原来,我在执行的时候,由于数据库表设计的不合理,导致了很多进程没有提交,还有就是对表格的操作的过程中也产生了很多表格的操作顺序发生冲突,把表给锁住了,导致进程未被提交,没有及时提交。因此我们把进程杀死的时候,会把所有的事物全部都rollback,再加上很久没关电脑,就造成了前面的窘境。

在执行杀死进程操作时,我们可以看看还有没有未被提交的进程和事物。

SELECT @@TRANCOUNT--返回当前连接的活动事务数。  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值