SQL -- 备份及恢复




为了最大限度地降低灾难性数据丢失的风险,需要定期备份数据库以保留对数据所做的修改。

一、备份

1-1 概述

什么是备份

备份是指数据库管理员定期或不定期地将数据库部分或全部内容复制到磁带或磁盘上进行保存的过程。

为什么用备份

当遇到介质故障、用户错误(例如:误删库或表)、硬件故障(例如,磁盘驱动器损坏或服务器报废)、自然灾害等造成灾难性数据丢失时,可以利用备份进行数据库的恢复。备份数据库是可靠保护 SQL 数据库的唯一方法。

1-2 类型

备份的四种类型
(1). 完整备份

  • 完整备份指备份数据库中所有数据,包括事务日志。
  • 完整备份与差异备份与事务日志备份相比,完整备份占用的存储空间多,备份时间长。所以完整数据库备份的创建频率通常比差异备份或事务日志备份低。
  • 完整备份适用于备份容量小或数据库中数据的修改较小的数据库。
  • 完整备份是差异备份和事务日志备份的基准。

(2)差异备份

  • 差异备份是完整备份的补充,只备份上次完整备份之后更改的数据。常用的数据库备份方式。
  • 差异备份相对与完整备份,差异备份的数据量较少、速度较快。
  • 差异备份适用于修改频繁的数据库。
  • 数据库还原最后一次差异备份的数据,先让数据库还原前一次的完整备份,再还原最后一次差异备份。

(3) 事务日志备份

  • 事务日志备份事务日志里的内容。事务日志记录了上一次完整备份、差异备份或事务日志备份后数据库的所有变动过程。
  • 每个事务日志备份都包括创建备份时处于活动状态的部分事务日志,以有先前事务日志备份中未备份的所有日志记录。
  • 使用事务日志备份将数据库恢复到特定的即时点或恢复到故障。
  • 事务备份生成的文件较小、占用时间较短、创建频率较频繁。

(4)文件和文件组备份

  • 创建数据库时,创建了多个文件或文件组,可以使用该备份方式。
  • 使用文件或文件组备份只备份数据库中的某些文件,当数据库文件非常庞大时,只备份一个或几个文件或文件组,可以分多次备份数据库,避免备份时间过长。
  • 当数据库中某个或某些文件损坏,只恢复损坏的文件或文件组备份即可。

二、恢复

1-1 概述

什么是恢复

恢复模式用于控制数据库备份和还原的基本行为。

1-2 类型

恢复的三种类型
(1). 简单恢复模式

  • 简单恢复模式,数据库会自动把不活动的日志删除,因此减少事务的管理开销,在此模式下不能进行事务日志备份,因此,使用简单恢复模式只能将数据库恢复到最后一次备份时的状态,不能恢复到故障点或特定的即时点。
  • 此模式只用于对数据库数据安全要求不高的数据库,并且在该模式下,数据库只能做完整和差异备份。

(2)完整恢复模式

  • 默认恢复模式。完整记录下操作数据库的每一个步骤。
  • 完整恢复模式可以将数据库恢复到一个特定的时间点,这个时间可以是最近一次可用的备份、一个特定的日期和时间或者是标记的事务。

(3) 大容量日志恢复模式

  • 对大容量操作进行最小日志记录,以节省日志文件的空间
  • 一般只有在需要大量数据操作时才将恢复模式设置为大容量日志恢复模式,数据处理完毕之后,马上将恢复模式改回完整恢复模式。

三、 T-SQL语句

1-1 备份设备

1-1-1 创建备份设备

基本语法格式

sp_addumpdevice{'device_type'}
[,'logical_name'][,'physical_name'][,{{controller_type | 'device_status'}}]
  • device_type:设备类型
  • logical_name:设备的逻辑名称
  • physical_name:设备的实际名称

举例:
要求:创建一个名为 jxgldisk 的磁盘备份设备,其物理名称为 “e:\jxgltdisk ”.

T-SQL代码如下:

EXEC sp_addumpdevice 'disk','jxgldisk','e:\jxgldisk.bak'

1-1-2 删除备份设备

基本语法格式

sp_dropdevice[,'logical_name'][,'']
  • device_type:设备类型
  • delfile:是否删除物理备份文件,如果指定 delfile,则删除物理备份文件。

举例:
要求:使用存储过程 sp_dropdevice 删除名称为 jxgldisk 的备份设备,同时删除物理文件。

T-SQL代码如下:

exec sp_dropdevice jxgldisk,delfile

1-2 备份数据库

1-1-1 完整备份

基本语法格式

BACKUP DATEBASE database_name
TO<backup_device>[  n]
WITH
 [[,]NAME=backup_set_name]
 [[,]DESCRIPITION='TEXT']
 [[,]{INIT|NOINIT}]
 [[,]{COMPRESSION|NO_COMRESSION}
 ]
  • database_name:数据库名字
  • backup_device:备份的目标设备
  • WITH:指定备份选项。如果省略则为完整备份
  • NAME:指定设备名称
  • DESCRIPITION:指定设备的描述
  • INIT|NOINIT:表示覆盖|追加方式
  • COMPRESSION|NO_COMRESSION:表示启用|不启用备份压缩功能

举例:
要求:把“StuInfo”数据库完整备份到 jxgldisk 的上。

T-SQL代码如下:

BACKUP DATEBASE StuInfo to jxgldisk 

