[轉]SQL文件组备份和还原
FROM : http://blog.sina.com.cn/s/blog_59e866610100dmrq.html
如果一个数据库比较大的时候,一般会包含多个文件组,由于备份还原是个很耗资源和时间的事情,所以文件组的备份和还原成了另外一种选择。
在创建带有多个文件组的时候,建议将用户数据放在辅助文件组中,就是将其中一个文件组设置为默认,而不是用primary作为默认的文件组:
create database test
on primary
(name=test_mdf,
filename='d:\sql_data\test.mdf'
size=4MB,
maxsize=unlimited,
filegrowth=10%),
filegroup FG1 default
(name=test_ndf,
filename='d:\sec_data\test.ndf',
size=4MB,
maxsize=unlimited,
filegrowth=10%)
log on
(name=test_log,
filename='d:\log\test.ldf',
size=4MB,
maxsize=unlimited,
filegrowth=10%)
上面的例子,主文件组primary将只包含系统表和对象,不包含用户数据库文件,这样更有利于文件组的备份和还原。
另外,还可以将创建的表指定放在哪个文件组里(有时文件组很多)
create table <table_name> (...) on <文件组名>
这在数据库设计的时候或许会用到。
1、备份数据库文件组
(1)创建文件组完整备份
use master
go
backup database test
filegroup='FG1'
to myback1,myback2
with name='test_fullbackup_20090524'
(2)创建文件组差异备份
use master
go
backup database test
filegroup='FG1'
to myback1,myback2
with differential,name='test_diffbackup_20090524'
(3)创建日志备份
use master
go
backup log test
to myback1,myback2
with name='test_logbackup_20090524'
2、还原数据库文件组
需要非常注意的一个地方是:在还原文件或者文件组备份前必须进行尾日志备份,因为需要将该文件或文件组恢复到同数据库中其他文件或文件组一致的状态。如果不能获得尾日志备份的话,那么就不能单独还原单个文件或者文件组,而必须还原整个数据库。
(1)备份尾日志
这跟备份日志是一样的。
use master
go
backup log test
to myback1,myback2
with name='test_taillogbackup_20090524'
(2)还原文件组
先查看一下备份信息
use master
go
restore database test
filegroup='FG1'
from myback1,myback2
with file=1,norecovery
go
restore database test
filegroup='FG1'
from myback1,myback2
with file=4,norecovery
go
restore log test
from myback1,myback2
with file=5,recovery
go
注意:差异备份之前的事务日志备份就不用还原了。
如果是备份或者还原文件,将filegroup改成file就行了。
3、常用的文件或文件组备份和还原策略
假设只有两个文件组primary和FG1
(1)星期六晚上对primary进行完整文件组备份(作为基备份)
(2)星期日晚上对FG1进行完整文件组备份(作为基备份)
(3)星期二晚上对primary进行差异文件组备份
(4)星期三晚上对FG1进行差异文件组备份
(5)星期四晚上对primary进行差异文件组备份
(6)星期五晚上对FG1进行差异文件组备份
(7)每隔30分钟进行一次事务日志备份
当故障发生时还原的时候
(1)还原两个文件组的基备份
(2)还原primary的最近差异备份
(3)还原primary的最近差异备份后的日志备份
(4)还原FG1的最近差异备份
(5)还原FG1的最近差异备份后的日志备份
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。