|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。关于sql中怪辟的各类毛病,和伶仃事件在t-sql编程中必定要注重,当心伶仃事件的圈套,只管制止华侈或伶仃资本,Microsoft公然公布过SQLServe下一版本Yukon将有内置非常处置语法。当时能够经由过程代码对没法意料的毛病有更好的把持。1、起首从SQLServer中Error讲起,SQL中毛病处置有些怪辟毛病级别同是16但了局都分歧。
以下是援用片断:
以下为援用的内容:
select*from一个不在的表
if@@error0
print这个没有输入
go
raiserror(,16,3)
if@@error0
print这个输入了
go
exec(select*from一个不在的表)
if@@error0
print这个输入了
go
execsp_executesqlNselect*from一个不在的表
if@@error0
print这个输入了
如许你能够发明经由过程exec或sp_executesql实行可疑的sql,如许就能够在前面捕获到被非常停止的毛病。
2、引出伶仃事件:
1、伶仃事件的发生
以下是援用片断:
select@@trancount以后毗连的举动事件数--以后毗连的举动事件数为0
begintran
select*from一个不在的表
if@@error0
begin
print没有实行到这里来!
if@@trancount0rollbacktran
end
committran
select@@trancount以后毗连的举动事件数--实行后你看看以后毗连的举动事件数为1,且反复实行会每次累加,这是很耗资本的。
应为rollback基本就没有被回滚。
2、利用现有手腕办理伶仃事件
以下是援用片断:
以下为援用的内容:
print@@trancountprint以后毗连的举动事件数--以后毗连的举动事件数为0
if@@trancount0rollbacktran--在这里写可让伶仃事件只坚持到下次你的历程被挪用
begintran
select*from一个不在的表
if@@error0
begin
print没有实行到这里来!
if@@trancount0rollbacktran
end
committran
---实行后你看看以后毗连的举动事件数为1,但反复实行不会累加
print@@trancountprint以后毗连的举动事件数
3、利用setxact_abort来把持部分违背束缚的毛病的实行历程
createtableTable1(aintcheck(a>100))
go
setxact_aborton
begintran
inserttable1values(10)
print这里没有被实行
committran
go
printprint==============================================print
setxact_abortoff
begintran
inserttable1values(10)
print这里被实行
committran
go
droptabletable1
但setxact_abort关于编译发生的毛病确没有起感化,且一样会发生伶仃事件
setxact_aborton
begintran
insert一个不在的表values(10)
print这里没有被实行
committran
go
printprint==============================================print
setxact_abortoff
begintran
insert一个不在的表values(10)
print这里没有被实行
committran
go
select@@trancount以后毗连的举动事件数---有两个伶仃事件
if@@trancount0rollbacktran
支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统 |
|