适用于: SQL Server 2016 (13.x) 及更高版本
本教程可帮助你了解如何在 SQL Server 2016 及更高版本中将 Azure Blob 存储用于数据文件和备份。
SQL Server 2012 (11.x) Service Pack 1 CU2 中引入了对 SQL Server 中的 Azure Blob 存储的支持,并在更高版本中进行了增强。 有关使用此功能的功能和优势的概述,请参阅 Azure Microsoft中的 SQL Server 数据文件。
本教程介绍如何在多个部分中使用 Azure Blob 存储中的 SQL Server 数据文件。 每个部分都侧重于特定任务,应按顺序完成这些节。 首先,了解如何使用存储访问策略和共享访问签名在 Blob 存储中创建新容器。 然后,了解如何创建 SQL Server 凭据以将 SQL Server 与 Azure Blob 存储集成。 接下来,将数据库备份到 Blob 存储,并将其还原到 Azure 虚拟机。 然后使用 SQL Server 文件快照事务日志备份,先还原到某个时间点,再还原到一个新数据库。 最后,本教程演示如何使用元数据系统存储过程和函数来帮助了解和使用文件快照备份。
先决条件
若要完成本教程,必须熟悉 SQL Server 备份和还原概念和 T-SQL 语法。
若要使用本教程,需要一个 Azure 存储帐户、SQL Server Management Studio (SSMS)、对本地 SQL Server 实例的访问权限、对运行 SQL Server 2016 或更高版本实例的 Azure 虚拟机(VM)以及 AdventureWorks2022
数据库的访问权限。 此外,用于执行BACKUP
和RESTORE
命令的帐户应位于db_backupoperator数据库角色中,并具有修改任何凭据权限。
- 获取免费的 Azure 帐户。
- 创建 Azure 存储帐户。
- 安装 SQL Server 2017 Developer Edition。
- 预配 运行 SQL Server 的 Azure VM。
- 安装 SQL Server Management Studio。
- 下载 AdventureWorks 示例数据库。
- 将用户帐户分配到 db_backupoperator 角色,并授予 更改任何凭据 权限。
重要
SQL Server 不支持 Azure Data Lake Storage。 确保本教程使用的存储帐户上未启用 分层命名空间 。
1 - 创建存储访问策略和共享访问存储
在本部分中,将使用 Azure PowerShell 脚本通过存储访问策略在 Azure Blob 存储容器上创建共享访问签名。
注释
此脚本是使用 Azure PowerShell 5.0.10586 编写的。
共享访问签名是向容器、blob、队列或表授予受限访问权限的 URI。 存储访问策略提供对服务器端共享访问签名的额外控制级别,包括撤消、过期或扩展访问权限。 使用此新的增强功能时,需要在至少具有读取、写入和列表权限的容器上创建策略。
可以使用 Azure PowerShell、Azure 存储 SDK、Azure REST API 或第三方实用工具创建存储访问策略和共享访问签名。 本教程演示如何使用 Azure PowerShell 脚本完成此任务。 该脚本使用 Resource Manager 部署模型并创建以下新资源
- 资源组
- 存储帐户
- Azure Blob 存储容器
- SAS 策略
此脚本首先声明多个变量以指定之前资源的名称和以下所需输入值的名称:
- 命名其他资源对象时使用的前缀名称
- 订阅名称
- 数据中心位置
该脚本通过生成在步骤 2 - 使用共享访问签名创建 SQL Server 凭据中使用的相应 CREATE CREDENTIAL
语句来完成操作。 此语句将复制到剪贴板供你查看,并输出到控制台。
若要在容器上创建策略并生成共享访问签名(SAS),请执行以下步骤:
打开窗口 PowerShell 或 Windows PowerShell ISE(请参阅以前的版本要求)。
编辑并执行以下脚本:
# Define global variables for the script $prefixName = '<a prefix name>' # used as the prefix for the name for various objects $subscriptionID = '<your subscription ID>' # the ID of subscription name you will use $locationName = '<a data center location>' # the data center region you will use $storageAccountName = $prefixName + 'storage' # the storage account name you will create or use $containerName = $prefixName + 'container' # the storage container name to which you will attach the SAS policy with its SAS token $policyName = $prefixName + 'policy' # the name of the SAS policy # Set a variable for the name of the resource group you will create or use $resourceGroupName = $prefixName + 'rg' # Add an authenticated Azure account for use in the session Connect-AzAccount # Set the tenant, subscription and environment for use in the rest of Set-AzContext -SubscriptionId $subscriptionID # Create a new resource group - comment out this line to use an existing resource group New-AzResourceGroup -Name $resourceGroupName -Location $locationName # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName # Get the access keys for the Azure Resource Manager storage account $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName # Create a new storage account context using an Azure Resource Manager storage account $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value # Creates a new container in Blob Storage $container = New-AzStorageContainer -Context $storageContext -Name $containerName # Sets up a Stored Access Policy and a Shared Access Signature for the new container $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date). ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld # Gets the Shared Access Signature for the policy $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext Write-Host 'Shared Access Signature= '$($sas.Substring(1))'' # Sets the variables for the new container you just created $container = Get-AzStorageContainer -Context $storageContext -Name $containerName $cbc = $container.CloudBlobContainer # Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature Write-Host 'Credential T-SQL' $tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri, $sas.Substring(1) $tSql | clip Write-Host $tSql # Once you're done with the tutorial, remove the resource group to clean up the resources. # Remove-AzResourceGroup -Name $resourceGroupName
脚本完成后,语句
CREATE CREDENTIAL
将位于剪贴板中,供下一部分使用。
2 - 使用共享访问签名创建 SQL Server 凭据
在本部分中,将创建一个凭据来存储安全信息,SQL Server 使用该凭据写入和读取在上一步中创建的 Azure Blob 存储容器。
SQL Server 凭据是一个对象,用于存储连接到 SQL Server 外部资源所需的身份验证信息。 凭据存储 Azure Blob 存储容器的 URI 路径以及此容器的共享访问签名。
若要创建 SQL Server 凭据,请执行以下步骤:
启动 SSMS。
打开新的查询窗口,并连接到本地环境中数据库引擎的 SQL Server 实例。
在新查询窗口中,粘贴
CREATE CREDENTIAL
包含第 1 部分的共享访问签名的语句并执行该脚本。该脚本类似于以下代码。
/* Example: USE master CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername] WITH IDENTITY='SHARED ACCESS SIGNATURE' , SECRET = 'sharedaccesssignature' GO */ USE master; CREATE CREDENTIAL [https://<storage-account>.blob.core.windows.net/<container-name>] -- this name must match the container path, start with https and must not contain a forward slash at the end WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- this is a mandatory string and should not be changed SECRET = 'sharedaccesssignature'; -- this is the shared access signature key that you obtained in section 1. GO
若要查看所有可用的凭据,可以在连接到实例的查询窗口中运行以下语句:
SELECT * FROM sys.credentials;
打开一个新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
在新查询窗口中,粘贴
CREATE CREDENTIAL
包含第 1 部分的共享访问签名的语句并执行该脚本。对想要访问容器的任何其他 SQL Server 实例重复步骤 5 和步骤 6。
3 - 将数据库备份至 URL
在本部分中,将 SQL Server 实例中的数据库备份 AdventureWorks2022
到第 1 节中创建的容器。
若要将数据库备份到 Blob 存储,请执行以下步骤:
启动 SSMS。
打开新的查询窗口并连接到 Azure 虚拟机中的 SQL Server 实例。
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 针对存储帐户名称和第 1 节中指定的容器适当修改 URL,然后执行此脚本。
-- To permit log backups, before the full database backup, modify the database to use the full recovery model. USE master; ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL; -- Back up the full AdventureWorks2022 database to the container that you created in section 1 BACKUP DATABASE AdventureWorks2022 TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak';
打开对象资源管理器并使用存储帐户和帐户密钥连接到 Azure 存储。
- 展开 “容器”,展开第 1 节中创建的容器,并验证前面步骤 3 中的备份是否出现在此容器中。
4 - 从 URL 将数据库还原到虚拟机
在本节中,您将在 Azure 虚拟机的 SQL Server 实例中还原 AdventureWorks2022
数据库。
注释
为了简单起见,在本教程中,我们对用于数据库备份的数据和日志文件使用相同的容器。 在生产环境中,你可能还会使用多个容器,以及频繁使用多个数据文件。 还可以考虑在多个 Blob 之间对备份进行条带化,以在备份大型数据库时提高备份速度。
若要将 AdventureWorks2022
数据库从 Azure Blob 存储还原到 Azure 虚拟机中的 SQL Server 实例,请执行以下步骤:
启动 SSMS。
打开一个新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 针对存储帐户名称和第 1 节中指定的容器适当修改 URL,然后执行此脚本。
-- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_onprem.bak' WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Data.mdf', MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Log.ldf' --, REPLACE;
打开对象资源管理器并连接到 Azure SQL Server 实例。
在对象资源管理器中,展开 “数据库” 节点并验证
AdventureWorks2022
数据库是否已还原(根据需要刷新节点)。右键单击 AdventureWorks2022,然后选择“ 属性”。
选择 “文件” ,并验证两个数据库文件的路径是否是指向 Azure Blob 存储容器中的 Blob 的 URL(完成后选择“ 取消 ”。
在对象资源管理器中,连接到 Azure 存储。
- 展开“容器”,展开第 1 节中创建的容器,并验证
AdventureWorks2022_Data.mdf
AdventureWorks2022_Log.ldf
前面步骤 3 中是否显示该容器以及第 3 部分中的备份文件(根据需要刷新节点)。
- 展开“容器”,展开第 1 节中创建的容器,并验证
使用文件快照备份数据库
在本部分中,你将使用文件快照备份在 Azure 虚拟机中备份 AdventureWorks2022
数据库,以使用 Azure 快照执行几乎即时的备份。 有关文件快照备份的详细信息,请参阅 Azure 中数据库文件的File-Snapshot 备份
若要使用文件快照备份备份 AdventureWorks2022
数据库,请执行以下步骤:
启动 SSMS。
打开一个新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
将以下 Transact-SQL 脚本复制、粘贴和执行到查询窗口中(不要关闭此查询窗口 - 在步骤 5 中再次执行此脚本)。 通过此系统存储过程,可以查看包含指定数据库的每个文件的现有文件快照备份。 可以看到此数据库没有文件快照备份。
-- Verify that no file snapshot backups exist SELECT * FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 针对存储帐户名称和第 1 节中指定的容器适当修改 URL,然后执行此脚本。 请注意此备份的进行速度。
-- Backup the AdventureWorks2022 database with FILE_SNAPSHOT BACKUP DATABASE AdventureWorks2022 TO URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_Azure.bak' WITH FILE_SNAPSHOT;
验证步骤 4 中的脚本是否已成功执行后,请再次执行以下脚本。 步骤 4 中的文件快照备份作生成了数据和日志文件的文件快照。
-- Verify that two file-snapshot backups exist SELECT * FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
在对象资源管理器中,在 Azure 虚拟机的 SQL Server 实例中,展开 “数据库” 节点,并验证
AdventureWorks2022
数据库是否已还原到此实例(根据需要刷新节点)。在对象资源管理器中,连接到 Azure 存储。
展开 容器,展开第 1 节中创建的容器,并验证步骤 4 中的
AdventureWorks2022_Azure.bak
是否出现在此容器中,以及第 3 节中的备份文件和第 4 节中的数据库文件。如有必要,请刷新节点。
6 - 使用文件快照备份生成活动和备份日志
在本部分中,你将在 AdventureWorks2022
数据库中生成活动,并使用文件快照备份定期创建事务日志备份。 有关使用文件快照备份的详细信息,请参阅 Azure 中数据库文件的File-Snapshot 备份。
若要在 AdventureWorks2022
数据库中生成活动并使用文件快照备份定期创建事务日志备份,请执行以下步骤:
启动 SSMS。
打开两个新的查询窗口,并将每个查询窗口连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
将以下 Transact-SQL 脚本复制、粘贴和执行到其中一个查询窗口中。 在步骤 4 中添加新行之前,该
Production.Location
表有 14 行。-- Verify row count at start SELECT COUNT(*) FROM AdventureWorks2022.Production.Location;
将以下两个 Transact-SQL 脚本复制并粘贴到两个单独的查询窗口中。 为存储帐户名称和第 1 节中指定的容器适当修改 URL,然后在单独的查询窗口中同时执行这些脚本。 这些脚本需要几分钟才能完成。
-- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75 DECLARE @count AS INT = 1, @inner AS INT; WHILE @count < 400 BEGIN BEGIN TRANSACTION; SET @inner = 1; WHILE @inner <= 75 BEGIN INSERT INTO AdventureWorks2022.Production.Location (Name, CostRate, Availability, ModifiedDate) VALUES (NEWID(), .5, 5.2, GETDATE()); SET @inner = @inner + 1; END COMMIT TRANSACTION; WAITFOR DELAY '00:00:01'; SET @count = @count + 1; END SELECT COUNT(*) FROM AdventureWorks2022.Production.Location;
--take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT; WHILE @count <= 7 BEGIN SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location); SET @device = 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak'; BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT; SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022'); WAITFOR DELAY '00:1:00'; SET @count = @count + 1; END;
查看第一个脚本的输出,并注意到最终行计数现在为 29,939。
查看第二个脚本的输出,并注意到每次
BACKUP LOG
执行该语句时,都会创建两个新文件快照、日志文件的一个文件快照和一个数据文件的文件快照 -每个数据库文件的总共两个文件快照。 第二个脚本完成后,请注意,现在总共有 16 个文件快照,每个数据库文件有 8 个 - 一个来自BACKUP DATABASE
语句,一个来自每次执行的BACKUP LOG
语句。在对象资源管理器中,连接到 Azure 存储。
展开 “容器”,展开第 1 节中创建的容器,并验证是否显示七个新的备份文件,以及前面各部分的数据文件(根据需要刷新节点)。
SSMS 中对象资源管理器的屏幕截图,其中包含 Azure 容器中的多个快照。
7 - 将数据库还原到某个时间点
在这一部分中,您将把AdventureWorks2022
数据库还原到两个事务日志备份之间的某个时间点。
使用传统备份完成时间点还原时,需要使用完整数据库备份(可能还需要差异备份),以及所有事务日志文件,直至并略过您希望还原至的时间点。 使用文件快照备份时,只需要两个相邻的日志备份文件,它们为您要还原到的时间区间提供了界限。 只需要两个日志文件快照备份集,因为每个日志备份都会创建每个数据库文件的文件快照(每个数据文件和日志文件)。
若要将数据库从文件快照备份集还原到指定的时间点,请执行以下步骤:
启动 SSMS。
打开一个新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
将以下 Transact-SQL 脚本复制、粘贴和执行到查询窗口中。 请先验证
Production.Location
表是否具有 29,939 行,然后在步骤 4 中将其还原到行数较少的时间点。-- Verify row count at start SELECT COUNT(*) FROM AdventureWorks2022.Production.Location;
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 选择两个相邻的日志备份文件,并将文件名转换为此脚本所需的日期和时间格式。 适当修改存储帐户名称和第 1 节中指定的容器的 URL。 提供第一个和第二个备份文件名,提供
STOPAT
格式June 26, 2018 01:48 PM
的时间,然后执行此脚本。 完成需要几分钟时间。-- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count ALTER DATABASE AdventureWorks2022 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<firstbackupfile>.bak' WITH NORECOVERY, REPLACE; RESTORE LOG AdventureWorks2022 FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<secondbackupfile>.bak' WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM'; ALTER DATABASE AdventureWorks2022 SET MULTI_USER; -- get new count SELECT COUNT(*) FROM AdventureWorks2022.Production.Location;
查看输出。 还原后,行计数为 18,389,这是日志备份 5 和 6 之间的行计数编号(行计数可能有所不同)。
8 - 从日志备份还原为新数据库
在本部分中,您将从文件快照事务日志备份中将 AdventureWorks2022
数据库还原为一个新数据库。
在此方案中,你将在不同的虚拟机上执行到 SQL Server 实例的还原,以便进行业务分析和报告。 还原到不同虚拟机上的另一个实例会将工作负荷卸载到专用且大小用于此目的的虚拟机,从而从事务系统中删除其资源要求。
使用文件快照备份从事务日志备份进行还原比传统的流式备份要快得多。 使用传统的流式备份时,需要使用完整数据库备份(可能是差异备份),以及部分或全部事务日志备份(或新的完整数据库备份)。 但是,使用文件快照日志备份,只需要最新的日志备份(或任何其他日志备份),或者任何两个相邻的日志备份,就可以在时间点还原到两个日志备份时间之间的某个时刻。 为了清楚起见,只需要一个日志文件快照备份集,因为每个文件快照日志备份都会为每个数据库文件(每个数据文件和日志文件)创建文件快照。
若要使用文件快照备份将数据库从事务日志备份还原到新数据库,请执行以下步骤:
启动 SSMS。
打开新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例。
如果这与前面部分使用的 Azure 虚拟机不同,请确保已遵循 2 中的步骤 - 使用共享访问签名创建 SQL Server 凭据。 如果要还原到其他容器,请按照 1 - 为新容器 创建存储访问策略和共享访问存储 的步骤进行作。
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 选择要使用的日志备份文件。 为存储帐户名称和第 1 节中指定的容器适当修改 URL,提供日志备份文件名,然后执行此脚本。
-- restore as a new database from a transaction log backup file RESTORE DATABASE AdventureWorks2022_EOM FROM URL = 'https://<storage-account>.blob.core.windows.net/<container-name>/<logbackupfile.bak>' WITH MOVE 'AdventureWorks2022_data' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Data.mdf', MOVE 'AdventureWorks2022_log' TO 'https://<storage-account>.blob.core.windows.net/<container-name>/AdventureWorks2022_EOM_Log.ldf', RECOVERY --, REPLACE;
查看输出以验证还原是否成功。
在对象资源管理器中,连接到 Azure 存储。
展开 容器,展开您在第 1 节中创建的容器(必要时刷新),并验证新数据和日志文件是否显示在容器中,以及前面部分中的 Blob。
9 - 管理备份集和文件快照备份
在本部分中,将使用 sp_delete_backup 系统存储过程删除备份集。 此系统存储过程删除与此备份集关联的每个数据库文件上的备份文件和文件快照。
注释
如果尝试通过从 Azure Blob 存储容器中删除备份文件来删除备份集,则只会删除备份文件本身 - 关联的文件快照保持不变。 如果在此方案中发现自己,请使用 sys.fn_db_backup_file_snapshots 系统函数标识孤立文件快照的 URL,并使用 sp_delete_backup_file_snapshot 系统存储过程删除每个孤立文件快照。 有关详细信息,请参阅 Azure 中数据库文件的文件快照备份。
若要删除文件快照备份集,请执行以下步骤:
启动 SSMS。
打开一个新的查询窗口,并连接到 Azure 虚拟机中数据库引擎的 SQL Server 实例(或有权在此容器上读取和写入的任何 SQL Server 实例)。
将以下 Transact-SQL 脚本复制并粘贴到查询窗口中。 选择要删除的日志备份及其关联的文件快照。 为存储帐户名称和第 1 节中指定的容器适当修改 URL,提供日志备份文件名,然后执行此脚本。
EXECUTE sys.sp_delete_backup 'https://<storage-account>.blob.core.windows.net/<container-name>/tutorial-21764-20181003205236.bak';
在对象资源管理器中,连接到 Azure 存储。
展开 “容器”,展开第 1 节中创建的容器,并验证步骤 3 中使用的备份文件是否不再出现在此容器中(根据需要刷新节点)。
将以下 Transact-SQL 脚本复制、粘贴和执行到查询窗口中,以验证是否已删除两个文件快照。
-- verify that two file snapshots have been removed SELECT * FROM sys.fn_db_backup_file_snapshots('AdventureWorks2022');
10 - 删除资源
完成本教程并节省资源后,请务必删除在本教程中创建的资源组。
若要删除资源组,请运行以下 PowerShell 代码:
# Define global variables for the script
$prefixName = '<prefix name>' # should be the same as the beginning of the tutorial
# Set a variable for the name of the resource group you will create or use
$resourceGroupName=$prefixName + 'rg'
# Adds an authenticated Azure account for use in the session
Connect-AzAccount
# Set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionId $subscriptionID
# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName
相关内容
- Microsoft Azure 中的 SQL Server 数据文件
- File-Snapshot Azure 中数据库文件的备份
- 从 SQL Server 备份到 Microsoft Azure Blob 存储的 URL
- 共享访问签名,第 1 部分:了解 SAS 模型
- 创建容器
- 设置容器 ACL
- 获取容器 ACL
- 凭据(数据库引擎)
- CREATE CREDENTIAL (Transact-SQL)
- sys.credentials (Transact-SQL)
- sp_delete_backup(Transact-SQL)
- sys.fn_db_backup_file_snapshots(Transact-SQL)
- sp_delete_backup_file_snapshot(Transact-SQL)