1-1-2 差异备份

基本语法格式

BACKUP DATEBASE database_name
TO<backup_device>[  n]
WITH
 DIFFERENTIAL
 [[,]NAME=backup_set_name]
 [[,]DESCRIPITION='TEXT']
 [[,]{INIT|NOINIT}]
 [[,]{COMPRESSION|NO_COMRESSION}
 ]
  • DIFFERENTIAL:指定差异备份
  • 其他参数与完整备份一致。

举例:
要求:把“StuInfo”数据库的差异备份到 jxgldisk 的上。

T-SQL代码如下:

BACKUP DATEBASE StuInfo to jxgldisk 
WITH DIFFERENTIAL

1-1-3 事务日志备份

基本语法格式

BACKUP LOG database_name
TO<backup_device>[  n]
WITH
 [[,]NAME=backup_set_name]
 [[,]DESCRIPITION='TEXT']
 [[,]{INIT|NOINIT}]
 [[,]{COMPRESSION|NO_COMRESSION}
 ]
  • LOG:备份事务日期。必须创建完整备份,才能创建第一个事务日志备份。
  • 其他参数与完整备份一致。

举例:
要求:把“StuInfo”数据库的日志备份到 jxgldisk 的上。

T-SQL代码如下:

BACKUP LOG StuInfo to jxgldisk 

1-3 还原数据库

1-1-1 完整备份还原

基本语法格式

RESTOE DATEBASE database_name
FROM<backup_device>[  n]
WITH
[FILE=file_number]
,[[,]MOVE 'logical_file_name'TO
'operating_system_file_name']
[,....n]
[[,]{RECOVERY|NORECOVERY|STANDBY=
{standby_file_name}}]
[[,]REPLACE]
 ]

其中

<backup_device>::=
{
 {logical_backup_device_name}
 |
 {DISK|TYPE}={'physical_backup_device_name'}
}

举例:
要求:把“StuInfo”数据库完整备份还原。

T-SQL代码如下:

RESTORE DATEBASE StuInfo FROM jxgldisk 
WITH FILE=1,norecovery

1-1-2 差异备份还原

差异备份还原与完整备份还原的语法基本一致,必须先还原完整备份,才能进行差异备份还原
T-SQL代码如下:

-- 先完整还原
RESTORE DATEBASE StuInfo FROM jxgldisk 
WITH FILE=1,norecovery

-- 再差异还原
RESTORE DATEBASE StuInfo FROM jxgldisk 
WITH FILE=2,norecovery

举例:
要求:把“StuInfo”数据库完整备份还原。

T-SQL代码如下:

RESTORE DATEBASE StuInfo FROM jxgldisk 
WITH FILE=1,norecovery

1-1-3 事务日志备份还原

基本语法格式

RESTOE LOG database_name
FROM<backup_device>[  n]
WITH
[FILE=file_number]
,[[,]MOVE 'logical_file_name'TO
'operating_system_file_name']
[,....n]
[[,]{RECOVERY|NORECOVERY|STANDBY=
{standby_file_name}}]
[[,]REPLACE]
 ]

其中

<backup_device>::=
{
 {logical_backup_device_name}
 |
 {DISK|TYPE}={'physical_backup_device_name'}
}
<file_or_filegroup>::=
{FILE=logical_file_name|FILEGROUP=logical_filegroup_name}

举例:
要求:把“StuInfo”数据库事务日志还原。

T-SQL代码如下:

RESTORE LOG StuInfo FROM jxgldisk 
WITH FILE=3,recovery
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库备份恢复的代码可以根据不同的数据库管理系统而异。下面给出几种常见数据库备份恢复代码示例: 1. MySQL数据库 备份MySQL数据库代码: ``` mysqldump -h hostname -u username -p dbname > backup.sql ``` 其中,hostname是主机名,username是用户名,dbname是要备份数据库名,backup.sql备份文件名。执行该命令后,会将数据库备份到backup.sql文件中。 恢复MySQL数据库代码: ``` mysql -h hostname -u username -p dbname < backup.sql ``` 其中,hostname是主机名,username是用户名,dbname是要恢复数据库名,backup.sql备份文件名。执行该命令后,会将backup.sql文件中的数据库内容恢复到dbname数据库中。 2. PostgreSQL数据库 备份PostgreSQL数据库代码: ``` pg_dump -h hostname -U username -F c -b -v -f backup.dump dbname ``` 其中,hostname是主机名,username是用户名,dbname是要备份数据库名,backup.dump是备份文件名。执行该命令后,会将数据库备份到backup.dump文件中。 恢复PostgreSQL数据库代码: ``` pg_restore -h hostname -U username -d dbname backup.dump ``` 其中,hostname是主机名,username是用户名,dbname是要恢复数据库名,backup.dump是备份文件名。执行该命令后,会将backup.dump文件中的数据库内容恢复到dbname数据库中。 3. SQL Server数据库 备份SQL Server数据库代码: ``` BACKUP DATABASE dbname TO DISK='backup.bak' ``` 其中,dbname是要备份数据库名,backup.bak是备份文件名。执行该命令后,会将数据库备份到backup.bak文件中。 恢复SQL Server数据库代码: ``` RESTORE DATABASE dbname FROM DISK='backup.bak' ``` 其中,dbname是要恢复数据库名,backup.bak是备份文件名。执行该命令后,会将backup.bak文件中的数据库内容恢复到dbname数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值