首页 > 数据库 >14.4 SQL Server完整备份

14.4 SQL Server完整备份

时间:2023-01-30 11:13:45浏览次数:42  
标签:14.4 DATABASE HR 备份 Server 完整 SQL 备份文件 数据库

SQL Server完整备份

目录

简介

完整数据库备份备份整个数据库。包括:

  • 数据库的元数据,如名称、创建日期、数据库选项、文件路径等。
  • 每个数据文件的已用数据页。

此外,完整备份还包括事务日志的一部分。它表示备份完成时的数据库。

执行完全备份时,SQL Server会使用大量磁盘I/O。因此,应该在工作负载较低的时候执行完全备份,例如在晚上。

实际上,将使用完整备份作为更高级备份策略的基准。例如,可以将完整备份与事务日志备份相结合。

注意,必须至少执行一次完整备份,才能执行其他备份类型,如差异备份和事务日志备份。

下图说明了两个完整备份:

在这张图中,第一个完整备份包含id 1,第二个完整备份包括id 1、2和3。

使用T-SQL创建数据库的完整备份

语法:

BACKUP DATABASE database_name
TO DISK = path_to_backup_file
WITH options;
  • database_name是要备份的数据库的名称。数据库必须存在并在服务器上正常工作。
  • path_to_backup_file是备份文件的路径。按照惯例,备份的扩展是bak。如果将备份文件存储在文件夹中,则该文件夹必须存在,因为该语句不会隐式为您创建文件夹。
  • options指定备份的一个或多个选项。

INIT vs NOINIT

INIT选项附加到文件上的现有备份,而NOINIT选项则附加到最近的备份。如果未指定INITNOINIT,则NOINIT是默认选项。

NAME

NAME指定备份的名称。默认情况下,备份的名称为空。

除了INITNOINITNAME选项之外,BACKUP DATABASE语句还有其他选项,将在下文介绍。

示例

首先,用一个名为People的表创建HR数据库,并在其中插入四行:

-- drop the HR database
USE master;
DROP DATABASE IF EXISTS HR;

-- create the HR database
CREATE DATABASE HR;
GO

-- create the People table
USE HR;

CREATE TABLE People (
  Id int IDENTITY PRIMARY KEY,
  FirstName varchar(50) NOT NULL,
  LastName varchar(50) NOT NULL
);


INSERT INTO People (FirstName, LastName)
  VALUES ('John', 'Doe'),
  ('Jane', 'Doe'),
  ('Upton', 'Luis'),
  ('Dach', 'Keon');

SELECT * FROM People;

然后,使用BACKUP DATABASE语句将HR数据库备份到D:\backup\目录中的hr.bak文件:

BACKUP DATABASE HR 
TO  DISK = 'D:\backup\hr.bak'
WITH INIT,
NAME = 'HR-Full Database Backup';

执行过后就能在D:\backup\目录中看到hr.bak文件

然后,使用RESTORE HEADERONLY从备份文件中读取:

RESTORE HEADERONLY   
FROM DISK ='D:\backup\hr.bak';

输出有很多信息,重要的是:

  • 备份名称
  • 备份类型(1是完全备份)
  • 位置(Position):1
  • 数据库:HR
  • 备份大小
  • 备份开始日期
  • 备份完成日期

在一个文件中执行多个完整备份

SQL Server允许在一个备份文件中存储多个备份。为此,需要在WITH子句中使用NOINIT选项。例如:

首先,在人员表中插入新行:

INSERT INTO People (FirstName, LastName)
VALUES ('Bob', 'Climo');

然后,对同一备份文件执行第二次完整备份:

BACKUP DATABASE HR 
TO  DISK = 'D:\backup\hr.bak'
WITH NOINIT,
NAME = 'HR-Full Database Backup';

第三,检查备份文件:

备份文件有两个完整备份。位置列(Position)中的值指定备份的顺序。值1表示第一次完全备份,而值2表示第二次完全备份。

在第一次备份中,People表有四行,而在第二次备份中People表格有五行。

从完整备份还原数据库

要还原数据库,使用RESTORE DATABASE语句,语法:

RESTORE DATABASE database_name
FROM DISK = path_to_backup_file
WITH options;
  • database_name:数据库名
  • path_to_backup_file:备份文件路径
  • options:用于恢复数据库的一个或多个选项。

