读书人

关于数据完整性的有关问题 希望大神给

发布时间: 2012-02-15 12:09:43 作者: rapoo

关于数据完整性的问题 希望大神给予解答 先拜谢
先说下问题所在:
现在项目都是用的存储过程,但是当服务器内存占用太高,或无响应的时候会出现,执行了存储过程中的,前两句或后面的没有执行。


之后想到利用 事物 来解决问题。我记得事物是要么全执行, 要么全不执行。但是同事说“ 如果SQL本身出现问题,比如机器出现问题,还是会出现问题,导致无法回滚。 还是执行了一半还是会出现问题”。

故此特来,求解。问问大家这类的问题怎么处理,主要项目里有不少资金上面的操作,所以扣除金额,和生成记录上要有保证。

请各位热心的朋友帮助解答问题的时候。从SQL 本身运行出现了问题。服务器出现了问题。无响应等特殊时候的情况来考虑下。来保证数据的完整性,另外使用事物会出现。那位同事说的那种问题吗?


先谢谢大家了,在线等.




[解决办法]
还是用事务吧 事务是要么执行 要么回滚的

原子性,一致性都不错


加上 set xact_abort on 可以自动回滚 只要有错误就回滚
[解决办法]
如果因为断电这些导致的故障 要避免的话 只能通过镜像切换 和数据库同步,集群这些来避免
[解决办法]

探讨
请各位热心的朋友帮助解答问题的时候。从SQL 本身运行出现了问题。服务器出现了问题。无响应等特殊时候的情况来考虑下。来保证数据的完整性,另外使用事物会出现。那位同事说的那种问题吗?

[解决办法]
探讨

那请问 会不会出现 向同事说的

用了事物,他走到一半如果出现,SQL本身出现了问题,他不会回滚并且,前面所执行的语句也执行了

[解决办法]
事物提交,重SQL,回滚到行事的
[解决办法]
SQL code
----原子性测试-----表t1,id只能等于1create table t1(id int constraint chk_id check(id=1))--表t2create table t2(id int )--测试数据insert into t2 values(1)insert into t2 values(2)insert into t2 values(3)insert into t2 values(4)insert into t2 values(5)--情况1set XACT_ABORT onbegin tran    insert into t1 values(1)    insert into t1 select id from t2    insert into t1 values(1)    commit--结果:表中没有插入记录--说明:set XACT_ABORT 在语句失败时自动回滚--情况2 transactionbegin tran    insert into t1 select id from t2    insert into t1 values(1)    commit--结果:t1中插入一条记录--说明:单独的begin tran,commit不具有原子性--情况3 try catchbegin try    begin tran    insert into t1 values(1)    insert into t1 select id from t2    insert into t1 values(1)    commitend trybegin catch  rollback   print 'error'  returnend catch--结果:表中没有插入记录--说明: try catch 使语句具有原子性 

读书人网 >SQL Server

热点推荐