sql Server允许使用简单的copy方式来备份数据库的数据和日志文件吗?答案是肯定的。但前提是数据文件不再被sql Server使用。
当数据库处于活动状态,你不能简单的copy它的文件,推荐方式是使用完整数据库备份(备份模式)。这是因为数据库的数据和日志文件不能处于非一致状态。这会导致仅仅在事务日志中被修改的数据页可能无法写入数据文件。这也会影响进程中的事务无法提交或是回滚已经写入文件中的数据。
下面是一个简单的例子:
10:00 | copying of data files start,takes 10 minutes. |
10:05 | A checkpoint occurs,modifies some pages at the beginning of the data file (which have already been copied),and some pages at the end of the data file (yet to be copied). |
10:10 | copying of data files end,copy of transaction log starts. |
10:15 | copying of transaction log ends. |
你最后一步是copy事务日志,这就意味着数据文件已经包括了最后一次checkpoint以后的所有更改,但是实际上数据文件仅仅包括部分更改。
copy一个已经被其他应用程序打开的文件,这种方式是非常有用的,但如上所述,这种方式好像并不适用于备份sql Server数据库。假如你必须使用copy方式来替换普通的数据库备份方式的话,推荐的方式是使用sp_detach_db存储过程来分离数据库:
sp_detach_db 'AdventureWorks'
sql Server在把数据库从sql Server实例上分离下来之前,会把所有的脏页都写回磁盘。然后,你就可以copy数据库文件了,这时数据库文件也是处于一致性状态的。然后,你可以使用sp_attach_db来重新附加数据库:
sp_attach_db 'AdventureWorks','e:/mssql_data/AdventureWorks/AdventureWorks.mdf','e:/mssql_data/AdventureWorks_log.ldf'
假如你的数据库仅仅由数据文件组成,而且再也不需要事务日志文件了,那么使用sp_attach_single_file_db存储过程:
sp_attach_single_file_db 'AdventureWorks','e:/mssql_data/AdventureWorks/AdventureWorks.mdf'
当数据库实例处于离线状态时,你也可以安全的copy数据库文件。
copy数据库文件这种方式的主要略势是,你不得不把数据库离线一段时间,以便你来copy数据文件。而且,你也不能使用附加的数据库作为差异备份和事务日志备份的起始点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。