Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQL Server 数据库清除日志的方法

SQL Server 数据库清除日志的方法

作者头像
逸鹏
发布于 2018-04-11 03:01:45
发布于 2018-04-11 03:01:45
4.7K00
代码可运行
举报
文章被收录于专栏:逸鹏说道逸鹏说道
运行总次数:0
代码可运行

SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件

方法一: 1、打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。 方法二: 设置检查点,自动截断日志   一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如用户数据库cwbase1)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 方法三:通过SQL收缩日志 把代码复制到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 

方法四:删除日志文件。 此方法有一定的风险性,因为sql server的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。1、操作前请断开所有数据库连接。 2、分离数据库 分离数据库:企业管理器->服务器->数据库->cwbase1->右键->分离数据库 分离后,cwbase1数据库被删除,但保留了数据文件和日志文件 3、删除log物理文件 删除LOG物理文件,然后附加数据库: 企业管理器->服务器->数据库->右键->附加数据库 此法生成新的log,大小只有500多k。 注意:建议使用第一种方法。操作前请确保所有操作员都已经推出系统,断开数据库的连接。 以上操作前,请务必做好数据备份! 1.sql server 2005 清除日志语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dump transaction 数据库名称 with no_log 
backup log 数据库名称 with no_log 
dbcc shrinkdatabase(数据库名称) 

2.sql server 2008 清除日志语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

sp_dboption 数据库名称, "trunc. log on chkpt.", true 
checkpoint 
sp_dboption 数据库名称, "autoshrink", true 

清除SQLSERVER数据库日志文件的方法: 1、先将这个数据库卸载: EXEC sp_detach_db 'database_name', 'true' 然后将该数据库所对应的Log文件删掉; 最后,再将这个数据库注册到系统里面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXEC sp_attach_db @dbname = N'database_name', 
@filename1 = N'e:\mssql7\data\database_name_data.mdf' 

2、数据库上点右键-所有任务-收缩数据库-选择收缩文件为LOG 。 3、清除SQLSERVER数据库日志的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*******下面是转发的邮件***** 

The shrinking of log files is not immediate in SQL Server 7.0. The 
shrinking of log files does not occur until the active portion of the 
log moves. As updates are performed on the database, the shrink 
operation occurs at checkpoints or transaction log backups. Each log 
file is marked with the target_percent for the shrink operation. Each 
subsequent log backup or log truncation attempts to shrink the file to 
bring its size as close to the target_percent as possible. Because a log 
file can be shrunk only to a virtual log file boundary, it may not be 
possible to shrink a log file to a size smaller than the size of a 
virtual log file even if it is not being used. Please refer to SQL Book 
Online for the details. 

RESOLUTION 

Below script will help to shrink the log file immediately, pls keep it 
running for 3~4 minutes and then stop it manually. 

\* Run "select fileid, name,filename from ..sysfiles" to get 
the fileid which you want to shrink *\ 

use 
go 
dbcc shrinkfile(fileid,notruncate) 
dbcc shrinkfile(fileid,truncateonly) 
create table t1 (char1 char(4000)) 
go 
declare @i int 
select @i = 0 
while (1 = 1) 
begin 
while (@i < 100) 
begin 
insert into t1 values ('a') select @i = @i +1 
end 
truncate table t1 
backup log with truncate_only 
end 
go 

*****转发内容结束***** 

