

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 迁移到 HSM 加密的集群
<a name="migrating-to-an-encrypted-cluster"></a>

要将未加密的集群迁移到使用硬件安全模块 (HSM) 加密的集群，请创建新的加密集群并将数据移动到新集群。您不能通过修改集群迁移到 HSM 加密的集群。

要从未加密的集群迁移到 HSM 加密的集群，首先从现有的源集群中卸载数据。然后使用所选的加密设置将数据重新加载到新的目标集群中。有关启动加密集群的更多信息，请参阅[Amazon Redshift 数据库加密](working-with-db-encryption.md)。

在迁移过程中，源集群可用于只读查询，直到最后一步。最后一步是重命名目标集群和源集群，用于切换端点，以便将所有流量路由到新的目标集群。在重命名后重新启动之前，目标集群不可用。在传输数据时，暂停源集群上的所有数据加载和其他写入操作。<a name="prepare-for-migration"></a>

**准备迁移**

1. 确定与 Amazon Redshift 交互的所有关联系统，例如业务情报 (BI) 工具以及提取、转换和加载 (ETL) 系统。

1. 确定用于测试迁移的验证查询。

   例如，您可以使用以下查询来查找用户定义表的数目。

   ```
   select count(*)
   from pg_table_def
   where schemaname != 'pg_catalog';
   ```

   以下查询返回所有用户定义表的列表以及每个表中的行数。

   ```
   select "table", tbl_rows
   from svv_table_info;
   ```

1. 选择迁移的好时机。要查找集群使用率最低的时间，请监控 CPU 利用率和数据库连接数量等集群指标。有关更多信息，请参阅 [查看集群性能数据](performance-metrics-perf.md)。

1. 删除未使用的表。

   要创建表列表和查询每个表的次数，请运行以下查询。

   ```
   select database,
   schema,
   table_id,
   "table",
   round(size::float/(1024*1024)::float,2) as size,
   sortkey1,
   nvl(s.num_qs,0) num_qs
   from svv_table_info t
   left join (select tbl,
   perm_table_name,
   count(distinct query) num_qs
   from stl_scan s
   where s.userid > 1
   and   s.perm_table_name not in ('Internal worktable','S3')
   group by tbl,
   perm_table_name) s on s.tbl = t.table_id
   where t."schema" not in ('pg_internal');
   ```

1. 启动新的加密集群。

   对目标集群使用与源集群相同的端口号。有关启动加密集群的更多信息，请参阅[Amazon Redshift 数据库加密](working-with-db-encryption.md)。

1. 设置卸载和加载过程。

   您可以使用 [Amazon Redshift 卸载/复制实用工具](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/UnloadCopyUtility)来帮助您在集群之间迁移数据。该实用工具会将源集群的数据导出到 Simple Storage Service（Amazon S3）上的某个位置。使用 AWS KMS 加密数据。然后，该实用工具会自动将数据导入到目标中。或者，您可以使用该实用程序在迁移完成后清除 Simple Storage Service（Amazon S3）。

1. 运行测试以验证您的过程并估计必须暂停写入操作的时间。

   在卸载和加载操作期间，通过暂停数据加载和其他写入操作来维护数据一致性。使用最大的表之一，运行卸载和加载过程，以帮助您估计时间。

1. 创建数据库对象，如 schema、视图和表。要帮助您生成必要的数据定义语言 (DDL) 语句，您可以使用 AWS GitHub 存储库中的 [AdminViews](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews) 中的脚本。<a name="migration-your-cluster"></a>

**要迁移集群**

1. 停止源集群上的所有 ETL 流程。

   要确认进程中未执行任何写入操作，请使用 Amazon Redshift 管理控制台来监控写入 IOPS。有关更多信息，请参阅 [查看集群性能数据](performance-metrics-perf.md)。

1. 运行您之前确定的验证查询，以便在迁移前收集有关未加密源集群的信息。

1. （可选）创建一个工作负载管理 (WLM) 队列，以使用源集群和目标集群中的最大可用资源。例如，创建名为 `data_migrate` 的队列并将队列配置为内存 95%，并发性为 4。有关更多信息，请参阅 *Amazon Redshift 数据库开发人员指南*中的[基于用户组和查询组将查询路由至队列中](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-wlm-routing-queries-to-queues.html)。

1. 使用 `data_migrate` 队列，运行 UnloadCopyUtility。

   使用 Amazon Redshift 控制台监控 UNLOAD 和 COPY 进程。

1. 再次运行验证查询，并验证结果是否与源集群的结果匹配。

1. 重命名源集群和目标集群以交换端点。为避免中断，请在工作时间以外执行此操作。

1. 验证您是否可以使用所有 SQL 客户端（如 ETL 和报告工具）连接到目标集群。

1. 关闭未加密的源集群。