怎样完全清除大型事务日志

zzj 2000-01-25 02:25:00
大家好!
我刚刚加入此论坛,麻烦各位帮我解决以下两个问题.
环境:Sql Server7.0
WindowsNT4.0 or Windows98
问题
1:对于超大型数据库(3000MB)以上,进行大批量处理时如何关闭事务日志,我不需要数据库备份和日志备份,只需要运算结果,然而在运行过程中会产生大量事务日志.如果出错则重新开始运算.原数据库备份已经放在另外的文本文件中.
如:Update 更新几个相"关联"的表
insert into 数据库选项已经设置Select Into/Bluk copy =True
bluk insert 数据库选项已经设置Truncate log on checkpoint=True
进行以上操作时数据库事务日志会很快增长.由于已经截断了事务日志,因此用Backup Log With NO_LOG and TRUNCATE_ONLY后日志大小仍然没变.

2:日志会不断的增长,会占用硬盘大量空间,怎样将日志大小清空为0.我不需要日志.如果程序出错我不会从日志中恢复.
...全文
600 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxjcsdn 2000-03-06
  • 打赏
  • 举报
回复
SQL_SERVER 7.0似乎有个bug,无论是在Manager 还是用BACKUP DATABASE都无法清除日志,我的方法是1退出SQL SERVER,2删除日志文件,3打开SQL SERVER,会生成一个新的小的日志文件。别忘了先备份。
929 2000-02-21
  • 打赏
  • 举报
回复
我曾经遇过大数据库日志不能截断的情况。我在数据库上设置了TRUNCAT LOG ON CHECKPOINT,并且也手工地发出DUMP TRAN XXX WITH TRUNCATE ONLY 和DUMP TRAN XXX WITH NO_LOG但是数据库的日志没有被截断。后来,我在一些新建的小库上试验,这些功能是好使的。我重新检查了我的数据库,发现其中有一个表它的空间分配出现了错误。于是我用TRANSFER MANEGER把这个库中其余的对象都传到了一个新库中,日志可以截断了。在建库时把数据库的数据和日志设备分开,经常用DBCC CHKECKDB,DBCC CHECKTABLE(SYSLOGS),DBCC CHECKCATALOG等数据库维护工具,来验证数据库的完整性。另外,我做的程序中也有这种大量的运算处理,它们会产生大量的日志,但是SERVER当有活动事务运行时,它不会把属于这个事务的日志截掉。日志的截断只会去掉日志中的非活动部分。因此,如果一个操作如果产生大量的日志以至会充满日志,那么就必须把它改写或者把它安排在用户连接最少的时候执行。
july 2000-02-18
  • 打赏
  • 举报
回复
U is sleep?
Please say more
LaoZheng 2000-02-18
  • 打赏
  • 举报
回复
我遇到过类似问题,可能是一个BUG

相关设置都设置了
Enterprise Manager 中Trucate 无效
大量事务处理时Log满
只能不断加大Log Size

july 2000-02-13
  • 打赏
  • 举报
回复
Do you sleep!!!
leo 2000-02-13
  • 打赏
  • 举报
回复
既然你已经设置了Truncate log on checkpoint=True
那你的日志文件不应该经常长大,你的程序可能有问题,TRANSACTION的嵌套可能太多,在发生checkpoint时提交的太少.日志就不断增多,到达最大容量后,文件也随之增大。
日志本身是不可以取消的。
一个办法是在代理处设置一个日志文件长度的ALERT,再定义一个JOB对应这个ALERT。JOB的内容是DBCC SHRINK DATABASE之类的工作。这样你就不用经常担心这个问题。
DOU 2000-01-29
  • 打赏
  • 举报
回复
在SQL Server中,日志功能不可取消,一个数据库至少具有一个日志文件,日志文件的
最小尺寸为512 KB.
设置数据库属性select into/bulkcopy为true,使SQL Server对如下操作
Bulk load operations
SELECT INTO statements
WRITETEXT statements
UPDATETEXT statements
的数据不进行日志处理,但数据库中数据页的分配依然进行了日志处理
设置数据库的属性truncate log on checkpoint为true,
在进行大批量的数据更新的过程中,最好手工执行CHECKPOINT命令以truncate log,无须等到时间间隔。建议使用游标逐行处理数据,以便在中间可插入CHECKPOINT命令。
另外, BACKUP LOG是SQL Server7的标准语法,NO_LOG 与 TRUNCATE_ONLY意义相同
都是Removes the inactive part of the log。语法如下
BACKUP LOG {database_name and @database_name_var}
{
[WITH
{ NO_LOG and TRUNCATE_ONLY }]
}
DUMP是SQL Server6.5及以前版本语法,在SQL Server7中也可用。
alanlee 2000-01-27
  • 打赏
  • 举报
回复
首先将数据库属性确认成 truncate log on checkpoint,然后设置checkpoint 的调度间隔,缺省为60秒。
july 2000-01-26
  • 打赏
  • 举报
回复
我不使用SQL SERVER,但是我使用SYBASE,而SQL SERVER 是从SYBASE 演变过去的,所以两者相似较多,我就SYABSE 说一些我的看法,希望对你有一些帮助。
如果你做的数据的批量处理,如BCP等操作,SYABSE中有设置这一类操作关闭日志的功能,具体手边无相关资料,你自己查一下,如果你不是批量数据处理,首先建议你将程序分解成多个部分,并给数据库设置阀值管理(我不知SQL SERVER是否有此功能),该功能会在日志达到响应的值时截断日志。但是由于所有的关系型数据库均不对活动的日志进行阶段操作,所以一旦你是单个事务(transaction)造成这情况的话,就只能分而治之了,祝你好运
zzj 2000-01-25
  • 打赏
  • 举报
回复
数据库已经设置选项:
Select Into/Bluk copy =True 永许insert into 和 bulk insert 非记录操作。
Truncate log on checkpoint=True 永许自动截断日志。
Auto shrink=True 日志自动压缩
由于设置了以上选项,等于自动执行了DUMP TRAN <DataBase Name> WITH TRUNCATE_ONLY -DUMP TRAN <DataBase Name> WITH NO_LOG
syslogs数据表不能访问。


Z_X_F 2000-01-25
  • 打赏
  • 举报
回复
系统日志据我所知,是必不可少的.特别是大型数据库.一般SIZE在DATA DEVICE SIZE 的
20%-30%左右就可以了.

清除日志应用DUMP,而不是BACKUP

DUMP TRAN <DataBase Name> WITH TRUNCATE_ONLY --- 清除已完成事务日志
DUMP TRAN <DataBase Name> WITH NO_LOG --- 完全清除日志

清除后可用下列语名查询日志可用空间.Enterprise Manager 中提供的方式(DataBase 名上双击)所得到的数据不准确.

dbcc checktable(syslogs)

最好的方式是加入计划任务,让SQL自动执行DUMP.
forgettor 2000-01-25
  • 打赏
  • 举报
回复
试试dbcc shrinkfile ('filename',EMPTYFILE)怎么样?
zzj 2000-01-25
  • 打赏
  • 举报
回复
email:zzj@cacn.net

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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