zoukankan      html  css  js  c++  java
  • 用TSQL语言还原数据库

    用T-SQL语言还原数据库

    T-SQL语言里提供了RESTORE DATABASE语句来恢复数据库备份,用该语句可以恢复完整备份、差异备份、文件和文件组备份。如果要还原事务日志备份则还可以用RESTORE LOG语句。虽然RESTORE DATABASE语句可以恢复完整备份、差异备份、文件和文件组备份,但是在恢复完整备份、差异备份与文件和文件组备份的语法上有一点点出入,下面分别介绍几种类型备份的还原方法。

    18.6.1  还原完整备份

    还原完整备份的语法如下:

    RESTORE DATABASE { database_name | @database_name_var }                  --数据库名

    [ FROM <backup_device> [ ,...n ] ]                                                --备份设备

    [ WITH

       [ { CHECKSUM | NO_CHECKSUM } ]                                        --是否校检和

       [ [ , ] { CONTINUE_AFTER_ERROR | STOP_ON_ERROR } ]             --还原失败是否继续

       [ [ , ] ENABLE_BROKER ]                                           --启动Service Broker

       [ [ , ] ERROR_BROKER_CONVERSATIONS ]                              --对束所有会话

       [ [ , ] FILE = { backup_set_file_number | @backup_set_file_number } ]        --用于还原的文件

       [ [ , ] KEEP_REPLICATION ]                            --将复制设置为与日志传送一同使用

       [ [ , ] MEDIANAME = { media_name | @media_name_variable } ]                    --媒体名

       [ [ , ] MEDIAPASSWORD = { mediapassword |                                  --媒体密码

                        @mediapassword_variable } ]

       [ [ , ] MOVE 'logical_file_name_in_backup' TO 'operating_system_file_name' ]     --数据还原为

                    [ ,...n ]

       [ [ , ] NEW_BROKER ]                                  --创建新的service_broker_guid值

       [ [ , ] PASSWORD = { password | @password_variable } ]                     --备份集的密码

       [ [ , ] { RECOVERY | NORECOVERY | STANDBY =                              --恢复模式

              {standby_file_name | @standby_file_name_var }

       } ]

       [ [ , ] REPLACE ]                                                      --覆盖现有数据库

       [ [ , ] RESTART ]                                            --重新启动被中断的还原操作

       [ [ , ] RESTRICTED_USER ]                                      --限制访问还原的数据库

       [ [ , ] { REWIND | NOREWIND } ]                                    --是否释放和重绕磁带

       [ [ , ] { UNLOAD | NOUNLOAD } ]                                    --是否重绕并卸载磁带

       [ [ , ] STATS [ = percentage ] ]                       --还原到其在指定的日期和时间时的状态

       [ [ , ] { STOPAT = { date_time | @date_time_var }                  --还原到指定的日期和时间

        |  STOPATMARK = { 'mark_name' | 'lsn:lsn_number' }    --恢复为已标记的事务或日志序列号

                  [ AFTER datetime ]

        |  STOPBEFOREMARK = { 'mark_name' | 'lsn:lsn_number' }

                 [ AFTER datetime ]

       } ]

    ]

    [;]

    <backup_device> ::=

    {

       { logical_backup_device_name |

                @logical_backup_device_name_var }

       | { DISK | TAPE } = { 'physical_backup_device_name' |

                  @physical_backup_device_name_var }

    }

    其中大多参数在备份数据时已经介绍过了,下面介绍一些没有介绍过的参数:

    l  ENABLE_BROKER:启动Service Broker以便消息可以立即发送。

    l  ERROR_BROKER_CONVERSATIONS:发生错误时结束所有会话,并产生一个错误指出数据库已附加或还原。此时Service Broke将一直处于禁用状态直到此操作完成,然后再将其启用。

    l  KEEP_REPLICATION:将复制设置为与日志传送一同使用。设置该参数后,在备用服务器上还原数据库时,可防止删除复制设置。该参数不能与NORECOVERY参数同时使用。

    l  MOVE:将逻辑名指定的数据文件或日志文件还原到所指定的位置,相当于图18.14中所示的【将数据库文件还原为】功能。

    l  NEW_BROKER:使用该参数在会在databases数据库和还原数据库中都创建一个新的service_broker_guid值,并通过清除结束所有会话端点。Service Broker已启用,但未向远程会话端点发送消息。

    l  RECOVERY:回滚未提交的事务,使数据库处于可以使用状态。无法还原其他事务日志

    l  NORECOVERY:不对数据库执行任何操作,不回滚未提交的事务。可以还原其他事务日志。

    l  STANDBY:使数据库处于只读模式。撤消未提交的事务,但将撤消操作保存在备用文件中,以便可以恢复效果逆转。

    l  standby_file_name | @standby_file_name_var:指定一个允许撤消恢复效果的备用文件或变量。

    l  REPLACE:会覆盖所有现有数据库以及相关文件,包括已存在的同名的其他数据库或文件。

    l  RESTART:指定SQL Serve 应重新启动被中断的还原操作。RESTAR从中断点重新启动还原操作。

    l  RESTRICTED_USER:还原后的数据库仅供db_owner、dbcreator或sysadmin的成员才能使用。

    l  STOPAT:将数据库还原到其在指定的日期和时间时的状态。

    l  STOPATMARK:恢复为已标记的事务或日志序列号。恢复中包括带有已命名标记或 LSN 的事务,仅当该事务最初于实际生成事务时已获得提交,才可进行本次提交。

    l  TOPBEFOREMARK:恢复为已标记的事务或日志序列号。恢复中不包括带有已命名标记或LSN的事务,在使用WITH RECOVERY时,事务将回滚。

    例十二、用名为“Northwind备份”的备份设备来还原Northwind数据库,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

    在本例中,没有使用指定备份设备里的哪一个备份集来还原数据库备份,那么默认使用备份设备里的第一个备份集还原数据库。如果要指定用哪个备份集来还原数据库,则要使用file参数指定。

    例十三、用名为“Northwind备份”的备份设备的第六个备份集来还原Northwind数据库,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 6

    例十四、用名为“backup.bak”的备份文件来还原Northwind数据库,其代码如下:

    USE master

    RESTORE DATABASE Northwind

    FROM DISK='D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\

    Backup\backup.bak'

    18.6.2  还原差异备份

    还原差异备份的语法与还原完整备份的语法是一样的,只是在还原差异备份时,必须要先还原完整备份再还原差异备份,因此还原差异备份必须要分为两步完成。完整备份与差异备份数据在同一个备份文件或备份设备中,也有可能是在不同的备份文件或备份设备中。如果在同一个备份文件或备份设备中,则必须要用file参数来指定备份集。无论是备份集是不是在同一个备份文件(备份设备)中,除了最后一个还原操作,其他所有还原操作都必须要加上NORECOVERY或STANDBY参数。

    例十五、用名为“Northwind备份”的备份设备的第一个备份集来还原Northwind数据库的完整备份,再用第三个备份集来还原差异备份,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 1,NORECOVERY

    GO

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 3

    GO

    如果单独还原差异备份或在本例中完整备份代码里没有加上NORECOVERY参数,都会出现如图18.16所示的无法还原差异备份信息。

    图18.16 无法还原差异备份

    18.6.3  还原事务日志备份

    SQL Server 2005中已经将事务日志备份看成和完整备份、差异备份一样的备份集,因此,还原事务日志备份也可以和还原差异备份一样,只要知道它在备份文件或备份设备里是第几个文件集即可。

    与还原差异备份相同,还原事务日志备份必须要先还原在其之前的完整备份,除了最后一个还原操作,其他所有还原操作都必须要加上NORECOVERY或STANDBY参数。

    例十六、用名为“Northwind备份”的备份设备的第一个备份集来还原Northwind数据库的完整备份,再用第二个备份集来还原事务日志备份,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 1,NORECOVERY

    GO

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 2

    GO

    使用RESTORE LOG语句也可以用来还原事务日志备份,例十六的代码也可以改为以下代码:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 1,NORECOVERY

    GO

    RESTORE LOG Northwind

             FROM Northwind备份

             WITH FILE = 2

    GO

    18.6.4  还原文件和文件组备份

    还原文件和文件组备份也可以使用RESTORE DATABASE语句,但是必须要在数据库名与FROM之间加上“FILE”或“FILEGROUP”参数来指定要还原的文件或文件组。通常来说,在还原文件和文件组备份之后,还要再还原其他备份来获得最近的数据库状态。

    例十七、用名为“Northwind备份”的备份设备的还原文件和文件组,再用第十五个备份集来还原事务日志备份,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FILEGROUP = 'PRIMARY'

             FROM Northwind备份

    GO

    RESTORE LOG Northwind

             FROM Northwind备份

             WITH FILE = 15

    GO

    18.6.5  将数据库还原到某个时间点

    有关“时间点”在上面章节里提到过一点点,下面举例详细地介绍怎么将数据库还原到某个时间点。

    假设一个数据库,在上午8点做过一次完整备份、10点做过一次事务日志备份,现在发现在9点15分时的一次数据更新是错误的,那么能不能将数据恢复到9点14分时的数据库状态,还是只能恢复到10点所做的事务日志备份时的状态呢?

    事务日志的作用就是记录每一次数据的修改记录,所以从理论上来说,是可以恢复到任何一次操作之前的状态。9点15分时的数据是错误的,那就将其恢复到9点14分的数据吧。

    例十八、用名为“Northwind备份”的备份设备的第17个备份集来还原Northwind数据库的完整备份,再用第18个事务日志备份集来将数据库还原到9点14分,其代码如下:

    USE master

    RESTORE DATABASE Northwind

             FROM Northwind备份

             WITH FILE = 17,NORECOVERY

    GO

    RESTORE LOG Northwind

             FROM Northwind备份

             WITH FILE = 18,STOPAT = '2006-9-21 9:14:00'

    GO

    技巧:在SQL Server Management Studio里也可以完成同样的操作,只要将图18.12所示对话框里设置好【目标时间点】即可。

    18.6.6  将文件还原到新位置上

    使用RESTORE DATABASE语句也可以利用备份文件创建一个新的数据库。

    例十九、用名为“Northwind备份”的备份设备的第17个备份集来创建一个名为“Northwind_test”的新数据库,其代码如下:

    USE master

    RESTORE DATABASE Northwind_test

             FROM Northwind备份

             WITH FILE = 17,

             MOVE 'Northwind_Data' TO 'D:\Northwind_Data.MDF',

             MOVE 'Northwind_Log' TO 'D:\Northwind_Log.LDF',

             MOVE 'Northwind自定义数据文件' TO 'D:\Northwind自定义数据文件.NDF',

             MOVE 'Northwind自定义日志文件' TO 'D:\Northwind自定义日志文件.LDF'

    GO

    说明:

    在使用RESTORE DATABASE还原数据库时多次用到了file参数来指定备份集,那么如何查看这个备份集的编号呢?在“查看备份设备的内容”小节里曾经介绍过怎么查看备份设备里的备份集,如图18.9中所表示格的“Postition”列里显示的就是file参数所指定的数字。

  • 相关阅读:
    [Swift实际操作]七、常见概念-(5)使用NSString对字符串进行各种操作
    [Swift]LeetCode326. 3的幂 | Power of Three
    [Swift]LeetCode303. 区域和检索
    [Swift]LeetCode292. Nim游戏 | Nim Game
    [Swift]LeetCode290. 单词模式 | Word Pattern
    SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver
    一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
    一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
    百度Echarts-免费的商业产品图表库
    百度Echarts-免费的商业产品图表库
  • 原文地址:https://www.cnblogs.com/goody9807/p/1040847.html
Copyright © 2011-2022 走看看