注意:

将数据从 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。

体系结构

迁移工作流包含以下组件:

图像

高级别迁移流程

  1. 预配 DynamoDB 表和 Amazon S3 存储桶。
  2. 在表中启用 PITR 并将 DynamoDB 表导出到 Amazon S3 存储桶。
  3. 预配 OCI 计算实例
  4. 在 Compute 上安装和配置 Oracle NoSQL Database Migrator 工具。
  5. 在 OCI 计算上配置 AWS 和 OCI 验证。
  6. 执行从 Amazon S3 存储桶到 OCI 的迁移 NoSQL
  7. 验证 Oracle NoSQL Database 中的迁移数据。

Prerequisites

开始之前,确保:

任务 1:预配 Amazon DynamoDB 资源

在本教程中,我们将仅预配 AWS 中必需的基本资源,这些资源在本练习中是必需的。

1. 在 AWS 中创建 IAM 用户

创建专用 IAM 用户以管理 DynamoDB 操作。

a. 登录 AWS 控制台

b. 导航到 IAM,用户

c. 单击 Create User

d. 分配编程访问权限

图像

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. 选择:

e. 单击导出

图像

图像

4. 验证导出的数据

完成后:

图像

S3://bucket-name/AWSDynamoDB/ExportID/data/

包含:

图像

任务 3:准备 Oracle Cloud Infrastructure 环境

1. 创建区间

a. 登录到 OCI 控制台。

b. 定位至身份和安全、区间

c. 为 Oracle NoSQL 表创建新区间。

2. 创建计算例程

a. 导航到计算、实例

b. 单击 Create instance

c. 选择:

此计算实例运行 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。

sudo yum install java-11

b. 提取迁移程序程序包

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. 记录:

图像

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 配置文件:

1. 创建迁移配置文件

创建包含有关源和目标 (sink) 的信息的迁移配置 JSON 文件。在 DynamoDB 表的 sink 注 DDBPartitionKeyDDBSortKey 下。

创建:

/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 使用以下项创建表:

所有非键 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. 验证记录。

图像

迁移注意事项和最佳实践

容量计划

安全

大表

对于多 TB 导出:

TTL 处理

如果需要 DynamoDB TTL,请启用:

"includeTTL": true

多表迁移

如果迁移多个表,则使用 AWS CLI 脚本自动导出。

小结

本教程演示了使用原生导出功能和 Oracle NoSQL Database Migrator 从 Amazon DynamoDB 到 Oracle NoSQL Database Cloud Service 的端到端迁移工作流。

此方法支持:

通过适当的规划、安全的配置和容量调优,企业可以跨云平台实现 NoSQL 数据无缝迁移。

疑难解答

清除资源

完成本教程后,请考虑删除以下资源以避免不必要的费用:

确认

作者 — Dharmesh Patel(客户成功服务首席云架构师)


更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心