Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1029465
  • 博文数量: 179
  • 博客积分: 10080
  • 博客等级: 上将
  • 技术积分: 2580
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-10 09:26
文章分类

全部博文(179)

文章存档

2015年(1)

2014年(1)

2012年(1)

2011年(3)

2010年(14)

2009年(11)

2008年(10)

2007年(42)

2006年(96)

我的朋友

分类: WINDOWS

2006-12-15 10:30:01

教你如何清除SQL日志

1.打开查询分析器,输入命令

DUMP TRANSACTION 数据库名 WITH NO_LOG

2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了。

清除Log有两种方法:

  1.自动清除法

  开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。

  2.手动清除法

  执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:

dump transaction with truncate_only

dump transaction with no_log

  通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。

  以上两种方法只??清除日志,而不做日志备份,若想备份日志,应执行“dump transaction database_name to dumpdevice”命令。

PS:附一个更好的方法

先分离数据库后,直接删除日志以后,再在查询分析器里用

exec sp_attach_single_file_db '数据库名', '.mdf文件路径'

命令附加数据库。 OVER.在别的地方看到的 不错。

 

数据库日志操作

 

 

先提供一种复杂的方法压缩日志及数据库文件如下:

 

1.清空日志

  DUMP TRANSACTION 库名 WITH NO_LOG 

2.截断事务日志:

  BACKUP LOG 数据库名 WITH NO_LOG

3.收缩数据库文件(如果不压缩,数据库的文件不会减小

  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件

   --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了

   --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了

  也可以用SQL语句来完成

  --收缩数据库

  DBCC SHRINKDATABASE(客户资料)

  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles

  DBCC SHRINKFILE(1)

4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)

  a.分离数据库:

   企业管理器--服务器--数据库--右键--分离数据库

  b.在我的电脑中删除LOG文件

  c.附加数据库:

   企业管理器--服务器--数据库--右键--附加数据库

  此法将生成新的LOG,大小只有500K

  或用代码:

  下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

  a.分离

  E X E C sp_detach_db @dbname = 'pubs'

  b.删除日志文件

  c.再附加

  E X E C sp_attach_single_file_db @dbname = 'pubs',

    @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'

5.为了以后能自动收缩,做如下设置:

  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

  --SQL语句设置方式:

  E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'

6.如果想以后不让它日志增长得太大

  企业管理器--服务器--右键数据库--属性--事务日志

   --将文件增长限制为xM(x是你允许的最大数据文件大小)

  --SQL语句的设置方式:

  alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

特别注意:

  请按步骤进行,未进行前面的步骤,请不要做后面的步骤

  否则可能损坏你的数据库.

  一般不建议做第4,6两步

  4步不安全,有可能损坏数据库或丢失数据

  6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.

 

另外提供一种更简单的方法,本人屡试不爽,建议大家使用。

更简单的方法:

  1。右建数据库属性窗口--故障还原模型--设为简单

  2。右建数据库所有任务--收缩数据库

  3。右建数据库属性窗口--故障还原模型--设为大容量日志记录

可能有不少朋友遇到过这样的问题:

updatedelete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,

这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份

或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者

只能恢复到最近一次的备份的数据了。

 

以下简单说明恢复数据方法:

1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了)

    backup log dbName to disk='fileName'

2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢复

    restore database dbName from disk='fileName' with norecovery

3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误操作之前的时刻

    restore log dbName from disk='fileName'

    with stopat='date_time'

 

以上这些操作都可以在SQL SERVER企业管理器里完成,难度不大。。。

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:

一种方法:清空日志。

1.打开查询分析器,输入命令

DUMP TRANSACTION 数据库名 WITH NO_LOG

2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了。

 

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。

1: 删除LOG

分离数据库 企业管理器->服务器->数据库->右键->分离数据库

2:删除LOG文件

附加数据库 企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500K

 

注意:建议使用第一种方法。

 

如果以后,不想要它变大。

SQL2000下使用:

在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。

或用SQL语句:

alter database 数据库名 set recovery simple

 

另外,Truncate log on checkpoint(此选项用于SQL7.0SQL 2000中即故障恢复模型选择为简单模型)当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True Auto shrink定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate log on checkpoint 选项设为True 时才能进行。

 

注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。

 

当然,如果误操作是一些不记日志的操作比如truncate tableselect into等操作,那么是无法利

用上述方法来恢复数据的...

 

删除SQL日志1: 删除LOG

??1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库

