Note:

Migrate Data from Amazon DynamoDB to Oracle NoSQL Database Table

Introduction

Amazon DynamoDB is a fully managed NoSQL database service offered by Amazon Web Services that provides fast and scalable key-value and document data storage.

Oracle NoSQL Database Cloud Service is a fully managed NoSQL database service offered by Oracle Corporation on Oracle Cloud Infrastructure. It provides scalable key-value and JSON document storage with low-latency performance and automatic scaling for cloud-native applications.

This tutorial describes how to migrate data from Amazon DynamoDB to Oracle NoSQL Database Cloud Service using tool Oracle NoSQL Database Migrator.

The migration workflow uses DynamoDB’s native export-to-S3 capability to extract table data in DynamoDB JSON format. The exported data is then imported into Oracle NoSQL Database Cloud Service running in Oracle Cloud Infrastructure (OCI).

Architecture

The migration workflow consists of the following components:

image

High-level Migration Process

  1. Provision DynamoDB tables & Amazon S3 Bucket.
  2. Enable PITR in Table and export DynamoDB tables to Amazon S3 Bucket.
  3. Provision OCI compute instance
  4. Install and configure Oracle NoSQL Database Migrator tool on Compute.
  5. Configure AWS and OCI authentication on OCI compute.
  6. Execute migration from Amazon S3 bucket to OCI NoSQL
  7. Validate migrated data in Oracle NoSQL Database.

Prerequisites

Before you begin, ensure that:

Task 1: Provision Amazon DynamoDB Resources

Under this tutorial, we will provision only the basic required resources in AWS, that are mandatory for this exercise.

1. Create IAM User in AWS

Create a dedicated IAM user to manage DynamoDB operations.

a. Login to AWS Console

b. Navigate to IAM, Users

c. Click Create User

d. Assign programmatic access

image

e. Review and Click Create user.

⚠️ In production environments, use least-privilege IAM policies.

2. Create a DynamoDB Table in AWS

a. Sign in to the AWS Console.

b. Navigate to DynamoDB.

image

c. Click Create table.

image

d. Specify:

e. Accept default settings and create the table.

f. Review created tables.

image

3. Add new column or Insert Sample Records in the DynamoDB table.

a. Sign in to the AWS Console.

b. Select the table

c. Click Actions, Create Item

image

d. Insert sample records

image

e. Validate Records

image

Task 2: Export DynamoDB Table to Amazon S3 Bucket

Use DynamoDB’s native export-to-S3 capability to extract table data in DynamoDB JSON format to S3 bucket.

1. Create Amazon S3 Bucket

a. Sign in to the AWS Console

b. Navigate to S3

c. Create a new bucket

image

d. Keep default settings

e. Validate Bucket

image

2. Enable Point-In-Time Recovery (PITR)

DynamoDB export requires Point-in-Time Recovery. PITR must be enabled at table level, before exporting it.

a. Select table

b. Enable Point-in-time recovery

image

c. After enabling PITR.

image

3. Export Table Data to S3 Bucket.

a. Sign in to the AWS Console.

b. Select table

c. Click Export to S3

d. Choose:

e. Click Export

image

image

4. Verify Exported Data

After completion:

image

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

Contains:

image

Task 3: Prepare Oracle Cloud Infrastructure Environment

1. Create a Compartment

a. Sign in to the OCI Console.

b. Navigate to Identity & Security, Compartments.

c. Create a new compartment for the Oracle NoSQL table.

2. Create a Compute Instance

a. Navigate to Compute , Instances.

b. Click Create instance.

c. Select:

This compute instance runs the Oracle NoSQL Database Migrator.

3. Install Oracle NoSQL Database Migrator

Oracle NoSQL Migrator reads DynamoDB export files from Amazon S3 and import data to OCI Oracle NoSQL database. We will install Oracle NoSQL Migrator tool on one of the OCI compute created above.

a. Install Java 11

Oracle NoSQL Database Migrator require Java to be running on the compute.

sudo yum install java-11

b. Extract Migrator Package

