drop table 或truncate table 日志怎么存储?

lcw321321 2010-06-12 10:16:34
如果DELETE FROM TABLE 将产生非常大的日志,很容易理解。DROP TABLE 后LOG文件中到底存放了些什么信息呢?TRUNCATE TABLE LOG中又会存放什么信息呢?如果TUNCATE TABLE 存放的按页删除的信息。

DELETE TABLE --产生大量日志,备份日志后恢复可以通过日志备份信息来处理。
DROP TABLE --产生极小日志,如果一张表很大,数据都被DROP 掉了,而日志很小,在备份还原日志恢复过程中,它是怎么回滚这些数据的呢信息的?

TRUNCATE TABLE --同上疑惑

--如果是按TRUNCATE TABLE解释,删除的时候是按删除页的信息存储在LOG中,那么如果我TRUNCATE TABLE 后
dbcc shrinkdatabase(),回收数据文件了,这个时候,如果再备份日志还原,仅仅是按页信息能够还原吗?答案肯定是可以还原的。这就觉得有些不可思议了,还请各位大师解惑。
...全文
568 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcw321321 2010-06-12
  • 打赏
  • 举报
回复
我明白了,是我自己给绕进去了。谢谢Garnett_KG
wujinyuan 2010-06-12
  • 打赏
  • 举报
回复
truncate table 不会回写删除数据的日志,只会写表结构日志,drop table 会回写删除数据与表结构的日志
Garnett_KG 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lcw321321 的回复:]
我来解释DROP TABLE 可能会更明白:
DB在10:00是做了一个全备份,11:00 DROP 掉一个table,接着我发现你不该DROP ,接着shrinkdatabase(发现数据库能收缩) --这时候我11:01 我做了一个日志备份,然后再恢复还原到11:00
迷惑的是,如五楼所说它的恢复还原的原理是什么?DROP 一张大表,就存储了那么一小点日志,它怎么去恢复还原啊?
[/Quote]

你恢复还原到11:00的步骤不可能是只拿日志文件恢复呀

你是不是该先还原全备份with norecovery,然后再一步一步还原日志,直到stop at 11:00

那你的大表在还原全备份的时候就恢复了,SQL Server还需要在日志里拿什么东西呢?
lcw321321 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 garnett_kg 的回复:]
不太明白你的意思。

你可以单独用日志来恢复数据吗?

打个比方说:

DB在10:00是做了一个全备份,10:30 做了一个日志备份,11:00 truncate 掉一个table,接着你发现你不该truncate,这时候讲讲你是怎么用日志备份来找回被truncate掉的数据的?
[/Quote]
我来解释DROP TABLE 可能会更明白:
DB在10:00是做了一个全备份,11:00 DROP 掉一个table,接着我发现你不该DROP ,接着shrinkdatabase(发现数据库能收缩) --这时候我11:01 我做了一个日志备份,然后再恢复还原到11:00
迷惑的是,如五楼所说它的恢复还原的原理是什么?DROP 一张大表,就存储了那么一小点日志,它怎么去恢复还原啊?
Garnett_KG 2010-06-12
  • 打赏
  • 举报
回复
不太明白你的意思。

你可以单独用日志来恢复数据吗?

打个比方说:

DB在10:00是做了一个全备份,10:30 做了一个日志备份,11:00 truncate 掉一个table,接着你发现你不该truncate,这时候讲讲你是怎么用日志备份来找回被truncate掉的数据的?
王向飞 2010-06-12
  • 打赏
  • 举报
回复
太深奥鸟
lcw321321 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xys_777 的回复:]
这个原理我也不懂,

我猜sqlserver的delete删除 是每行一条日志
TRUNCATE TABLE 就是一页记录一条日志
[/Quote]
链接帮助就是这么说的,我完全支持。那么你恢复还原的时候那可是8K的数据,你怎么通过一条一页的日志来还原8K的数据呢?
永生天地 2010-06-12
  • 打赏
  • 举报
回复

这个原理我也不懂,

我猜sqlserver的delete删除 是每行一条日志
TRUNCATE TABLE 就是一页记录一条日志
lcw321321 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chunchun0003 的回复:]
DELETE TABLE 和 DROP TABLE
放在一起分析不合适吧?
[/Quote]
是不一样,在ORACLE 里面DROP一个表的时候,其实仅仅是改了表的名字而已。在SQL SERVER 里面我就不清楚了。如果SQL SERVER 也是这样操作的。那么DROP TABLE 后,我dbcc shrinkdatabase ,发现空间也能收缩出来,那么那些删除的数据时怎么存储在日志文件里面的呢?实在是有些疑惑
chunchun0003 2010-06-12
  • 打赏
  • 举报
回复
DELETE TABLE 和 DROP TABLE
放在一起分析不合适吧?
chunchun0003 2010-06-12
  • 打赏
  • 举报
回复
xuexi

34,575

社区成员

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

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