收缩事务日志

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

收缩事务日志

在下列情况下,日志文件的物理大小将减少:执行DBCCSHRINKDATABASE语句时。

执行引用日志文件的DBCCSHRINKFILE语句时。

自动收缩操作发生时。

日志收缩操作依赖于最初的日志截断操作。日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部分的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。

减小大小的单位是一个虚拟日志文件。例如,如果有个600MB的日志文件被分成了6个100MB的虚拟日志,则该日志文件的大小只能按100MB递减。比如,文件可以减小到500MB或400MB,但不能减小到433MB或525MB。

不能释放容纳逻辑日志部分的虚拟日志。如果某个日志文件中的所有虚拟日志都容纳了逻辑日志部分,则不能收缩该文件,直到截断操作在物理日志的末端将一个或更多的虚拟日志标记为不活动。

当收缩任何文件时,必须从文件的末端开始释放空间。当收缩事务日志文件时,从文件的末端开始释放足够的虚拟日志以将日志减小到用户所要求的大小。用户指定的target_size四舍五入为下一个最大的虚拟日志边界大小。例如,如果用户为包含6个100MB虚拟日志文件的600MB文件指定325MB的target_size,则删除最后两个虚拟日志文件,因此新的文件大小为400MB。

在2000中,DBCCSHRINKDATABASE或DBCCSHRINKFILE操作试图立即将物理日志文件收缩到所要求的大小(以四舍五入的值为准):如果虚拟日志中的逻辑日志部分没有超出target_size标记,则释放target_size标记之后的虚拟日志,并且成功完成DBCC语句,不出现任何信息。

如果虚拟日志中的逻辑日志部分超出target_size标记,则SQLServer2000释放尽可能多的空间并发出一条信息。该信息告诉您需要执行什么操作以获得文件末端超出虚拟日志的逻辑日志部分。执行完该操作后,可以重新发出DBCC语句以释放剩余的空间。

例如,当执行target_size为275MB的DBCCSHRINKFILE语句时,假设有一个包含6个虚拟日志的600MB日志文件,其逻辑日志从第3个虚拟日志开始,到第4个虚拟日志结束:

将立即释放第5个和第6个虚拟日志,因为它们没有容纳逻辑日志部分。然而,为达到指定的target_size,还应释放第4个虚拟日志,但无法释放,因为它容纳了逻辑日志的末端部分。在释放第5个和第6个虚拟日志之后,SQLServer2000用虚记录填充第4个虚拟日志部分。这将日志文件的末端强制为第1个虚拟日志。在大多数系统中,起始于第4个虚拟日志的所有事务将在几秒钟内提交,这意味着日志的所有活动部分都移动到了第1个虚拟日志,并且日志文件现在看起来像下面这样:

DBCCSHRINKFILE语句还发出一条信息,指出它不能释放所要求的全部空间,并告诉您可以执行BACKUPLOG语句以便释放剩余的空间。一旦日志的活动部分移动到第1个虚拟日志,BACKUPLOG语句将截断第4个虚拟日志中的整个逻辑日志:

因为第4个虚拟日志不再容纳逻辑日志的任何部分,如果现在执行同一个target_size为275MB的DBCCSHRINKFILE语句,则会释放第4个虚拟日志,并且物理日志文件的大小会减小到所要求的大小。

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
文章标签: sqlserver 活动
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