(2.14)备份与还原--备份的追加与覆盖及如何查看追加在备份文件中的备份集
1.追加与覆盖
TSQL形式:
(1)覆盖:backup database to disk ='path' with noformat , init
(2)追加:backup database to disk ='path' with noformat , noinit
详解:
(1)覆盖:所谓的覆盖,就是完全用新的东西把过往存在的东西覆盖掉了
实操验证一下:
【1】新建备份设备
【2】设定属性
【3】写备份设备名称
准备工作做好了,现在来测试不同数据库的覆盖操作;
test1:
这样就备份好了,我们到备份目录里看看。
出来了,名字也是我们预设好的名字。好,我们再来备份另外一个设备。先常规备份,看看它多大。
一看,4.2M。我们现在直接在同目录同名覆盖一下试试。 选择好我们的备份设备。然后覆盖
然后看看结果。
发现这个文件的大小完全变成log库的了。所以得出结论覆盖可以直接把原有文件给覆盖掉。因为现在已经是Log库的备份了,我们追加test库试一试。
然后我们查看结果看看。
我们可以发现,结果这个文件居然是两个库备份文件之和。会发生啥,会两个库数据合在一起嘛?如果合在一起那还有什么用?于是我就还原试试看。
找到我们的本分设备,看还原是不是像我刚刚推测的,会把2个库的数据合并起来。
原来它确实是追加进去了。两个库合成一个文件,但是在BAK文件里面根据备份集标头区分开了两个库,也就是这一个bak里面存放了2个库的备份,忙活了半个多小时,终于搞明白。
--嗯呐,好像是完了,但是一想,如果是同一个库追加,还原的时候是什么样子??
我特地在原有表,多插入很多新数据,以便区分2次备份。
看看备份完大小。
emmmmmmmmmmmmm追加了很多次 2次2M的,一次13M的。再多加几次,还原我们看看。
好像只有自己可以选,因为是同库名?那么我还原后的库,有多大呢?在这之前要设置属性,改还原后的名字或者路径。
对比一下,最后一次追加备份本身。
发现其只会使用最后一次。。到此彻底大功告成。
那么,如果备份文件变大了,而只追加本身备份集,还原只能还原最后一次有什么用呢?当然不是只能还原最后一次,可以还原你的备份点
我这个就备份了四次,就有4个点,想回到哪个备份集的点上去都可以。
那么,怎么查看这个备份介质中存了哪些备份集呢?
--查看对应数据库的文件结构(如果多次备份集追加到一个文件上,只会显示第1个) RESTORE FILELISTONLY FROM DISK = N'E:\Sql_Server_test\backup\test_data.bak' --查看备份介质的标头信息 RESTORE LABELONLY FROM DISK = 'E:\Sql_Server_test\backup\test_data.bak' --查看备份集的标头信息(查看备份介质上有哪些备份集) RESTORE HEADERONLY FROM disk = N'E:\Sql_Server_test\backup\test_data.bak'
总结:
1:覆盖是真的覆盖,原本的文件就被替换掉了,没有了
2:追加是:
原理:在物理上看起来只有一个文件了,其实使用它还原的时候会发现各个追加的库在这一个文件里是逻辑划分开的。只是在文件尾部申请了空间,把内容追加进去了。在相同的库里,则只会读取最后一次,还原出来的文件大小也只是最后一次追加备份集的备份数据大小。
(1)如果是在不同库:则还原可以选择不同库。
(2)如果是相同的库:则还原只会选择最后一次,原理也是与(1)相同。