当前位置: 代码迷 >> Sql Server >> 怎么缩小或者不产生数据库的日志文件?
  详细解决方案

怎么缩小或者不产生数据库的日志文件?

热度:63   发布时间:2016-04-27 17:23:18.0
如何缩小或者不产生数据库的日志文件??
我的数据库不想要日志文件,可以么?或者使得log文件最小.

主要是我的数据对于恢复性要求不高,对空间要求敏感.所以不需要那个log文件.

------解决方案--------------------
可以设置恢复模型为简单模式,并定义日志文件的最大容量

但是不允许日志文件存在是不可以的
------解决方案--------------------
日志文件必须有。

数据库属性-->选项页-->故障还原模型选择“简单”。

------解决方案--------------------
SQL code
经常在CSDN上看到网友发帖说,压缩日志文件处理不当,导致数据库损坏,甚至不能恢复数据,于是就写了一个通用的数据库日志文件压缩的存储过程来解决此问题:/*--压缩数据库的通用存储过程  压缩日志及数据库文件大小 因为要对数据库进行分离处理 所以存储过程不能创建在被压缩的数据库中--邹建 2004.03(引用请保留此信息)--*//*--调用示例 exec p_compdb 'test'--*/use master  --注意,此存储过程要建在master数据库中goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_compdb]GOcreate proc p_compdb@dbname sysname,   --要压缩的数据库名@bkdatabase bit=1,   --因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库@bkfname nvarchar(260)='' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间as--1.清空日志exec('DUMP TRANSACTION [[email protected]+'] WITH  NO_LOG')--2.截断事务日志:exec('BACKUP LOG [[email protected]+'] WITH NO_LOG')--3.收缩数据库文件(如果不压缩,数据库的文件不会减小exec('DBCC SHRINKDATABASE([[email protected]+'])')--4.设置自动收缩exec('EXEC sp_dboption [email protected]+''',''autoshrink'',''TRUE''')--后面的步骤有一定危险,你可以可以选择是否应该这些步骤--5.分离数据库if @bkdatabase=1begin if isnull(@bkfname,'')=''   set @[email protected]+'_'+convert(varchar,getdate(),112)   +replace(convert(varchar,getdate(),108),':','') select 提示信息='备份数据库到SQL 默认备份目录,备份文件名:[email protected] exec('backup database [[email protected]+'] to [email protected]+'''')end--进行分离处理create table #t(fname nvarchar(260),type int)exec('insert into #t select filename,type=status&0x40 from [[email protected]+']..sysfiles')exec('sp_detach_db [email protected]+'''')--删除日志文件declare @fname nvarchar(260),@s varchar(8000)declare tb cursor local for select fname from #t where type=64open tb fetch next from tb into @fnamewhile @@fetch_status=0begin set @s='del "'+rtrim(@fname)+'"' exec master..xp_cmdshell @s,no_output fetch next from tb into @fnameendclose tbdeallocate tb--附加数据库set @s=''declare tb cursor local for select fname from #t where type=0open tb fetch next from tb into @fnamewhile @@fetch_status=0begin set @[email protected]+','''+rtrim(@fname)+'''' fetch next from tb into @fnameendclose tbdeallocate tbexec('sp_attach_single_file_db [email protected][email protected])go
  相关解决方案