zoukankan      html  css  js  c++  java
  • [轉]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分钟进行一次事务日志备份。

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

  • 相关阅读:
    Qt快速入门学习笔记(基础篇)
    IDEA 创建文件夹总默认根节点问题解决
    SpringBoot 集成MyBatis 中的@MapperScan注解
    Springboot项目下mybatis报错:Invalid bound statement (not found)
    IDEA maven项目查自动查看依赖关系,解决包冲突问题
    Mybatis-generator/通用Mapper/Mybatis-Plus对比
    Mybatis
    在一个已经使用mybatis的项目里引入mybatis-plus,结果不能共存
    springboot整合图像数据库Neo4j
    Spring Boot:Boot2.0版本整合Neo4j
  • 原文地址:https://www.cnblogs.com/Athrun/p/2131757.html
Copyright © 2011-2022 走看看