注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间的示例值。完成实验室时,请将这些值替换为特定于云环境的值。
将数据从 Amazon DynamoDB 迁移到 Oracle NoSQL Database 表
简介
Amazon DynamoDB 是由 Amazon Web Services 提供的完全托管的 NoSQL 数据库服务,可提供快速、可扩展的键值和文档数据存储。
Oracle NoSQL Database Cloud Service 是 Oracle Corporation 在 Oracle Cloud Infrastructure 上提供的全托管式 NoSQL 数据库服务。它为云原生应用提供可扩展的键值和 JSON 文档存储,具有低延迟性能和自动扩展。
本教程介绍了如何使用工具 Oracle NoSQL Database Migrator 将数据从 Amazon DynamoDB 迁移到 Oracle NoSQL Database Cloud Service。
迁移工作流使用 DynamoDB 的原生导出到 S3 功能以 DynamoDB JSON 格式提取表数据。然后,导出的数据将导入 Oracle Cloud Infrastructure (OCI) 中运行的 Oracle NoSQL Database Cloud Service。
体系结构
迁移工作流包含以下组件:
- Amazon DynamoDB(源数据库)
- Amazon S3(导出存储)
- OCI 计算实例(运行 Oracle NoSQL Database Migrator)
- Oracle NoSQL Database Cloud Service(目标数据库)

高级别迁移流程
- 预配 DynamoDB 表和 Amazon S3 存储桶。
- 在表中启用 PITR 并将 DynamoDB 表导出到 Amazon S3 存储桶。
- 预配 OCI 计算实例
- 在 Compute 上安装和配置 Oracle NoSQL Database Migrator 工具。
- 在 OCI 计算上配置 AWS 和 OCI 验证。
- 执行从 Amazon S3 存储桶到 OCI 的迁移 NoSQL
- 验证 Oracle NoSQL Database 中的迁移数据。
Prerequisites
开始之前,确保:
- 您有一个有效的 AWS 账户,有权管理 DynamoDB 和 S3。
- 您拥有 OCI 租户,并有权:
- 创建区间的
- 创建计算例程
- 创建 Oracle NoSQL 表
- 您可以通过 SSH 访问 OCI 计算实例。
任务 1:预配 Amazon DynamoDB 资源
在本教程中,我们将仅预配 AWS 中必需的基本资源,这些资源在本练习中是必需的。
1. 在 AWS 中创建 IAM 用户
创建专用 IAM 用户以管理 DynamoDB 操作。
a. 登录 AWS 控制台
b. 导航到 IAM,用户
c. 单击 Create User
d. 分配编程访问权限
- 附加
AdministratorAccess策略(用于演示)

e. 复查并单击“Create user(创建用户)”。
⚠️在生产环境中,使用最少权限的 IAM 策略。
2. 在 AWS 中创建 DynamoDB 表
a. 登录 AWS 控制台。
b. 导航到 DynamoDB 。

c. 单击创建表。

d. 指定:
- 表名
- 分区关键字
- 可选排序键

e. 接受默认设置并创建表。
f. 检查创建的表。

3. 在 DynamoDB 表中添加新列或插入样品记录。
a. 登录 AWS 控制台。
b. 选择表
c. 单击操作,创建项

d. 插入样品记录

e. 验证记录

任务 2:将 DynamoDB 表导出到 Amazon S3 存储桶
使用 DynamoDB 的原生导出到 S3 功能将 DynamoDB JSON 格式的表数据提取到 S3 存储桶。
1. 创建 Amazon S3 存储桶
a. 登录 AWS 控制台
b. 导航到 S3
c. 创建新存储桶

d. 保留默认设置
e. 验证存储桶

2. 启用时间点恢复 (PITR)
DynamoDB 导出需要时间点恢复。必须在表级别启用 PITR,然后才能导出它。
a. 选择表格
b. 启用时间点恢复

c. 启用 PITR 后。

3. 将表数据导出到 S3 存储桶。
a. 登录 AWS 控制台。
b. 选择表格
c. 单击导出到 S3
d. 选择:
- 完全导出
- DynamoDB JSON 格式
- 加密(默认)
e. 单击导出


4. 验证导出的数据
完成后:

S3://bucket-name/AWSDynamoDB/ExportID/data/
包含:
- GZIP 压缩的 JSON 文件
- DynamoDB JSON 格式

