适用于: SQL Server 2022 (16.x)
本快速入门有助了解如何将备份写入与 S3 兼容的对象存储以及如何从中还原。
注意
SQL Server 2022 引入了对备份到 S3 兼容的对象存储以及从中还原的支持。 SQL Server 2019 和以前的版本不支持此功能。
先决条件
要完成本快速入门,你必须熟悉 SQL Server 备份和还原概念以及 Transact-SQL (T-SQL) 语法。 需要 S3 端点、SQL Server Management Studio (SSMS),以及对运行 SQL Server 的服务器或 Azure SQL 托管实例的访问权限。 此外,用于发出 BACKUP 和 RESTORE 命令的帐户应属于具有 ALTER ANY CREDENTIAL 权限的 db_backupoperator
数据库角色,并且具有用于还原到新数据库的 CREATE DATABASE 权限,或者是 sysadmin 和 dbcreator 固定服务器角色的成员,或者是数据库所有者(dbo)的成员(如果通过现有数据库进行还原)。
- 创建 S3 端点。
- 安装 SQL Server Management Studio。
- 使用通过 Azure SQL 虚拟机或点到站点方式建立的连接安装 SQL Server 2022 Developer 版 或部署 Azure SQL 托管实例。
- 将用户帐户分配到 db_backupoperator 角色,并授予 ALTER ANY CREDENTIAL 权限。
- 将用户帐户分配给 sysadmin 或 dbcreator 固定角色,或使用户成为现有数据库的所有者。
创建测试数据库
在此步骤中,使用 SQL Server Management Studio (SSMS) 创建测试数据库。
启动 SQL Server Management Studio (SSMS) 并连接到 SQL Server 实例。
打开“新建查询”窗口。
运行以下 T-SQL 代码来创建测试数据库。 刷新对象资源管理器中的“数据库”节点,查看新数据库。 SQL 托管实例上新建的数据库会自动启用 TDE,因此需要禁用它才能继续操作。
USE [master]; GO -- Create database CREATE DATABASE [SQLTestDB]; GO -- Create table in database USE [SQLTestDB]; GO CREATE TABLE SQLTest ( ID INT NOT NULL PRIMARY KEY, c1 VARCHAR(100) NOT NULL, dt1 DATETIME NOT NULL DEFAULT GETDATE() ); GO -- Populate table USE [SQLTestDB]; GO INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1'); INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2'); INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3'); INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4'); INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5'); GO SELECT * FROM SQLTest; GO -- Disable TDE for newly-created databases on SQL Managed Instance USE [SQLTestDB]; GO ALTER DATABASE [SQLTestDB] SET ENCRYPTION OFF; GO DROP DATABASE ENCRYPTION KEY; GO
创建凭据
要创建 SQL Server 凭据以用于身份验证,请按以下步骤操作:
启动 SQL Server Management Studio (SSMS) 并连接到 SQL Server 实例。
打开“新建查询”窗口。
创建服务器级别凭证。 凭证的名称取决于 S3 兼容的存储平台。 与 PolyBase 数据库范围的凭证不同,备份/还原凭证是在实例级别存储的。 与 S3 兼容存储一起使用时,必须根据 URL 路径对凭证进行命名。
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>] WITH IDENTITY = 'S3 Access Key', SECRET = '<AccessKeyID>:<SecretKeyID>'; GO
注意
有关服务器凭证的 S3 兼容存储的更多示例,请参阅 CREATE CREDENTIAL (Transact-SQL)。
备份数据库
在此步骤中,使用 T-SQL 将数据库 SQLTestDB
备份到与 S3 兼容的对象存储。
通过运行以下命令,使用 T-SQL 备份数据库:
USE [master];
GO
BACKUP DATABASE [SQLTestDB]
TO URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH FORMAT /* overwrite any existing backup sets */
, STATS = 10
, COMPRESSION;
删除数据库
在此步骤中,先删除数据库再执行还原。 此步骤仅适用于本教程,不太可能用于普通的数据库管理过程。 可以跳过此步骤,但之后将需要在 Azure SQL 托管实例上还原过程中更改数据库名,或运行还原命令 WITH REPLACE
以便在本地成功还原数据库。
- 展开对象资源管理器中的“数据库”节点,右键单击
SQLTestDB
数据库,然后选择“删除”以启动“删除对象”向导。 - 在 Azure SQL 托管实例上,选择“确定”以删除数据库。 在本地,选中“关闭现有连接”旁边的复选框,然后选择“确定”以删除数据库。
还原数据库
在此步骤中,使用 SQL Server Management Studio 中的 GUI 或 Transact-SQL 还原数据库。
在 SQL Server Management Studio 的对象资源管理器中右键单击“数据库”节点,然后选择“还原数据库”。
选择“设备”,然后选择省略号 (...) 以选择设备。
从“备份介质类型”下拉列表中选择“URL”,然后选择“添加”以添加设备。
输入虚拟主机 URL 并粘贴 S3 兼容对象存储的密钥 ID 和访问密钥 ID。
选择“确定”以选择备份文件位置。
选择“确定”,关闭“选择备份设备”对话框。
选择“确定”以还原数据库。
相关内容
以下是一些建议阅读的主题,便于了解概念以及在将 S3 兼容对象存储务用于 SQL S备份时的最佳做法。