清理数据库日志sql
❶ MSsql 清空日志 删除日志文件
最近的项目主要做数据的归档 把数据从一个数据库拉到另一个数据库 造成新数据库的日志文件非常大 或者数据库在使用过程中会使日志文件不断 增加 使得数据库的性能下降 并且占用大量的磁盘空间 于是想把日志文件删除 最简单就是先分离数据库 》删除日志文件 》最后附加数据 我这里需要在 SSIS中调用 所以已羡轮歼sql脚本为主
两种简单的清除日志的方法
一分离附加法 首先把数据库分离 分离数据库之前一定要做好数据库的全备份 选择数据库——右键——任务——分离 其中药勾选删除连接!
分离后在数据库列表将看不到已分离的数据库 删除数据库的LOG文件数据库文件夹下的对应数据库的 ldf文件 附加数据库 附加的时候会提醒找不到log文件 到时附加上后会自动创建一个新的日志文件 从而达到清理数据库的目的
二 sql语句清除mssql日志 DUMP TRANSACTION TestDB WITH NO_LOG 清除日志 DBCC SHRINKFILE ( TestDB_log ) 收缩数据库文件 BACKUP LOG TestDB WITH NO_LOG 截兄冲断事务日志 该命令在SQL Server 也桐滑是不支持 在SQL Server 和 可以使用
首先我们需要获取数据库文件的路径
declare @logfilename varchar( ) declare @datafilename varchar( ) select @logfilename=physical_name from sys database_files where type= select @datafilename=physical_name from sys database_files where type=
然后切换到master下 分离数据库
use master exec sp_detach_db @dbname= TestVFA ;
紧接下来就是删除数据库 日志文件 Remove file DECLARE @Result int DECLARE @FSO_Token int EXEC @Result = sp_OACreate Scripting FileSystemObject @FSO_Token OUTPUT EXEC @Result = sp_OAMethod @FSO_Token DeleteFile NULL @logfilename EXEC @Result = sp_OADestroy @FSO_Token 最后就是附加数据库 exec sp_attach_single_file_db @dbname= TestVFA @physname=@datafilename
注意 默认Ole Automation Proceres 是禁用的我们需要启用它
lishixin/Article/program/MySQL/201311/29584
❷ 如何清理sql server 已满的数据库日志
具体方法有3种。
方法一:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--
no_log和truncate_only是在这里是同义的,随便执行哪一句都可以。
第二步:
1.收缩特定数据库的所有数据和日志文件,执行:
dbcc
shrinkdatabase
(database_name,[,target_percent])
--
database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比。
2.收缩一次一个特定数据库中的数据或日志文件,执行
dbcc
shrinkfile(file_id,[,target_size])
--
file_id是要收缩的文件的标识
(id)
号,若要获得文件
id,请使用
file_id
函数或在当前数据库中搜索
sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc
shrinkfile
将文件大小减少到默认文件大小。两个dbcc都可以带上参数notruncate或truncateonly,具体意思查看联机帮助.
方法二:
第一步:
先备份整个数据库以备不测
。
第二步:
备份结束后,在query
analyzer中执行如下的语句:
exec
sp_detach_db
yourdbname,true
--卸除这个db在mssql中的注册信息
第三步:
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录
第四步:
在query
analyzer中执行如下的语句:
exec
sp_attach_single_file_db
yourdbname,'
d:\mssql\data\yourdbname_data.mdf
'
--以单文件的方式注册该db,如果成功则mssql将自动为这个db生成一个500k的日志文件。
方法三:
1.
进入企业管理器,选中数据库,比如demo
2.
所有任务->分离数据库
3.
到数据库文件的存放目录,将muonline_log.ldf文件删除,以防万一,你可以拷出去
4.
企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧,继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5.
记得数据库重新附加后用户要重新设置一下。
如果以后,不想要它变大:
sql2000下使用:
在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。
或用sql语句:
alter
database
数据库名
set
recovery
simple
❸ 如何清空sql数据库的日志文件
SQLSERVER的数据库日志占用很大的空间,下面提供三种方法用于清除无用的数据库日志文件x0dx0a方法一: x0dx0a1、打开查询分析器,输入命令 x0dx0aBACKUP LOG database_name WITH NO_LOG x0dx0a2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。 x0dx0ax0dx0a方法二: x0dx0a设置检查点,自动截断日志 x0dx0ax0dx0a一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 x0dx0a1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如用户数据库cwbase1)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存 x0dx0a2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定 x0dx0a3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 x0dx0ax0dx0a方法三:通过SQL收缩日志 x0dx0ax0dx0a把代码复制到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可 x0dx0ax0dx0aSET NOCOUNT ON x0dx0aDECLARE @LogicalFileName sysname, x0dx0a@MaxMinutes INT, x0dx0a@NewSize INT x0dx0ax0dx0aUSE tablename -- 要操作的数据库名 x0dx0aSELECT @LogicalFileName = 'tablename_log', -- 日志文件名 x0dx0a@MaxMinutes = 10, -- Limit on time allowed to wrap log. x0dx0a@NewSize = 1 -- 你想设定的日志文件的大小(M) x0dx0ax0dx0a-- Setup / initialize x0dx0aDECLARE @OriginalSize int x0dx0aSELECT @OriginalSize = size x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aSELECT 'Original Size of ' + db_name() + ' LOG is ' + x0dx0aCONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + x0dx0aCONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aCREATE TABLE DummyTrans x0dx0a(DummyColumn char (8000) not null) x0dx0ax0dx0aDECLARE @Counter INT, x0dx0a@StartTime DATETIME, x0dx0a@TruncLog VARCHAR(255) x0dx0aSELECT @StartTime = GETDATE(), x0dx0a@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY' x0dx0ax0dx0aDBCC SHRINKFILE (@LogicalFileName, @NewSize) x0dx0aEXEC (@TruncLog) x0dx0a-- Wrap the log if necessary. x0dx0aWHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired x0dx0aAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) x0dx0aAND (@OriginalSize * 8 /1024) > @NewSize x0dx0aBEGIN -- Outer loop. x0dx0aSELECT @Counter = 0 x0dx0aWHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) x0dx0aBEGIN -- update x0dx0aINSERT DummyTrans VALUES ('Fill Log') x0dx0aDELETE DummyTrans x0dx0aSELECT @Counter = @Counter + 1 x0dx0aEND x0dx0aEXEC (@TruncLog) x0dx0aEND x0dx0aSELECT 'Final Size of ' + db_name() + ' LOG is ' + x0dx0aCONVERT(VARCHAR(30),size) + ' 8K pages or ' + x0dx0aCONVERT(VARCHAR(30),(size*8/1024)) + 'MB' x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aDROP TABLE DummyTrans x0dx0aSET NOCOUNT OFF x0dx0ax0dx0a方法四:删除日志文件。 x0dx0ax0dx0a此方法有一定的风险性,因为sql server的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。1、操作前请断开所有数据库连接。 x0dx0a2、分离数据库 x0dx0a分离数据库:企业管理器->服务器->数据库->cwbase1->右键->分离数据库 x0dx0a分离后,cwbase1数据库被删除,但保留了数据文件和日志文件 x0dx0a3、删除log物理文件 x0dx0a删除LOG物理文件,然后附加数据库: 企业管理器->服务器->数据库->右键->附加数据库 x0dx0a此法生成新的log,大小只有500多k。 x0dx0ax0dx0a注意:建议使用第一种方法。操作前请确保所有操作员都已经推出系统,断开数据库的连接。 x0dx0ax0dx0a以上操作前,请务必做好数据备份!x0dx0ax0dx0a1.sql server 2005 清除日志语句 x0dx0ax0dx0amp transaction 数据库名称 with no_log x0dx0abackup log 数据库名称 with no_log x0dx0adbcc shrinkdatabase(数据库名称)
❹ 如何清除SQL数据库日志清除后对数据库有什么影响
教你如何清除SQL日志 x0dx0ax0dx0a1.打开查询分析器,输入命令x0dx0aDUMP TRANSACTION 数据库名 WITH NO_LOGx0dx0a2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。x0dx0ax0dx0a清除Log有两种方法:x0dx0ax0dx0a 1.自动清除法x0dx0ax0dx0a 开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。x0dx0ax0dx0a 2.手动清除法x0dx0ax0dx0a 执行命令“mp transaction”来清除Log。以下两条命令都可以清除日志:x0dx0ax0dx0amp transaction with truncate_onlyx0dx0amp transaction with no_log x0dx0ax0dx0a 通常删除事务日志中不活跃的部分可使用“mp transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“mp transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。x0dx0ax0dx0a 以上两种方法只是清除日志,而不做日志备份,若想备份日志,应执行“mp transaction database_name to mpdevice”命令。 x0dx0ax0dx0a清除后对数据库没有影响
❺ SQL SERVER数据库日志清空图文教程
数据库日志不停疯长 如何进行清空呢?这里以一台数据库SQL SERVER 为例 日志文件达到了 多个G一直无法清理 想了很多的办法
比如下面这款 SqlServer日志清除专家 可用于SQL Server SQL Server SQL Server 的各种版本的数据库日志的清除
这个工具一清就可以清干闷巧陵净的 使您再也不用担心数据库日志文件超过几百兆或上GB级而烦恼
第二个方法就是采用了一个比较死的办法 采用 分离 然后再删除日志文件再附加来生成一个新的日志文件
切记在操作前先把SQL好好的备份一下
第一步 当然还是打开企业管理器了
宽颂在分蚂戚离前最好是先把IIS之类的正在连接数据库的程序关一下 要不然老半天也分离不了
也可以选择一下 删除链接 这样可能分离会快一点
我们再定位到数据库所在的硬盘位置
我们为了保除起见可以把 qq mdf备份一份 然后再将 qq _log ldf 这个文件重命一下名( G的文件实在是没地方可以备份)
然后我们再来附加数据库
附加到刚刚那个 mdf的文件 注意看下面会提示 ldf 文件找不到
不管他了 选择 ldf这一分把他给删掉
然后再确定 哈还原成功了 系统自动生成了一个新的 ldf 文件 KB
建议大家先用上面的那个工具去清一下 如果清不到再用这个死办法来删除日志
最后再次提醒各位一定要注意备份噢!!
lishixin/Article/program/SQLServer/201311/22344
❻ SQL Server 快速清除日志文件的方法
SQL Server 2000快速清除日志文件的方法
SQL Server 2000 数据库日志太大!
如何清理SQL Server 2000的日志呢?
如何压缩SQL Server 2000的日志呢?
如何让SQL Server 2000的日志变小呢?
据我所知,办法有很多很多,总结起来算有3类吧:
1、点几下鼠标,用SQL Server 2000管理工具中的企业管理器即可实现,待会儿详解;
2、用SQL语句,在SQL Server 2000管理工具中的查询分析器可以实现,此法高级人士喜欢用;
3、用第三方工具实现,原理嘛,我觉得应该是用SQL语句来实现的,这方法好,简单易用,网上不乏精品工具,待会儿介绍一款。
一、现在我们详细描述一下如何用企业管理器清理SQL 2000的日志:
1、打开企业管理器,右击要处理的数据库--》属性--》选项--》故障还原,选“简单”--》确定。如图:
2、右击要处理的数据库--》所有任务--》收缩数据库--》什么也不动,默认第一个是0%,其它两个未选中,点确定--》如果您以前数据库日志文件大于1M那么现在再看看,是不是只有1M了呢。
3、操作完后--》按第一步,把“故障还原”,选“完全”,传说中SQL Server 2000 有自动还原功能,说是如果非法关机等因素造成数据丢失可以自动回滚,另外可以用程序来实现操作回滚,所以最好是让故障还原是“完全”。
4、这样便实现了“SQL Server 2000 数据库日志太大!如何管理,清除,变小,压缩它”中的清除,变小,压缩了,至于怎么管理,自己看着办吧,我一般只会用到这些,再有深入研究的话我会写上来的`。
二、现在我们介绍用第三方SQL Server 日志清理工具来清理日志,简单易用高效,推荐用这个方法。
我喜欢用 SqlServer日志清除专家 v3.5 来实现这个功能。界面如下:
数据库那里一般会将整个服务器的数据库名都列举出来,需要选择为自己账户能管理到的那个,我这里DB_iszip账户能管理的是 iszip ,选择好之后,点“清除日志”按钮,然后SQL Server 2000的日志就被清理好了,此时你去服务器看你数据库日志占用空间就只有1M了。
;