有用的SQL语句
关键是要在截断日志之前做一次完整备份。做完整备份的时候,用参数WITH NO_LOG;然后执行收缩数据库的操作。
BACKUP DATABASE [ado] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\ado0427inrunning.bak' WITH NOFORMAT, NOINIT,  NAME = N'ado-完整数据库备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10 ;
BACKUP LOG [ado] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\ado0427inrunning.bak' WITH NO_LOG;
GO
USE [ado];
GO
DBCC SHRINKDATABASE(N'ado');
执行结果为:
SQL Server 事务日志的收缩和截断
SQL Server中事务日志的作用:持续记录数据库所有的事务和这些事务对数据库所做的修改;一旦数据库出现灾难事件,就需要事务日志来进行近期数据的恢复操作。但是,在此条件下受益的同时也要付出相应的代价:在活动数据库中,事务日志会消耗大量的存储空间,假如你不做任何的干预,事务逻辑日志将会一直增长,直到塞满存储这些日志文件的所有可用空间。下面我们来详细介绍SQL Server提供的两个用来平衡事务日志对空间巨大需求的操作:收缩事务日志和截断事务日志。
日志收缩
截断日志虽然确实从日志文件中清除了事务,但它并不会真正的减小物理日志文件的大小。SQL Server希望事务日志最终会扩展到其截断前的大小,所以截断不会释放已经分配给日志
的硬盘空间。如果你的日志在某一时刻人为地扩展到某个大小,却再也无法恢复到这个大小的话可就麻烦大了。
在这种情况下,要释放硬盘物理空间做其他用途,就要手动进行事务日志文件收缩操作。你可以使用下面的T-SQL命令实现日志文件的收缩:
DBCC SHRINKFILE(,)
+s,r,Q3Le/B ZdOv0 ITPUB个人空间7MC8_1xF%h
上面命令中的desired_shrink_size指的是你想要回收的硬盘空间大小(以MB为单位)。你可以在执行完事务日志截断操作之后立即回收大部分的磁盘空间。
日志截断
截断事务日志操作就是清除事务日志文件中的非活动记录。在一般的情况下,SQL Server能够自动执行截断操作,不需要人工干预管理。截断的频率取决于数据库的使用程度。你每进行一次完整恢复模式或大容量日志恢复模式的数据库备份,SQL Server就会截断一次事务日志。如果是在简单恢复模式下(不能还原事务日志),SQL Server会在每个检查点之后截断事务日志。
你也可以通过间接的方式手动驱使SQL Server执行事务日志截断操作,需要运行备份操作,不过你可以给SQL Server下指示,表明你只想执行事务日志的备份操作,不做执行其他任何操作。通过以下的T-SQL命令仍然可以达到上述效果:
BACKUP LOG WITH TRUNCATE_ONLY; 
截断数据库日志方法
1. 为什么要截断数据库日志
日志文件很重要,它记录用户对数据库的所有操作,在发生故障时,可以以此回复。
但日志文件的大小到达一定程度时,会影响数据库性能。经常的,日志文件会大于数据库主文件本身,长时间不截断,甚至会达到10-20倍之多。如果ERP用户操作越频繁,相差会越大。比如,数据库文件为1G,而日志文件可能会有10G。
一般3-6个月检查一次日志文件的大小。如果发现,日志文件比数据库文件大3~5倍,应该考虑截断数据库日志。
在截断之前,锐减使用最简单的方法:务必做一次“完整备份”!
2. 检查日志文件的大小
方法有多种。
3. 截断日志文件
在查询分析器中,使用SQL语句:
BACKUP LOG {database_name | database_name_var}
{
[WITH {NO_LOG | TRUNCATE_ONLY }]
truncate可以加条件吗}
例:backup log “database_name” with no_log
4. 收缩数据库
做完第三个步骤之后,数据库的日志文件的大小将会被缩小,有可能只有1M左右的大小。具体缩小到一个什么程度,得看数据库的日志文件在数据库创建时的大小。
截断数据库的命令DBCC SHRINKDATABASE
DBCC SHRINKDATABASE收缩指定数据库中的数据文件和日志文件的大小。
语法:
DBCC SHRINKDATABASE
( database_name | database_id | 0
     [ ,target_percent ]
     [ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
例子:收缩ado的数据库文件和日志文件
USE [ado]
GO
DBCC SHRINKDATABASE(N'ado' )
GO
参数:
database_name | database_id | 0
要收缩的数据库的名称或 ID。如果指定 0,则使用当前数据库。
target_percent
数据库收缩后的数据库文件中所需的剩余可用空间百分比。
NOTRUNCATE
通过将已分配的页从文件末尾移动到文件前面的未分配页来压缩数据文件中的数据。target_percent 是可选参数。
文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,指定 NOTR
UNCATE 时,数据库看起来未收缩。
NOTRUNCATE 只适用于数据文件。日志文件不受影响。
TRUNCATEONLY
将文件末尾的所有可用空间释放给操作系统,但不在文件内部执行任何页移动。数据文件只收缩到最近分配的区。如果与 TRUNCATEONLY 一起指定,将忽略 target_percent

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。