对SQL Server认识的几个误区
最近测试了一些东西,发现以前某些认识并不正确。
大概有如下几项:
1.以前一直以为将Full模式切换到Simple模式之后,执行了某个操作,之后切换回Full模式。此时,必须在重新做一次完整备份之后,才能进行事务日志备份。
---其实,上面说的方法可行,但并不是唯一的方法。我们此时可以在切换回Full模式之后,做一个差异备份。之后就可以执行事务日志备份了。
2.新的数据库必须要执行了完整备份之后,才能进行差异备份或者事务日志备份。(这里指的新数据库是特指使用备份文件恢复出来的数据库,不是使用create database命令创建的DB。)
---其实,在恢复出来之后的数据库是可以直接执行差异备份的。假如该数据库是Full模式,是可以直接执行事务日志备份的。
举例如下:
A数据库做了一个完整备份A_Full.Bak,之后使用A_Full.BAK恢复出数据库B。此时我们可以对B数据库直接进行差异备份。如果A数据库是Full恢复模式,我们此时也可以对B数据库做事务日志备份。
另外,我们甚至可以使用A_Full.BAK加上B数据库产生的差异备份或者事务日志备份文件来恢复数据库C。
3.必须按照顺序依次使用事务日志备份文件来恢复数据库。
---假如数据库A先做了一个完整备份A_Full,之后创建了一个表,做事务日志备份A_TRN_1。 什么操作也不做,再做A_TRN_2日志备份,之后做一些更新,再做A_TRN_3日志备份。此时,我们可以使用A_Full+A_TRN_1+A_TRN_3来恢复,跳过A_TRN_2事务日志备份文件。
注意:这里不能跳过A_TRN_1备份文件。经过测试发现,即使满足未作任何操作条件,完整备份之后的第一个事务日志备份文件都不能被忽略。但是差异备份之后的第一个事务日志备份文件可以被忽略。
4.使用Snapshot来恢复数据库的错误认识。
---假如在12:00的时候使用下面的语句来创建了一个Snapshot。之后在1:00的时候Sales数据库挂掉,此时我们并不能使用该Snapshot将数据库恢复到12:00的状态。使用Snapshot来恢复数据库的前提是源库是可用状态。
USE master;
GO
CREATE DATABASE sales_snapshot0600 ON
( NAME = SPri1_dat, FILENAME = 'D:\SalesData\SPri1dat_0600.ss'),
( NAME = SPri2_dat, FILENAME = 'D:\SalesData\SPri2dt_0600.ss'),
( NAME = SGrp1Fi1_dat, FILENAME = 'D:\SalesData\SG1Fi1dt_0600.ss'),
( NAME = SGrp1Fi2_dat, FILENAME = 'D:\SalesData\SG1Fi2dt_0600.ss'),
( NAME = SGrp2Fi1_dat, FILENAME = 'D:\SalesData\SG2Fi1dt_0600.ss'),
( NAME = SGrp2Fi2_dat, FILENAME = 'D:\SalesData\SG2Fi2dt_0600.ss')
AS SNAPSHOT OF Sales ;
GO
5.执行完index rebuild之后,碎片一定会降低
---假如该表很小,是和其他小表一起使用的混合区,那么索引的碎片在rebuild操作完成之后不一定会降低,甚至可能升高。
6.新建的数据库都是以Model数据库为模板
---错误,大部分选项都是跟着Model数据库设置的。但是某些选项不是。准确的说,在2008及之后的版本SQL Server中,是从Resource数据库中拷贝数据库选项,以及从Model数据库中拷贝用户定义的object。

浙公网安备 33010602011771号