分离后附加数据库
- 来源:纵横数据
- 作者:中横科技
- 时间:2013/2/21 14:33:59
- 类别:新闻资讯
分离后附加数据库和直接关闭附加数据库的不同
大家知道sp_attach_db和sp_detach_db可以用来附加和分离数据库。但是不知道大家发现没有,不使用sp_detach_db分离数据库,直接关闭数据库服务,然后用sp_attach_db就可以直接将数据文件附加。现在就有两个问题
1、为什么不用分离也可以直接附加。
2、用sp_detach_db分离后附加和直接附加有什么不同。
2、用sp_detach_db分离后附加和直接附加有什么不同。
解:
分离和附加数据库时最重要的是保持数据的一致性。其中一点是切断数据库使用户不能再操作数据库,这是肯定的,但最重要的是:数据库运行中肯定会有一些脏页,使用sp_detach_db可以保证所有脏页都被写入了磁盘。而直接关闭数据库则不能保证这一点。
这就导致了分离后附加和直接关闭后附加的不同。
由于使用sp_detach_db分离保证了脏页全部写入了磁盘,所以附加时,即使没有可用的日志文件,也可以成功附加。
这就导致了分离后附加和直接关闭后附加的不同。
由于使用sp_detach_db分离保证了脏页全部写入了磁盘,所以附加时,即使没有可用的日志文件,也可以成功附加。
测试时mssql返回的信息(先分离后附加):
Device activation error. The physical file name'
d:\sqlserverdatabase\MSSQL\data\sqlbpa_log.LDF'
may be incorrect.New log file '
D:\sqlserverdatabase\MSSQL\Data\sqlbpa_log.LDF'
was created.
以上是使用sp_detach_db分离后,特意删除了日志文件后附加的结果。很明显mssql没有找到日志文件后,重新创建了日志文件。
而直接关闭数据库后附加数据文件就必须保证数据文件和日志文件都可用。如果没有日志文件,将无法成功附加,因为不能保证数据的一致性。
也就是说用sp_detach_db会更安全一些
而直接关闭数据库后附加数据文件就必须保证数据文件和日志文件都可用。如果没有日志文件,将无法成功附加,因为不能保证数据的一致性。
也就是说用sp_detach_db会更安全一些