问题现象:
有部分客户软件安装不久后就开始出现卡顿情况,据跟进分析,除了由于数据库索引或自增列损坏之外(底下附索引自增列修复语句),还有因为新装的软件数据库日志模式为“大容量日志”导致数据库日志文件无限度增长引起的。
解决方法:
经测试发现有部分软件的数据库安装包,装在sql2012时会将数据库默认为大容量日志(装在sql2008没有问题,默认简单模式),此问题后续新安装包会优化处理,但是目前流通的老安装包可能还会存在此风险,各位在碰到卡顿等性能问题的时候,可以关注一下处理此类问题的解决方案。
方法1:以下sql语句是针对商锐数据库处理的,如果是商慧则全文将hbposev9改为hbposepro。
1)以下语句是将SQL 2008 或2012 的恢复模式更改为简单模式。
USE [master]
GO
ALTER DATABASE hbposev9 SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE hbposev9 SET RECOVERY SIMPLE; --简单模式
GO
use hbposev9
DBCC SHRINKFILE (hbposev9_log, 1); --收缩日志文件
DBCC SHRINKDATABASE(hbposev9) --收缩数据库
2)以下语句是将SQL 2000的恢复模式更改为简单模式。
USE [master]
GO
ALTER DATABASE hbposev9 SET RECOVERY SIMPLE WITH NO_WAIT;
GO
ALTER DATABASE hbposev9 SET RECOVERY SIMPLE; --简单模式
GO
Backup Log hbposev9 with no_log
dump transaction hbposev9 with no_log
USE hbposev9
DBCC SHRINKFILE (2)
方法2:以下语句用作修复索引和自增列。
use hbposev9
go
declare @tablename varchar(100)
declare test_cur cursor for
select object_name(id) from syscolumns
where status=128
open test_cur
fetch test_cur into @tablename
while @@fetch_status=0
begin
DBCC CHECKIDENT (@tablename, RESEED)
fetch test_cur into @tablename
end
close test_cur
deallocate test_cur
go
declare @tablename varchar(100)
declare test_cur cursor for
select object_name(id) from sysobjects
where type ='U'
open test_cur
fetch test_cur into @tablename
while @@fetch_status=0
begin
DBCC DBREINDEX(@tablename)
fetch test_cur into @tablename
end
close test_cur
deallocate test_cur
go