??2:删除LOG文件

??3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库

??此法生成新的LOG,大小只有520K

?? 再将此数据库设置自动收缩

??或用代码:

??下面的示例分离 77169database,然后将 77169database 中的一个文件附加到当前服务器。

??

EXEC sp_detach_db @dbname = '77169database'

EXEC sp_attach_single_file_db @dbname = '77169database',

@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf??

??2:清空日志

??DUMP TRANSACTION 库名 WITH NO_LOG /// DUMP TRANSACTION ulionmis WITH NO_LOG

??

??再:

??企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了

??

??3: 如果想以后不让它增长

??企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M

??

??自动收缩日志,也可以用下面这条语句

??ALTER DATABASE 数据库名

??SET AUTO_SHRINK ON

??

??故障还原模型改为简单,用语句是

??USE MASTER

??GO

??ALTER DATABASE 数据库名 SET RECOVERY SIMPLE

??GO

??-------------------------------------------------------------------------------

????截断事务日志:

????BACKUP LOG { database_name | @database_name_var }

??{

?? [ WITH

?? { NO_LOG | TRUNCATE_ONLY } ]

??}

??

??--压缩日志及数据库文件大小

??/*--特别注意

??请按步骤进行,未进行前面的步骤,请不要做后面的步骤

??否则可能损坏你的数据库.

??--*/

??

??1.清空日志

??DUMP TRANSACTION 库名 WITH NO_LOG

??

??2.截断事务日志:

??BACKUP LOG 数据库名 WITH NO_LOG

??

??3.收缩数据库文件(如果不压缩,数据库的文件不会减小

??企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件

??--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了

??--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了

??

??也可以用SQL语句来完成

??--收缩数据库

??DBCC SHRINKDATABASE(客户资料)

??

??--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles

??DBCC SHRINKFILE(1)

??

??4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)

??a.分离数据库:

??企业管理器--服务器--数据库--右键--分离数据库

??b.在我的电脑中删除LOG文件

??c.附加数据库:

??企业管理器--服务器--数据库--右键--附加数据库

??此法将生成新的LOG,大小只有500K

??

??或用代码:

??下面的示例分离 77169database,然后将 77169database 中的一个文件附加到当前服务器。

??

??a.分离

??EXEC sp_detach_db @dbname = '77169database'

??

??b.删除日志文件

??

??c.再附加

??EXEC sp_attach_single_file_db @dbname = '77169database',

?? @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\77169database.mdf'

??

??5.为了以后能自动收缩,做如下设置:

??企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

??

??--SQL语句设置方式:

??EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'

??

??6.如果想以后不让它日志增长得太大

??企业管理器--服务器--右键数据库--属性--事务日志

??--将文件增长限制为xM(x是你允许的最大数据文件大小)

??

??--SQL语句的设置方式:

??alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

??-------------------------------------------------------------------------------

??/*--压缩数据库的通用存储过程

??压缩日志及数据库文件大小

??因为要对数据库进行分离处理

??所以存储过程不能创建在被压缩的数据库中

??--*/

/*--调用示例

exec p_compdb 'test'

--*/

??

??use master --注意,此存储过程要建在master数据库中

??go

??

??if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

??drop procedure [dbo].[p_compdb]

??GO

??

??create proc p_compdb

??@dbname sysname, --要压缩的数据库名

??@bkdatabase bit=1, --因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库

??@bkfname nvarchar(260)='' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间

??as

??--1.清空日志

??exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')

??

??--2.截断事务日志:

??exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')

??

