SQL Server 2016 上的 Stretch Database 到 Azure






3.35/5 (6投票s)
将表中的冷数据迁移到 Microsoft Azure,以便进行经济高效的数据存储,而无需任何代码级别的更改。
引言
延伸数据库是 SQL Server 2016 及更高版本提供的新功能。此功能允许您将冷数据迁移到 Microsoft Azure。
过去,当数据库增长超出限制时,唯一的选择是购买额外的驱动器并让数据库继续增长。 这是一种非常昂贵且成本效益低下的解决方案。
为了解决这样的问题,Microsoft 提出了一个新功能,仅将数据迁移到 Azure。 但是,即使数据已迁移到 Azure,您也可以针对您的实例运行查询。 您可以在 Azure 和本地数据库之间来回移动数据。
延伸数据库不影响应用程序逻辑和查询。
我们基本上会创建一个数据库,创建一个表,并在表中插入大约 1000 行数据。 然后使用延伸功能将数据迁移到 Azure。
背景
您需要有效的 Microsoft Azure 订阅和 SQL Server 2016 才能使用延伸功能。
Using the Code
我们将首先创建一个数据库和一个表到数据库。 然后我们将添加一个表并用大量数据填充它。 然后我们将仅将数据迁移到 Azure 并运行一些查询。
//
// -- First Create the Database
USE [master]
GO
CREATE DATABASE [StretchDatabase]
Go
//
然后,在我们刚刚创建的数据库中创建一个表。
//--This code adds a table with 3 columns, SN (autoincremented), Name and Last Name
USE [StretchDatabase]
GO
CREATE TABLE [dbo].[StretchTable](
[sn] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
[Last Name] [varchar](50) NULL
) ON [PRIMARY]
GO
然后,将行添加到表中。 由于我们尝试将冷数据迁移到 Azure,我们将使用for
循环插入 1000 行数据。 您可以根据需要使用任意数量的数据。
USE [StretchDatabase]
GO
DECLARE @cnt INT = 0;
WHILE @cnt < 1000
BEGIN
Insert into stretchTable (Name, [Last Name]) values ('Mahesh', 'Dahal')
SET @cnt = @cnt + 1;
END;
现在,我们必须转到数据库并使用 UI 来启用和迁移数据。
右键单击数据库 -> 任务 -> 延伸和启用。
这将弹出一个新窗口来配置延伸功能。
单击“下一步”,您会找到用于选择要应用延伸数据库的表的选项。
选择您的表后,单击“下一步”,您必须登录到您的 Azure 订阅。
如果您只想从表中迁移所需的数据,请单击“整个表”。 将会弹出一个窗口,您可以在其中选择要迁移的数据。
配置好要迁移的行后,单击“完成”和“下一步”。 您将被带到配置 Azure 订阅的窗口。
单击“登录”。
然后在提供的登录屏幕中插入您的帐户凭据。
然后点击登录。 然后选择区域,并为将在 Azure 中创建的数据库提供新的用户名和密码,我们的数据将存储在该数据库中。 用户名和密码用于将在 Azure 中创建的 SQL Azure 数据库。
然后点击下一步。 您将被要求确认配置。
单击“完成”。 然后将应用所有设置并迁移数据。
流程完成后,单击“关闭”。
现在让我们测试一下迁移。
如果延伸数据库和迁移成功,数据库图标将更改为以下内容。
如果您检查您的 Azure 订阅,您会发现创建了一个新的数据库。
现在让我们运行一些查询。
现在,当您运行此查询时,您将获得存储的所有数据。 在本地数据库和远程数据库中运行查询后,将显示数据。
select * from StretchTable
运行以上代码,您将看到表中的所有数据。
但是,如果您使用以下命令查看数据的来源,您将看到本地表中没有存储任何数据。
可以使用以下方法找到此表使用的总存储空间
Sp_spaceused 'stretchtable';
而可以使用命令找到本地存储中此表使用的空间
Sp_spaceused 'stretchtable' , @mode='local_only'
您可以在结果中看到只使用了 72KB 的存储空间。
而如果您运行命令来查找远程存储中使用的空间,那么您可以看到所有数据都存储在远程数据库中,也就是我们之前创建的 SQL Azure 数据库。
SQL 延伸非常有利于降低存储驱动器的成本,同时保持应用程序和应用程序逻辑的一致性。 但是,SQL 延伸不支持以下内容
- 不会对迁移的数据强制执行唯一性。 主键约束和唯一约束将被忽略。
- 迁移的表中不支持更新和删除操作
- 您无法为包含启用延伸表的视图创建索引。
- SQL Server 索引上的过滤器不会传播到远程表。