如何清空数据库的日志文件?高手救命啊!急!

lotus_fan 2003-12-08 02:56:39
我在MSSQL建了一个数据库,库文件有3G大,但其日志文件竟然有15G,我如何才能清空这15G日志文件啊?或者我如何把这些日志文件备份成一个文件?
...全文
712 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinchangpeng 2003-12-21
  • 打赏
  • 举报
回复
1: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'

2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

或截断日志:
backup log 数据库 with no_log

--清除日志
方法1、
--在查询分析器,选中所要清理日志的数据库,执行如下SQL
backup log 数据库名 with no_log
DBCC SHRINKFILE ( 日志文件名或日志文件ID,要缩小的目标大小)

在当前数据库下
select fileid,groupid,name from sysfiles where groupid=0
----------------------------------------------------------
得到以下结果
fileid groupid name
2 0 test_log

以上结果,fileid为日志文件ID,name为test_log

你可以
backup log test with no_log
dbcc shrinkfile (2,2)
or
backup log test with no_log
dbcc shrinkfile ('test_log',2)
如果以后,不想要它变大,在数据库上点右键->属性->选项->故障恢复 模型 选择 简单模型就可以了!
或用SQL语句
alter database 数据库名 set recovery simple

方法2、
SQL SERVER企业管理器-》SQL SERVER组-》服务器-》数据库-》选中数据库实体-》右键-》所有任务-》分离数据库,
然后到数据库所在物理路径下删除.ldf文件,再数据库右键-》所有任务-》附加数据库,即可,会重新生成日志文件。
LoveSQL 2003-12-21
  • 打赏
  • 举报
回复
1:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2:截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG
3:分离数据库,直接删除日志。。然后再附加该数据库就可以了
zzdo 2003-12-21
  • 打赏
  • 举报
回复
学习
zjcxc 2003-12-21
  • 打赏
  • 举报
回复
--压缩日志

1:截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG

2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了


3: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


4: 如果想以后不让它增长
企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

5.设置为自动收缩
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
showmetoyou 2003-12-08
  • 打赏
  • 举报
回复
日志文件本来就很大的!你可以用下面方法清空日志!但你要考虑到文件的重要行!选择清空!因为如果没有日志,在你还原数据库时就可能遇到问题就无从下手了!三思后行!收缩数据库也是个好方法!
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
CrazyFor 2003-12-08
  • 打赏
  • 举报
回复
清空日志:
BACKUP LOG 库名 WITH NO_LOG



DBCC SHRINKFILE( '日志文件名',新的大小数值型如1)

日志文件名是这样的:

select name from sysfiles
如:
mastlog
lvltt 2003-12-08
  • 打赏
  • 举报
回复
清空日志
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构架-->数据库构架-->物理数据库构架-->事务日志构架-->截断事务日志


你用'管理'->'数据库维护计划'来做
选择数据库->从数据库文件中删除未使用的空间
当数据库的大小超过n MB 时收缩数据库 保留 10 % 的数据空间作为可用空间,这样可以调度执行,不需要手工操作了
lvltt 2003-12-08
  • 打赏
  • 举报
回复
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

或截断日志:
backup log 数据库 with no_log

--清除日志
方法1、
--在查询分析器,选中所要清理日志的数据库,执行如下SQL
backup log 数据库名 with no_log
DBCC SHRINKFILE ( 日志文件名或日志文件ID,要缩小的目标大小)

在当前数据库下
select fileid,groupid,name from sysfiles where groupid=0
----------------------------------------------------------
得到以下结果
fileid groupid name
2 0 test_log

以上结果,fileid为日志文件ID,name为test_log

你可以
backup log test with no_log
dbcc shrinkfile (2,2)
or
backup log test with no_log
dbcc shrinkfile ('test_log',2)
如果以后,不想要它变大,在数据库上点右键->属性->选项->故障恢复 模型 选择 简单模型就可以了!
或用SQL语句
alter database 数据库名 set recovery simple

27,579

社区成员

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

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