事务日值增长太快,占尽空间!急急急!

net10 2003-08-30 03:01:57
数据库从7.0中导入2000后,事务日值文件大小增长的很快,现在比数据文件到大几倍,不知道是哪个选项没有设置,或者有什么问题???

大家救命!
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-08-30
  • 打赏
  • 举报
回复
你也可以定时截断日志:
backup log 数据库 with no_log
pengdali 2003-08-30
  • 打赏
  • 举报
回复
你:

alter database test set recovery simple
pengdali 2003-08-30
  • 打赏
  • 举报
回复
三种恢复模型对这些操作记录日志情况比较

1 简单恢复模型

use master
go

create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go

use test
go

alter database test set recovery simple

select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b

select count(*) from ::fn_dblog(null,null)

--一个未公开的table-valued funtion 可以看日志文件的记录数

--result :406

dbcc sqlperf(logspace)

--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 12.5

use master
go

drop database test


2 大容量日志记录恢复模型
这些大容量复制操作的数据丢失程度要比完全恢复模型严重,
不允许恢复部分的BULK操作,只能全部恢复


use master
go

create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go

use test
go

alter database test set recovery BULK_LOGGED

select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b

select count(*) from ::fn_dblog(null,null)

--result :422

dbcc sqlperf(logspace)

--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 12.548956


use master
go

drop database test


3 完全恢复模型
记录的日志数要比大容量日志记录恢复模型多,
将记录每一条BCP or BULK insert,create index 的每一条index row,
对image,text字段 WRITETEXT or UPDATETEXT的所有操作

use master
go

create database test
on ( name='test',
filename='f:\test.mdf',
size=5MB)
log on
( name='test_log',
filename='f:\test_log.ldf',
size=3MB)
go

use test
go

alter database test set recovery full

select top 10000 a.* into testtable from master..sysobjects a , master..syscolumns b

select count(*) from ::fn_dblog(null,null)

--result: 582

dbcc sqlperf(logspace)

--
--Databasename LogSize(MB) Log Space Used(%)
--test 2.9921875 57.996082


三 总结

以上语句在不同模式下的比较

FULL模式 BULK_LOGGED 模式
速度 慢 快
日志大小 大 小
net10 2003-08-30
  • 打赏
  • 举报
回复
谢谢!问题已解决!
happydreamer 2003-08-30
  • 打赏
  • 举报
回复


清空日志
DUMP TRANSACTION @DataBaseName WITH NO_LOG

DBCC SHRINKFILE( @LogoFileName,@NewSize)


--假设test2为数据库名称 日志已经很大的时候用
方法一此方法适用于7.0和2000。

1、在查询分析器中执行: exec sp_detach_db 'DB_Name','true'

2、在我的电脑中将日志的物理文件xxx_Log.LDF改名。

3、在查询分析器中执行: exec sp_attach_single_file_db 'DB_Name','C:\Program Files\Microsoft SQL Server\MSSQL\Data\DB_Name.MDF'

4、如果上一步成功,将步骤2中改名后的文件删除。如果上一步不成功,改回原来的文件名,用sp_attach_db将数据库附加到服务器,然后用方法二。

方法二

6.X中 DUMP TRANSACTION test2 with NO_LOG DUMP TRANSACTION test2 with TRUNCATE_ONLY 将上面的语句多次执行,直到日志缩小。7.0和2000中 backup log test2 with NO_LOG backup log test2 with TRUNCATE_ONLY DBCC SHRINKDATABASE(test2) 将上面的语句多次执行,直到日志文件缩小。上面的方法治标不治本,标本兼治要用下面的方法。

方法三:

--6.X和7.0中改为日志处于截断模式,2000中恢复模型改为简单恢复 exec sp_dboption 'test2','trunc. log on chkpt.','on' --7.0和2000中设为自动收缩,6.x中不用执行。 exec sp_dboption 'test2','autoshrink','on' 通常用于测试环境。

方法四: --7.0中改为日志不处于截断模式,2000中恢复模型改为完全恢复 exec sp_dboption 'test2','trunc. log on chkpt.','off' --7.0和2000中设为自动收缩,6.x中不用执行。 exec sp_dboption 'test2','autoshrink','on' 建立作业,每半个小时一次日志备份,每天一次完全数据库备份。 7.0和2000中:在Log收缩到正常大小后,将autoshrink选项设置为off。通常用于真实环境。 在产品化系统中将autoshrink选项设置为开启状态并非明智之举(除非您真的需要这样做),这是因为,当您的系统正在忙于完成其它任务时,autoshrink选项可能会同时启动,从而降低系统运行速度。然而,对于那些数据库管理员无暇估计并且数据库尺寸有可能在您毫无察觉的情况下超出控制范围的桌面或远程系统来说,开启这一选项却是一种非常有效的措施。 收缩事务日志 在下列情况下,日志文件的物理大小将减少:

*执行 DBCC SHRINKDATABASE 语句时。

*执行引用日志文件的 DBCC SHRINKFILE 语句时。

*自动收缩操作发生时。 日志收缩操作依赖于最初的日志截断操作。日志截断操作不减小物理日志文件的大小,但减小逻辑日志的大小,并将没有容纳逻辑日志任何部分的虚拟日志标记为不活动。日志收缩操作会删除足够多的不活动虚拟日志,将日志文件减小到要求的大小。 按下面任一方式控制事务日志的大小:

*在维护日志备份序列时,调度 BACKUP LOG 语句按间隔发生,以使事务日志不致增长到超过预期的大小。

*当不维护日志备份序列时,指定简单恢复模式。 详情请参考 MS SQL Server 2000 联机丛书: 目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->收缩事务日志 目录--> SQL Server构架-->数据库构架-->物理数据库构架-->事务日志构架-->截断事务日志

happydreamer 2003-08-30
  • 打赏
  • 举报
回复
展开服务器组,然后展开服务器。


展开"数据库"文件夹,右击要从中删除数据或日志文件的数据库,然后单击"属性"命令。


若要删除数据文件,单击"常规"选项卡。若要删除日志文件,单击"事务日志"选项卡。


在"文件名"列中,单击要删除的文件名旁边的箭头,再按 DELETE 键。文件名旁出现十字光标,表明将删除此文件。


说明 只能删除空文件。从数据库中删除文件之前,应先删除文件中的所有对象,并收缩该数据库


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
txlicenhe 2003-08-30
  • 打赏
  • 举报
回复
1: 删除LOG
1:分离数据库
2:删除LOG文件
3:附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
leimin 2003-08-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=28523

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