??--3.收缩数据库文件(如果不压缩,数据库的文件不会减小

??exec('DBCC SHRINKDATABASE(['+@dbname+'])')

??

??--4.设置自动收缩

??exec('EXEC sp_dboption '''+@dbname+''',''autoshrink'',''TRUE''')

??

??--后面的步骤有一定危险,你可以可以选择是否应该这些步骤

??--5.分离数据库

??if @bkdatabase=1

??begin

??if isnull(@bkfname,'')=''

??set @bkfname=@dbname+'_'+convert(varchar,getdate(),112)

??+replace(convert(varchar,getdate(),108),':','')

??select 提示信息='备份数据库到SQL 默认备份目录,备份文件名:'+@bkfname

??exec('backup database ['+@dbname+'] to disk='''+@bkfname+'''')

??end

??

??--进行分离处理

?create table #t(fname nvarchar(260),type int)

?exec('insert into #t select filename,type=status&0x40 from ['+@dbname+']..sysfiles')

?exec('sp_detach_db '''+@dbname+'''')

??

??--删除日志文件

??declare @fname nvarchar(260),@s varchar(8000)

??declare tb cursor local for select fname from #t where type=64

??open tb

??fetch next from tb into @fname

??while @@fetch_status=0

??begin

??set @s='del "'+rtrim(@fname)+'"'

??exec master..xp_cmdshell @s,no_output

??fetch next from tb into @fname

??end

??close tb

??deallocate tb

??

??--附加数据库

??set @s=''

??declare tb cursor local for select fname from #t where type=0

??open tb

??fetch next from tb into @fname

??while @@fetch_status=0

??begin

??set @s=@s+','''+rtrim(@fname)+''''

??fetch next from tb into @fname

??end

??close tb

??deallocate tb

??exec('sp_attach_single_file_db '''+@dbname+''''+@s)

??go

 

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:

一种方法:清空日志。

1.打开查询分析器,输入命令

DUMP TRANSACTION 数据库名 WITH NO_LOG

2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了。

 

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。

1: 删除LOG

分离数据库 企业管理器->服务器->数据库->右键->分离数据库

2:删除LOG文件

附加数据库 企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500K

 

注意:建议使用第一种方法。

 

如果以后,不想要它变大。

SQL2000下使用:

在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。

或用SQL语句:

alter database 数据库名 set recovery simple

 

另外,Truncate log on checkpoint(此选项用于SQL7.0SQL 2000中即故障恢复模型选择为简单模型)当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True Auto shrink定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate log on checkpoint 选项设为True 时才能进行。

 

注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。

 

如何删除sql 2000日志

 200492411:23

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G!!!

试了多种方式,SHIRNK DATABASE TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL SERVER的一个BUG吧。

 

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)

-----

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

    @MaxMinutes INT,

    @NewSize INT

 

 

USE   Marias       -- 要操作的数据库名

SELECT @LogicalFileName = Marias_log, -- 日志文件名

@MaxMinutes = 10,        -- Limit on time allowed to wrap log.

    @NewSize = 100         -- 你想设定的日志文件的大小(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 

删除MS SQL Server 2000日志

1.打开MS SQL Server 2000企业管理器

2.打开数据库,选中需要删除日期的数据库,点击察看,选择任务板

3.鼠标右键点中需要删除日期的数据库,选择右键菜单所有任务”-“备份数据库

4.选择事务日志

5.点击添加,选择文件名

6.选择备份目录,输入文件名,点击确定

7.点击确定

8.选择重写现有媒体,点击确定

9.开始备份:

10.备份完成:

事务日志删除了一部分,如果还不够小,则再重复一次。

11.重新鼠标右键点中需要删除日志的数据库,选择右键菜单所有任务”-“收缩数据库

12.点击文件

13.选择日志数据库文件,在收缩操作中选择从文件结尾截断可用空间,点击确定

14.日志收缩完毕:

关于SQL Server事务日志的问题汇总

1、用BACKUP LOG database WITH NO_LOG清除日志

      把数据库属性中的故障还原模型改为“简单”可以大大减慢日志增长的速度。如果把还原模型调到简单,这样就不支持时间点还原了,但是日志文件会很小,如果数据比较重要推荐还是把数据库的还原模型调为完全。

      BACKUP LOG database WITH NO_LOG命名后,会截断不活动日志,不减小物理日志文件的大小,但逻辑日志会减小,收缩数据库后会把不活动虚拟日志删除来释放空间,不会损坏数据。

      如果日志被截断并收缩数据库后,就不能直接用最近的一个全库备份做时间点还原,建议立即备份数据库,以防万一。

 

2sql server运行中,删除主数据库事务日志文件

步骤如下:(1)、分离数据库:企业管理器--数据库--右击你要删除日志的数据库--所有任务--分离数据库

               (2)、然后删除日志文件

               (3)、然后再附加数据库:企业管理器--数据库--右击数据库--所有任务--附加数据库。这时候只附加mdf就可以了。

 

3、压缩SQL数据库及日志的详细方法

      数据库在使用一段时间后,时常会出现因数据删除而造成数据库中空闲空间太多的情况,这时就需要减少分配给数据库文件和事务日志文件的磁盘空间,以免浪费磁盘空间。当数据库中没有数据时,可以修改数据库文件属性直接改变其占用空间,但当数据库中有数据时,这样做会破坏数据库中的数据,因此需要使用压缩的方式来缩减数据库空间。可以在数据库属性选项中选择“Auto shrink”选项,让系统自动压缩数据库,也可以用人工的方法来压缩。人工压缩数据库有以下两种方式:

1)、用Enterprise Manager 压缩数据库

Enterprise Manager 中在所要压缩的数据库上单击右键,从快捷菜单中的“所有任务(All Tasks)”中选择“Shrink Database(压缩数据库)”选项,可以在对话框中选择数据库的压缩方式,也可以选择使用压缩计划或压缩单个文件。单击“Files”按钮,会出现压缩数据库文件对话框,可以针对每个数据库文件进行不同的压缩设置。单击“Change” 按钮,会出现压缩计划编辑对话框,可以指定压缩计划的执行方式。单击“Change” 按钮,会出现循环工作计划编辑对话框,可以编辑计划执行的周期或时间点。设置完成后单击“OK” 按钮就开始压缩数据库,在压缩结束后会显示一个压缩情况信息框。

2)、用Transact-SQL 命令压缩数据库

可以使用DBCC SHRINKDATABASE DBCC SHRINKFILE 命令来压缩数据库。其中DBCC SHRINKDATABASE 命令对数据库进行压缩,DBCC SHRINKFILE 命令对数据库中指定的文件进行压缩。

(1)DBCC SHRINKDATABASE

DBCC SHRINKDATABASE 命令语法如下:

DBCC SHRINKDATABASE (database_name [, target_percent][, {NOTRUNCATE | TRUNCATEONLY}] )

各参数说明如下:

·target_percent 指定将数据库压缩后,未使用的空间占数据库大小的百分之几。如果指定的百分比过大,超过了压缩前未使用空间所占的比例,则数据库不会被压缩。并且压缩后的数据库不能比数据库初始设定的容量小。

·NOTRUECATE

将数据库缩减后剩余的空间保留在数据库,中不返还给操作系统。如果不选择此选项,则剩余的空间返还给操作系统。

·TRUNCATEONLY

将数据库缩减后剩余的空间返还给操作系统。使用此命令时SQL Server 将文件缩减到最后一个文件分配,区域但不移动任何数据文件。选择此项后,target_percent 选项就无效了。

例:压缩数据库mytest 的未使用空间为数据库大小的20%

dbcc shrinkdatabase (mytest, 20)

运行结果如下:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

(2)DBCC SHRINKFILE

DBCC SHRINKFILE 命令压缩当前数据库中的文件。其语法如下:

DBCC SHRINKFILE ( {file_name | file_id }{ [, target_size] |[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )

各参数说明如下:

·file_id

指定要压缩的文件的鉴别号(Identification number ID)。文件的ID 号可以通过 FILE_ID()函数或如本章前面所讲述的Sp_helpdb 系统存储过程来得到。

·target_size

指定文件压缩后的大小。以MB 为单位。如果不指定此选项,SQL Server 就会尽最大可能地缩减文件。

·EMPTYFILE

指明此文件不再使用,将移动所有在此文件中的数据到同一文件组中的其它文件中去。执行带此参数的命令后,此文件就可以用ALTER DATABASE 命令来删除了。

其余参数NOTRUNCATE TRUNCATEONLY DBCC SHRINKDATABASE 命令中的含义相同。

: 压缩数据库mydb 中的数据库文件mydb_data2 的大小到1MB

use mydb dbcc shrinkfile (mydb_data2, 1)

目前的状况是:MDF文件保存完好(已拷出来),LDF已丢失。使用   

  EXEC   sp_attach_single_file_db   @dbname   =   'TyBusiness',    

        @physname   =   'E:\Help\TyBusiness.MDF'  

  报如下错误:  

  未能打开新数据库   'TyBusiness'CREATE   DATABASE   将终止。  

  设备激活错误。物理文件名   'd:\Program   Files\Microsoft   SQL   Server\MSSQL\TyBusiness_log.ldf'   可能有误。  

  1.先建一个与你要恢复的数据库名称一样的数据库.  

  2.停止sql   server,把你的数据库替换这个数据库  

  3.重起sql   server,把数据库设成紧急状态:  

        sp_configure   'allow',1  

        reconfigure   with   overirde  

        update   sysdatabases   set   status=32768   where   name='yourdata'  

  4.重建日志文件  

        dbcc   rebuild_log('yourdata','your   data   path\newdata_log.ldf')  

  5.取消紧急模式  

      update   sysdatabases   set   status=0   where   name='yourdata'  

      restore   sysdatabases   yourdata   with   recovery  

      sp_configure   'allow',0  

      reconfigure   with   override  

  6.重起sql   server  

  7.ok  

   

  减小SQL日志。  

  use   yourdatabasename  

  GO  

  backup   log   yourdatabasename   with   TRUNCATE_ONLY    

  GO  

  DBCC   SHRINKFILE   (逻辑文件名,   收缩后的大小)  

  GO  

   

  Query     Analyzer:      

  1.執行:      

  EXEC     sp_detach_db     'dbname',     'true';         --將你的數據庫卸除      

   

  然後將SQL     Server安裝路徑下的data目錄中的dbname_log.ldf文件移走或刪除      

                             

  2.      

  EXEC     sp_attach_single_file_db      

  'dbname','d:\mssql7\data\dbname.mdf';      

  --以單文件形式恢復數據庫,系統自動分配給你一個500K大小的日誌文件.  

use  yourdatabasename 

GO 

backup  log  yourdatabasename  with  TRUNCATE_ONLY   

GO 

DBCC  SHRINKFILE  (逻辑文件名,  收缩后的大小) 

GO

 

彻底删除数据库日志的方法

现在私服运行了一段时间,特别是人比较多的服,相信大家的数据库日志log文件已经相当大了吧。其实这些log文件对于我们普通用户来说是没什么用,上面只是详细的记录了所有对该数据库的每一步操作,实际的数据已经保存到数据库文件中了,所以是不可能有什么回档之类的问题的。以前我们也问过微软的人,据说是如果你的数据库文件坏掉了,有这个他们有办法帮助你恢复数据库,但是由于方法并不公开,所以对于我们来说,这只是占空间的东西。因为原先没觉得这个是问题,所以也没站出来介绍一下,现在看越来越多的朋友问这个问题,就提供一下方法。下面是主题了:

 

1、进入企业管理器,选中数据库,比如muonline

2、所有任务->分离数据库

3、到数据库文件的存放目录,将MuOnline_log.LDF文件删除,你怕S的话可以拷出去

4、企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。

5、记得数据库重新附加后用户要重新设置一下。

 

以后如果新的日志文件变大了,再继续这个步骤就行了

 

 

--假设test2为数据库名称

在查询分析器中执行:

backup log MuOnline with NO_LOG

backup log MuOnline with TRUNCATE_ONLY

DBCC SHRINKDATABASE(MuOnline)

 

将上面的语句多次执行,直到日志文件缩小。

exec sp_dboption MuOnline,autoshrink,on

建立作业,每半个小时一次日志备份,每天一次完全数据库备份。

Log收缩到正常大小后,将autoshrink选项设置为off

 

查询分析器里运行:

backup log MuOnlie with NO_LOG

backup log MuOnlie with TRUNCATE_ONLY

DBCC SHRINKDATABASE(MuOnlie)

 

关于SQL的日志清理命令!大家看看有没有用吧!

BACKUP LOG MuOnline WITH NO_LOG

DBCC SHRINKDATABASE(MuOnline,10)

 

这是清理MuOnline日志的 千万点到MuOnline再选查询分析器 不然整理了其他数据库会出错的

 

 

 

 

 

看看这个

关于各种日志暴大的解决办法(3种)

关于各种日志暴大的解决办法

要限制sql日志的大小很容易,只要选到那两个数据库(muonlineranking)然后右键属性,在数据文件和事务日志里面就可以改

关键是那个joinserver的日志,有时候很正常,一天下来顶多几十m,有时候1分钟就能赏到4G,其实要他不生成那么大的日志很简单,只要到joinserver的目录里面把log那个目录删除或改名就可以了(我就是这么干的),一点都不影响使用,开joinserver的时候它只会说write log error,对正常使用没有影响,这样joinserver目录就一直是700k了,哈哈

对于GS和其他的日志,因为都很小,所以就没改,个人认为其实也可以这么干的

 

真正解决数据库日志大的方法

首先在数据库属性里把按百分比增长从10%改为1%,这样就大大限制了增长速度

其次在每次重启服务器的时候,在查询器里执行下面的,这样的方法是我认为最安全也是最简单的,建议置顶

感觉好用的朋友顶了

backup log MuOnline with NO_LOG

backup log MuOnline with TRUNCATE_ONLY

DBCC SHRINKDATABASE(MuOnline)

解决数据库日志大的方法

、进入企业管理器,选中数据库,比如muonline

2、所有任务->分离数据库

3、到数据库文件的存放目录,将MuOnline_log.LDF文件删除,你怕S的话可以拷出去

4、企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。

5、记得数据库重新附加后用户要重新设置一下

 

 

[推荐]数据库自动备份、缩小以及防止回档

不要在属性里限制数据库大小,这样文件容量满的时候会出现回档

 

建立作业,每天自动备份数据库,自动删除2天前的备份

 

建立作业,每天运行一次以下代码,缩小日志文件

backup log MuOnline with NO_LOG

backup log MuOnline with TRUNCATE_ONLY

DBCC SHRINKDATABASE(MuOnline)

 

我就是这么做的,什么问题都没有,MU服务端全部用到的空间顶多2G

 

 

 

日志可以这样减肥!!

右击MuOnline,所有任务,分离数据库

然后到D:\Muserver\db 把那个.log文件删掉

你会发现MuOnline数据库消失了

右击一下,所有任务,点 附加数据库

路径指向D:\Muserver\db 选中里面的.mdf

你会发现日志有个大叉叉

不管它,直接点确定。

系统提示找不到日志,要不要新建一个

新建一个就Ok了。

这样减肥效果不错吧。

 

解决方法

 

日志文件满而造成SQL数据库无法写入文件时,可用两种方法:

一种方法:清空日志。

1.打开查询分析器,输入命令

DUMP TRANSACTION 数据库名 WITH NO_LOG

2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M,直接输入这个数,确定就可以了。

 

另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的,如处理不当,会造成数据的损失。

1: 删除LOG

分离数据库 企业管理器->服务器->数据库->右键->分离数据库

2:删除LOG文件

附加数据库 企业管理器->服务器->数据库->右键->附加数据库

此法生成新的LOG,大小只有500K

 

注意:建议使用第一种方法。

 

如果以后,不想要它变大。

SQL2000下使用:

在数据库上点右键->属性->选项->故障恢复-模型-选择-简单模型。

或用SQL语句:

alter database 数据库名 set recovery simple

 

 

另外,如上图中数据库属性有两个选项,与事务日志的增长有关:

Truncate log on checkpoint(此选项用于SQL7.0SQL 2000中即故障恢复模型选择为简单模型)当执行CHECKPOINT 命令时如果事务日志文件超过其大小的70% 则将其内容清除在开发数据库时时常将此选项设置为True Auto shrink定期对数据库进行检查当数据库文件或日志文件的未用空间超过其大小的25%时,系统将会自动缩减文件使其未用空间等于25% 当文件大小没有超过其建立时的初始大小时不会缩减文件缩减后的文件也必须大于或等于其初始大小对事务日志文件的缩减只有在对其作备份时或将Truncate log on checkpoint 选项设为True 时才能进行。

 

 

    注意:一般立成建立的数据库默认属性已设好,但碰到意外情况使数据库属性被更改,请用户清空日志后,检查数据库的以上属性,以防事务日志再次充满。

 

减少SQL日志的方法

--------------------------------------------------------------------------------

:

分享]解决SQL日志增大的办*[望置顶]

--假设test2为数据库名称

在查询分析器中执行:

backup log MuOnline with NO_LOG

backup log MuOnline with TRUNCATE_ONLY

DBCC SHRINKDATABASE(MuOnline)

将上面的语句多次执行,直到日志文件缩小。

exec sp_dboption 'MuOnline','autoshrink','on'

建立作业,每半个小时一次日志备份,每天一次完全数据库备份。

Log收缩到正常大小后,将autoshrink选项设置为off

:

数据库增大是因为你的日志增大了,以前大家讨论过的,最简单可行的办法就是在你数据库属性->选项->故障还原里面选成简单模式(缺省为完全模式),然后选收缩数据库进行一次收缩,以后你的数据库基本就不怎么会增长了

:

1、进入企业管理器,选中数据库,比如muonline

2、所有任务->分离数据库

3、到数据库文件的存放目录,将MuOnline_log.LDF文件删除,你怕S的话可以拷出去

4、企业管理器->附加数据库,选muonline,这个时候你会看见日志文件这项是一个叉,不要紧继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。

5、记得数据库重新附加后用户要重新设置一下。

 

附件有图片

文件: 教你如何清除SQL日志.rar
大小: 115KB
下载: 下载
 

阅读(10019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~