SQLSERVER数据库备份的三种策略及语句
1.全量数据备份
备份整个数据库,恢复时恢复所有。优点是简单,缺点是数据量太⼤,⾮常耗时
全数据库备份因为容易实施,被许多系统优先采⽤。在⼀天或⼀周中预定的时间进⾏全数据库备份使你不⽤动什么脑筋。使⽤这种类型的备份带来的问题是⾮常缺乏灵活性,⽽且当数据库被冲掉后,你⾯临丢失⼤量数据的潜在威胁。例如,假设你每天在午夜备份数据库。
如果服务器在晚上11点崩溃了,你将丢失前⾯23个⼩时对数据所做的全部修改。对⼤多数系统来说,这是⽆法接受的。对此规则,为数不多的例外如下:
1.系统中所存的数据可以很容易地再创建。这类服务器中⼀个很好的例⼦是报表服务器,其中所存的所有数据都由⼀个批处理过程装载的。如果这个数据库被冲掉了,你只需要再运⾏⼀次这个批处理过程,所有数据就可以恢复了。
2.不经常修改的数据库。⼀个例⼦是被收集存储在数据中⼼或数据仓库的历史数据。通常,查询这些数据以判断趋势,但是这些数据极少被修改。
3.⼀个遥远的站点,那⾥很少或没有数据库管理员⽀持。这种类型的站点常常依靠没受过⾜够培训的⼈来维持备份计划,并且他还从事其他⼯作。通常最好保证实施的备份计划⾮常简单,不必让那些⽤户监视和维护它。
4.系统中所存数据的重要性很低。⼀个很好的例⼦是开发⽤服务器。在这些类型的服务器上,开发者通常装载⼀些旧的或假定的数据来测试应⽤程序。这类数据库每天的备份是可接受的。
Sql语句:
BACKUP DATABASE [wxh] TO  DISK = N'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\wxh.bak' WITH NOFORMAT, NOINIT,  NAME = N'wxh-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
2.增量数据备份(Differential Backups)
所谓增量,就是以某个起始时间点的全量数据为基础,备份该时间点以后的数据。⽽起始时间点的全量数据,就是通过全量备份⽽为的。如果有⼈告诉你“每周⼀进⾏全量备份,每天进⾏⼀次增量备份。”,这就意味着,星期⼀作⼀次全量配份,形成⼀个起始时间点的全量数据;星期⼆备份星期⼀以来的数据;星期三也备份星期⼀以来的数据;.......星期天也备份星期⼀以来的数据。到第⼆周的星期
⼀时,⼜执⾏⼀次全量配份,再开始新的备份周期。
如果要恢复星期三的数据,则要先恢复星期⼀的全量数据,然后再恢复在星期⼀到星期三之间的增量数据。
增量备份是能⽤来帮助你实施备份计划的最新技术。这种备份,像事务⽇志备份⼀样,只备份你上次全数据库备份后所做的修改。与事务⽇志备份不⼀样的是这种备份不允许时间点恢复。它只允许你在实际所做的备份点上恢复。所以,这种备份通常要有事务⽇志备份作为补充。在下列情况下,增量备份⾮常有⽤:
1.你想通过联合使⽤全数据库备份、增量备份和事务⽇志备份最⼤程度地减少花费的时间。
2.数据库的⼤⼩使经常做全数据库备份很困难的情况。
3.⼀个遥远的站点,那⾥很少或没有数据库管理员⽀持。这种类型的站点常常依靠没受过⾜够培训的⼈来维持备份计划,⽽且他还经常从事其他⼯作。通常最好保证实施的备份计划⾮常简单,不必让那些⽤户监视和维护它。
4.系统中所存数据不是⾮常重要,所以所做的⼀些修改丢失后,不会导致灾难性的后果。对于这种类型的系统,⼿⼯重建数据⽐建⽴⼀个事务⽇志备份计划更容易。
Sql语句
BACKUP DATABASE [wxh] TO  DISK = N'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\wxh.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'wxh-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
3.⽇志备份
周⼀做⼀次全量数据备份,周⼆时备份周⼀⾄周⼆的⽇志,周三时配份周⼆⾄周三的⽇志......。
若要恢复周三的数据,则先恢复到周⼀的全量数据,再按周⼀⾄周⼆的⽇志、周⼆⾄周三的⽇志进⾏数据库操作
⼀个事务⽇志备份只备份事务⽇志中的信息。事务⽇志备份必须与⾄少⼀次全数据库备份联⽤,这是因为如果恢复数据,必须要有⼀个开始点。事务⽇志备份⽐全数据库备份少花费许多资源,经常执⾏也容易多了。这实际上有两个⽬的。⾸先是缩短了最后⼀次备份与服务器失败之间的时间间隔,因⽽
减少了数据损失。事务⽇志备份还允许你实施⼀种特殊类型的恢复,即时间点恢复。这种类型的恢复允许你恢复数据到⼀个特定的时间点,⽐如到⼀次实际失败发⽣前5分钟时。
当某⼈所做的⼤量的数据修改或删除要取消时,它显得特别有⽤。你只需简单地恢复数据库到这次动作发⽣的时间点前。事务⽇志恢复在下列情况时⾮常有⽤:
1.数据库被⾼频率地修改。在发⽣⼤量的数据库修改时,数据库备份可能很快就过时了,如果把事务⽇志备份和全数据库备份联系起来使⽤,这些修改你都能记录下来。
2.你想采取时间点恢复。像我前⾯提到的,时间点恢复是⾮常重要和有⽤的,你可以通过事务⽇志备份来实现。
3.不能接受丢失⼤量数据的情况。在这种情况下,你可以每天做⼀个全数据库备份,再每⼩时或更频繁地做事务⽇志备份。这将减少数据丢失量。
4.数据库的⼤⼩使得经常做全数据库备份很困难。例如,⾮常⼤的数据仓库很容易达到上万亿字节。这种情况下,你可以做⼀次全数据库备份,然后当数据修改时,再做⼀次事务⽇志备份。
Sql语句:
BACKUP LOG [wxh] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\wxh.bak' WITH NOFORMAT, NOINIT,  NAME = N'wxh-Transaction Log  Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
4.增量数据备份与⽇志备份相结合
sql语句:
备份整个数据库:
BACKUP DATABASE { database_name | @database_name_var }
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]    [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份特定的⽂件或⽂件组:
BACKUP DATABASE { database_name | @database_name_var }
< file_or_filegroup > [ ,...n ]
TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] DIFFERENTIAL ]
[ [ , ] EXPIREDATE = { date | @date_var }
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]    [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]
备份⼀个事务⽇志:
BACKUP LOG { database_name | @database_name_var }
{    TO < backup_device > [ ,...n ]
[ WITH
[ BLOCKSIZE = { blocksize | @blocksize_variable } ]
[ [ , ] DESCRIPTION = { 'text' | @text_variable } ]
[ [ ,] EXPIREDATE = { date | @date_var }
百度数据恢复
| RETAINDAYS = { days | @days_var } ]
[ [ , ] PASSWORD = { password | @password_variable } ]
[ [ , ] FORMAT | NOFORMAT ]
[ [ , ] { INIT | NOINIT } ]
[ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ]
[ [ , ] MEDIANAME = { media_name | @media_name_variable } ]
[ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ]        [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ]
[ [ , ] NO_TRUNCATE ]
[ [ , ] { NORECOVERY | STANDBY = undo_file_name } ]
[ [ , ] { NOREWIND | REWIND } ]
[ [ , ] { NOSKIP | SKIP } ]
[ [ , ] { NOUNLOAD | UNLOAD } ]
[ [ , ] RESTART ]
[ [ , ] STATS [ = percentage ] ]
]  }
< backup_device > ::=
{
{ logical_backup_device_name | @logical_backup_device_name_var }
|
{ DISK | TAPE } =
{ 'physical_backup_device_name' | @physical_backup_device_name_var }    }  < file_or_filegroup > ::=
{
FILE = { logical_file_name | @logical_file_name_var }
|
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
}
截断事务⽇志:
BACKUP LOG { database_name | @database_name_var }
{    [ WITH
{ NO_LOG | TRUNCATE_ONLY } ]  }
参数
DATABASE 指定⼀个完整的数据库备份。假如指定了⼀个⽂件和⽂件组的列表,那么仅有这些被指定的⽂件和⽂件组被备份。
说明在进⾏完整数据库备份或差异数据库备份时,Microsoft® SQL Server™ 备份⾜够的事务⽇志,以⽣成⼀个将在还原数据库时使⽤的⼀致的数据库。在 master 数据库上只能采⽤完整数据库备份。
{ database_name | @database_name_var } 指定了⼀个数据库,从该数据库中对事务⽇志、部分数据库或完整的数据库进⾏备份。如果作为变量 (@database_name_var) 提供,则可将该名称指定为字符串常量 (@database_name_var = database name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
< backup_device > 指定备份操作时要使⽤的逻辑或物理备份设备。可以是下列⼀种或多种形式:
{ logical_backup_device_name } | { @logical_backup_device_name_var }  是由 sp_addumpdevice 创建的备份设备的逻辑名称,数据库将备份到该设备中,其名称必须遵守标识符规则。如果将其作为变量 (@logical_backup_device_name_var) 提供,则可将该备份设备名称指定为字符串常量 (@logical_backup_device_name_var = logical backup device name) 或字符串数据类型(ntext 或 text 数据类型除外)的变量。
{ DISK | TAPE } =  'physical_backup_device_name' | @physical_backup_device_name_var  允许在指定的磁盘或磁带设备上创建备份。在执⾏ BACKUP 语句之前不必存在指定的物理设备。如果存在物理设备且 BACKUP 语句中没有指定 INIT 选项,则备份将追加到该设备。
当指定 TO DISK 或 TO TAPE 时,请输⼊完整路径和⽂件名。例如,DISK = 'C:\Program Files\Microsoft SQL
Server\MSSQL\BACKUP\Mybackup.dat' 或 TAPE = '\\.\TAPE0'。
说明对于备份到磁盘的情况,如果输⼊⼀个相对路径名,备份⽂件将存储到默认的备份⽬录中。该⽬录在安装时被设置并且存储在
KEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer ⽬录下的 BackupDirectory 注册表键值中。
如果使⽤的是具有统⼀命名规则 (UNC) 名称的⽹络服务器或已重新定向的驱动器号,则请指定磁盘的设备类型。
当指定多个⽂件时,可以混合逻辑⽂件名(或变量)和物理⽂件名(或变量)。但是,所有的设备都必须为同⼀类型(磁盘、磁带或管道)。
Windows 98 不⽀持备份到磁盘。
n 是表⽰可以指定多个备份设备的占位符。备份设备数⽬的上限为 64。
BLOCKSIZE = { blocksize | @blocksize_variable } ⽤字节数来指定物理块的⼤⼩。在 Windows NT 系统上,默认设置是设备的默认块⼤⼩。⼀般情况下,当 SQL Server 选择适合于设备的块⼤⼩时不需要此参数。在基于 Windows 2000 的计算机上,默认设置是 65,536(64 KB,是 SQL Server ⽀持的最⼤⼤⼩)。
对于磁盘,BACKUP ⾃动决定磁盘设备合适的块⼤⼩。
说明如果要将结果备份集存储到 CD-ROM 中然后从 CD-ROM 中恢复,请将 BLOCKSIZE 设为 2048。磁带的默认 BLOCKSIZE 为 65,536 (64 KB)。显式声明块⼤⼩将替代 SQL Server 选择的块⼤⼩。
DESCRIPTION = { 'text' | @text_variable } 指定描述备份集的⾃由格式⽂本。该字符串最长可以有 255 个字符。
DIFFERENTIAL 指定数据库备份或⽂件备份应该与上⼀次完整备份后改变的数据库或⽂件部分保持⼀致。差异备份⼀般会⽐完整备份占⽤更少的空间。对于上⼀次完整备份时备份的全部单个⽇志,使⽤该选项可以不必再进⾏备份。有关更多信息,请参见差异数据库备份和⽂件差异备份。
说明在进⾏完整数据库备份或差异备份时,SQL Server 备份⾜够的事务⽇志,从⽽在恢复数据库时⽣成⼀个⼀致的数据库。
EXPIREDATE = { date | @date_var } 指定备份集到期和允许被重写的⽇期。如果将该⽇期作为变量 (@date_var) 提供,则可以将该⽇期指定为字符串常量 (@date_var = date)、字符串数据类型变量(ntext 或 text 数据类型除外)、smalldatetime 或者 datetime 变量,并且该⽇期必须符合已配置的系统 datetime 格式。
RETAINDAYS = { days | @days_var }  指定必须经过多少天才可以重写该备份媒体集。假如⽤变量 (@days_var) 指定,该变量必须为整型。
重要假如 EXPIREDATE 或 RETAINDAYS 没有指定,有效期将取决于 sp_configure 的 media retention 配置设置。这些选项仅仅阻⽌SQL Server 重写⽂件。⽤其它⽅法可擦除磁带,⽽通过操作系统可以删除磁盘⽂件。有关过期验证的更多信息,请参见本主题的 SKIP 和FORMAT。
PASSWORD = { password | @password_variable } 为备份集设置密码。 PASSWORD 是⼀个字符串。如果为备份集定义了密码,必须提供这个密码才能对该备份集执⾏任何还原操作。
重要备份集密码防⽌未经授权即通过 SQL Server 2000 ⼯具访问备份集的内容,但是不能防⽌重写备份集。
有关使⽤密码的更多信息,请参见"权限"部分。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。