关于sql日志文件
一段时间来,每天的工作都比较杂,vb,asp,c#,sql,每项工作都要搞,实在是累!工作之余,想想公司和工作的情况,看来是有必要换个环境了。不过也要先把目前的工作处理完成啊。
最近又遇到一个问题:一家客户使用中的数据库,日志文件异常增大,平均每天增加大约一个G,而数据文件变化不大。这两天开始查这个问题,但是好几天时间过去了,一直没有头绪。已经做了重建索引,重装sql,重装系统,更换服务器等操作,问题依旧。在google搜索了下,只有查找sql数据库日志文件大小的命令,但是不知如何查找表日志大小。
查询数据库的日志文件大小:dbcc sqlperf(logspace)
Database Name Log Size (MB) Log Space Used (%) Status
-------------- ------------------------ ------------------------ -----------
master 2.2421875 32.600174 0
tempdb 0.4921875 39.285713 0
model 0.4921875 41.07143 0
msdb 2.2421875 30.901567 0
pubs 0.7421875 49.934212 0
Northwind 0.9921875 34.940945 0
dbcc sqlperf(logspace) 可以获取实例中每个数据库日志文件大小,及使用情况。如果要保存SQL日志文件大小,则需要先创建一个数据表,然后动态执行dbcc sqlperf(logspace)命令:
create table dbo.LogSize
(
dbname nvarchar(50) not null
,logsize decimal(8,2) not null
,logused decimal(5,2) not null
,status int null
)
insert into dbo.LogSize
execute('dbcc sqlperf(logspace) with no_infomsgs')
要查日志文件异常增大的原因,就要先确定是哪张表操作异常;通过Log Explorer工具,我们可以看到日志文件的状况.
Log Explorer主要用于对MSSQLServer的事务分析和数据恢复。可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的其他事物不间断执行。可以支持SQLServer7.0和SQLServer2000,提取标准数据库的日志文件或者备份文件中的信息。
Log Explorer
相关文档:
数据类型
存储尺寸
描述
bigint
8 bytes
integer
4 bytes
smallint
2 bytes
tinyint
1 byte
bit
1 byte
numeric(p,s)
decimal(p,s)
dec(p,s)
19 bytes
money
8 bytes
float
8 bytes
real
4 bytes
datetime
8 bytes
nvarchar(n)
2*长度 bytes
nte ......
首先:分离数据库
企业管理器--右键suspect的数据库--所有任务--分离数据库然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执 ......
一、深入浅出理解索引结构
改善SQL语句
很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:
select * from table1 where name=''zhangsan'' and tID > 10000
和执行:
select * from table1 where tID > 10000 and name=''zhangsan''
一些人不知道 ......
在需要测试sql语句或者存储过程性能的时候可以用得上
CHECKPOINT --用于检查当前工作的数据库中被更改过的数据页或日志页,并将这些数据从数据缓冲器中强制写入硬盘
GO
DBCC FreeProcCache --从缓冲池中删除所有缓冲区
DBCC DropCleanBuffers&nbs ......