SQL 2000/2005/2008 的收缩日志方法和清理日志图文教程

 

sql 在使用中每次查询都会生成日志,可是若是你长久不去清理,可能整个硬都堆满哦,846.cc笔者就遇到这样的状况,直接网站后台都进不去了。下面咱们一块儿来学习一下如何清理这个日志吧。javascript

如今有:sql server 2008 v10官方版sql server 2000我的版SQL Server 2005完整版html

讲解一下sql 2005日志怎么清理。通常状况下,SQL数据库的收缩并不能很大程度上减少数据库大小,其主要做用是收缩日志大小,应当按期进行此操做以避免数据库日志过大。
一、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->而后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,而后按肯定保存
二、在当前数据库上点右键,看全部任务中的收缩数据库,通常里面的默认设置不用调整,直接点肯定
三、收缩数据库完成后,建议将您的数据库属性从新设置为标准模式,操做方法同第一点,由于日志在一些异常状况下每每是恢复数据库的重要依据。
 java

最简单直接具体以下:web

1、下载:日志清理收缩工具sql

sql 日志清理收缩方法讲解:数据库

一、天然是下载日志清理软件。服务器

二、在服务器上运行trunc.exe,打开软件。oracle

这里用户名必定是sa 密码你必须记得sa 的密码,这个很重要,否则就会查询不到相应的数据库了。输入密码后就点数据库。你的服务器数据库就呈现出来了。ide

你想收缩哪个就选哪个吧。你应该懂了吧!好用简单方便哦。(以下图:)函数

2、SQL2008 的收缩日志 因为SQL2008对文件和日志管理进行了优化,因此如下语句在SQL2005中能够运行但在SQL2008中已经被取消: (SQL2005) Backup Log DNName with no_log go dump transaction DNName with no_log go USE DNName DBCC SHRINKFILE (2)

Go -------------------------------------------------------------- (SQL200: 在SQL2008中清除日志就必须在简单模式下进行,等清除动做完毕再调回到彻底模式。 USE [master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO USE DNName GO DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY) GO USE [master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --还原为彻底模式 GO 优势:此清除日志所运行消耗的时间短,90GB的日志在分钟左右便可清除完毕,作完以后作个彻底备份在分钟内便可完成。缺点: 不过此动做最好不要常用,由于它的运行会带来系统碎片。普通状态下LOG和DIFF的备份便可截断日志。此语句使用的恰当环境:当系统的日志文件异常增大或者备份LOG时间太长可能影响生产的状况下使用。

2005方法1: 
第一步: 
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,具体意思看帮助。 

方法2 
(这个方法在sqlserver2000的环境下作通常能成功,在sqlserver7及如下版本就不必定了): 
第一步: 
先备份整个数据库以备不测 
第二步: 
备份结束后,在Query Analyzer中执行以下的语句: 
exec sp_detach_db yourDBName,true --卸除这个DB在MSSQL中的注册信息 
第三步: 
到日志的物理文件所在的目录中去删除该日志文件或者将该日志文件移出该目录 
第四步: 
在Query Analyzer中执行以下的语句: 
exec sp_attach_single_file_db yourDBName,'d:\mssql7\data\yourDBName_data.mdf' 
--以单文件的方式注册该DB,若是成功则MSSQL将自动为这个DB生成一个500K的日志文件。 

以上方法在清除log日志中均有效。 
但,可否让sql server 不产生log日志呢?以上方法好像均无效。 
我这儿正好有个case: 
我客户的sql server天天都会产生4,500M的log日志,天天都清除一下,很是不便。有没有办法实现不产生log日志呢? 

我分析了一下客户产生log日志的缘由,而且作了相应测试。 
客户是天天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。 
好比: 
SELECT * into test_2 from b_bgxx 
共45000条记录,产生十几M log,若是 
delete from test_2 
产生80多M log ,这明显存在问题。 

虽然能够换成: 
truncate table test_2 
但我仍是但愿能找到不产生log的方法。就如oracle不产生归档同样。

3、Server 2005 : 清空数据库日志 日志文件满而形成SQL数据库没法写入文件时,可用两种方法: 方法一:清空日志。 1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--全部任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个容许收缩到的最小M数,直接输入这个数,肯定就能够了。 另外一种方法有必定的风险性,由于SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会形成数据的损失。 方法二: 1: 删除LOG 分离数据库 企业管理器->服务器->数据库->右键->分离数据库 2:删除LOG文件 附加数据库 企业管理器->服务器->数据库->右键->附加数据库 此法生成新的LOG,大小只有500多K。 注意:建议使用第一种方法。 若是想之后不让它增加 企业管理器--服务器--右键数据库--属性--事务日志--将文件增加限制为xM(x是你容许的最大数据文件大小) --SQL语句的设置方式: alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

相关文章
相关标签/搜索