如何在 SQL Server 2005 中使用 DBCC SHRINKFILE 语句收缩事务日志文件-数据库知识

原创 2007年10月08日 09:03:00

简介
在 Microsoft SQL Server 2005 中,您可以收缩数据库中的事务日志文件以删除未使用的页面。数据库引擎将有效地重新使用空间。但是,当事务日志文件意外增长时,可能必须要手动收缩事务日志文件。

本文介绍如何在 SQL Server 2005 数据库中在完整恢复模式下使用 DBCC SHRINKFILE 语句手动收缩事务日志文件。您在 SQL Server 2005 中用于收缩事务日志文件的方法可能与在 SQL Server 2000 中用于收缩事务日志文件的方法有所不同。 有关如何在 SQL Server 2000 中收缩事务日志文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
272318 (http://support.microsoft.com/kb/272318/) INF:使用 DBCC SHRINKFILE 收缩 SQL Server 2000 中的事务日志
 回到顶端

更多信息
SQL Server 2005 中,收缩操作 (DBCC SHRINKFILE) 会立即尝试将指定的事务日志文件收缩为要求的大小。要在完整恢复模式下手动收缩事务日志文件,请首先备份事务日志文件。然后,使用 DBCC SHRINKFILE 语句收缩该事务日志文件。

通常,在 SQL Server 2005 中收缩事务日志文件比在 SQL Server 2000 中收缩事务日志文件要快。原因是 SQL Server 2005 日志管理器会根据物理磁盘存储顺序创建或重新使用非活动的虚拟日志文件。因此,事务日志文件的非活动部分通常位于文件的末尾。

例如,事务日志文件可能包含 100 个虚拟日志文件,但仅使用 2 个虚拟日志文件。SQL Server 2000 会将使用的第一个虚拟日志文件存储在事务日志文件的开头,将使用的第二个虚拟日志文件存储在事务日志文件的中间。为了将事务日志文件仅收缩为 2 个虚拟日志文件,SQL Server 将使用虚拟日志项填充第二个虚拟日志文件的剩余部分。SQL Server 会将逻辑日志的开头移到日志管理器指定的下一个可用的虚拟日志文件中。日志管理器可能会在事务日志文件的中间、上一个活动的虚拟日志文件之前创建一个虚拟日志文件。在这种情况下,必须使用多个日志备份操作和多个收缩操作才能成功地将事务日志文件收缩为 2 个虚拟日志文件。最糟糕的情况是,您可能必须使用 50 个日志备份操作和 50 个收缩操作才能成功地将事务日志文件收缩为 2 个虚拟日志文件。

不过,在 SQL Server 2005 中,您执行一个 DBCC SHRINKFILE 语句就可以立即将事务日志文件收缩为 2 个虚拟日志文件。这是因为 SQL Server 2005 日志管理器按照物理磁盘存储顺序创建了 2 个虚拟日志文件。这两个虚拟日志文件都位于事务日志文件的开头。

当您尝试在 SQL Server 2005 中收缩可用空间很小的事务日志文件时,必须执行另一个日志备份操作。这个附加的日志备份操作会将事务日志文件截断为较小的大小。在 SQL Server 2000 中收缩事务日志文件时,除了要执行上述三个步骤外,还要执行此日志备份操作。有关更多信息,请参阅“简介”一节提到的 Microsoft 知识库文章。要在 SQL Server 2005 中收缩可用空间很小的事务日志文件,请按照下列步骤操作:1. 备份事务日志文件,以使大多数活动虚拟日志文件处于非活动状态。因此,可在以后的步骤中删除非活动的虚拟日志文件。为此,请运行与以下 Transact-SQL 语句相似的 Transact-SQL 语句。BACKUP LOG <DatabaseName> TO DISK = '<BackupFile>'
注意:在此语句中,<DatabaseName> 是要备份的数据库名称的占位符。在此语句中,<BackupFile> 是备份文件完整路径的占位符。

例如,运行以下 Transact-SQL 语句。BACKUP LOG TestDB TO DISK='C:/TestDB1.bak'
 
2. 收缩事务日志文件。为此,请运行与以下 Transact-SQL 语句相似的 Transact-SQL 语句。DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS
注意:在此语句中,<FileName> 是事务日志文件名称的占位符。在此语句中,<TargetSize> 是事务日志文件目标大小的占位符。目标大小必须合理。例如,您不能将事务日志文件收缩为小于 2 个虚拟日志文件的大小。
3. 如果 DBCC SHRINKFILE 语句未将事务日志文件收缩为目标大小,则运行步骤 1 中提到的 BACKUP LOG 语句,以使更多的虚拟日志文件处于非活动状态。
4. 运行步骤 2 中提到的 DBCC SHRINKFILE 语句。执行此操作后,事务日志文件就应接近目标大小了。
总而言之,在 SQL Server 2005 中更改了日志管理器用于选取下一个虚拟日志文件的算法。因此,在 SQL Server 2005 中收缩事务日志文件与在 SQL Server 2000 中收缩事务日志文件不同,具体表现在: • 如果日志文件具有大量可用空间,在 SQL Server 2005 中收缩事务日志文件比在 SQL Server 2000 中收缩事务日志文件要快。
• 如果日志文件没有可用空间,在 SQL Server 2005 中收缩事务日志文件与在 SQL Server 2000 中收缩事务日志文件相同。
• 如果日志文件的可用空间很小,在 SQL Server 2005 中收缩事务日志文件要比在 SQL Server 2000 中执行此操作时多执行一个日志备份操作。

 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SQL Server 2008收缩日志文件--dbcc shrinkfile参数说明

DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小。 语法 DBCC SHRINKFILE     ( { file_name | file_id }      ...

SQL Server 2005无日志文件附加数据库

公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。 ...

SQL Server 2005/2008 无日志文件附加数据库

公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。 ...

SQL Server 2005无日志文件附加数据库

公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件)。结果造成数据库怎么都附加不上。出现错误。 ...

ms sql server 2005数据库日志文件过大,需要清除或者清空

数据库:ms sql server 2005 任务:ms sql server 2005数据库日志文件过大,需要清除。 方法: backup log [你的数据库名称] WITH N...

SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库

在某些偶然的情况下,会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障、计算机非正常重启或关机。 当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况: ...
  • zy531
  • zy531
  • 2012-10-22 19:42
  • 250

sql server事务日志文件的收缩处理

-- ============================================= -- Author: 余波(杭州) -- Create date...

SQL Server中收缩、清空和删除数据库文件及日志文件

一、简单方法 –SQL Server收缩方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还...

收缩、清空和删除SQL Server数据库文件及日志文件

网上搜集了一些关于如何收缩、清空和删除SQL Server 数据库文件及日志文件的方法。这样可以保证在不影响数据库系统正确工作的前提下又节省了服务器的磁盘空间。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)