首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于数据完整性的有关问题 希望大神给予解答 先拜谢

2012-02-15 
关于数据完整性的问题 希望大神给予解答 先拜谢先说下问题所在:现在项目都是用的存储过程,但是当服务器内

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

   
  之后想到利用 事物 来解决问题。我记得事物是要么全执行, 要么全不执行。但是同事说“ 如果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 使语句具有原子性 

热点排行