你看看联机帮助吧!下面的代码,也许对你有用,你自己研究一下!SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE WebRoot -- 要操作的数据库名
SELECT @LogicalFileName = 'WebRoot_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

解决方案 »

  1.   

    数据库必须至少包含一个数据文件和一个事务日志文件。数据和事务日志信息从不混合在同一文件中,并且每个文件只能由一个数据库使用。SQL Server 使用各数据库的事务日志来恢复事务。事务日志是数据库中已发生的所有修改和执行每次修改的事务的一连串记录。事务日志记录每个事务的开始。它记录了在每个事务期间,对数据的更改及撤消所做更改(以后如有必要)所需的足够信息。对于一些大的操作(如 CREATE INDEX),事务日志则记录该操作发生的事实。随着数据库中发生被记录的操作,日志会不断地增长。事务日志记录页的分配和释放,以及每个事务的提交或回滚。这允许 SQL Server 采用下列方式应用(前滚)或收回(回滚)每个事务: 在应用事务日志时,事务将前滚。SQL Server 将每次修改后的映象复制到数据库中,或者重新运行语句(如 CREATE INDEX)。这些操作将按照其原始发生顺序进行应用。此过程结束后,数据库将处于与事务日志备份时相同的状态。
    当收回未完成的事务时,事务将回滚。SQL Server 将所有修改前的映象复制到 BEGIN TRANSACTION 后的数据库。如果遇到表示执行了 CREATE INDEX 的事务日志记录,则会执行与该语句逻辑相反的操作。这些前映象和 CREATE INDEX 逆转将按照与原始顺序相反的顺序进行应用。 
    在检查点处,SQL Server 确保所有已修改的事务日志记录和数据库页都写入磁盘。在重新启动 SQL Server 时所发生的各数据库的恢复过程中,仅在不知道事务中所有的数据修改是否已经从高速缓冲中实际写入磁盘时才必须前滚事务。因为检查点强迫所有修改的页写入磁盘,所以检查点表示启动恢复必须开始前滚事务的位置。因为检查点之前的所有修改页都保证在磁盘上,所以没有必要前滚检查点之前已完成的任何事务。
      

  2.   

    日志有点像photoshop里面的操作,如果一旦出现问题,你还有可以重来的机会退回到某一步的操作中,嘿嘿……救命草哦
      

  3.   

    大量的读写操作,还有缺省模型。
    您可以这样来缩减日志
    USE DatabaseName
    backup log DatabaseName with no_logUSE DatabaseName
    select fileid,filename from sysfilesUSE DatabaseName
    DBCC SHRINKFILE (2,1) -- 把fileid=2 即日志文件收缩到 1MB