楼主: taikeqi

[讨论] sqlserver2008 如何处理膨胀了很大的日志?

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2012-4-16 16:17 | 只看该作者
stevenzjds 发表于 2012-4-16 14:00
上面的不会瞎说什么?
人家说了不要日志,你备份日志干嘛?收缩日志的更可笑?收到1M?然后再慢慢变大, ...

楼上高见!
我的确实是OLAP系统.日志庞大,但是却不太需要日志.
我执行了dump transaction mcs_device_number with no_log,但是SQLSERver2008不支持这种旧的语法,楼上的能帮我看看新的语法是什么吗?
dump transaction mcs_device_number with no_log这句的意思是讲日志做一次备份吗?将日志备份一次后,这个日志文件就可以被db重复利用吗?

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:27:27
12#
发表于 2012-4-16 16:53 | 只看该作者
本帖最后由 stevenzjds 于 2012-4-16 16:56 编辑
taikeqi 发表于 2012-4-16 16:17
楼上高见!
我的确实是OLAP系统.日志庞大,但是却不太需要日志.
我执行了dump transaction mcs_device_nu ...

我晕,你仔细看看好不好呀?mcs_device_number 数据库名字,你有这个数据库吗?替换成自己的库名字,这句话的意思不是备份日志,是告诉数据库,现在我要重用联机日志,就是覆盖之前的日志内容,你日志给10G的话,用了5G,执行SQL时候会从5G这个地方开始用,而不会从文件的开始用,所以你的日子会偶尔出现爆满,执行日志阶段后,数据库会从文件的开始位置使用日志,

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2012-4-16 17:06 | 只看该作者
stevenzjds 发表于 2012-4-16 16:53
我晕,你仔细看看好不好呀?mcs_device_number 数据库名字,你有这个数据库吗?替换成自己的库名字,这句 ...

我改成数据库名字也不行啊.语法错误! 2008不支持dump transaction dbname with no_log啊

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:27:27
14#
发表于 2012-4-16 17:17 | 只看该作者
本帖最后由 stevenzjds 于 2012-4-16 17:25 编辑
taikeqi 发表于 2012-4-16 17:06
我改成数据库名字也不行啊.语法错误! 2008不支持dump transaction dbname with no_log啊

奥 还真没注意,2008改了,刚查了下MSDN,语法是这样的
  1. BACKUP LOG { database_name | @database_name_var } WITH { NO_LOG | TRUNCATE_ONLY }
复制代码
下面是微软的官方解释
  1. 仅在 BACKUP LOG 语句中使用,它执行一个检查点,以便手动强制截断事务日志。 NO_LOG 和 TRUNCATE_ONLY 是同义的。 因为并不备份日志,所以没有必要指定备份设备。

  2. 在简单恢复模式下,执行检查点将在不创建备份副本的情况下,删除日志中不活动的部分。 这样就丢弃了除活动日志外的其他所有部分,从而截断了日志。 此选项会释放空间,但是存在可能丢失数据的风险。 使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,在日志的截断部分中记录的更改只有到下次数据库备份时才能恢复。 因此,为了进行恢复,使用这些选项中的任一个后,应立即执行 BACKUP DATABASE 以执行完整或差异数据库备份。
复制代码

这个东西只有在没有作业运行的情况下执行哦,不然可能会丢失数据!

使用道具 举报

回复
论坛徽章:
0
15#
 楼主| 发表于 2012-4-16 17:39 | 只看该作者
stevenzjds 发表于 2012-4-16 17:17
奥 还真没注意,2008改了,刚查了下MSDN,语法是这样的下面是微软的官方解释

这个东西只有在没有作业运 ...

知道,当然是先停掉其他作业,再干!
"使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,在日志的截断部分中记录的更改只有到下次数据库备份时才能恢复" ,这句话不懂阿!不知道什么意思!高手解释下.

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2012-4-16 17:46 | 只看该作者
花好月不圆 发表于 2012-4-13 20:33
Use
GO
Alter Database  Set Recovery Simple

还是这位'花好月不圆 "早就给出答案,BACKUP LOG <database Name> TO DISK=’NUL:’
只是我没有仔细看!

BACKUP LOG <database Name> TO DISK=’NUL:’后并不会释放空间,但是可以循环利用日志,这个就是我想要的,定期找空档backup就行了。

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:27:27
17#
发表于 2012-4-16 17:46 | 只看该作者
taikeqi 发表于 2012-4-16 17:39
知道,当然是先停掉其他作业,再干!
"使用 NO_LOG 或 TRUNCATE_ONLY 截断日志后,在日志的截断部分中记录的 ...

OLAP系统直接无视备份吧,出问题大不了从跑,OLTP才需要备份

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2012-4-16 17:50 | 只看该作者
stevenzjds 发表于 2012-4-16 17:46
OLAP系统直接无视备份吧,出问题大不了从跑,OLTP才需要备份

一点不错。no rollback,no backup

使用道具 举报

回复
论坛徽章:
0
19#
 楼主| 发表于 2012-4-16 18:08 | 只看该作者
花好月不圆 发表于 2012-4-13 20:33
Use
GO
Alter Database  Set Recovery Simple

请问不记录日志模式运行,是怎么设置?

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2012-4-16 18:15 | 只看该作者
本帖最后由 taikeqi 于 2012-4-16 18:44 编辑

总结下,如果想对一个的MSSQL 2008库日志避免膨胀过大,要进行日志截断,能重复使用log日志文件,步骤如下:

1)将库的恢复模式改成Full  (必须要做,Simple模式不支持日志backup)
2)backup库                        (如果这个库从来没做过backup,必须要做)
3)backup log dbname to disk='d:\dbname.log'
4)DBCC SHRINKFILE('dbname_log' , 1)
5)将库的恢复模式改回Simple

什么 BACKUP LOG db WITH { NO_LOG | TRUNCATE_ONLY } 这个在2008里是不支持的;不把库改成Full模式,然后备份下,也是不能backup log的;执行了backup log后,不shrinkfile,还是不能释放空间的。



使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表