mssql 数据库与日志的备份 与还原

本文详细介绍了如何使用SQLSERVER的BACKUP命令进行MSSQL数据库和日志的备份与还原。包括完整数据库备份、差异备份、文件及文件组备份的语法,以及各种类型的还原操作,如完整还原、部分还原、文件还原和页面还原等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用数据库的过程中,及时的进行数据库的备份工作是很有必要的。

笔者在维护数据库的过程中, 遇到几次意外的数据库丢失, 幸好有及时的备份, 才使用的applicatio没有受到较大的影响。

针对 MSSQL 2000, 我们有log explorer之类的工具,可以帮助备份与恢复数据库, 但是这个比较的耗资源。

本身SQLSERVER 还提供了一组命令BACKUP来进行同行的工作, 本文来描述一下这个命令的使用的语法。 更多的信息,请参考MSDN

一、 备份

对整个数据库进行备份 :

BACKUP DATABASE { database_name | @database_name_var } 
  TO <backup_device> [ ,...n ] 
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { DIFFERENTIAL | <general_WITH_options> [ ,...n ] } ]
[;]

对特定的文件或者是文件组进行备份

BACKUP DATABASE { database_name | @database_name_var } 
 <file_or_filegroup> [ ,...n ] 
  TO <backup_device> [ ,...n ] 
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { DIFFERENTIAL | <general_WITH_options> [ ,...n ] } ]
[;]

对事务日志进行备份

BACKUP LOG { database_name | @database_name_var } 
  TO <backup_device> [ ,...n ] 
  [ <MIRROR TO clause> ] [ next-mirror-to ]
  [ WITH { <general_WITH_options> | <log-specific_optionspec> } [ ,...n ] ]
[;]

下面就来对上面的具体的参数进行描述:

首先是备份的地方:backup_device, 可以是逻辑磁盘也可以是物理磁盘。

逻辑磁盘主要是针对做SAN或者是磁盘阵列的,可以映射到某个具体的物理磁盘,或者 直接就是物理磁盘。 

<backup_device>::= 
 {
   { logical_device_name | @logical_device_name_var } 
 | { DISK | TAPE } = 
     { 'physical_device_name' | @physical_device_name_var }
 } 

其次,当备份特定的文件或者是文件组的时候, 文件或者文件组就是当前数据库使用的文件或者文件组, 

<file_or_filegroup>::=
 {
   FILE = { logical_file_name | @logical_file_name_var } 
 | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
 } 


还有就是 WITH 选项

1) 通用的with选项

<general_WITH_options> [ ,...n ]::=--Backup Set Options
   COPY_ONLY 
 | { COMPRESSION | NO_COMPRESSION } 
 | DESCRIPTION = { 'text' | @text_variable } 
 | NAME = { backup_set_name | @backup_set_name_var } 
 | PASSWORD = { password | @password_variable } 
 | { EXPIREDATE = { 'date' | @date_var } 
        | RETAINDAYS = { days | @days_var } } 

COPY_ONLY: 指定备份为“仅复制备份”,该备份不影响正常的备份顺序. 用于执行特殊目的的备份,例如在进行联机文件还原前备份日志

{ COMPRESSION | NO_COMPRESSION }: 指定些备份是否压缩, 2008才有备份压缩。

NAME:  指定备份集的名称

{ EXPIREDATE = 'date'| RETAINDAYS = days }:指定允许覆盖该备份的备份集的日期。如果同时使用这两个选项,RETAINDAYS 的优先级别将高于 EXPIREDATE。

2) 介质选项

{ NOINIT | INIT }控制备份操作是追加到还是覆盖备份介质中的现有备份集。默认为追加到介质中最新的备份集

NOINIT:表示备份集将追加到指定的介质集上,以保留现有的备份集,此选项是默认的

INIT:

指定应覆盖所有备份集,但是保留介质标头。如果指定了 INIT,将覆盖该设备上所有现有的备份集(如果条件允许)。默认情况下,BACKUP 将检查下列条件,如果其中的任一条件存在,都不会覆盖备份介质:

  • 所有备份集都未过期。

  • 如果 BACKUP 语句给出了备份集名,则该备份集名与备份介质上的名称不匹配

{ NOFORMAT | FORMAT }

指定是否应该在用于此备份操作的卷上写入介质标头,以覆盖任何现有的介质标头和备份集。

NOFORMAT

指定备份操作在用于此备份操作的介质卷上保留现的有介质标头和备份集。这是默认行为。

FORMAT

指定创建新的介质集。FORMAT 将使备份操作在用于备份操作的所有介质卷上写入新的介质标头。卷的现有内容将变为无效,因为覆盖了任何现有的介质标头和备份集。

笔者使用的是每周一完整备份, 其余每天差异备份。

完整备份

差异备份:


对master, msdb 和model DB,要进行每天的备份



二、还原

还原使用 BACKUP 命令所做的备份。

  • 基于完整数据库备份还原整个数据库(完整还原)。

  • 还原数据库的一部分(部分还原)。

  • 将特定文件或文件组还原到数据库(文件还原)。

  • 将特定页面还原到数据库(页面还原)。

  • 将事务日志还原到数据库(事务日志还原)。

  • 将数据库恢复到数据库快照捕获的时间点。

1)  完整还原

RESTORE DATABASE { database_name | @database_name_var } 
 [ FROM <backup_device> [ ,...n ] ]
 [ WITH 
   {
    [ RECOVERY | NORECOVERY | STANDBY = 
        {standby_file_name | @standby_file_name_var } 
       ]
   | ,  <general_WITH_options> [ ,...n ]
   | , <replication_WITH_option>
   | , <change_data_capture_WITH_option>
   | , <service_broker_WITH options> 
   | , <point_in_time_WITH_options—RESTORE_DATABASE> 
   } [ ,...n ]
 ]
[;]

2) 还原特定的页面

RESTORE DATABASE { database_name | @database_name_var } 
   <file_or_filegroup> [ ,...n ]
 [ FROM <backup_device> [ ,...n ] ] 
   WITH 
   {
      [ RECOVERY | NORECOVERY ]
      [ , <general_WITH_options> [ ,...n ] ]
   } [ ,...n ] 
[;]

3)从snapshot还原

RESTORE DATABASE { database_name | @database_name_var } 
FROM DATABASE_SNAPSHOT = database_snapshot_name 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值