tar -zxvf V1053574-01.tar.gz
cd nosql-migrator-1.8.0/

Verify installation:

[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

Task 4: Configure Secure Access (OCI & AWS)

To use Oracle NoSQL Migrator, secure cross-cloud authentication must be configured to enable the Compute instance to access both Amazon S3 and Oracle Cloud Infrastructure (OCI) resources.

1. Create OCI API Key

In the OCI console, create an API key for the OCI user who will own the target Oracle NoSQL Database Cloud Service table. This user must have permissions to create and manage the Oracle NoSQL Database Cloud Service table.

a. In the OCI Console, open Profile, API Keys.

b. Add a new API key.

image

c. Download the private key.

d. Record:

image

2. Create OCI configuration File

a. Use SSH to log in as the opc user to the compute instance created earlier.

b. Create all the OCI identity file under /home/opc/.oci directory.

Private Key:

c. Copy the private key on compute as /home/opc/.oci/ociuser.pem.

/home/opc/.oci/ociuser.pem

Config file:

\$vi /home/opc/.oci/config

Example:

[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. Create AWS Access Keys

In the AWS console, create an access key (if one does not already exist) for the user who will access the Amazon S3 Object Storage where the Amazon DynamoDB data is being exported.

a. Sign in to the AWS Console.

b. Go to IAM, User, Security Credentials

c. Create Access Key

Use case: Application running outside AWS.

image

4. Configure AWS Credentials

Create the following files on the compute instance:

/home/opc/.aws/config
/home/opc/.aws/credentials

Example config:

[default]
region=<aws_region>

Example credentials:

[default]
aws_access_key_id=<access_key>
aws_secret_access_key=<secret_key>

Task 5: Configure & Execute Oracle NoSQL Migrator

Migrator requires a JSON configuration file describing:

1. Create Migration Config File

Create a migration configuration JSON file that includes information about the source and target (sink). Under sink note DDBPartitionKey & DDBSortKey from DynamoDB Table.

Create:

/home/opc/.oci/migrator-config-dynamodb-bucket_to_OCI.json

Example configuration:

{
  "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"
}

Understanding Default Schema Mode

When defaultSchema: true:

Oracle NoSQL creates table with:

All non-key DynamoDB attributes are stored inside document.

2. Run Migration

In the compute instance, change the directory to the nosql-migrator-1.8.0 subdirectory

\$cd /home/opc/nosql-migrator-1.8.0
\$./runMigrator --config /home/opc/.oci/migrator-config-dynamodb-bucket_to_OCI.json

After successful execution, the output displays the number of records processed.

Successful migration log:

[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.

Task 6: Validate Migration

After a successful execution of Data Migrator,all Table records which were inserted in DynamoDB, should be visible in Oracle NoSQL.

a. Open the OCI Console.

b. Navigate to Database,Oracle NoSQL Database, Tables.

image

c. Select the appropriate compartment.

d. Open the migrated table.

image

e. Verify the records.

image

Migration Considerations & Best Practices

Capacity Planning

Security

Large Tables

For multi-terabyte exports:

TTL Handling

If DynamoDB TTL is required, enable:

"includeTTL": true

Multi-Table Migration

Automate exports using AWS CLI scripting if migrating multiple tables.

Conclusion

This tutorial demonstrated an end-to-end migration workflow from Amazon DynamoDB to Oracle NoSQL Database Cloud Service using native export capabilities and Oracle NoSQL Database Migrator.

This approach enables:

With proper planning, secure configuration, and capacity tuning, organizations can achieve seamless NoSQL data migration across cloud platforms.

Troubleshooting

Clean Up Resources

After completing this tutorial, consider removing the following resources to avoid unnecessary charges:

Acknowledgments

Author - Dharmesh Patel (Principal Cloud Architect, Customer Success Services)


More Learning Resources

Explore other labs on docs.oracle.com/learn or access more free learning content on the Oracle Learning YouTube channel. Additionally, visit education.oracle.com/learning-explorer to become an Oracle Learning Explorer.

For product documentation, visit Oracle Help Center.