清理sql server 2008日志步骤如下:1将数据库设置成 简单 模式选择要收缩的数据库,点右键 属性->选项,选择 简单模式2选择任务->收缩->文件3选择日志或者用如下语句代码USE [master]GOALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE DNName SET RECOVERY SIMPLEGOUSE DNName GODBCC SHRINKFILE (N'LogFileName' , 0,TRUNCATEONLY)GOUSE [master]GOALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAITGOALTER DATABASE DNName SET RECOVERY FULLGOSQL Server 2000要清理日志使用的是dump语句,但是在SQL Server2008里,这个语句不管用了,如果日志文件很大,比如超过1G,就需要截断一下日志文件以加快sqlserver的运行速度,在SQL Server2008里,方法改为:有数据库 xxdb 在 SQL Server 2008 下,日志文件已经超过1G。以往使用BACKUP语句-BACKUP LOG xxdb WITH NO_LOG 已经失效,在查阅 MSDN 之后发现 MS 提供的标准截断日志语句已经变为了 “BACKUP LOG 语句不指定 WITH COPY_ONLY”使用语句 BACKUP LOG xxdb to disk='x:\work\1bak' 成功将日志文件备份,并截断日志文件。这里x:代表你想要备份文件的盘符。然后使用 DBCC SHRINKFILE (xxdb_log,10) 收缩日志文件到 10M总结:完整的收缩日志文件的 T-SQL 语句:BACKUP LOG xxdb to disk='x:\work\1bak'DBCC SHRINKFILE (xxdb_log,10)GO--BACKUP LOG <db_name> to disk=<'backupfilename'>DBCC SHRINKFILE (<log_filename>,10)GO里面的x:\work是随意设置的。当然也可以收缩到比如5M或1M。在用的:USE[master]GOALTERDATABASEYHDBSETRECOVERYSIMPLEWITHNO_WAITGOALTERDATABASEYHDBSETRECOVERYSIMPLE--简单模式GOUSEYHDBGODBCCSHRINKFILE(N'YHDB_log', 11,TRUNCATEONLY)GOUSE[master]GOALTERDATABASEYHDBSETRECOVERYFULLWITHNO_WAITGOALTERDATABASEYHDBSETRECOVERYFULL--还原为完全模式GO
backup log DB_Name with no_log方法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_datamdf'
--以单文件的方式注册该DB,如果成功则MSSQL将自动为这个DB生成一个500K的日志文件。
以上方法在清除log日志中均有效。
但,能否让sql server 不产生log日志呢?以上方法好像均无效。
我这儿正好有个case:
我分析了一下客户产生log日志的原因,并且做了相应测试。
客户是每天将数据库清空,从总系统中将数据导入到sql server里。我感决sqlserver在插入时产生log不大,在delete整个库时产生log极大。
比如:SELECT into test_2 from b_bgxx
共45000条记录,产生十几M log,如果
delete from test_2
产生80多M log ,这明显存在问题。
虽然可以换成:
但我还是希望能找到不产生log的方法。就如oracle不产生归档一样。
打开企业管理器,右键单击你要删除日志的数据库->属性,选择事务日志,选择你要删除的日志文件,点删除。 记得备份
EXEC sp_detach_db @dbname = '数据库名'
/
先执行上面语句,再访问到那个数据库目录下删除日志文件后,执行下面语句!
/
EXEC sp_attach_single_file_db @dbname = '数据库名',
@physname = 'd:\Microsoft SQL Server\MSSQL\Data\数据库名'_Datamdf'
1、确定SQL数据库的安装路径与所用的SQL数据库名称。2、点击开始--程序--Microsoft SQL Server--查询分析器--确定,进入软件里,点击菜单帮助--Transact-sql帮助(S)--索引--输入(sp_attach_single_file_db),在右边对话框里找到以下的命令或者在空白处直接输入以下的命令:EXEC sp_detach_db @dbname = 'pubs'returnEXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubsmdf'注意:return是加入的命令语名,将数据库(LDF与MDF)分离,再将数据库名改回所要选的,即是pubs改为J2002。即是:EXEC sp_detach_db @dbname = ' J2002'returnEXEC sp_attach_single_file_db @dbname = ' J2002',@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ J2002mdf'3、输入命令后,点击菜单查询--执行,下面对话框出现命令"命令已成功完成"。4、删除命令(EXEC sp_detach_db @dbname = ' J2002' return),进入安装SQL数据库路径里将J2002ldf文件重命名。5、接着第3点开始,点击菜单查询--执行,下面对话框出现命令"设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\J200188ldf' 可能有误。已创建名为 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\j200188_logLDF' 的新日志文件"。
数据库的性能是DBA都需要重点关注的,日志文件的增多严重影响数据库的性能,本文将为您介绍SQL Server删除日志文件的方法,供您参考,希望对您有所帮助。
数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQL Server数据库都有log文件,log文件记录用户对数据库修改的 *** 作。可以通过直接删除log文件和清空日志在清除数据库日志。
1、删除LOG
11 分离数据库
分离数据库之前一定要做好数据库的全备份,选择数据库——右键——任务——分离。
勾选删除连接
分离后在数据库列表将看不到已分离的数据库。
12 删除LOG文件
13 附加数据库
附加的时候会提醒找不到log文件。
删除数据库信息信息的ldf文件:
附加数据库之后将生成新的日志文件log,新的日志文件的大小事504K。
14 也可以通过命令才完成以上的 *** 作
use master;
exec sp_detach_db @dbname='数据库名';
exec sp_attach_single_file_db @dbname='数据库名',@physname='D:\Program Files\Microsoft SQL Server\MSSQL10SQL2008\MSSQL\DATA\TestDBmdf'
Sp_detach_db:分离数据库;
sp_attach_single_file_db:附加单个数据库文件;在上述代码中只附加了数据文件,而未附加日志文件,言下之意就是删除了日志文件。
该命令在SQL Server 2005和2000支持,SQL Server 2008不支持该命令。
2 清空日志
DUMP TRANSACTION 数据库名 WITH NO_LOG
3 收缩数据库文件
DBCC SHRINKFILE ('TestDB_log',1)
SQL Server中“数据收缩”详解
4 截断事务日志
BACKUP LOG TestDB WITH NO_LOG
该命令在SQL Server 2008也是不支持,在SQL Server 2005和2000可以使用。
-- 清空日志
--压缩日志及数据库文件大小
/--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库
--/
selectfromsysfiles
--1清空日志
DUMPTRANSACTIONusernameWITHNO_LOG
--2截断事务日志:
BACKUPLOGusernameWITHNO_LOG
--3收缩数据库文件(如果不压缩,数据库的文件不会减小
-- 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
-- 也可以用SQL语句来完成
--收缩数据库
DBCCSHRINKDATABASE(username)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:selectfromsysfiles
DBCCSHRINKFILE(2)
--4为了最大化的缩小日志文件(如果是sql70,这步只能在查询分析器中进行)
-- a分离数据库:
-- 企业管理器--服务器--数据库--右键--分离数据库
-- b在我的电脑中删除LOG文件
-- c附加数据库:
-- 企业管理器--服务器--数据库--右键--附加数据库
-- 此法将生成新的LOG,大小只有500多K
-- 或用代码:
-- 下面的示例分离username,然后将username中的一个文件附加到当前服务器。
execsp_dboptionusername,'singleuser',true
a分离
EXECsp_detach_db@dbname='username'
b删除日志文件
execmasterxp_cmdshell'delD:\ProgramFiles\SQL\database\username_LOGldf'
c再附加
EXECsp_attach_single_file_db@dbname='username',
@physname='D:\ProgramFiles\SQL\database\username_DataMDF'
--5为了以后能自动收缩,做如下设置:
-- 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
--SQL语句设置方式:
EXECsp_dboption'数据库名','autoshrink','TRUE'
--6如果想以后不让它日志增长得太大
-- 企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alterdatabase数据库名modifyfile(name=逻辑文件名,maxsize=20)
以上就是关于sqlserver2008和sqlserver2012日志文件过大,有什么方法清理吗全部的内容,包括:sqlserver2008和sqlserver2012日志文件过大,有什么方法清理吗、如何清除SQL server日志 backup log ...、如何清除SQLserver 日志等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)