求sql server2008 事务日志满的解决办法!!!!!!!!!!!!!!!!!

little_ant2 2010-05-28 12:53:50
我是在sql server2008运行的,报错信息:
消息 9002,级别 17,状态 4,第 1 行
数据库 '2010-5' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。

在解决过程中遇到的问题有几个,请教下大侠,谢谢:
1、在网上搜了很多解决事务日志满的网页,发现清空日志的语句
DUMP TRANSACTION "2010-5" WITH NO_LOG
在sql server 2008里面报错:
消息156,级别15,状态1,第1 行
关键字'TRANSACTION' 附近有语法错误。

是不是这个语句在sql server2008用不了?界面清空日志操作步骤是怎么样呢?

2、网上很多提到收缩数据库,限制文件自动增长等等,如果日志文件达到了这个最大值,不是照样报错,这样的操作有什么实际意义呢?还有就是提到增大空间留给放日志文件等等,问题是打个比方我的硬盘空间是20G,日志文件设置为10G,意思是日志文件不能再大了,我也没有其他空间腾出来放了,我也不想备份,就想保留近段时间的日志文件就好了,这样我该怎么办?
...全文
5887 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xman_78tom 2010-05-29
  • 打赏
  • 举报
回复
在 simple 恢复模式下,SQL SERVER 在自动生成检查点(checkpoint)的同时也进行日志截断。

SQL Server 有以下几种生成检查点的方式:checkpoint 语句;使用 ALTER DATABASE 更改数据库选项时;停止 SQL Server 服务时;SQL SERVER 自动执行检查点时。
最后一条, SQL SERVER 会根据日志中的记录数自动调整生成检查点的时间间隔,当数据库被频繁修改时生成检查点的时间间隔就很短,反之则很长。具体机制有点复杂,需要理解事务日志机制、 checkpoint 机制、数据库恢复机制、recovery interval 服务器选项等等。lz 可以研究一下 inside sql server 中关于事务日志的论述。

简单来说,在 simple 恢复模式下,每当日志中的记录数满足下面两个条件中的一个就生成自动检查点: 日志的 70% 已满;日志中的记录数达到 SQL SERVER 估计在 recovery interval 选项指定的时间内能处理的记录数。
little_ant2 2010-05-29
  • 打赏
  • 举报
回复
谢谢 请问下楼上大虾
1,由 sql server2008 自动截断日志

一般保留多少时间的内容?一天?两天么?

2、如果不需要日志备份,可以直接将数据库设置为 simple 恢复模式

是不是如果不备份日志,每次日志满了,只是需要一个操作 alter database dbname set recovery simple 就行了?


feixianxxx 2010-05-29
  • 打赏
  • 举报
回复
LZ要知道一个东西:截断、备份日志文件 只是逻辑上让日志文件空间能重用 但是不能减少实际的物理占用空间
你要使用DBCC SHRINKFILE 命令收缩文件~
xman_78tom 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 little_ant2 的回复:]

谢谢 按照楼上的方案执行 alter database dbname set recovery simple

日志文件大小没有变化的捏,具体是进行怎么操作?请指教,谢谢
[/Quote]
这个只是截断日志。如果要缩小日志文件,还需要收缩日志文件(DBCC SHRINKFILE),这个前几楼不是说了吗?

SQL Server 的日志文件空间是可以循环使用的,截断日志就是清空日志空间(但这部分空间不会返回给文件系统),让 SQL Server 可以重新使用这部分空间(从而不会向文件系统请求新的存储空间,不会增大日志文件)。
claro 2010-05-29
  • 打赏
  • 举报
回复
另外对于超出正常预测的日志突增,建议找到原因。而不是从截断日志考虑,虽然解决当下问题是首选。
claro 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 little_ant2 的回复:]

谢谢 按照楼上的方案执行 alter database dbname set recovery simple

日志文件大小没有变化的捏,具体是进行怎么操作?请指教,谢谢
[/Quote]重启数据库看看。
这只是将模式变更为简单。
little_ant2 2010-05-29
  • 打赏
  • 举报
回复
谢谢 按照楼上的方案执行 alter database dbname set recovery simple

日志文件大小没有变化的捏,具体是进行怎么操作?请指教,谢谢
xman_78tom 2010-05-28
  • 打赏
  • 举报
回复
在 sql server 2008 中截断日志,
是将数据库切换到 simple 恢复模式(alter database dbname set recovery simple),
再将数据库切换回原来的恢复模式(alter database dbname set recovery full)。

如果不需要日志备份,可以直接将数据库设置为 simple 恢复模式。这样可以由 sql server 自动截断日志。
little_ant2 2010-05-28
  • 打赏
  • 举报
回复
谢谢 请教楼上大虾如何截断日志??
Mr_Nice 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 perfectaction 的回复:]

SQL Server 2008 不能使用以下:
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG

只能采用正常的备份来截断日志.
[/Quote]

学习了。 确实没怎么用过2008
nzperfect 2010-05-28
  • 打赏
  • 举报
回复
SQL Server 2008 不能使用以下:
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG

只能采用正常的备份来截断日志.
Mr_Nice 2010-05-28
  • 打赏
  • 举报
回复
虽然没做过,我估计应该跟原来方法一样。


--最好备份日志,以后可通过日志恢复数据。。。
以下为日志处理方法
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--*/

--下面的所有库名都指你要处理的数据库的库名

1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG

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

也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)

--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)

4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库

b.在我的电脑中删除LOG文件

c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库

此法将生成新的LOG,大小只有500多K

或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

a.分离
EXEC sp_detach_db @dbname = '库名'

b.删除日志文件

c.再附加
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'

5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'

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

--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
nzperfect 2010-05-28
  • 打赏
  • 举报
回复
SQL Server 2008 先备份日志将日志截断.
再用dbcc shrinkfile(日志文件,1024)收缩日志文件。

34,836

社区成员

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

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