暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过 CLR 集成将您的 SQL Server 工作负载迁移到 AWS

原创 肯肯在学习 2022-10-21
496

(CLR) 集成是一种在 SQL Server 编程对象(如存储过程、函数和触发器)中托管 .NET 代码以及添加用户定义的数据类型的选项。自 SQL Server 2005 中引入以来,CLR 集成因其额外的灵活性和在 T-SQL 中导入 .NET 代码组件的选项而在 SQL Server 社区中广受欢迎。它提供了一个托管执行 环境,从而为开发人员编写托管代码提供了很大的自由度,以获得各种好处,例如改进的安全性、跨语言集成和对象生命周期管理。

在这篇博文中,我们将探讨在 AWS 上启用和运行 CLR 与不同 SQL Server 产品的集成的多个选项。我们还将引导您完成将 CLR 程序集导入Amazon Relational Database Service (Amazon RDS) for SQL Server 的步骤。在您熟悉所有可用选项后,您将能够根据您的用例和要求做出全面的决策。

AWS 上的 SQL Server 产品

在 AWS 上运行 SQL Server 有三个主要选项:

启用 CLR 集成

AWS 上的 SQL Server 产品提供托管和自我管理的服务体验。因此,更改实例级设置和参数所涉及的步骤有所不同。在本节中,我们将介绍在 AWS 上的不同 SQL Server 产品上启用和导入 CLR 所涉及的步骤。

Amazon EC2 上的 SQL Server

Amazon EC2 提供底层基础设施来托管自我管理的 SQL Server 数据库实例。它提供对数据库实例和操作系统的完全控制,并允许您使用您选择的工具、机制和过程进行数据库管理。

要评估 Amazon EC2 上的 SQL Server 是否适合您的使用案例的迁移或托管选项,请参阅Amazon EC2 for SQL Server

要将 CLR 程序集导入在 Amazon EC2 上运行的 SQL Server,您必须首先在 SQL Server 实例级别启用 CLR 集成。有关说明,请参阅CLR 集成 - 启用

然后,您可以使用以下方法之一开始将 CLR 程序集导入您的 SQL Server 实例:

  • 将数据库从源实例备份并还原到 Amazon EC2 上已嵌入 CLR 程序集的 SQL Server 实例
  • 将 CLR 从在源上创建的 DDL 文件导入到目标环境
  • 通过 T-SQL 直接在目标环境上创建

所有这些方法的工作方式与您对任何其他自我管理的 SQL Server 部署所做的工作类似。

适用于 SQL Server 的 Amazon RDS

Amazon RDS for SQL Server 是一项完全托管的 AWS 服务,可以更轻松地在云中设置、操作和扩展 SQL Server 部署。

使用 Amazon RDS for SQL Server,CLR 集成仅支持PERMISSION_SET=SAFE. 但是,从 SQL Server 2017 开始,Microsoft 通过引入默认启用的 CLR Strict Security 选项增强了 CLR 程序集的安全控制。由于此更改,它开始将 SAFE 程序集视为标记为 UNSAFE。

要使用以前创建的 CLR 程序集,您需要禁用 CLR Strict Security 选项。这在 Amazon RDS for SQL Server 上不受支持,Microsoft 也不推荐。因此,对于 SQL Server 2016 及更低版本,您只能使用与 Amazon RDS 的 CLR 集成。有关详细信息,请参阅CLR 严格安全性

如果您在启用 CLR 的 Amazon RDS 上运行 SQL Server 2016 并计划将主要版本升级到适用于 SQL Server 2017 或更高版本的 Amazon RDS,您需要停止使用 CLR 集成或使用其他选项在 AWS 上运行 SQL Server(如在这篇文章中解释)。

由于 Amazon RDS for SQL Server 是一项完全托管的服务,因此您无权访问底层主机操作系统或系统管理员访问权来运行诸如sp_configure. 要进行配置更改,例如启用 CLR 集成,您可以使用自定义参数组并为 RDS for SQL Server 实例启用 CLR 集成,如以下屏幕截图所示。有关详细信息,请参阅使用参数组

clr 集成

为给定 RDS 实例启用 CLR 集成后,有几种方法可以导入 CLR 程序集和其他可编程结构:

CREATE ASSEMBLY [DatabaseCLR] FROM 0x4D5A90000300000004000000FFFF0000B800...00 WITH PERMISSION_SET = SAFE;

适用于 SQL Server 的 Amazon RDS 自定义

Amazon RDS Custom 是一项托管数据库服务,适用于需要自定义底层操作系统和数据库环境的应用程序。Amazon RDS 自动化提供旧版、打包和自定义应用程序所需的访问权限。

由于您可以同时拥有数据库实例的系统管理员权限以及底层操作系统的管理权限,因此您还可以使用 为 SQL Server 的 RDS 自定义启用 CLR 集成sp_configure,类似于我们之前在 Amazon EC2 上描述的 SQL Server。

在撰写本文时,RDS Custom for SQL Server 支持 SQL Server 2019。有关更多信息,请参阅Amazon RDS Custom for SQL Server 的要求和限制

导入 CLR 的所有三种方法都可用于 RDS 自定义:

  • 将数据库从源实例备份并还原到 Amazon EC2 上已嵌入 CLR 程序集的 SQL Server 实例
  • 将 CLR 从在源上创建的 DDL 文件导入到目标环境
  • 通过 T-SQL 直接在目标环境上创建

将 CLR 程序集导入 Amazon RDS for SQL Server

由于 Amazon RDS 提供托管服务体验,因此它不提供对底层主机的 shell 访问。要将 CLR 函数创建或导入到 RDS for SQL Server 实例上的现有数据库中,我们使用 T-SQL。

让我们举个例子,回顾一下如何将 CLR 函数导入现有数据库。CLR 函数来自微软文章Regular Expressions Make Pattern Matching And Data Extraction Easier

导出 CLR 程序集

要从源 SQL Server 实例导出 CLR 程序集和相应的可编程对象,请完成以下步骤:

  1. 使用 SQL Server Management Studio (SSMS) 连接到源实例。
  2. Databases下,展开您的数据库。
  3. Programmability下,选择Assemblies
  4. 选择所需的程序集(右键单击)并选择Script Assembly asCREATE ToNew Query Editor Window
    脚本汇编
    输出是一个 T-SQL 命令,可用于重新创建 CLR 程序集。您也可以将其保存在文件中,而不是选择在新的查询编辑器窗口中打开它(如下面的屏幕截图所示)。
    克里特汇编脚本
  5. 同样,为相应的函数生成 T-SQL 脚本。
    脚本函数

您将获得基于我们刚刚导出的程序集的 CLR 函数的创建脚本。您可以将函数保存在文件中或在新的查询编辑器窗口中打开它。

创建函数脚本

如果您的环境中有任何其他可编程结构,或者如果您需要迁移多个 CLR 程序集,请重复这些步骤。

导入 CLR 程序集

按照以下步骤将 CLR 程序集和可编程对象导入 RDS for SQL Server 实例:

  1. 使用 SSMS 连接到目标 RDS for SQL Server 实例。
  2. 在 SSMS 中,打开一个新的查询窗口。
  3. 使用前面步骤中的创建对象脚本创建 CLR 程序集和 SQL 函数。
    导入 clr
  4. 验证对象是否已成功创建。
    验证对象

测试运行函数

在创建了 CLR 程序集和其他可编程对象之后,让我们测试一下该功能在新环境中是否正常工作。

  1. 为 RDS for SQL Server 实例打开一个新的查询窗口。
  2. 通过提供不同的输入参数来测试运行函数。
    测试功能

输出显示,在通过 T-SQL 命令手动导入后,CLR 函数可与 Amazon RDS for SQL Server 正常工作。

这种通过 T-SQL 导出和导入 CLR 程序集的方式适用于 AWS 上任何基于 SQL Server 的服务产品。

结论

在这篇文章中,我们展示了如何在 AWS 上为不同的 SQL Server 数据库产品启用 CLR 集成,并演示了如何将 CLR 程序集导入 Amazon RDS for SQL Server。此解决方案可帮助您在 AWS 上的 SQL Server 中运行类似于本地环境的托管代码。

原文标题:Migrate your SQL Server workload with CLR integration to AWS
原文作者:Stas Bogachinsky 、 Sikandra Chaudhary
原文地址:https://aws.amazon.com/cn/blogs/database/migrate-your-sql-server-workload-with-clr-integration-to-aws/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论