SQLServer数据库日志清理 清除sqlserver2005日志 有时候当系统运行时间比较长的时候,我们把备份的数据库还原的时候发现,数据库中数据文件和日志文件变的好大,特别是日志文件。现在给大家介绍如何清理SQLServer数据库日志;有两种方法如下: 方法一:手动清除sqlserver2005日志 1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)] 2.输入以下SQL语句,其中“TestDB”是数据库名称 DUMP TRANSACTION TestDB WITH NO_LOG 3.执行该SQL,成功后继续以下操作 4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)] 5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)” 6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。 方法二:用工具软件SqlServer日志清除专家3.0,可对Sql Server 6.5到Sql Server 2005的各种版本的数据库日志的清除;其使用方法非常简单;SqlServer 日志清除专家绿色版 V3.5下载地址: 下载地址 http://www.jb51.net/softs/21840.html 方法一操作起来相对麻烦一些,可是可以定制日志的大小,清理日志后其相应的数据库数据文件在也会变小,数据也不会丢失;方法二操作比较方便,可以把数据库中的日志文件清理到1M大小;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我为Net狂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库基本----SQL语句大全
EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'
阳光岛主
2019/02/19
6.2K0
sql语句总结,大家可以收藏了面试一定有用!!!
原文:https://blog.csdn.net/u012562943/article/details/50432733
用户5224393
2019/08/13
9600
SQL语句大全(3)
错误!未找到目录项。 set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere 2、收缩数据库 --重建索引 DBCC REINDEX DBCC INDEXDEFRAG --收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE
py3study
2020/01/14
7880
SQL之经典SQL语句大全
经典SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name  2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack  4
互联网金融打杂
2018/04/03
1.4K0
SQL语句大全中的sql语句备忘录—sql日常使用指北
CRUD:增查改删,即,create/read/update/delate 主要被用在描述软件系统中数据库或者持久层的基本操作功能
周陆军博客
2023/05/19
8790
Sqlserver2005日志文件太大,使其减小的方法
backup log dbNamewith NO_LOG backup log dbNamewith TRUNCATE_ONLY DBCC SHRINKDATABASE(dbName)
全栈程序员站长
2022/07/17
1.1K0
mysql sql语句大全
根据已有的表创建新表: A:create table tabnew like tabold (使用旧表创建新表) B:create table tabnew as select col1,col2… from tabold definition only 5、说明:删除新表
统计学家
2019/04/10
12.2K1
SQL2005和SQL2008如何压缩数据库及日志(log)文件?
以前在SQL2005中用的语句,到了SQL2008不能执行了,其实这个问题在7月份在美国的时候就遇到了,一直拖着,今天发现数据库占用空间达到30G了,当然了大部分是日志,因为有几张表每天Truncate然后重新生成,因为临时表的缘故。
崔文远TroyCui
2019/02/27
1.4K0
sql2005数据库置疑的解决方法_sql数据库置疑修复工具
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager 里面建立。 B.停掉数据库服务器。 C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据 库数据文件test_data.mdf。 D.启动数据库服务器。此时会看到数据库test的状态为”置疑”。这时候不能对此数据库进行任何*作。 E.设置数据库允许直接*作系统表。此*作可以在SQL Server Enterprise Manager里面选择数据库服 务器,按右键,选择”属性”,在”服务器设置”页面中将”允许对系统目录直接修改”一项选中。也可以 使用如下语句来实现。 use master go sp_configure ‘allow updates’,1 go reconfigure with override go F.设置test为紧急修复模式 update sysdatabases set status=-32768 where dbid=DB_ID(‘test’) 此时可以在SQL Server Enterprise Manager里面看到该数据库处于”只读\置疑\脱机\紧急模式”可以 看到数据库里面的表,但是仅仅有系统表 G.下面执行真正的恢复*作,重建数据库日志文件 dbcc rebuild_log(‘test’,’C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf’) 执行过程中,如果遇到下列提示信息:
全栈程序员站长
2022/09/23
1.4K0
mysql
    mysqladmin -u root -p ab12 password djg345
java好学者
2020/05/09
6150
sql 复习练习
一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 cre
拾点阳光
2018/05/10
2.1K0
SQL2000 数据库日志 清空
SQL2000 数据库日志 清空
Java架构师必看
2021/06/21
1.9K0
SQLSERVER数据库死锁与优化杂谈
当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行;所以,即时去捕捉数据库死锁,是挺不容易的。
Kiba518
2019/03/05
2.2K0
删除数据库日志文件的方法
本文介绍了如何删除数据库日志文件的方法,通过两种方式:一是通过手动操作,二是通过存储过程。通过存储过程可以更方便地控制数据库日志文件的大小,从而提高数据库的性能和稳定性。同时,还介绍了一种通过存储过程附加没有日志文件的数据库的方法。
用户1168362
2018/01/05
1.2K0
删除数据库日志文件的方法
SQL Server 2012 AlwaysOn集群日志收缩
BACKUP LOG 数据库名 TO DISK='NUL:'with STATS = 1
sherlock99
2018/07/25
3.6K0
使用作业自动清理数据库日志文件
用户1168362
2018/01/05
9610
使用作业自动清理数据库日志文件
SQL SERVER ALWAYS ON 为什么日志无法dump
SQL SERVER 还有人用,对的,很多人都在用,尤其很多企业,非互联网的企业。那今天就说说 SQL SERVER ALWAYS ON 高可用集群中,为什么不切日志的问题。引起这篇文字的原因是有一个81G 都没有切除日志的 AWO集群。
AustinDatabases
2020/03/10
1.1K0
SQL SERVER  ALWAYS ON 为什么日志无法dump
Sql Server查看所有数据库名,表名,字段名(SQL语句)
1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name
静谧的小码农
2019/05/26
4.9K0
SQL Server查询数据库文件分配大小和数据库真实大小的脚本分享
查询真实大小(非数据文件分配大小) -- 当前数据库真实大小 SELECT CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, CAST(ROUND(((SUM(a.total_pages)
AiDBA宝典
2023/04/27
1K0
SQL Server查询数据库文件分配大小和数据库真实大小的脚本分享
数据库置疑什么原因_sql2008数据库置疑
在MS SQLSERVER中一直有这样的问题,SQLSERVER的状态”置疑”,我们先来分析一下SQLSERVER数据库”置疑”的原因:
全栈程序员站长
2022/09/24
6590
相关推荐
数据库基本----SQL语句大全
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文