[轉]SQL的完整备份和还原

FROM : http://blog.sina.com.cn/s/blog_59e866610100dld3.html

对于数据库来说,备份和还原无疑是非常重要的。今天就在自己的机器上学习并操作了一下,总结一下。

我用的是2005,今天先总结的是完整数据库备份和还原。

1、首先先创建备份设备

exec sp_addumpdevice 'disk', 'myback1', 'd:\backup\myback1.bak'

go

exec sp_addumpdevice 'disk', 'myback2', 'd:\backup\myback2.bak'

go

2、完整备份数据库test

backup database test
to myback1,myback2
with init,name='test_fullbackup_20090521'

在with选项里面中,有两个要注意的选项是init和format,使用这两个选项都会破坏备份设备中已经存在的备份,而且使用的时候两个不能同时使用。选项name指定备份的名称,建议使用,不然到时还原的时候就不知道哪个是哪个了。还可以用选项medianame指定备份媒体的名称,一般不需要。

3、差异备份数据库test

在对数据库做了更改后,可以对数据库进行差异备份。

backup database test
to myback1,myback2
with differential,name='test_fulldiff_20090521'

4、备份数据库test日志

backup log test
to myback1,myback2
with name='test_logbackup_20090521'

可以将日志和数据备份到同一个备份设备,但在实际运用中为了性能等因素,一般是将日志和数据备份到不同设备。

在上一次备份日志之后,如果做了什么错误更改或变动,不得不还原数据,如果直接还原的话,将会报错,

提示:尚未备份数据库 "test" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句来只覆盖该日志的内容。

所以在还原之前,请先做一个尾日志备份,尤其是在系统发生故障的时候,如果可能,应该马上进行尾日志备份,以帮助还原到故障点时的状态。

backup log test
to myback1,myback2
with name='test_log_tailbackup_20090521'

以上所做的备份均会在系统数据库msdb中的系统表backupset留下记录,可以用一下语句查看:

use msdb
go
select backup_set_id,media_set_id,position,name,type
from backupset

SQL的完整备份和还原

上图是我做测试时的结果,position显示文件的位置,还原时用得到,name就是备份的名称,type就是备份的类型,D表示数据库,I表示差异,L表示日志。

4、还原数据库test

还原的时候请注意,因为想将数据库的状态还原到备份尾日志之前的状态,所以还原的时候不要还原尾日志,不然会出错的,或者等于没有还原。

use master
go
restore database test #还原完整的数据库备份,文件位置1,显示指定norecovery允许进一步还原数据。
from myback1,myback2
with file=1,norecovery
go
restore database test #还原差异备份
from myback1,myback2
with file=2,norecovery
go
restore log test #还原日志,在尾日志之前有多少日志备份,都要还原。
from myback1,myback2
with file=3,recovery #recovery将数据库恢复到联机状态。
go

完整数据库备份+差异备份+日志备份是现实应用常用的,其备份策略一般如下:

(1)每周六晚上对数据库进行一次完整备份。

(2)每周三晚上对数据库进行差异备份。

(3)每隔30分钟进行一次事务日志备份。

可以使用“数据库维护计划向导”设计为自动执行这一备份策略。备份时应该保证备份有几份拷贝,并放于不同的位置,另外还应该测试一下备份的可用性,保证在还原的时候不出错。

posted @ 2011-08-09 09:46  Athrun  阅读(307)  评论(0编辑  收藏  举报