收缩MSSQL数据库日志的大小方法详解

分为两个步骤:

步骤一 截断数据库中的日志内容

 代码如下 复制代码

BACKUP LOG 数据库名称 WITH TRUNCATE_ONLY

步骤二 强制数据库紧缩其大小

 代码如下 复制代码

DBCC SHRINKDATABASE ( 数据库名称 , TRUNCATEONLY )

这两个步骤需求使用查询分析器来执行。关于其具体的意义,请参考MSSQL数据库附带的
Transact-SQL的协助文件。

还有一种方法就是在MSSQL企业管理器的数据库属性>>选项中,将毛病还原>>模型设置为简单,然后确定,这样也可以直接减少日志文件的体积.

利用存储过程收缩mssql数据库日志

方法二

 代码如下 复制代码

SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT

USE tablename -- 要操作的数据库名
SELECT @LogicalFileName = 'tablename_log', -- 日志文档名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 您想设定的日志文档的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)

DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' db_name() ' LOG is '
CONVERT(VARCHAR(30),size) ' 8K pages or '
CONVERT(VARCHAR(30),(size*8/1024)) 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

实例

下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

a.分离

 代码如下 复制代码

EXEC sp_detach_db @dbname = 'pubs'

b.删除日志文件

c.再附加

 代码如下 复制代码

EXEC sp_attach_single_file_db @dbname = 'pubs',

@physname = 'c:/Program Files/Microsoft

SQL Server/MSSQL/Data/pubs.mdf'

5.为了以后能自动收缩,做如下设置

企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:

 代码如下 复制代码

EXEC sp_dboption '数据库名',

'autoshrink', 'TRUE'

6.如果想以后不让它日志增长得太大

企业管理器--服务器--右键数据库--属性--事务日志

--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:

alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

时间: 2024-12-21 07:49:25

收缩MSSQL数据库日志的大小方法详解的相关文章

如何压缩MSSQL数据库日志的大小

数据|数据库|日志|mssql|压缩 数据库在日积月累的操作过程中,不但自身体积会慢慢增长,其日志的容量大小同样也随着数据库实体文件的增长而增长,且会占用很大的空间.MSSQL数据库的大小包含数据(Data)和事务日志(TransactionLog)两个部分. 数据部分存储的是用户数据库中的数据,包含用户的数据表.视图.存储过程等等内容. 数据部分一般存储与数据库文件组中的.mdb文件中.一般来说,在正常使用的情况下,这 个部分的大小不会经常性地发生很大的变化,除非是用于存储论坛之类快速变化的数

mysql、mssql及oracle分页查询方法详解_数据库其它

本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返

限制apache日志文件access.log大小方法详解

用到apache自带的rotatelogs小工具 语法如下: rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ] 参数解释: -l :使用本地时间代替GMT时间作为时间基准.注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果. logfile:它加上基准名就是日志文件名.如果logfile中包含"%",则它会被视为用于strftime()的格式字符串:否则它会被自动加上以秒

mysql5.5数据库data目录迁移方法详解_Mysql

//前一阵子以为学习需要就在自己的本本上装了个mysql数据库.今天想把结合jsp做的项目拿到学校机器上用用,但发现数据库数据怎么迁移,首先找不到数据库的数据目录在什么地方,就上网搜了搜也没找到合适的答案,但无意中发现原来5.5已经很人性化了.现在废话不多. 先说一下,其实数据库的目录就在你安装目录的data里面,我的实在D盘.可能大家默认安装都在C吧.这样就要迁移了.这个大家都懂.(D:\Program Files\MySQL\MySQL Server 5.5\data)要是我要迁移到学校机器

用php制作简单分页(从数据库读取记录)的方法详解_php实例

      PHP新手,一直想做一下分页都给忘了,今天有幸被提醒所以网上搜了一下.有些写的看不懂也没怎么去看.最后找到一个比较简单的. 大致的思想就是: 1.设置每页要显示的最大记录数. 2.计算出页面总数 3.当前页面跟总页面数比较改变连接的状态 4.用limit控制从数据库中读取记录 下面是代码: 复制代码 代码如下: $conn = mysql_connect('localhost','root','');            mysql_select_db('db_BookStore'

mongodb创建数据库和配置用户方法详解

1.安装mongodb 这步就不说了,大家自己去看linux/47932.htm">Centos安装MongoDB. 2.创建数据库 use tt 这样就创建了一个数据库,如果什么都不操作离开的话,这个库就会被系统删除.所以我们还要执行下面的命令: db.usr.insert({'name':'tompig'}); db.usr.insert({'name':'tompig1','id':1}); 我是随便整了2个表,这个无所谓的,反正要导入表的话就删除掉这2个就可以了,目前我们只是想让数

mysql中日期比较大小方法详解

假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql:  代码如下 复制代码 select * from product where add_time = '2013-01-12' 对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理:  代码如下 复制代码 select *

如何远程调用Access数据库方法详解

  如何远程调用Access数据库方法详解: 使用了TCP/IP,ADO及XML(需要安装Microsoft XML 4.0.).分服务器和客户端两部分,服务器可以多用户同时连接.远程连接Access数据库有很多方法,我以前已经比较详细的回答过(见下面所列的5种方法),我现在这个例子属于其中的第3种方法(不需要使用RDS或Web服务器). 远程连接access数据库的几个方法: 1.建立VPN(Virtual Private Network),这样你的电脑和主机的连接就与局域网无异,然后把服务器

python连接MySQL数据库方法详解

python连接mysql教程数据库教程方法详解 host,连接的数据库服务器主机名,默认为本地主机(localhost).           user,连接数据库的用户名,默认为当前用户.         passwd,连接密码,没有默认值.         db,连接的数据库名,没有默认值.         conv,将文字映射到python类型的字典.默认为 mysqldb.converters.conversions         cursorclass,cursor()使用的种类,