清理SQL Server 2008数据库日志
第一步, 在收缩前先查看日志的大小:
SELECT *
from sysfiles
WHERE name LIKE ' % LOG %'
GO
第二步, 把数据库的恢复模式设成”简单”:
ALTER DATABASE 库名 SET RECOVERY SIMPLE
GO
第三步, 运行checkpoint指令, 把dirty page写进数据库:
CHECKPOINT
GO
第四步, 截断日志:
BACKUP LOG 库名 WITH NO_LOG
GO
第五步, 记录一下日志名为下一步做准备:
SELECT Name
from sysfiles
WHERE name LIKE ' % LOG'
GO
第六步, 收缩日志文件, 把不用的空间释放给操作系统:
DBCC SHRINKFILE (文件名, 所需大小)
GO
第七步, 验证一下日志大小是否达到所需大小了:
SELECT *
from sysfiles
WHERE name LIKE ' % LOG % '
GO
后续步骤:
1)查看你的主要数据库, 看看日志增长是否失控;
2)查看上面的代码, 并进行必要修改和测试以适应你的数据库要求;
3)定期收缩数据库 ----(注: 慎用!! 不建议用在production环境里.)
4)继续监控数据库大小和服务器上的可用空间大小.
相关文档:
如何判断字段是否存在
if col_length('表名','字段1') is null ALTER TABLE 表名 ADD 字段1 Nvarchar(50) if col_length('表名','字段2') is null ALTER TABLE 表名 ADD 字段2 Nvarchar(50) ");
删除字段
if col_length('表名','字段1,') is not null ALTER TABLE 表名 drop c ......
--合并行,并返回合并的值
Create proc [dbo].[proUniteRow]
@tab varchar(30), --表名
@col varchar(30), --合并的列名
@where varchar(2000), &nbs ......
方法(1)
SELECT stuff((select ','+ltrim(ColumnName) from #A for xml path('')
),1,1,'')
/*
102,103,104,105
*/
方法(2)
DECLARE @s NVARCHAR(1000)='';
SELECT @s+=ColumnName+',' from #A;
SELECT @s; ......
如何让你的SQL运行得更快
---- 人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、 ......