zoukankan      html  css  js  c++  java
  • SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

    一.完整备份、差异备份和事务日志备份的脚本

    --完整备份数据库

    BACKUP DATABASE Test_Bak TO DISK = 'E:20150609_75akTest_bak_full.bak' WITH INIT

    --差异备份数据库

    BACKUP DATABASE Test_Bak TO DISK = 'E:20150609_75akTest_bak_diff.bak' WITH INIT, DIFFERENTIAL   --加上DIFFERENTIAL代表差异备份

    --事务日志备份

    BACKUP LOG Test_Bak TO DISK = 'E:20150609_75akTest_bak_log.bak' WITH INIT   --BACKUP LOG表示备份事务日志,BACKUP DATABASE表示完整或差异备份

    --备份事务日志,文件名中包含当前时间,适合定时备份

    DECLARE @strbackup NVARCHAR(100)
     --改为日期加时间的
     SET @strbackup = 'E:20150609_75akTest_bak_log_'
         + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ',
                          ''), ':', '') + '.bak'
     BACKUP LOG Test_Bak TO DISK = @strbackup WITH INIT;
     GO

    二. 还原需要修改数据文件路径的多文件数据库(做过分区的)

    错误:

    wps9779.tmp

    上面错误的原因为:原来备份的数据文件在G盘下,还原完整备份时新服务器下不存在G盘这个路径就会报错。

    解决办法:可以使用WITH MOVE让数据文件保存到新的有效路径下,首先在磁盘下建立这个有效路径。

    正确的还原多文件备份的方法如下:

    方法1(脚本):

    还原完整备份:

    RESTORE DATABASE [DigitalLibDB] 
    FROM  DISK = N'E:20150609_75DigitalLibDB_20150609_FULL.bak'   --完整备份的路径
    WITH  MOVE 'DigitalLibDB_Data' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB.mdf',  
        MOVE 'UI0' TO 'C:Program FilesMicrosoft SQL   --重新指定文件的路径,取决文件数量ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_1.ndf',
        MOVE 'UI1' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_2.ndf',
        MOVE 'UI10' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_3.ndf',
        MOVE 'UI11' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_4.ndf',
        MOVE 'UI12' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_5.ndf',
        MOVE 'UI13' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_6.ndf',
        MOVE 'UI14' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_7.ndf',
        MOVE 'UI15' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_8.ndf',
        MOVE 'UI16' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_9.ndf',
        MOVE 'UI2' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_10.ndf',
        MOVE 'UI3' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_11.ndf',
        MOVE 'UI4' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_12.ndf',
        MOVE 'UI5' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_13.ndf',
        MOVE 'UI6' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_14.ndf',
        MOVE 'UI7' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_15.ndf',
        MOVE 'UI8' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_16.ndf',
        MOVE 'UI9' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_17.ndf',
        MOVE 'ftrow_RegInfo_UnitName' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_18.ndf',
        MOVE 'DigitalLibDB_Log' TO 'C:Program FilesMicrosoft SQL ServerMSSQL10_50.MSSQLSERVERMSSQLDATADigitalLibDB_Log.ldf',
    STATS = 10, REPLACE, 
    NORECOVERY
    GO

    WITH MOVE TO:重新指定文件的路径,WITH MOVE TO数量取决于数据库文件数量

    STATS = 10:没完成10%显示一条记录

    REPLACE:覆盖现有数据库

    NORECOVERY:不对数据库进行任何操作,不回滚未提交的事务

    完整备份结果:

    wps978A.tmp

    还原差异备份:(只有一个差异备份的情况,当还原多个差异备份时,通常前面的都用WITH NORECOVERY,还原最后一个差异备份才能用WITH RECOVERY)

    注:移动数据文件是完整备份时移动,差异备份和日志备份不保存文件路径,差异备份和日志备份还原时不能移动路径。

    RESTORE DATABASE [DigitalLibDB] FROM DISK='E:20150609_75新建文件夹DigitalLibDB_20150610_Diff.bak' WITH RECOVERY

    差异备份还原结果:

    wps979A.tmp

    方法2:(可视化界面操作)

    还原完整备份:

    选择还原数据库

    wps979B.tmp

    选择完整备份路径

    wps97AC.tmp

    选择覆盖现有数据库,选择RESTORE WITH NORECOVERY选项

    wps97BD.tmp

    还原完整备份成功

    wps97BE.tmp

    此时,差异备份还未完成,数据库还处于正在还原状态

    wps97BF.tmp

    还原差异备份,选择任务-还原-文件和文件组

    wps97C0.tmp

    wps97D0.tmp

    wps97D1.tmp

    wps97E2.tmp

    所以,此时还原这个差异备份还是应该使用脚本来完成,不用移动文件。

    RESTORE DATABASE [DigitalLibDB] FROM DISK='E:20150609_75新建文件夹DigitalLibDB_20150610_Diff.bak' WITH RECOVERY --还原差异备份

    三.不需要修改数据库文件路径的差异备份还原

    注意:

    对于不需要修改数据库文件路径的差异备份还原,使用sqlserver可视化界面还原是没问题的。

    wps97E3.tmp

    wps97F3.tmp

    wps97F4.tmp

    此处,还原差异备份成功,原因是备份时文件是C盘下这个目录,还原时还是还原到C盘这个目录,不需要修改路径。

    对于不需要修改数据库文件路径的数据库完整备份、差异备份和事务日志备份的还原过程如下(使用脚本):

    --还原顺序:完整备份--差异备份--日志备份

    --还原单文件数据库的完整备份,数据库文件路径一致,不用移动路径的情况

    RESTORE DATABASE [Test_Bak] 
    FROM  DISK = N'E:20150609_75localTest_Bak_full.bak' 
    WITH 
    STATS = 10, REPLACE, 
    NORECOVERY
    GO

    --还原差异备份

    RESTORE DATABASE [Test_Bak] 
    FROM  DISK = N'E:20150609_75localTest_Bak_diff.bak' 
    WITH   
    STATS = 10,
    NORECOVERY
    GO

    --还原日志备份

    RESTORE DATABASE [Test_Bak] 
    FROM  DISK = N'E:20150609_75localTest_Bak_Log.bak' 
    WITH   
    STATS = 10,
    RECOVERY

    希望对你们有所帮助,如果你觉得不错,请在右边推荐一下喔,欢迎拍砖~

  • 相关阅读:
    centos yum 安装nginx 后增加模块
    mysql 设置不了短串密码怎么办 You must reset your password using ALTER USER statement before executing this statement.
    Centos7 安装mysql后登录提示:Access denied for user 'root'@'localhost'
    mysql安装历程
    yum.rpm,repo源
    MySql-Server和MySql-Client的关系
    阿里云JKD镜像
    关于字符编码
    Dockerfile编写制作centos7.7+php5.6+nginx镜像
    PHP中常见日期、月份、时间戳列表(strtotime、date、mktime的用法)
  • 原文地址:https://www.cnblogs.com/suixinpeng/p/4572264.html
Copyright © 2011-2022 走看看