为什么我设计的数据库的文件。LOG文件在使用不长时间就有几个G大小呢 求救啊 每次操作都会在log中记录可以定期缩减log的大小 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Create PROCEDURE Sp_ShrinkLog (@LogF varchar(200), @NSize INT) AS-- DESC: attempt to shrink the log file to a specific size-- gets logical file name and attempt sizeSET NOCOUNT ONDECLARE @MaxMin INT, @LogicalFileName sysname,@origs intDECLARE @Cnt INT,@StartTime DATETIME, @Truncl VARCHAR(255)SELECT @LogicalFileName = @LogFSELECT @MaxMin = 2--获得当前数据库的文件大小SELECT @origs = size FROM sysfiles WHERE name = @LogicalFileName--显示获得的数据库文件的大小SELECT 'Original Size OF ' + db_name() + ' LOG IS ' + CONVERT(VARCHAR(30),@origs) + ' 8K pages or ' + CONVERT(VARCHAR(30),(@origs*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileNameCREATE TABLE DumpTrn (DumCol char (8000) NOT null)SELECT @StartTime = GETDATE(), @Truncl = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'--收缩数据库的指定数据文件大小DBCC SHRINKFILE (@LogicalFileName, @NSize)EXEC (@Truncl) -- 使用备份命令收缩日志文件大小--如果已经收缩过,判断数据库是否已经收缩WHILE @MaxMin > DATEDIFF (mi, @StartTime, GETDATE()) --收缩使用的时间 AND @origs = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) --收缩前后文件的大小比较 AND (@origs * 8 /1024) > @NSize --原数据库是否需要收缩BEGIN set @Cnt = 0 WHILE ((@Cnt < @origs / 16) AND (@Cnt < 50000)) BEGIN -- 填写数据然后删除 INSERT DumpTrn VALUES ('Fill Log') -- 这是一个8000字节的字符列. DELETE DumpTrn set @Cnt = @Cnt + 1 END EXEC (@Truncl) -- 察看Log文件是否已经收缩.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 = @LogicalFileNameDROP TABLE DumpTrnPRINT '*** Perform a FULL DATABASE BACKUP ***'SET NOCOUNT OFFgo--使用方法use northwindgoexec sp_shrinkLog 'northwind',22backup log dbname with no_logdbcc shrinkdatabase(dbname)3 靠!将数据库选项设为在检查点自动截断日志(truncate log on check point);事后再手工处理治标不治本啊!别告诉我日志文件你有大用处,不错日志文件对金融机构的确有大用处,但金融机构,好像还没学会用MS SQL啊! http://expert.csdn.net/Expert/topic/2623/2623764.xml?temp=.8325922 如何查询出每个姓名最新时间的数据 导入IP数据库的问题 存储过程的疑问,谢谢 从表[[a]中查询[[a]].[b]字段,SQL语句应该怎样写? 检索数据问题 求设计思路?产品与订单的处理 怎么样写一个系统内部的存储过程(MS- SQLSERVER) 請問怎樣可以插入'字符到Sql2000數據庫表 怎样删除下面的主从表 Anaconda打不开,显示这样的页面怎么处理?一直显示There is an anaconda alreadly running 在查询时,如何将2列合并成1列?? MS SQL 还原数据库失败??????在线
(@LogF varchar(200), @NSize INT)
AS
-- DESC: attempt to shrink the log file to a specific size
-- gets logical file name and attempt sizeSET NOCOUNT ON
DECLARE @MaxMin INT, @LogicalFileName sysname,@origs int
DECLARE @Cnt INT,@StartTime DATETIME, @Truncl VARCHAR(255)SELECT @LogicalFileName = @LogF
SELECT @MaxMin = 2--获得当前数据库的文件大小
SELECT @origs = size
FROM sysfiles
WHERE name = @LogicalFileName
--显示获得的数据库文件的大小
SELECT 'Original Size OF ' + db_name() + ' LOG IS ' +
CONVERT(VARCHAR(30),@origs) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@origs*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileNameCREATE TABLE DumpTrn (DumCol char (8000) NOT null)SELECT @StartTime = GETDATE(),
@Truncl = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'--收缩数据库的指定数据文件大小
DBCC SHRINKFILE (@LogicalFileName, @NSize)
EXEC (@Truncl) -- 使用备份命令收缩日志文件大小--如果已经收缩过,判断数据库是否已经收缩
WHILE @MaxMin > DATEDIFF (mi, @StartTime, GETDATE()) --收缩使用的时间
AND @origs = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) --收缩前后文件的大小比较
AND (@origs * 8 /1024) > @NSize --原数据库是否需要收缩
BEGIN
set @Cnt = 0
WHILE ((@Cnt < @origs / 16) AND (@Cnt < 50000))
BEGIN -- 填写数据然后删除
INSERT DumpTrn VALUES ('Fill Log') -- 这是一个8000字节的字符列.
DELETE DumpTrn
set @Cnt = @Cnt + 1
END
EXEC (@Truncl) -- 察看Log文件是否已经收缩.
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 = @LogicalFileNameDROP TABLE DumpTrnPRINT '*** Perform a FULL DATABASE BACKUP ***'SET NOCOUNT OFF
go--使用方法
use northwind
go
exec sp_shrinkLog 'northwind',22
backup log dbname with no_log
dbcc shrinkdatabase(dbname)3
将数据库选项设为在检查点自动截断日志(truncate log on check point);事后再手工处理治标不治本啊!别告诉我日志文件你有大用处,不错日志文件对金融机构的确有大用处,但金融机构,好像还没学会用MS SQL啊!