任务 3:准备 Oracle Cloud Infrastructure 环境
1. 创建区间
a. 登录到 OCI 控制台。
b. 定位至身份和安全、区间。
c. 为 Oracle NoSQL 表创建新区间。
2. 创建计算例程
a. 导航到计算、实例。
b. 单击 Create instance 。
c. 选择:
- 配置:
VM.Standard.E4.Flex(或等效配置) - 操作系统:Oracle Linux 9 d。创建该实例。
此计算实例运行 Oracle NoSQL Database Migrator。
3. 安装 Oracle NoSQL Database Migrator
Oracle NoSQL Migrator 从 Amazon S3 读取 DynamoDB 导出文件,并将数据导入 OCI Oracle NoSQL 数据库。我们将在上面创建的 OCI 计算之一上安装 Oracle NoSQL Migrator 工具。
a. 安装 Java 11
Oracle NoSQL Database Migrator 要求在计算上运行 Java。
- 以 opc 用户身份登录到新创建的计算实例,并按如下方式安装 Java 11:
sudo yum install java-11
b. 提取迁移程序程序包
- 下载 Oracle NoSQL Database Migrator 1.8.0。使用 SCP 将 Oracle NoSQL Database Migrator ZIP 文件上载到新计算实例上 opc 用户的主目录。
- 解压缩下载的 Oracle NoSQL Database Migrator 软件。Migrator 不需要任何安装,只需将其解压缩即可。
tar -zxvf V1053574-01.tar.gz
cd nosql-migrator-1.8.0/
检验安装:
[opc@nosql-migrator-1.8.0]\$ ls -ltr
total 332
-rw-r--r--. 1 opc opc 822 Nov 13 07:26 sdk_logging.properties
-rw-r--r--. 1 opc opc 1720 Nov 13 07:26 README.md
-rw-r--r--. 1 opc opc 897 Nov 13 07:26 log4j2.xml
-rw-r--r--. 1 opc opc 1870 Nov 13 07:26 LICENSE.txt
-rw-r--r--. 1 opc opc 488 Dec 2 07:11 Dockerfile
-rw-r--r--. 1 opc opc 234275 Dec 23 08:38 THIRD_PARTY_LICENSES.txt
-rwxr-xr-x. 1 opc opc 73063 Dec 23 08:38 runMigrator
-rw-r--r--. 1 opc opc 4640 Dec 23 08:38 CHANGELOG.md
drwxr-xr-x. 2 opc opc 124 Feb 6 02:50 lib
任务 4:配置安全访问(OCI 和 AWS)
要使用 Oracle NoSQL Migrator,必须配置安全的跨云身份验证,以使计算实例能够访问 Amazon S3 和 Oracle Cloud Infrastructure (OCI) 资源。
1. 创建 OCI API 密钥
在 OCI 控制台中,为将拥有目标 Oracle NoSQL Database Cloud Service 表的 OCI 用户创建 API 密钥。此用户必须具有创建和管理 Oracle NoSQL Database Cloud Service 表的权限。
a. 在 OCI 控制台中,打开配置文件、API 密钥。
b. 添加新 API 密钥。

c. 下载私钥。
d. 记录:
- 用户 OCID
- 租户 OCID
- 指纹
- 区域标识符

2. 创建 OCI 配置文件
a. 使用 SSH 以 opc 用户身份登录到之前创建的计算实例。
b. 在 /home/opc/.oci directory 下创建所有 OCI 身份文件。
私有密钥:
c. 将计算上的私钥复制为 /home/opc/.oci/ociuser.pem。
/home/opc/.oci/ociuser.pem
配置文件:
\$vi /home/opc/.oci/config
示例:
[DEFAULT]
user=ocid1.user.oc1...
fingerprint=xx:xx:xx
tenancy=ocid1.tenancy.oc1...
region=ap-hyderabad-1
key_file=/home/opc/.oci/ociuser.pem
3. 创建 AWS 访问密钥
在 AWS 控制台中,为将访问 Amazon DynamoDB 数据导出的 Amazon S3 对象存储的用户创建一个访问密钥(如果尚不存在)。
a. 登录 AWS 控制台。
b. 转到 IAM、用户、安全身份证明
c. 创建访问密钥
用例:在 AWS 外部运行的应用程序。

