

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 上传 DDL 文件（离线工作流程）
<a name="sql-server-offline-transformation"></a>

在此工作流程中，T AWS ransform 完全根据上传的 DDL 文件对您的架构进行现代化改造，无需直接连接到您的数据库。您可以针对 SQL Server 运行提供的提取脚本，上传生成的架构文件，然后 Trans AWS form 发现、评估、转换该架构并将其部署到亚马逊 Aurora PostgreSQL。如果您的数据库无法直接连接，或者需要在授予网络访问权限之前进行可行性评估和架构转换，请选择此工作流程。

**重要**  
离线工作流程仅转换和部署您的架构。它不迁移真实数据。如果可用，您可以生成综合测试数据来验证目标。如果您需要迁移真实数据，请使用 AWS DMS 控制台创建新的数据迁移项目。

## 离线工作流程的先决条件
<a name="sql-server-offline-prerequisites"></a>
+ 支持的 SQL Server 版本（2008 年 R2 到 2022 年，所有版本）。
+ **PowerShell 7 或更高版本**来运行提取脚本。 PowerShell 已预先安装在 Windows 上。在 macOS 或 Linux 上，安装 PowerShell 7\+ 并使用`pwsh`运行脚本。请参阅[微软安装指南](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)。
+ 该`sqlcmd`实用程序在 PATH 上可用。请参见 [ sqlcmd 实用程序。](https://learn.microsoft.com/en-us/sql/tools/sqlcmd/sqlcmd-utility)
+ 至少具有和`VIEW ANY DEFINITION`权限的 SQL Server 身份验证登录名（用户名`VIEW SERVER STATE`和密码）。该脚本不支持 Windows 或域身份验证。
+ 启用了 IAM 身份中心或 IAM 身份验证的后续阶段（创建 Aurora PostgreSQL 目标和部署转换后的架构）的 AWS 账户。
+ 架构分析和转换阶段不需要入站或出站数据库连接。 AWS 

## 工作流程步骤
<a name="sql-server-offline-workflow-steps"></a>

1. **上传 DDL 文件 ** — T AWS ransform 为聊天中的提取脚本提供了下载按钮。下载脚本并在您的 SQL 服务器上运行该脚本。（可选）使用逗号分隔的包含列表（不区分大小写）将提取限制到特定数据库。该脚本生成带有时间戳`.zip`的 SQL DDL 文件。使用聊天上传按钮上传`.zip`（或单个`.sql`文件）。

1. **Discovery ** — T AWS ransform 解析上传的文件并对按数据库分组的数据库对象（表、存储过程、视图、触发器、索引、约束、序列等）进行编目。您可以查看每个数据库的摘要，然后选择要评估的数据库。如果某些语句无法解析，T AWS ransform 会报告问题并允许您继续处理已解析的对象、选择特定的数据库或上传更正的文件。

1. **评估 ** — T AWS ransform 评估所选数据库的转换可行性，并生成一份可下载的报告，其中包含执行摘要、每个数据库的对象摘要和工作量 (LOE) 估计值。自定义 LOE 分数、上传其他文件或继续转换。

1. **架构转换 ** — T AWS ransform 将 SQL 服务器架构（包括 T-SQL 存储过程）转换为 Aurora PostgreSQL，一次只能转换一个数据库。单个数据库会自动转换；对于多个数据库，您可以选择要转换哪个数据库。数据库可以独立并行转换。

1. **目标配置 ** — 对于每个转换后的数据库，T AWS ransform 会在您的账户中创建或重复使用亚马逊 Aurora PostgreSQL 集群。 AWS 您可以通过引导式提示选择网络和目标配置。

1. **架构部署 ** — T AWS ransform 将转换后的架构应用于 Aurora 集群。部署后，修复聊天或 IDE 中的剩余对象，生成综合测试数据（如果可用），或完成。

1. **应用程序代码现代化**（可选）— T AWS ransform 可以更新相关的.NET 6\+ 应用程序以与 Aurora PostgreSQL 配合使用。该服务更新源代码中的数据库连接，修改实体框架中的 ORM 代码，并在人工监督的统一工作流程中与 Aurora PostgreSQL 兼容。 ADO.NET 使用 AWS CodeConnections 和的个人访问令牌 (PAT) 连接您的源代码存储库 GitHub GitLab，或者为包含源代码的 zip 文件提供 S3 URI。

**注意**  
亚马逊 Aurora PostgreSQL 是该工作流程唯一支持的目标引擎。

## 离线工作流程的服务限制
<a name="sql-server-offline-service-limits"></a>

以下默认限制适用于离线工作流程。每个账户可以配置一些限额；请联系您的 AWS 账户团队申请提高。


| 限制 | 默认 | 适用于 | 
| --- | --- | --- | 
| 每个任务的上传大小 | 1,024 MB (1 GB)，任务中所有上传的累积数据 | 上传 DDL 文件 | 
| 每月转换的数据库 | 每个账户 10 个 | 架构转换 | 
| 每个数据库的存储过程 | 250 | 架构转换 | 
| 并行架构转换 | 一次 5 个数据库 | 架构转换 | 
| 并行运行的作业 | 5 | 每个 账户 | 
+ 上传大小限制是每个任务的累积预算。如果您重置输入设置，则预算将被清除（这会丢弃已上传的文件，并在同一工作中重新运行发现和评估）。
+ 当您选择 5 个以上的数据库进行转换时，其他数据库将排入队列，并在运行转换完成时自动启动。
+ 评估永远不会受到每个数据库存储过程的限制的阻碍；只影响架构转换。

## 对离线工作流程进行故障排除
<a name="sql-server-offline-troubleshooting"></a>

### 提取脚本
<a name="sql-server-offline-ts-extraction"></a>
+ **`pwsh: command not found`(macOS/Linux) ** — 未安装 PowerShell 7\+。安装并运行`pwsh ./ExtractDatabaseMetadata.ps1`。
+ **引用错误 `sqlcmd` **-该`sqlcmd`实用程序不在 PATH 上。安装它并确保它在 PATH 上。
+ **登录或权限错误 **-使用带有`VIEW SERVER STATE`和的 SQL Server 身份验证登录名`VIEW ANY DEFINITION`。 Windows/domain 不支持身份验证。
+ **仅导出部分数据库 ** — 包含列表缩小了范围。 Re-run 没有它，或者指定正确的以逗号分隔的数据库名称。

### 上传
<a name="sql-server-offline-ts-upload"></a>
+ **上传被拒绝，并显示大小信息 **-超出了每个任务的上传预算。上传一个较小的文件，或要求代理重置输入设置以清除同一工作中的预算。向代理商询问当前的剩余预算，而不是估计。
+ **文件未被接受 ** — 上传脚本`.zip`生成的文件或单个`.sql`文件。将多个文件压缩到一个存档中。

### Discovery
<a name="sql-server-offline-ts-discovery"></a>
+ **检测到 SQL 语法问题 **-下载问题报告。无错误部分中的对象仍处于编目状态。选择继续处理已解析的对象、选择特定的数据库或上传更正的文件。
+ **按通用名称分组的对象 **-解析器找不到`USE [Database]`语句。出现提示时，提供正确的数据库名称。
+ **未找到对象 **-文件不包含任何`CREATE`语句，或者全部解析失败。 Re-upload 有效的 DDL。

### 评测
<a name="sql-server-offline-ts-assessment"></a>
+ **LOE 估算值偏离了 ** ——选择自定义 LOE 分数、编辑模板并重新上传以重新生成评估。
+ **遗漏的对象 **-选择上传其他 SQL 文件；自动重新运行发现和评估。

### 架构转换
<a name="sql-server-offline-ts-conversion"></a>
+ **数据库转换失败 **-T AWS ransform 会报告原因。回复要求重试；该数据库的转换重新启动。
+ **响应发送到错误的数据库 **-当多个数据库等待输入时，请指定您的消息所针对的数据库。您可以使用对特定数据库进行寻址`@DatabaseName:`。

### 目标配置和部署
<a name="sql-server-offline-ts-provisioning"></a>
+ **无法创建 Aurora 集群 ** — 完成指导性凭证和联网提示，并确保该账户有权创建 Aurora PostgreSQL。
+ **某些对象未部署 **-使用部署后选项修复聊天或 IDE 中的剩余对象，然后重新部署。