从第一次完整备份恢复

首先,切换到主数据库并删除HR数据库:

USE master;

DROP DATABASE HR;

然后,从第一次完整备份中恢复HR数据库:

RESTORE DATABASE HR
FROM  DISK = N'D:\backup\hr.bak'
WITH FILE = 1;

在本例中,从备份文件D:\backup\hr.bak中恢复HR数据库。WITH FILE子句中的值1指示SQL Server还原第一个完整备份。它对应于备份文件的位置列(Position)。

切换到人力资源(HR)数据库并从人员表中选择数据来验证一下:

USE hr;
SELECT * FROM People;

查询按预期返回四行。

从第二次完全备份恢复

首先,切换到主数据库并删除HR数据库:

USE master;
DROP DATABASE HR;

然后,从第二次完整备份中恢复HR数据库:

RESTORE DATABASE HR
FROM  DISK = N'D:\backup\hr.bak'
WITH FILE = 2;

WITH FILE子句中的值2指示SQL Server从备份文件还原第二个备份。

最后,切换到人力资源数据库并从人员表中选择数据验证一下:

USE hr;
SELECT * FROM People;

查询按预期返回五行。

总结

  • 使用BACKUP DATABASE语句为数据库创建完整备份。
  • 使用WITH INIT选项覆盖备份,使用WITH NOINIT选项附加到现有备份文件。
  • 使用RESTORE DATABASE语句从完全备份还原数据库。

标签:14.4,DATABASE,HR,备份,Server,完整,SQL,备份文件,数据库
From: https://www.cnblogs.com/michaelshen/p/17074855.html

相关文章

  • 14.5 SQL Server差异备份
    SQLServer差异备份目录SQLServer差异备份简介创建差异备份示例恢复差异备份总结简介差异备份基于最近的完整备份。换句话说,只有在至少有一个完整备份后,才能创建差异备......
  • 14.6 SQL Server事务日志备份
    SQLServer事务日志备份目录SQLServer事务日志备份简介使用T-SQL创建事务日志备份示例从事务日志备份还原数据库总结简介当数据库的恢复模式为FULL(完整)或BULK_LOGGED(大......
  • 12.1 SQL Server视图
    SQLServer视图(Views)目录SQLServer视图(Views)简介视图的优点安全简单一致性创建视图示例创建一个简单视图重新定义视图使用聚合函数创建视图删除视图简介示例删除一个......
  • SQL Server 存储过程定时转存数据
    CREATEPROCEDURE[dbo].[sp_MES_JTMSLS]--创建存储过程asBEGINBEGINTRANTran_MoveData--开始事务DECLARE@tran_erro......
  • 9.2 SQL Server BEGIN END
    BEGINEND目录BEGINEND简介嵌套BEGIN...END简介BEGIN…END语句用于定义语句块。语句块由一组一起执行的SQL语句组成。语句块也称为批处理。打个比方说,如果语句是句子......
  • 9.4 SQL Server循环
    SQLServer循环目录SQLServer循环简介WHILE示例BREAK简介示例CONTINUE简介示例简介WHILE语句是一个控制流语句,它允许重复执行语句块,只要指定的条件为TRUE。WHILE语法......
  • 9.3 SQL Server IF ELSE
    SQLServerIFELSE目录SQLServerIFELSE简介IF语句示例IFELSE语句示例:嵌套IF…ELSE简介IF...ELSE语句是一种控制流语句,允许根据指定的条件执行或跳过语句块。IF......
  • 9.5 SQL Server游标
    SQLServer游标(CURSOR)目录SQLServer游标(CURSOR)简介什么是数据库游标SQLServer游标生命周期示例简介SQL基于集合进行操作,例如,SELECT语句返回一组称为结果集的行。但......
  • 9.6 SQL Server异常处理
    SQLServer异常处理目录SQLServer异常处理TRYCATCH简介CATCH块中的函数嵌套的TRYCATCH简单示例在事务中使用TRYCATCH的示例THROW简介示例A)以下示例使用THROW语句引......
  • 8.3 SQL Server非聚集索引
    SQLServerNon-ClusteredIndexes(非聚集索引)目录SQLServerNon-ClusteredIndexes(非聚集索引)简介使用SQLServerCREATE[NONCLUSTERED]INDEX创建非聚集索引示例A)使用C......