4. 配置 AWS 身份证明
在计算实例上创建以下文件:
/home/opc/.aws/config
/home/opc/.aws/credentials
配置示例:
[default]
region=<aws_region>
示例身份证明:
[default]
aws_access_key_id=<access_key>
aws_secret_access_key=<secret_key>
任务 5:配置和执行 Oracle NoSQL 迁移程序
迁移程序需要一个描述以下内容的 JSON 配置文件:
- 来源 (S3)
- 信箱 (OCI NoSQL)
- 表方案
- 身份证明
1. 创建迁移配置文件
创建包含有关源和目标 (sink) 的信息的迁移配置 JSON 文件。在 DynamoDB 表的 sink 注 DDBPartitionKey 和 DDBSortKey 下。
创建:
/home/opc/.oci/migrator-config-dynamodb-bucket_to_OCI.json
示例配置:
{
"source": {
"type": "aws_s3",
"format": "dynamodb_json",
"s3URL": "https://bucket-name.s3.region.amazonaws.com/AWSDynamoDB/ExportID/data",
"credentials": "/home/opc/.aws/credentials",
"credentialsProfile": "default"
},
"sink": {
"type": "nosqldb_cloud",
"endpoint": "<oci_region>",
"table": "Emp_records",
"schemaInfo": {
"defaultSchema": true,
"DDBPartitionKey": "PartitionKey:string",
"DDBSortKey": "SortKey:Number",
"readUnits": 10,
"writeUnits": 10,
"storageSize": 1
},
"compartment": "<compartment_ocid>",
"credentials": "/home/opc/.oci/config",
"credentialsProfile": "DEFAULT",
"overwrite": true
},
"abortOnError": false,
"migratorVersion": "1.8.0"
}
了解默认模式模式
当 defaultSchema: true 时:
Oracle NoSQL 使用以下项创建表:
- 分区关键字
- 可选排序键
documentJSON 列
所有非键 DynamoDB 属性都存储在 document 中。
2。 运行移植
在计算实例中,将目录更改为 nosql-migrator-1.8.0 子目录
\$cd /home/opc/nosql-migrator-1.8.0
\$./runMigrator --config /home/opc/.oci/migrator-config-dynamodb-bucket_to_OCI.json
成功执行后,输出将显示已处理的记录数。
成功的迁移日志:
[opc@.nosql-migrator-1.8.0]\$ ./runMigrator --config /home/opc/.oci/migrator-config-dynamodb-bucket_custom-schema.json
2026-02-11 13:32:35.279 [INFO] Configuration for migration:
{
"source" : {
"type" : "aws_s3",
"format" : "dynamodb_json",
"s3URL" : "https://dbmigbucket2oci.s3.ap-southeast-2.amazonaws.com/AWSDynamoDB/01770816089608-60282a9b/data",
"credentials" : "/home/opc/.aws/credentials",
"credentialsProfile" : "default"
},
"sink" : {
"type" : "nosqldb_cloud",
"endpoint" : "ap-hyderabad-1",
"table" : "Emp_records",
"schemaInfo" : {
"defaultSchema" : true,
"DDBPartitionKey" : "On_roll:string",
"DDBSortKey" : "EmpID:Number",
"readUnits" : 5,
"writeUnits" : 50,
"storageSize" : 5
},
"compartment" : "ocid1.compartment.oc1..aaaaaaaazliaxu2oqqcp3x6574nxkegv6lxbvh5lildyztb4fizbk2tqv2ia",
"includeTTL" : false,
"credentials" : "/home/opc/.oci/hyd_config",
"credentialsProfile" : "DEFAULT",
"writeUnitsPercent" : 90,
"overwrite" : true,
"requestTimeoutMs" : 5000
},
"abortOnError" : false,
"migratorVersion" : "1.8.0"
}
2026-02-11 13:32:35.283 [INFO] creating source from given configuration:
2026-02-11 13:32:37.061 [INFO] source creation completed
2026-02-11 13:32:37.061 [INFO] creating sink from given configuration:
2026-02-11 13:32:38.253 [INFO] sink creation completed
2026-02-11 13:32:38.255 [INFO] creating migrator pipeline
2026-02-11 13:32:38.255 [INFO] [cloud sink] : start loading DDLs
2026-02-11 13:32:38.256 [INFO] [cloud sink] : executing DDL: CREATE TABLE IF NOT EXISTS Emp_records (On_roll string,EmpID Number,document JSON, PRIMARY KEY(SHARD(On_roll),EmpID)),limits: [5, 50, 5]
2026-02-11 13:32:38.763 [INFO] [cloud sink] : completed loading DDLs
2026-02-11 13:32:39.426 [INFO] migration started
2026-02-11 13:32:39.635 [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01770816089608-60282a9b/data/kaqjylfjsm4dzaf52u2e6qstia.json.gz
2026-02-11 13:32:40.373 [INFO] Migration success for source kaqjylfjsm4dzaf52u2e6qstia. read=2,written=2,failed=0
2026-02-11 13:32:40.373 [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01770816089608-60282a9b/data/phz6b5k7mmytpcrqe72pfnj3zu.json.gz
2026-02-11 13:32:40.606 [INFO] Migration success for source phz6b5k7mmytpcrqe72pfnj3zu. read=0,written=0,failed=0
2026-02-11 13:32:40.606 [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01770816089608-60282a9b/data/rtm6rzjciq6jhds3dcp4pcro5u.json.gz
2026-02-11 13:32:40.839 [INFO] Migration success for source rtm6rzjciq6jhds3dcp4pcro5u. read=0,written=0,failed=0
2026-02-11 13:32:40.839 [INFO] [DDB S3 source] : start parsing JSON records from object: AWSDynamoDB/01770816089608-60282a9b/data/vrukpcnd6e3kddjg4qite4upzi.json.gz
2026-02-11 13:32:41.304 [INFO] Migration success for source vrukpcnd6e3kddjg4qite4upzi. read=1,written=1,failed=0
2026-02-11 13:32:41.304 [INFO] Migration is successful for all the sources.
2026-02-11 13:32:41.306 [INFO] migration completed.
Records provided by source=3, Records written to sink=3, Records failed=0,Records skipped=0.
Elapsed time: 0min 1sec 878ms
Migration completed.
任务 6:验证迁移
成功执行数据迁移程序后,在 DynamoDB 中插入的所有表记录都应在 Oracle NoSQL 中可见。
a. 打开 OCI 控制台。
b. 导航到数据库、Oracle NoSQL Database 和表。

c. 选择适当的区间。
d. 打开迁移的表。

e. 验证记录。
- 选择“Table(表)”,然后单击“Explore data(浏览数据)”。
- 单击 "Execute"(执行)。

迁移注意事项和最佳实践
容量计划
- 配置适当的读/写单元
- 仔细调整
writeUnitsPercent
安全
- 使用最少权限 IAM
- 轮换 API 密钥
- 避免以纯文本形式存储凭据
大表
对于多 TB 导出:
- 监视 S3 导出大小
- 在 OCI 中增加写入单位
- 考虑批量导出
TTL 处理
如果需要 DynamoDB TTL,请启用:
"includeTTL": true
多表迁移
如果迁移多个表,则使用 AWS CLI 脚本自动导出。
小结
本教程演示了使用原生导出功能和 Oracle NoSQL Database Migrator 从 Amazon DynamoDB 到 Oracle NoSQL Database Cloud Service 的端到端迁移工作流。
此方法支持:
- 云可移植性
- 现代化计划
- 多云架构
- 成本最优化
- 与 OCI 生态系统集成
通过适当的规划、安全的配置和容量调优,企业可以跨云平台实现 NoSQL 数据无缝迁移。
疑难解答
- 确保在导出之前已启用 PITR。
- 如果 S3 访问失败,请验证 AWS 身份证明。
- 确认正确的 OCI 区域和区间 OCID。
- 如果迁移吞吐量较慢,请增加写入单位。
- 有关详细的错误消息,请查看迁移程序日志。
清除资源
完成本教程后,请考虑删除以下资源以避免不必要的费用:
- 删除 DynamoDB 表。
- 删除 Amazon S3 存储桶和导出的文件。
- 终止 OCI 计算实例。
- 删除 Oracle NoSQL 表(如果不再需要)。
- 删除未使用的 IAM 用户和 API 密钥。
相关链接
确认
作者 — Dharmesh Patel(客户成功服务首席云架构师)
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Migrate Data from Amazon DynamoDB to Oracle NoSQL Database Cloud Service
G53049-01