关于sqlserver日志有些疑惑??

Juchiyufei 2014-09-26 10:11:07


搜了一些文章,感觉利用日志来恢复数据都是基于备份(完整,差异,事务日志)来的,如果我没有对这个数据库做这个备份操作,岂不是就不行了。

按我的理解,数据库时时都将在读,那么日志也就在跟着记录的,如果数据有问题,直接根据这个日志来恢复呀,而不是根据备份。

我在SQL server log的存档中看了一下,更多的像是sqlserver的日志,而不是我读写数据库日志。


不明,求解。
...全文
321 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 版主 2014-09-29
  • 打赏
  • 举报
回复
引用 14 楼 Juchiyufei 的回复:
感谢上面几位的回复。 基于一个备份,或者说一个点,我完全能理解或明白。 比如: 我在早上9:00时,做了一个完整的备份,系统继续运行着,这时我在9:30时,删除了其中几条重要的记录,假设设日志没有被破坏,我能不能从日志中恢复过来;如果我从9:00的备份中恢复,那么从9:01到9:29的(新增)数据就没有了。 HOW?
不能从日志恢复(这里是 SQL Server),只能恢复 9点的备份,再恢复日志,到9:29 就不恢复了,这样,就可以找到你的数据了。
俺是大菠萝 2014-09-29
  • 打赏
  • 举报
回复
引用 楼主 Juchiyufei 的回复:
搜了一些文章,感觉利用日志来恢复数据都是基于备份(完整,差异,事务日志)来的,如果我没有对这个数据库做这个备份操作,岂不是就不行了。 按我的理解,数据库时时都将在读,那么日志也就在跟着记录的,如果数据有问题,直接根据这个日志来恢复呀,而不是根据备份。 我在SQL server log的存档中看了一下,更多的像是sqlserver的日志,而不是我读写数据库日志。 不明,求解。
没有基准备份,任何差异、日志都是没有意义的。而全备就是提供了一个基准备份; 对完整模式而言,不做日志备份,将导致日志不会被截断,也就是已有的VLF不会被重用,导致日志文件越来越大,而你的存储空间毕竟有限; 因此全备和日志备份提供了一个数据时间上的延续; 另外,你所说的sqlserver log,是errorlog的范畴,记录的是系统的运行状态;而实际上你写入的日志可以通过fn_dblog这个函数查看,当然,只有最近一次checkpoint之后的记录,如果需要查看之前的记录,可以用fn_dump_dblog解析对应的日志备份文件获取; 另一方面,这样获取的内容都是以二进制的方式表述,如果需要转成常用的sql语句,还需要做进一步的解析;
还在加载中灬 2014-09-28
  • 打赏
  • 举报
回复
这个应该可以的 你可以参考一下 通过日志恢复SQL Server的历史数据 http://www.cnblogs.com/jintan/archive/2008/11/14/1333879.html
Juchiyufei 2014-09-28
  • 打赏
  • 举报
回复
感谢上面几位的回复。 基于一个备份,或者说一个点,我完全能理解或明白。 比如: 我在早上9:00时,做了一个完整的备份,系统继续运行着,这时我在9:30时,删除了其中几条重要的记录,假设设日志没有被破坏,我能不能从日志中恢复过来;如果我从9:00的备份中恢复,那么从9:01到9:29的(新增)数据就没有了。 HOW?
LongRui888 2014-09-27
  • 打赏
  • 举报
回复
这个方面的,你可以研究一下oracle在这方面的机制,因为oracle就提供了各种功能,可以对日志进行挖掘,也就是知道过去某个时间点,数据的状态。 还有,oracle可以通过闪回功能,实现把数据恢复到过去某个时间点的状态
卖水果的net 版主 2014-09-27
  • 打赏
  • 举报
回复
首先说一点,没有一个完全备份,日志几乎是没什么意义,和理发一样,先有一个脑袋 1 . 日志就是记录每一剪刀的动作,比如剃的位置,掉的头发的数量等等,如果没有原来的脑袋,知道这些信息也没有用。 2 . 头发理坏了,他不高兴了,你必须知道哪一剪子开始坏的,比如从 第 5 剪子坏的,你要把他原来的脑袋找回来(即把原来的完整备份做一个还原),再把前 4 剪子重剪一下,第5剪不要(即还原日志,这里使用部分还原,或叫不完全恢复),再接着向下理。 3 . 当然了,也可以剪一下,完全备份一个,只不过完全备份太多了,太占地方了。
KeepSayingNo 2014-09-26
  • 打赏
  • 举报
回复
日志只记录读写操作,能恢复数据吗
Juchiyufei 2014-09-26
  • 打赏
  • 举报
回复
引用 1 楼 AcHerat 的回复:
楼主你查找的资料是关于日志备份的,可以再找找关于数据库日志模式的资料,看看不同模式下的日志是怎么做记录的。
Microsoft SQL Server 2008系统提供了以下3种数据库的恢复模式: 完整恢复模式 大容量日志记录的恢复模式 简单恢复模式 正在研究中。
Juchiyufei 2014-09-26
  • 打赏
  • 举报
回复
SQLSERVER事务日志记录 http://www.cnblogs.com/lyhabc/archive/2013/07/16/3194220.html 这个还可以,感觉就是好复杂,麻烦的样子。
Juchiyufei 2014-09-26
  • 打赏
  • 举报
回复
目前而言,就这里几篇文章稍点用: http://www.cnblogs.com/CareySon/category/354290.html
xiaodongni 2014-09-26
  • 打赏
  • 举报
回复
关注下。还没见过日志啊
Mr_Nice 2014-09-26
  • 打赏
  • 举报
回复
据我所知,lz的问题也是很多人一直想要让微软开源这部分日志信息处理机制的问题。 我理解的处理规则,都需要有一个恢复的原点(sqlserver 是备份,oracle 是SCN,时间点)都是一个起点。 其实完全可以根据日志的记录,将其恢复为任何的一个时间点,如果相关的日志都完整的话,就好像走过的路,按照原路走回去一样。只是要知道你返回到什么地方。 但很遗憾,目前为止我还没见到过微软放出更多关于日志的资料。只能期待更加开源了。
AcHerat 元老 2014-09-26
  • 打赏
  • 举报
回复
楼主你查找的资料是关于日志备份的,可以再找找关于数据库日志模式的资料,看看不同模式下的日志是怎么做记录的。
rouqu 2014-09-26
  • 打赏
  • 举报
回复
另外,只记录数据变化,是没有办法进行回退到任一时点的还原的。你想想是不是?
rouqu 2014-09-26
  • 打赏
  • 举报
回复
日志不可能记录数据包括数据的变化,不说空间需求,首先是什么性能? 日志记录全过程TSQL语句,当然要以数据为依靠,所以才有日志的redo和undo。 而且,通过这样的方式日志的压缩才有空间,日志的收缩才可能。 另外,完整数据库备份实际也不单是数据的备份,同时包括备份时间起点至结束时的log。
还在加载中灬 2014-09-26
  • 打赏
  • 举报
回复
日志也用记录一些事务的状态数据,也会在SQL SERVER的内部事件里记录,我想这就是日志记录更多的是sqlserver的原因吧 至于数据恢复,我想这也要有个基点吧,取上一次的完全备份 如果不基于这个恢复数据,从日志进行逆推,因为本来就是恢复数据,很可能当前的数据是错误的,我想不能直接以日志恢复数据应该是基于这个考虑吧
Juchiyufei 2014-09-26
  • 打赏
  • 举报
回复
理论上能,但我没研究出来。

34,590

社区成员

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

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