使用 Oracle NoSQL Database Migrator

了解 Oracle NoSQL Database Migrator 以及如何使用它进行数据迁移。

Oracle NoSQL Database Migrator 是一个工具,可用于将 Oracle NoSQL 表从一个数据源迁移到另一个数据源。此工具可以对 Oracle NoSQL Database Cloud ServiceOracle NoSQL Database 内部部署和 AWS S3 中的表进行操作。Migrator 工具支持多种不同的数据格式和物理介质类型。支持的数据格式包括 JSON、Parquet、MongoDB 格式的 JSON、DynamoDB 格式的 JSON 和 CSV 文件。支持的物理介质类型包括文件、OCI 对象存储、本地部署的 Oracle NoSQL DatabaseOracle NoSQL Database Cloud Service 和 AWS S3。

本文章包含以下主题:

概述

Oracle NoSQL Database Migrator 支持您将 Oracle NoSQL 表从一个数据源迁移到另一个数据源,例如 Oracle NoSQL Database 内部部署或云,甚至是简单的 JSON 文件。

There can be many situations that require you to migrate NoSQL tables from or to an Oracle NoSQL Database.例如,增强 NoSQL Database 应用程序的开发人员团队可能希望使用 cloudsim 在本地 Oracle NoSQL Database Cloud Service (NDCS) 实例中测试其更新的代码。要验证所有可能的测试用例,他们必须设置与实际数据相似的测试数据。为此,他们必须将 NoSQL 表从生产环境复制到本地 NDCS 实例(云环境)。在另一种情况下,NoSQL 开发人员可能需要将其应用数据从内部部署迁移到云,反之亦然,用于开发或测试。

在所有此类情况下,您都可以使用 Oracle NoSQL Database Migrator 将 NoSQL 表从一个数据源移动到另一个数据源,例如 Oracle NoSQL Database 内部部署或云,甚至是简单的 JSON 文件。您还可以将 NoSQL 表从 MongoDB 格式的 JSON 输入文件、DynamoDB 格式的 JSON 输入文件(存储在 AWS S3 源或文件中)或 CSV 文件复制到内部部署或云中的 NoSQL 数据库

如下图所示,NoSQL Database Migrator 实用程序充当数据源与目标(称为接收器)之间的连接器或管道。本质上,此实用程序从所选源导出数据,并将该数据导入到池中。此工具面向表,也就是说,您只能在表级移动数据。单个迁移任务对单个表运行,支持以各种数据格式将表数据从源迁移到接收器。

Oracle NoSQL Database Migrator 旨在支持未来的其他源和汇。有关截至当前发行版的 Oracle NoSQL Database Migrator 支持的源和接收器的列表,请参阅支持的源和接收器

与 Oracle NoSQL Database Migrator 配合使用的术语

详细了解上图中使用的不同术语。

  • 源:从中导出 NoSQL 表以进行迁移的实体。来源示例包括 Oracle NoSQL Database 内部部署或云、JSON 文件、MongoDB 格式的 JSON 文件、DynamoDB 格式的 JSON 文件和 CSV 文件。
  • 汇:NoSQL 数据库迁移程序导入 NoSQL 表的实体。汇的一些示例包括 Oracle NoSQL Database 内部部署或云和 JSON 文件。

NoSQL Database Migrator 工具支持不同类型的源和接收器(即数据的物理介质或系统信息库)和数据格式(即数据在源或接收器中的表示方式)。支持的数据格式包括 JSON、Parquet、MongoDB 格式的 JSON、DynamoDB 格式的 JSON 和 CSV 文件。支持的源和接收器类型包括文件、OCI 对象存储、本地 Oracle NoSQL DatabaseOracle NoSQL Database Cloud Service

  • 迁移管道:源中的数据将由 NoSQL Database Migrator 传输到接收器。可以将其可视化为迁移管道。
  • 转换:您可以添加规则来修改迁移管道中的 NoSQL 表数据。这些规则称为转换。Oracle NoSQL Database Migrator 仅允许在顶层字段或列中进行数据转换。它不允许您转换嵌套字段中的数据。允许转换的一些示例包括:
    • 删除或忽略一个或多个列
    • 重命名一个或多个列,或者
    • 将多个列聚集到单个字段中,通常是 JSON 字段。
  • 配置文件:配置文件以 JSON 格式定义迁移活动所需的所有参数。稍后,您将此配置文件作为单个参数从 CLI 传递到 runMigrator 命令。典型的配置文件格式如下所示。
    {
     "source": {
       "type" : <source type>,
       //source-configuration for type. See Source Configuration Templates  .
     },
     "sink": {
       "type" : <sink type>,
       //sink-configuration for type. See Sink Configuration Templates  .
     },
     "transforms" : {
       //transforms configuration. See Transformation Configuration Templates  .
     },
     "migratorVersion" : "<migrator version>",
     "abortOnError" : <true|false>
    }
    参数 必需 (Y/N) 用途 支持的值
    source type Y 表示要从中迁移数据的源。源提供用于迁移的数据和元数据(如果有)。 要了解每个源的 type 值,请参见 Supported Sources and Sinks
    source 类型的源配置 Y 定义源的配置。这些配置参数特定于上面选择的源类型。 有关每种源类型的配置参数的完整列表,请参见 Source Configuration Templates
    sink type Y 表示要将数据迁移到的接收器。汇是迁移的目标或目标。 要了解每个源的 type 值,请参见 Supported Sources and Sinks
    sink 类型的 sink-configuration Y 定义水槽的配置。这些配置参数特定于上面选择的接收器类型。 有关每种汇类型的配置参数的完整列表,请参见 Sink Configuration Templates
    transforms 转换配置 N 定义要应用于迁移管道中数据的转换。 有关 NoSQL 数据迁移程序支持的转换的完整列表,请参见 Transformation Configuration Templates
    - migratorVersion N NoSQL 数据迁移程序的版本 -
    - abortOnError N

    指定在出现任何错误时是否停止迁移活动。

    缺省值为 true ,指示迁移在遇到迁移错误时停止。

    如果将此值设置为 false ,即使记录失败或其他迁移错误,迁移也会继续。失败的记录和迁移错误将在 CLI 终端上记录为警告。

    true、false

    注意:

    由于 JSON 文件区分大小写,除非另有指定,否则在配置文件中定义的所有参数均区分大小写。

支持的源和池

本主题提供 Oracle NoSQL Database Migrator 支持的源和接收器的列表。

您可以将此表中的有效源和汇的任意组合用于迁移活动。但是,您必须确保至少一个端(即源或接收器)必须是 Oracle NoSQL 产品。不能使用 NoSQL 数据库迁移程序将 NoSQL 表数据从一个文件移动到另一个文件。

Type
(value)

格式
(值)

有效源 有效接收器

Oracle NoSQL Database
(nosqldb)

NA Y Y

Oracle NoSQL Database Cloud Service
(nosqldb_cloud)

NA Y Y

文件系统
(file)

JSON
(json)

Y Y

MongoDB JSON
(mongodb_json)

Y N

DynamoDB JSON
(dynamodb_json)

Y N

Parquet(parquet)

N Y

CSV
(csv)

Y N

OCI 对象存储
(object_storage_oci)

JSON
(json)

Y Y

MongoDB JSON
(mongodb_json)

Y N

Parquet(parquet)

N Y

CSV
(csv)

Y N
AWS S3

DynamoDB JSON
(dynamodb_json)

Y N

注意:

许多配置参数在源和接收器配置中是通用的。为了便于参考,这些参数的说明在文档部分中针对每个源和接收器重复,这些部分解释了各种源和接收器的配置文件格式。在所有情况下,具有相同名称的参数的语法和语义相同。

源和接收器安全性

某些源和接收器类型具有用于验证目的的可选或强制安全信息。

Oracle Cloud Infrastructure (OCI) 中使用服务的所有源和汇都可以使用某些参数提供可选的安全信息。可以使用 OCI 配置文件或实例主用户提供此信息。

如果安装是安全的并且使用基于 Oracle Wallet 的验证,Oracle NoSQL Database 源和汇需要强制性的安全信息。可以通过向 <MIGRATOR_HOME>/lib 目录添加 jar 文件来提供此信息。

基于 Wallet 的验证

如果 Oracle NoSQL Database 安装使用基于 Oracle Wallet 的验证,则需要 EE 安装中的其他 jar 文件。有关详细信息,请参阅 Oracle Wallet

如果没有此 jar 文件,您将收到以下错误消息:

无法在 lib 目录中找到 kvstore-ee.jar。将 kvstore-ee.jar 复制到 lib 目录。

要防止上述异常错误,必须将 kvstore-ee.jar 文件从 EE 服务器程序包复制到 <MIGRATOR_HOME>/lib 目录。<MIGRATOR_HOME> 是通过提取 Oracle NoSQL Database Migrator 程序包创建的 nosql-migrator-M.N.O/ 目录,M.N.O 表示软件 release.major.minor 编号。例如,nosql-migrator-1.1.0/lib

注意:

Oracle NoSQL Database 的 Enterprise Edition (EE) 支持基于 wallet 的验证。

使用实例主体进行验证

实例主体是 IAM 服务功能,允许实例成为可以对服务资源执行操作的授权角色(或主体)。每个计算实例都有自己的身份,并使用添加到其中的证书进行身份验证。

Oracle NoSQL Database Migrator 提供了使用实例主体验证连接到 NoSQL 云和 OCI 对象存储源和接收器的选项。仅当在 OCI 计算实例中使用 NoSQL Database Migrator 工具时才支持该工具,例如在 OCI 上托管的 VM 中运行的 NoSQL Database Migrator 工具。要启用此功能,请使用 NoSQL 云源和接收器配置文件的 useInstancePrincipal 属性。有关不同类型源和汇的配置参数的更多信息,请参见 Source Configuration TemplatesSink Configuration Templates

有关实例主体的更多信息,请参见 Calling Services from an Instance

Oracle NoSQL Database Migrator 的工作流

了解使用 Oracle NoSQL Database Migrator 实用程序迁移 NoSQL 数据涉及的各种步骤。

下图描述了使用 NoSQL Database Migrator 所涉及的高级任务流。

下载 NoSQL 数据迁移程序实用程序

可从 Oracle NoSQL 下载页面下载 Oracle NoSQL Database Migrator 实用程序。在计算机上下载并解压缩后,可以从命令行界面访问 runMigrator 命令。

注意:

Oracle NoSQL Database Migrator 实用程序要求运行 Java 11 或更高版本。

标识源和接收器

在使用迁移程序之前,必须标识数据源和接收器。例如,如果要将 NoSQL 表从内部部署的 Oracle NoSQL Database 迁移到 JSON 格式的文件,则源将是 Oracle NoSQL Database ,接收器将是 JSON 文件。通过参考支持的源和接收器,确保 Oracle NoSQL Database Migrator 支持标识的源和接收器。这也是决定目标或接收器中 NoSQL 表的方案并创建它们的适当阶段。
  • 标识接收器表方案:如果接收器是内部部署或云中的 Oracle NoSQL Database ,则必须标识接收器表的方案并确保源数据与目标方案匹配。如果需要,使用转换将源数据映射到接收表。
    • 默认方案:NoSQL Database Migrator 提供了用于创建具有默认方案的表的选项,而无需预定义表的方案。这在将 JSON 源文件加载到 Oracle NoSQL Database 时非常有用。
      如果源是 MongoDB 格式的 JSON 文件,则表的默认方案将如下所示:
      CREATE TABLE IF NOT EXISTS <tablename>(ID STRING, DOCUMENT JSON,PRIMARY KEY(SHARD(ID))

      其中:

      - 表名 = 为配置中的表属性提供的值。

      - ID = mongoDB 导出的 JSON 源文件的每个文档中的 _id 值。

      - DOCUMENT = 对于 mongoDB 导出文件中的每个文档,不包括 _id 字段的内容将聚合到 DOCUMENT 列中。

      如果源是 DynamoDB 格式的 JSON 文件,则表的默认方案将如下所示:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type],DOCUMENT JSON,
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      其中:

      - TABLE_NAME = 为配置中的 sink 表提供的值

      - DDBPartitionKey_name = 为配置中的分区键提供的值

      - DDBPartitionKey_type = 为配置中分区键的数据类型提供的值

      - DDBSortKey_name = 为配置中的排序键提供的值(如果有)

      - DDBSortKey_type = 为配置中排序键的数据类型提供的值(如果有)

      - DOCUMENT = 聚合到 NoSQL JSON 列的 Dynamo DB 表项的分区和排序键以外的所有属性

      如果源格式为 CSV 文件,则目标表不支持默认方案。可以使用表定义创建方案文件,该表定义包含与源 CSV 文件相同的列数和数据类型。有关创建方案文件的更多详细信息,请参阅提供表方案

      对于所有其他源,默认方案将如下所示:
      CREATE TABLE IF NOT EXISTS <tablename> (ID LONG GENERATED ALWAYS AS IDENTITY, DOCUMENT JSON, PRIMARY KEY(ID))

      其中:

      - 表名 = 为配置中的表属性提供的值。

      - ID = 自动生成的 LONG 值。

      - DOCUMENT = 源提供的 JSON 记录聚合到 DOCUMENT 列中。

      注意:

      如果未在 MongoDB 格式的 JSON 文件中以字符串形式提供 _id 值,则 NoSQL Database Migrator 会先将其转换为字符串,然后再将其插入到默认方案中。
  • 提供表方案:NoSQL 数据库迁移程序允许源使用 schemaInfo 属性提供表数据的方案定义。schemaInfo 属性可用于尚未定义隐式方案的所有数据源。Sink 数据存储可以选择以下任一选项。
    • 使用 NoSQL Database Migrator 定义的默认方案。
    • 使用源提供的方案。
    • 通过定义自己的方案覆盖源提供的方案。例如,如果要将数据从源方案转换为其他方案,则需要覆盖源提供的方案并使用 NoSQL 数据库迁移程序工具的转换功能。


    表方案文件,例如 mytable_schema.ddl 可以包括表 DDL 语句。NoSQL 数据库迁移程序工具在开始迁移之前执行此表方案文件。迁移程序工具在方案文件中每行支持不超过一个 DDL 语句。例如:
    CREATE TABLE IF NOT EXISTS(id INTEGER, name STRING, age INTEGER, PRIMARY KEY(SHARD(ID)))

    注意:

    如果表存在于接收器中,并且 schemaPath 中的 DDL 与表不同,则迁移将失败。
  • 创建接收器表:标识接收器表方案后,通过管理 CLI 或使用接收器配置文件的 schemaInfo 属性创建接收器表。请参见 Sink Configuration Templates

    注意:

    如果源为 CSV 文件,则使用目标表的方案的 DDL 命令创建文件。在 sink 配置文件的 schemaInfo.schemaPath 参数中提供文件路径。

迁移表行的 TTL 元数据

在执行 NoSQL 表的迁移时,可以选择包括表行的 TTL 元数据以及实际数据。NoSQL 数据库迁移程序提供了用于支持表行 TTL 元数据的导出和导入的配置参数。此外,该工具还提供了在导入操作期间为表行选择相对到期时间的选项。可以选择使用 includeTTL 参数导出或导入 TTL 元数据。

注意:

支持迁移表行的 TTL 元数据,可用于 Oracle NoSQL DatabaseOracle NoSQL Database Cloud Service

导出 TTL 元数据

导出表时,将为具有有效到期时间的表行导出 TTL 数据。如果行未到期,则不会显式包含在导出的数据中,因为其到期值始终为 0。TTL 信息包含在每个导出的行的 _metadata JSON 对象中。NoSQL Database Migrator 将每行的到期时间导出为自 UNIX 时代(1970 年 1 月 1 日)以来的毫秒数。例如:
//Row 1
{
    "id" : 1,
    "name" : "xyz",
    "age" : 45,
    "_metadata" : {
        "expiration" : 1629709200000   //Row Expiration time in milliseconds
    }
}

//Row 2
{
    "id" : 2,
    "name" : "abc",
    "age" : 52,
    "_metadata" : {
        "expiration" : 1629709400000   //Row Expiration time in milliseconds
    }
}

//Row 3 No Metadata for below row as it will not expire
{
    "id" : 3,
    "name" : "def",
    "age" : 15
}

正在导入 TTL 元数据

可以选择使用配置参数 includeTTL 导入 TTL 元数据。导入操作在迁移包含 TTL 元数据的表行时处理以下用例。这些用例仅在指定了 includeTTL 配置参数时适用。

在用例 2 和 3 中,导入操作的缺省引用时间是从运行 NoSQL Database Migrator 工具的计算机的 System.currentTimeMillis() 获取的当前时间(以毫秒为单位)。但是,如果要延长失效时间并导入原本会立即失效的行,也可以使用 ttlRelativeDate 配置参数设置定制引用时间。
  • 用例 1 :导入表行中不存在 TTL 元数据信息。

    导入从外部源生成的 JSON 源文件或使用迁移程序的早期版本导出时,导入行没有 TTL 信息。但是,由于 includeTTL 配置参数等于 true,因此迁移程序为表行设置 TTL=0,这意味着导入表行永远不会过期。

  • 用例 2 :导入表行时,相对于引用时间,源表行的 TTL 值已过期。

    将表行导出到文件并在表行的到期时间后尝试导入表行时,表行将被忽略,不会写入存储中。

  • 用例 3 :导入表行时,相对于引用时间,源表行的 TTL 值未失效。

    将表行导出到文件并尝试在表行的到期时间之前导入表行时,会使用 TTL 值导入表行。但是,表行的新 TTL 值可能不等于导出的 TTL 值,因为 TimeToLive 类中有整数小时和日窗口约束。例如:

    导出的表行
    {
      "id" : 8,
      "name" : "xyz",
      "_metadata" : {
        "expiration" : 1629709200000 //Monday, August 23, 2021 9:00:00 AM in UTC
      }
    }

    导入时的参考时间为 1629707962582,即 2021 年 8 月 23 日星期一上午 8:39:22.582。

    导入的表行
    {
      "id" : 8,
      "name" : "xyz",
      "_metadata" : {
        "ttl" :  1629712800000 //Monday, August 23, 2021 10:00:00 AM UTC
      }
    }

将具有 IDENTITY 列的数据导入到水槽

您可以将数据从有效源导入到包含 IDENTITY 列的接收表(内部部署/云服务)。可以将“标识”列创建为“始终生成标识”或“由默认值生成标识”。有关使用 IDENTITY 列创建表的更多信息,请参阅 SQL Reference Guide 中的 Creating Tables With an IDENTITY Column

导入数据之前,请确保接收方处的 Oracle NoSQL Database 表为空(如果存在)。如果 sink 表中存在预先存在的数据,迁移可能会导致问题,例如覆盖 sink 表中的现有数据或在导入期间跳过源数据。

IDENTITY 列为 GENERATED ALWAYS AS IDENTITY 的 Sink 表

考虑一个 sink 表,其 IDENTITY 列创建为 GENERATED ALWAYS AS IDENTITY。数据导入取决于源是否为配置文件中的 IDENTITY 列和 ignoreFields 转换参数提供值。

例如,要将数据从 JSON 文件源导入到 Oracle NoSQL Database 表作为接收器。sink 表的方案为:

CREATE TABLE IF NOT EXISTS migrateID(ID INTEGER GENERATED ALWAYS AS IDENTITY, name STRING, course STRING, PRIMARY KEY
      (ID))
Migrator 实用程序按以下情况所述处理数据迁移:
源条件 用户操作 迁移结果

CASE 1:源数据不为 sink 表的 IDENTITY 字段提供值。

示例:JSON 源文件 sample_noID.json

{"name":"John", "course":"Computer Science"}
{"name":"Jane", "course":"BioTechnology"}
{"name":"Tony", "course":"Electronics"}

创建/生成配置文件。

数据迁移成功。IDENTITY 列值是自动生成的。已迁移 Oracle NoSQL Database 汇表 migrateID 中的数据:

{"ID":1001,"name":"Jane","course":"BioTechnology"}
{"ID":1003,"name":"John","course":"Computer Science"}
{"ID":1002,"name":"Tony","course":"Electronics"}

CASE 2:源数据提供接收器表的 IDENTITY 字段的值。

示例:JSON 源文件 sampleID.json

{"ID":1, "name":"John", "course":"Computer Science"}
{"ID":2, "name":"Jane", "course":"BioTechnology"}
{"ID":3, "name":"Tony", "course":"Electronics"}

创建/生成配置文件。为接收器配置模板中的 ID 列提供 ignoreFields 转换。

"transforms" : { "ignoreFields" : ["ID"] }

数据迁移成功。将跳过提供的 ID 值,并自动生成 IDENTITY 列值。

已迁移 Oracle NoSQL Database 汇表 migrateID 中的数据:
{"ID":2003,"name":"John","course":"Computer Science"}
{"ID":2002,"name":"Tony","course":"Electronics"}
{"ID":2001,"name":"Jane","course":"BioTechnology"}

创建/生成配置文件时不使用 IDENTITY 列的 ignoreFields 转换。

数据迁移失败,并显示以下错误消息:

"Cannot set value for a generated always identity column".

有关转换配置参数的更多详细信息,请参阅转换配置模板主题。

IDENTITY 列为 GENERATED BY DEFAULT AS IDENTITY 的 Sink 表

考虑一个 sink 表,其 IDENTITY 列创建为 GENERATED BY DEFAULT AS IDENTITY。数据导入取决于源是否为 IDENTITY 列和 ignoreFields 转换参数提供值。

例如,要将数据从 JSON 文件源导入到 Oracle NoSQL Database 表作为接收器。sink 表的方案为:

CREATE TABLE IF NOT EXISTS migrateID(ID INTEGER GENERATED BY DEFAULT AS IDENTITY, name STRING, course STRING, PRIMARY KEY
      (ID))
Migrator 实用程序按以下情况所述处理数据迁移:
源条件 用户操作 迁移结果

CASE 1:源数据不为 sink 表的 IDENTITY 字段提供值。

示例:JSON 源文件 sample_noID.json

{"name":"John", "course":"Computer Science"}
{"name":"Jane", "course":"BioTechnology"}
{"name":"Tony", "course":"Electronics"}

创建/生成配置文件。

数据迁移成功。IDENTITY 列值是自动生成的。已迁移 Oracle NoSQL Database 汇表 migrateID 中的数据:
{"ID":1,"name":"John","course":"Computer Science"}
{"ID":2,"name":"Jane","course":"BioTechnology"}
{"ID":3,"name":"Tony","course":"Electronics"}

CASE 2:源数据提供接收器表的 IDENTITY 字段的值,并且是主键字段。

示例:JSON 源文件 sampleID.json

{"ID":1, "name":"John", "course":"Computer Science"}
{"ID":2, "name":"Jane", "course":"BioTechnology"}
{"ID":3, "name":"Tony", "course":"Electronics"}

创建/生成配置文件。为接收器配置模板中的 ID 列提供 ignoreFields 转换 (建议)

"transforms" : { "ignoreFields" : ["ID"] }

数据迁移成功。将跳过提供的 ID 值,并自动生成 IDENTITY 列值。

已迁移 Oracle NoSQL Database 汇表 migrateID 中的数据:
{"ID":1002,"name":"John","course":"Computer Science"}
{"ID":1001,"name":"Jane","course":"BioTechnology"}
{"ID":1003,"name":"Tony","course":"Electronics"}

创建/生成配置文件时不使用 IDENTITY 列的 ignoreFields 转换。

数据迁移成功。源中提供的 ID 值将复制到 sink 表中的 ID 列中。

尝试在不提供 ID 值的情况下向表中插入其他行时,序列生成器会尝试自动生成 ID 值。序列生成器的起始值为 1。因此,生成的 ID 值可能会复制 sink 表中的现有 ID 值之一。由于这违反了主键约束条件,因此将返回一个错误,并且不会插入该行。

有关其它信息,请参阅序列生成器

要避免违反主键约束条件,序列生成器必须以不与源表中现有 ID 值冲突的值启动序列。要使用 START WITH 属性进行此修改,请参见以下示例:

示例Oracle NoSQL Database 汇表 migrateID 中的迁移数据:
{"ID":1,"name":"John","course":"Computer Science"}
{"ID":2,"name":"Jane","course":"BioTechnology"}
{"ID":3,"name":"Tony","course":"Electronics"}
要查找序列生成器要插入 ID 列的相应值,请使用以下查询提取 ID 字段的最大值:
SELECT max(ID) FROM migrateID
输出:
{"Column_1":3}
sink 表中 ID 列的最大值为 3。您希望序列生成器开始生成超过 3 的 ID 值,以避免重复。使用以下语句将序列生成器的 START WITH 属性更新为 4:
ALTER Table migrateID (MODIFY ID GENERATED BY DEFAULT AS IDENTITY (START WITH 4))

这将从 4 开始序列。

现在,在不提供 ID 值的情况下向接收表插入行时,序列生成器会自动从 4 开始生成 ID 值,以避免 ID 重复。

有关转换配置参数的更多详细信息,请参阅转换配置模板主题。

运行 runMigrator 命令

runMigrator 可执行文件位于提取的 NoSQL Database Migrator 文件中。必须在系统上安装 Java 11 或更高版本和 bash 才能成功运行 runMigrator 命令。

可以通过两种方式运行 runMigrator 命令:
  1. 通过使用 runMigrator 命令的运行时选项创建配置文件,如下所示。
    [~]$ ./runMigrator
    configuration file is not provided. Do you want to generate configuration? (y/n)                                                                              
     
    [n]: y
    ...
    ...
    • 调用 runMigrator 实用程序时,它会提供一系列运行时选项,并根据您对每个选项的选择创建配置文件。
    • 实用程序创建配置文件后,您可以选择在同一运行中继续执行迁移活动,或者保存配置文件以供将来迁移。
    • 无论您决定使用生成的配置文件继续或延迟迁移活动,该文件都可以进行编辑或自定义,以满足您未来的要求。您可以以后使用定制配置文件进行迁移。
  2. 通过使用 -c--config 选项将手动创建的配置文件(采用 JSON 格式)作为运行时参数传递。在使用 -c--config 选项运行 runMigrator 命令之前,必须手动创建配置文件。有关源和接收器配置参数的任何帮助,请参阅 Oracle NoSQL Database Migrator Reference
    [~]$ ./runMigrator -c </path/to/the/configuration/json/file>

记录迁移程序进度

NoSQL Database Migrator 工具提供了用于将跟踪、调试和进度消息打印到标准输出或文件中的选项。此选项可用于跟踪迁移操作的进度,特别是对于非常大的表或数据集。

  • 日志级别

    要通过 NoSQL Database Migrator 工具控制日志记录行为,请将 --log-level 或 -l 运行时间参数传递到 runMigrator 命令。您可以通过传递适当的日志级别值来指定要写入的日志信息量。

    $./runMigrator --log-level <loglevel>
    示例:
    $./runMigrator --log-level debug

    表 -NoSQL Database Migrator 支持的日志级别

    日志级别 说明
    警告 输出错误和警告。
    信息(默认值 列显数据迁移的进度状态,例如验证源、验证接收器、创建表以及迁移的数据记录数。
    调试 打印其他调试信息。
    全部 输出所有内容。此级别打开所有级别的日志记录。
  • 日志文件:
    可以使用 --log-file-f 参数指定日志文件的名称。如果将 --log-file 作为运行时参数传递到 runMigrator 命令,则 NoSQL Database Migrator 会将所有日志消息写入其他文件,并将其写入标准输出。
    $./runMigrator --log-file <log file name>
    示例:
    $./runMigrator --log-file nosql_migrator.log

Oracle NoSQL Database Migrator 的用例演示

了解如何使用 Oracle NoSQL Database Migrator 针对特定用例执行数据迁移。您可以在每个用例中找到详细的系统说明和代码示例来执行迁移。

本文章包含以下主题:

Oracle NoSQL Database Cloud Service 迁移到 JSON 文件

此示例说明如何使用 Oracle NoSQL Database Migrator 将 NoSQL 表的数据和方案定义从 Oracle NoSQL Database Cloud Service (NDCS) 复制到 JSON 文件。

用例

组织决定使用 Oracle NoSQL Database Cloud Service (NDCS) 数据训练模型,以预测未来行为并提供个性化建议。他们可以将 NDCS 表的数据定期复制到 JSON 文件,并将其应用于分析引擎以分析和训练模型。这样有助于他们将分析查询与低延迟关键路径分开。

示例

对于演示,让我们看看如何将名为 myTable 的 NoSQL 表的数据和方案定义从 NDCS 迁移到 JSON 文件。
先决条件
  • 确定迁移的源和接收器。
    • 来源:Oracle NoSQL Database Cloud Service
    • Sink:JSON 文件
  • 确定 OCI 云身份证明并将其捕获到 OCI 配置文件中。将配置文件保存在 /home/.oci/config 中。请参见获取凭据
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 确定 Oracle NoSQL Database Cloud Service 的区域端点和区间名称。
    • 端点:us-phoenix-1
    • 区间:developers
过程
要将 myTable 的数据和方案定义从 Oracle NoSQL Database Cloud Service 迁移到 JSON 文件,请执行以下操作:
  1. 打开命令提示符并导航到提取 NoSQL Database Migrator 实用程序的目录。
  2. 要使用 NoSQL Database Migrator 生成配置文件,请运行不带任何运行时参数的 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator
  3. 由于您未将配置文件作为运行时参数提供,因此实用程序会提示您是否要立即生成配置。键入 y
    Configuration file is not provided. Do you want to generate
    configuration? (y/n) [n]: y
    
    Generating a configuration file interactively.
    
    
  4. 根据实用程序中的提示,选择 "Source"(源)配置的选项。
    Enter a location for your config [./migrator-config.json]: /home/<user>/nosqlMigrator/NDCS2JSON
    Select the source: 
    1) nosqldb
    2) nosqldb_cloud
    3) file
    4) object_storage_oci
    5) aws_s3
    #? 2
    
    Configuration for source type=nosqldb_cloud
    Enter endpoint URL or region ID of the Oracle NoSQL Database Cloud: us-phoenix-1
    Select the authentication type: 
    1) credentials_file
    2) instance_principal
    3) delegation_token
    #? 1
    Enter path to the file containing OCI credentials [/home/<user>/.oci/config]:
    Enter the profile name in OCI credentials file [DEFAULT]: 
    Enter the compartment name or id of the table []: developers
    Enter table name: myTable
    Include TTL data? If you select 'yes' TTL of rows will also 
    be included in the exported data.(y/n) [n]: 
    Enter percentage of table read units to be used for migration operation. (1-100) [90]:
    Enter store operation timeout in milliseconds. (1-30000) [5000]:
  5. 根据实用程序中的提示,选择 Sink 配置的选项。
    Select the sink:
    1) nosqldb
    2) nosqldb_cloud
    3) file
    #? 3
    Configuration for sink type=file
    Enter path to a file to store JSON data: /home/apothula/nosqlMigrator/myTableJSON
    Would you like to store JSON in pretty format? (y/n) [n]: y
    Would you like to migrate the table schema also? (y/n) [y]: y
    Enter path to a file to store table schema: /home/apothula/nosqlMigrator/myTableSchema
  6. 根据实用程序中的提示,选择源数据转换的选项。默认值为 n
    Would you like to add transformations to source data? (y/n) [n]:
  7. 输入您的选择以确定在任何记录无法迁移时是否继续迁移。
    Would you like to continue migration in case of any record/row is failed to migrate?: (y/n) [n]:
    
  8. 该实用程序在屏幕上显示生成的配置。
    generated configuration is:
    {
      "source": {
        "type": "nosqldb_cloud",
        "endpoint": "us-phoenix-1",
        "table": "myTable",
        "compartment": "developers",
        "credentials": "/home/apothula/.oci/config",
        "credentialsProfile": "DEFAULT",
        "readUnitsPercent": 90,
        "requestTimeoutMs": 5000
      },
      "sink": {
        "type": "file",
        "format": "json",
        "schemaPath": "/home/apothula/nosqlMigrator/myTableSchema",
        "pretty": true,
        "dataPath": "/home/apothula/nosqlMigrator/myTableJSON"
      },
      "abortOnError": true,
      "migratorVersion": "1.0.0"
    }
  9. 最后,实用程序会提示您选择是否要使用生成的配置文件继续迁移。默认选项为 y

    注意:

    如果选择 n,则可以使用生成的配置文件使用 ./runMigrator -c./runMigrator --config 选项运行迁移。
    would you like to run the migration with above configuration?
    If you select no, you can use the generated configuration file to run the migration using
    ./runMigrator --config /home/apothula/nosqlMigrator/NDCS2JSON
    (y/n) [y]:
  10. NoSQL 数据库迁移程序可将数据和方案从 NDCS 迁移到 JSON 文件。
    Records provided by source=10,Records written to sink=10,Records failed=0.
    Elapsed time: 0min 1sec 277ms
    Migration completed.
验证

要验证迁移,可以打开 JSON Sink 文件并查看方案和数据。

-- Exported myTable Data
 
[~/nosqlMigrator]$cat myTableJSON
{
  "id" : 10,
  "document" : {
    "course" : "Computer Science",
    "name" : "Neena",
    "studentid" : 105
  }
}
{
  "id" : 3,
  "document" : {
  "course" : "Computer Science",
    "name" : "John",
    "studentid" : 107
  }
}
{
  "id" : 4,
  "document" : {
    "course" : "Computer Science",
    "name" : "Ruby",
    "studentid" : 100
  }
}
{
  "id" : 6,
  "document" : {
    "course" : "Bio-Technology",
    "name" : "Rekha",
    "studentid" : 104
  }
}
{
  "id" : 7,
  "document" : {
    "course" : "Computer Science",
    "name" : "Ruby",
    "studentid" : 100
  }
}
{
  "id" : 5,
  "document" : {
    "course" : "Journalism",
    "name" : "Rani",
    "studentid" : 106
  }
}
{
  "id" : 8,
  "document" : {
    "course" : "Computer Science",
    "name" : "Tom",
    "studentid" : 103
  }
}
{
  "id" : 9,
  "document" : {
    "course" : "Computer Science",
    "name" : "Peter",
    "studentid" : 109
  }
}
{
  "id" : 1,
  "document" : {
    "course" : "Journalism",
    "name" : "Tracy",
    "studentid" : 110
  }
}
{
  "id" : 2,
  "document" : {
    "course" : "Bio-Technology",
    "name" : "Raja",
    "studentid" : 108
  }
}
-- Exported myTable Schema
 
[~/nosqlMigrator]$cat myTableSchema
CREATE TABLE IF NOT EXISTS myTable (id INTEGER, document JSON, PRIMARY KEY(SHARD(id)))

从本地部署的 Oracle NoSQL Database 迁移到 Oracle NoSQL Database Cloud Service

此示例说明如何使用 Oracle NoSQL Database Migrator 将 NoSQL 表的数据和方案定义从 Oracle NoSQL Database 复制到 Oracle NoSQL Database Cloud Service (NDCS)。

用例

作为开发人员,您正在探索各种选项,以避免管理现有 NoSQL Database KVStore 工作负载的资源、集群和垃圾收集的开销。作为解决方案,您决定将现有的内部部署 KVStore 工作负载迁移到 Oracle NoSQL Database Cloud Service ,因为 NDCS 会自动管理这些工作负载。

示例

在演示中,让我们看看如何将名为 myTable 的 NoSQL 表的数据和方案定义从 NoSQL 数据库 KVStore 迁移到 NDCS。我们还将使用此用例说明如何通过传递预先创建的配置文件来运行 runMigrator 实用程序。
先决条件
  • 确定迁移的源和接收器。
    • 来源:Oracle NoSQL Database
    • Sink:Oracle NoSQL Database Cloud Service
  • 确定 OCI 云身份证明并将其捕获到 OCI 配置文件中。将配置文件保存在 /home/.oci/config 中。请参阅使用 Oracle NoSQL Database Cloud Service 中的获取身份证明
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 确定 Oracle NoSQL Database Cloud Service 的区域端点和区间名称。
    • 端点:us-phoenix-1
    • 区间:developers
  • 确定内部部署 KVStore 的以下详细信息:
    • storeName: kvstore
    • helperHosts: <hostname>:5000
    • 表:myTable
过程
要将 myTable 的数据和方案定义从 NoSQL 数据库 KVStore 迁移到 NDCS,请执行以下操作:
  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates
    {
      "source" : {
        "type" : "nosqldb",
        "storeName" : "kvstore",
        "helperHosts" : ["<hostname>:5000"],
        "table" : "myTable",
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "myTable",
        "compartment" : "developers",
        "schemaInfo" : {
          "schemaPath" : "<complete/path/to/the/JSON/file/with/DDL/commands/for/the/schema/definition>",
          "readUnits" : 100,
          "writeUnits" : 100,
          "storageSize" : 1
        },
        "credentials" : "<complete/path/to/oci/config/file>",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.0.0"
    }
  2. 打开命令提示符并导航到提取 NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config-c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator --config <complete/path/to/the/JSON/config/file>
    
  4. 实用程序继续进行数据迁移,如下所示。
    Records provided by source=10, Records written to sink=10, Records failed=0.
    Elapsed time: 0min 10sec 426ms
    Migration completed.
验证

要验证迁移,可以登录到 NDCS 控制台并验证是否已使用源数据创建 myTable

从 JSON 文件源迁移到 Oracle NoSQL Database Cloud Service

此示例说明如何使用 Oracle NoSQL Database Migrator 将数据从 JSON 文件源复制到 Oracle NoSQL Database Cloud Service

在评估多个选项后,组织最终将 Oracle NoSQL Database Cloud Service 作为其 NoSQL 数据库平台。由于其源内容采用 JSON 文件格式,因此他们正在寻找一种将其迁移到 Oracle NoSQL Database Cloud Service 的方法。

在此示例中,您将学习从名为 SampleData.json 的 JSON 文件迁移数据。通过传递预创建的配置文件运行 runMigrator 实用程序。如果配置文件未作为运行时参数提供,runMigrator 实用程序会提示您通过交互式过程生成配置。

先决条件
  • 确定迁移的源和接收器。
    • 源:JSON 源文件。
      SampleData.json 是源文件。它包含多个 JSON 文档,每行一个文档,用新行字符分隔。
      {"id":6,"val_json":{"array":["q","r","s"],"date":"2023-02-04T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-03-04T02:38:57.520Z","numfield":30,"strfield":"foo54"},{"datefield":"2023-02-04T02:38:57.520Z","numfield":56,"strfield":"bar23"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":3,"val_json":{"array":["g","h","i"],"date":"2023-02-02T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-02T02:38:57.520Z","numfield":28,"strfield":"foo3"},{"datefield":"2023-02-02T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":7,"val_json":{"array":["a","b","c"],"date":"2023-02-20T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-01-20T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-01-22T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
      {"id":4,"val_json":{"array":["j","k","l"],"date":"2023-02-03T02:38:57.520Z","nestarray":[[1,2,3],[10,20,30]],"nested":{"arrayofobjects":[{"datefield":"2023-02-03T02:38:57.520Z","numfield":28,"strfield":"foo"},{"datefield":"2023-02-03T02:38:57.520Z","numfield":38,"strfield":"bar"}],"nestNum":10,"nestString":"bar"},"num":1,"string":"foo"}}
    • Sink:Oracle NoSQL Database Cloud Service
  • 确定 OCI 云身份证明并在配置文件中捕获它们。将配置文件保存在 /home/user/.oci/config 中。有关更多详细信息,请参阅使用 Oracle NoSQL Database Cloud Service 中的获取身份证明
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    region=us-ashburn-1
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 确定 Oracle NoSQL Database Cloud Service 的区域端点和区间名称。
    • 端点:us-ashburn-1
    • 区间:Training-NoSQL
  • 确定 JSON 源文件的以下详细信息:
    • schemaPath: <absolute path to the schema definition file containing DDL statements for the NoSQL table at the sink>.

      在此示例中,DDL 文件为 schema_json.ddl
      create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY
          KEY(id));

      如果未提供 schemaPathOracle NoSQL Database Migrator 提供了使用默认方案创建表的选项。有关更多详细信息,请参阅 Workflow for Oracle NoSQL Database Migrator 中的 Identify the Source and Sink 主题。

    • 数据路径:<absolute path to a file or directory containing the JSON data for migration>
过程
要将 JSON 源文件从 SampleData.json 迁移到 Oracle NoSQL Database Cloud Service ,请执行以下操作:
  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates
    {
      "source" : {
        "type" : "file",
        "format" : "json",
        "schemaInfo" : {
          "schemaPath" : "[~/nosql-migrator-1.5.0]/schema_json.ddl"
        },
        "dataPath" : "[~/nosql-migrator-1.5.0]/SampleData.json"
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "Migrate_JSON",
        "compartment" : "Training-NoSQL",
        "includeTTL" : false,
        "schemaInfo" : {
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1,
          "useSourceSchema" : true
        },
        "credentials" : "/home/user/.oci/config",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
  2. 打开命令提示符并导航到提取 Oracle NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config-c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosql-migrator-1.5.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. 实用程序继续进行数据迁移,如下所示。Migrate_JSON 表使用 schemaPath 中提供的方案在水槽中创建。
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [cloud sink] : start loading DDLs
    [cloud sink] : executing DDL: create table Migrate_JSON (id INTEGER, val_json JSON, PRIMARY KEY(id)),limits: [100, 60, 1]
    [cloud sink] : completed loading DDLs
    [cloud sink] : start loading records
    [json file source] : start parsing JSON records from file: SampleData.json
    [INFO] migration completed.
    Records provided by source=4, Records written to sink=4, Records failed=0, Records skipped=0.
    Elapsed time: 0min 5sec 778ms
    Migration completed.
验证
要验证迁移,可以登录到 Oracle NoSQL Database Cloud Service 控制台并验证 Migrate_JSON 表是使用源数据创建的。有关访问控制台的过程,请参阅 Oracle NoSQL Database Cloud Service 文档中的 Accessing the Service from the Infrastructure Console 文章。

图 - Oracle NoSQL Database Cloud Service 控制台表



图 - Oracle NoSQL Database Cloud Service 控制台表数据



从 MongoDB JSON 文件迁移到 Oracle NoSQL Database Cloud Service

此示例说明如何使用 Oracle NoSQL Database Migrator 将 Mongo-DB 格式化数据复制到 Oracle NoSQL Database Cloud Service (NDCS)。

用例

在评估多个选项后,组织最终将 Oracle NoSQL Database Cloud Service 作为其 NoSQL 数据库平台。由于其 NoSQL 表和数据位于 MongoDB 中,因此他们正在寻找一种方法来将这些表和数据迁移到 Oracle NDCS。

通过在源配置模板中指定文件或目录,可以复制包含要迁移的 MongoDB 导出的 JSON 数据的文件或目录。

MongoDB 格式的 JSON 文件示例如下所示:
{"_id":0,"name":"Aimee Zank","scores":[{"score":1.463179736705023,"type":"exam"},{"score":11.78273309957772,"type":"quiz"},{"score":35.8740349954354,"type":"homework"}]}
{"_id":1,"name":"Aurelia Menendez","scores":[{"score":60.06045071030959,"type":"exam"},{"score":52.79790691903873,"type":"quiz"},{"score":71.76133439165544,"type":"homework"}]}
{"_id":2,"name":"Corliss Zuk","scores":[{"score":67.03077096065002,"type":"exam"},{"score":6.301851677835235,"type":"quiz"},{"score":66.28344683278382,"type":"homework"}]}
{"_id":3,"name":"Bao Ziglar","scores":[{"score":71.64343899778332,"type":"exam"},{"score":24.80221293650313,"type":"quiz"},{"score":42.26147058804812,"type":"homework"}]}
{"_id":4,"name":"Zachary Langlais","scores":[{"score":78.68385091304332,"type":"exam"},{"score":90.2963101368042,"type":"quiz"},{"score":34.41620148042529,"type":"homework"}]}

MongoDB 支持两种类型的文件 JSON 格式扩展: Canonical modeRelaxed mode 。您可以在 Canonical 或 Relaxed 模式下提供使用 mongoexport 工具生成的 MongoDB 格式的 JSON 文件。NoSQL 数据库迁移程序支持两种模式进行迁移。

有关 MongoDB 扩展 JSON (v2) 文件的更多信息,请参见 mongoexport_formats

有关生成 MongoDB 格式的 JSON 文件的更多信息,请参见 mongoexport

示例

对于演示,让我们看看如何将 MongoDB 格式的 JSON 文件迁移到 NDCS。我们将为此示例使用手动创建的配置文件。
先决条件
  • 确定迁移的源和接收器。
    • 源:MongoDB 格式的 JSON 文件
    • Sink:Oracle NoSQL Database Cloud Service
  • 使用 mongoexport 实用程序从 Mongo DB 中提取数据。有关更多信息,请参见 mongoexport
  • 使用与 Mongo-DB 格式的 JSON 文件中的数据匹配的表方案在接收器中创建 NoSQL 表。或者,您可以通过将 defaultSchema 属性设置为 true 来指示 NoSQL 数据库迁移程序创建具有默认模式结构的表。

    注意:

    对于 MongoDB-Formatted JSON 源,表的默认方案将为:
    CREATE TABLE IF NOT EXISTS <tablename>(ID STRING, DOCUMENT JSON,PRIMARY KEY(SHARD(ID))
    
    其中:
    • tablename = 表配置的值。
    • ID = mongoDB 导出的 JSON 源文件中的 _id 值。
    • DOCUMENT = mongoDB 导出的 JSON 源文件的全部内容聚集到 DOCUMENT 列中,不包括 _id 字段。
  • 确定 OCI 云身份证明并将其捕获到 OCI 配置文件中。在 /home/.oci/config 中保存配置文件。请参阅使用 Oracle NoSQL Database Cloud Service 中的获取身份证明
    [DEFAULT]
    tenancy=ocid1.tenancy.oc1....
    user=ocid1.user.oc1....
    fingerprint= 43:d1:....
    key_file=</fully/qualified/path/to/the/private/key/>
    pass_phrase=<passphrase>
  • 确定 Oracle NoSQL Database Cloud Service 的区域端点和区间名称。
    • 端点:us-phoenix-1
    • 区间:developers
过程

要将 MongoDB 格式的 JSON 数据迁移到 Oracle NoSQL Database Cloud Service ,请执行以下操作:

  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates
    {
      "source" : {
        "type" : "file",
        "format" : "mongodb_json",
        "dataPath" : "<complete/path/to/the/MongoDB/Formatted/JSON/file>"
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "mongoImport",
        "compartment" : "developers",
        "schemaInfo" : {
          "defaultSchema" : true,
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1
        },
        "credentials" : "<complete/path/to/the/oci/config/file>",
        "credentialsProfile" : "DEFAULT",
        "writeUnitsPercent" : 90,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.0.0"
    }
  2. 打开命令提示符并导航到提取 NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config-c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator --config <complete/path/to/the/JSON/config/file>
    
  4. 实用程序继续进行数据迁移,如下所示。
    Records provided by source=29,353, Records written to sink=29,353, Records failed=0.
    Elapsed time: 9min 9sec 630ms
    Migration completed.
验证

要验证迁移,可以登录到 NDCS 控制台并验证是否已使用源数据创建 myTable

从 DynamoDB JSON 文件迁移到 Oracle NoSQL Database

此示例说明如何使用 Oracle NoSQL Database Migrator 将 DynamoDB JSON 文件复制到 Oracle NoSQL Database。

用例:

在评估了多个选项之后,组织最终确定了 Oracle NoSQL Database 而非 DynamoDB 数据库。组织希望将其表和数据从 DynamoDB 迁移到 Oracle NoSQL Database(内部部署)。

有关更多详细信息,请参阅将 DynamoDB 表映射到 Oracle NoSQL 表

通过在源配置模板中指定路径,可以从文件系统迁移包含 DynamoDB 导出的 JSON 数据的文件或目录。

DynamoDB 格式的 JSON 文件示例如下所示:
{"Item":{"Id":{"N":"101"},"Phones":{"L":[{"L":[{"S":"555-222"},{"S":"123-567"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"570004"},"Street":{"S":"21 main"},"DoorNum":{"N":"201"},"City":{"S":"London"}}},"FirstName":{"S":"Fred"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"Smith"},"FavColors":{"SS":["Red","Green"]},"Age":{"N":"22"}}}
{"Item":{"Id":{"N":"102"},"Phones":{"L":[{"L":[{"S":"222-222"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"560014"},"Street":{"S":"32 main"},"DoorNum":{"N":"1024"},"City":{"S":"Wales"}}},"FirstName":{"S":"John"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"White"},"FavColors":{"SS":["Blue"]},"Age":{"N":"48"}}}

将导出的 DynamoDB 表数据从 AWS S3 存储复制到本地挂载的文件系统。

示例:

在本演示中,您将学习如何将 DynamoDB JSON 文件迁移到 Oracle NoSQL Database(内部部署)。您将为此示例使用手动创建的配置文件。

Prerequisites

  • 确定迁移的源和接收器。
    • 来源:DynamoDB JSON 文件
    • Sink:Oracle NoSQL Database(内部部署)
  • 要将 DynamoDB 表数据导入 Oracle NoSQL Database,必须先将 DynamoDB 表导出到 S3。请参阅将 DynamoDB 表数据导出到 Amazon S3 中提供的步骤以导出表。导出时,选择格式为 DynamoDB JSON 。导出的数据包含多个 gzip 文件中的 DynamoDB 表数据,如下所示。
    / 01639372501551-bb4dd8c3 
    |-- 01639372501551-bb4dd8c3 ==> exported data prefix
    |----data
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data
    |----manifest-files.json
    |----manifest-files.md5
    |----manifest-summary.json
    |----manifest-summary.md5
    |----_started
  • 您必须从 AWS s3 下载文件。下载后文件的结构如下所示。
    download-dir/01639372501551-bb4dd8c3     
    |----data    
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data   
    |----manifest-files.json   
    |----manifest-files.md5   
    |----manifest-summary.json   
    |----manifest-summary.md5   
    |----_started

过程

要将 DynamoDB JSON 数据迁移到 Oracle NoSQL Database,请执行以下操作:
  1. 使用标识的源和接收器 details.See 源配置模板接收器配置模板准备配置文件(采用 JSON 格式)。
    可选择以下两个选项之一。
    • 选项 1:使用默认方案配置将 DynamoDB 表 a 导入为 JSON 文档。
      此处,defaultSchemaTRUE,因此迁移程序会在接收器处创建默认方案。您需要指定 DDBPartitionKey 和相应的 NoSQL 列类型。否则将引发错误。
      {
       "source" : {
         "type" : "file",
         "format" : "dynamodb_json",
         "dataPath" : "<complete/path/to/the/DynamoDB/Formatted/JSON/file>"
       },
       "sink" : {
          "type" : "nosqldb",
          "table" : "<table_name>",
          "storeName" : "kvstore",
          "helperHosts" : ["<hostname>:5000"]
          "schemaInfo" : {
             "defaultSchema" : true,    
             "DDBPartitionKey" : "<PrimaryKey:Datatype>",
           },  
        },
        "abortOnError" : true,
        "migratorVersion" : "1.0.0"
      }
      对于 DynamoDB JSON 源,表的默认方案如下所示:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type], DOCUMENT JSON, 
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      WHERE

      TABLE_NAME = 为配置中的接收器 'table' 提供的值

      DDBPartitionKey_name = 为配置中的部分密钥提供的值

      DDBPartitionKey_type = 为配置中分区键的数据类型提供的值

      DDBSortKey_name = 为配置中的排序键提供的值(如果有)

      DDBSortKey_type = 为配置中排序键的数据类型提供的值(如果有)

      DOCUMENT = 聚合到 NoSQL JSON 列的 Dynamo DB 表项的分区和排序键以外的所有属性

    • 选项 2:使用用户提供的方案文件将 DynamoDB 表作为固定列导入。
      此处,defaultSchemaFALSE,您将 schemaPath 指定为包含 DDL 语句的文件。有关更多详细信息,请参阅将 DynamoDB 类型映射到 Oracle NoSQL 类型

      注意:

      如果 Dynamo DB 表的数据类型在 NoSQL 中不受支持,则迁移将失败。
      下面显示了一个示例方案文件。
      CREATE TABLE IF NOT EXISTS sampledynDBImp (AccountId INTEGER,document JSON, 
      PRIMARY KEY(SHARD(AccountId)));
      方案文件用于在迁移过程中在接收器中创建表。只要提供主键数据,就会插入输入 JSON 记录,否则会引发错误。

      注意:

      如果输入数据不包含特定列(主键除外)的值,则将使用列默认值。创建表时,默认值应为列定义的一部分。例如 id INTEGER not null default 0。如果该列没有默认定义,则如果没有为该列提供值,则会插入 SQL NULL。
      {
        "source" : {
          "type" : "file",
          "format" : "dynamodb_json",
          "dataPath" : "<complete/path/to/the/DynamoDB/Formatted/JSON/file>"
        },
        "sink" : {
          "type" : "nosqldb",
          "table" : "<table_name>",
          "schemaInfo" : {
            "defaultSchema" : false,
            "readUnits" : 100,
            "writeUnits" : 60,
            "schemaPath" : "<full path of the schema file with the DDL statement>",
            "storageSize" : 1
          },
          "storeName" : "kvstore",
          "helperHosts" : ["<hostname>:5000"]
        },
        "abortOnError" : true,
        "migratorVersion" : "1.0.0"
      }
  2. 打开命令提示符并导航到解压缩 NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config-c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 实用程序继续进行数据迁移,如下所示。
    Records provided by source=7..,
    Records written to sink=7,
    Records failed=0,
    Records skipped=0.
    Elapsed time: 0 min 2sec 50ms
    Migration completed.

验证

在 KVStore 中启动 SQL 提示符。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
验证是否已使用源数据创建新表:
desc <table_name>
SELECT * from <table_name>

从 AWS S3 中的 DynamoDB JSON 文件迁移到 Oracle NoSQL Database Cloud Service

此示例说明如何使用 Oracle NoSQL Database Migrator 将存储在 AWS S3 存储中的 DynamoDB JSON 文件复制到 Oracle NoSQL Database Cloud Service (NDCS)。

用例:

在评估了多个选项后,组织最终确定了基于 DynamoDB 数据库的 Oracle NoSQL Database Cloud Service。组织希望将其表和数据从 DynamoDB 迁移到 Oracle NoSQL Database Cloud Service。

有关更多详细信息,请参阅将 DynamoDB 表映射到 Oracle NoSQL 表

您可以通过在源配置模板中指定路径,从 AWS S3 存储迁移包含 DynamoDB 导出的 JSON 数据的文件。

DynamoDB 格式的 JSON 文件示例如下所示:
{"Item":{"Id":{"N":"101"},"Phones":{"L":[{"L":[{"S":"555-222"},{"S":"123-567"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"570004"},"Street":{"S":"21 main"},"DoorNum":{"N":"201"},"City":{"S":"London"}}},"FirstName":{"S":"Fred"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"Smith"},"FavColors":{"SS":["Red","Green"]},"Age":{"N":"22"}}}
{"Item":{"Id":{"N":"102"},"Phones":{"L":[{"L":[{"S":"222-222"}]}]},"PremierCustomer":{"BOOL":false},"Address":{"M":{"Zip":{"N":"560014"},"Street":{"S":"32 main"},"DoorNum":{"N":"1024"},"City":{"S":"Wales"}}},"FirstName":{"S":"John"},"FavNumbers":{"NS":["10"]},"LastName":{"S":"White"},"FavColors":{"SS":["Blue"]},"Age":{"N":"48"}}}

将 DynamoDB 表导出到 AWS S3 存储,如将 DynamoDB 表数据导出到 Amazon S3 中所指定。

示例:

在本演示中,您将学习如何将 AWS S3 源中的 DynamoDB JSON 文件迁移到 NDCS。您将为此示例使用手动创建的配置文件。

Prerequisites

  • 确定迁移的源和接收器。
    • 来源:DynamoDB AWS 中的 JSON 文件 S3
    • Sink:Oracle NoSQL Database Cloud Service
  • 标识 AWS DynamoDB 中需要迁移到 NDCS 的表。使用您的身份证明登录到 AWS 控制台。转至 DynamoDB 。在下,选择要迁移的表。
  • 创建对象存储桶并将表导出到 S3。从 AWS 控制台转至 S3 。在存储桶下,创建新对象存储桶。返回到 DynamoDB 并单击导出到 S3 。提供源表和目标 S3 存储桶,然后单击导出
    请参阅将 DynamoDB 表数据导出到 Amazon S3 中提供的步骤以导出表。导出时,选择格式为 DynamoDB JSON 。导出的数据包含多个 gzip 文件中的 DynamoDB 表数据,如下所示。
    / 01639372501551-bb4dd8c3 
    |-- 01639372501551-bb4dd8c3 ==> exported data prefix
    |----data
    |------sxz3hjr3re2dzn2ymgd2gi4iku.json.gz  ==>table data
    |----manifest-files.json
    |----manifest-files.md5
    |----manifest-summary.json
    |----manifest-summary.md5
    |----_started
  • 您需要 aws 凭据(包括访问密钥 ID 和密钥访问密钥)和配置文件(凭据和可选配置)才能从迁移程序访问 AWS S3。有关配置文件的更多详细信息,请参见 Set and view configuration settings 。有关创建访问密钥的更多详细信息,请参见 Creating a key pair
  • 确定 OCI 云身份证明并将其捕获到 OCI 配置文件中。将配置文件保存在主目录 (~/.oci/config) 下的目录 .oci 中。有关更多详细信息,请参见获取身份证明
    [DEFAULT]              
    tenancy=ocid1.tenancy.oc1....         
    user=ocid1.user.oc1....         
    fingerprint= 43:d1:....         
    key_file=</fully/qualified/path/to/the/private/key/>              
    pass_phrase=<passphrase>
  • 确定 Oracle NoSQL Database 的区域端点和区间名称。例如:
    • 端点:us-phoenix-1
    • 区间:开发人员

过程

要将 DynamoDB JSON 数据迁移到 Oracle NoSQL Database,请执行以下操作:
  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates
    可选择以下两个选项之一。
    • 选项 1:使用默认方案配置将 DynamoDB 表 a 导入为 JSON 文档。
      此处,defaultSchemaTRUE,因此迁移程序会在接收器处创建默认方案。您需要指定 DDBPartitionKey 和相应的 NoSQL 列类型。否则将引发错误。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : true,
            "readUnits" : 100,
            "writeUnits" : 60,
            "DDBPartitionKey" : "<PrimaryKey:Datatype>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
      对于 DynamoDB JSON 源,表的默认方案如下所示:
      CREATE TABLE IF NOT EXISTS <TABLE_NAME>(DDBPartitionKey_name DDBPartitionKey_type, 
      [DDBSortKey_name DDBSortKey_type], DOCUMENT JSON, 
      PRIMARY KEY(SHARD(DDBPartitionKey_name),[DDBSortKey_name]))

      WHERE

      TABLE_NAME = 为配置中的接收器 'table' 提供的值

      DDBPartitionKey_name = 为配置中的部分密钥提供的值

      DDBPartitionKey_type = 为配置中分区键的数据类型提供的值

      DDBSortKey_name = 为配置中的排序键提供的值(如果有)

      DDBSortKey_type = 为配置中排序键的数据类型提供的值(如果有)

      DOCUMENT = 聚合到 NoSQL JSON 列的 Dynamo DB 表项的分区和排序键以外的所有属性

    • 选项 2:使用用户提供的方案文件将 DynamoDB 表作为固定列导入。
      此处,defaultSchemaFALSE,您将 schemaPath 指定为包含 DDL 语句的文件。有关更多详细信息,请参阅将 DynamoDB 类型映射到 Oracle NoSQL 类型

      注意:

      如果 Dynamo DB 表的数据类型在 NoSQL 中不受支持,则迁移将失败。
      下面显示了一个示例方案文件。
      CREATE TABLE IF NOT EXISTS sampledynDBImp (AccountId INTEGER,document JSON, 
      PRIMARY KEY(SHARD(AccountId)));
      方案文件用于在迁移过程中在接收器中创建表。只要提供主键数据,就会插入输入 JSON 记录,否则会引发错误。

      注意:

      如果输入数据不包含特定列(主键除外)的值,则将使用列默认值。创建表时,默认值应为列定义的一部分。例如 id INTEGER not null default 0。如果该列没有默认定义,则如果没有为该列提供值,则会插入 SQL NULL。
      {
       "source" : {
         "type" : "aws_s3",
         "format" : "dynamodb_json",
         "s3URL" : "<https://<bucket-name>.<s3_endpoint>/export_path>",
         "credentials" : "</path/to/aws/credentials/file>",
         "credentialsProfile" : <"profile name in aws credentials file">
       },
       "sink" : {
         "type" : "nosqldb_cloud",
         "endpoint" : "<region_name>",
         "table" : "<table_name>",
         "compartment" : "<compartment_name>",
         "schemaInfo" : {
            "defaultSchema" : false,
            "readUnits" : 100,
            "writeUnits" : 60,
            "schemaPath" : "<full path of the schema file with the DDL statement>",
            "storageSize" : 1
         },
         "credentials" : "<complete/path/to/the/oci/config/file>",
         "credentialsProfile" : "DEFAULT",
         "writeUnitsPercent" : 90,
         "requestTimeoutMs" : 5000
       },
       "abortOnError" : true,
       "migratorVersion" : "1.0.0"
      }
  2. 打开命令提示符并导航到解压缩 NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config-c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosqlMigrator/nosql-migrator-1.0.0]$./runMigrator 
    --config <complete/path/to/the/JSON/config/file>
  4. 实用程序继续进行数据迁移,如下所示。
    Records provided by source=7..,
    Records written to sink=7,
    Records failed=0,
    Records skipped=0.
    Elapsed time: 0 min 2sec 50ms
    Migration completed.

验证

您可以登录到 NDCS 控制台并确认新表是使用源数据创建的。

Oracle NoSQL Database Cloud Service 区域之间迁移

此示例显示了使用 Oracle NoSQL Database Migrator 执行跨区域迁移。

用例

组织使用 Oracle NoSQL Database Cloud Service 存储和管理其数据。它决定在为生产环境启动新区域之前,将数据从现有区域复制到较新的区域进行测试。

在此用例中,您将学习使用 NoSQL 数据库迁移程序将数据从 Ashburn 区域中的 user_data 表复制到 Phoenix 区域。

通过传递预创建的配置文件运行 runMigrator 实用程序。如果不提供配置文件作为运行时参数,runMigrator 实用程序会提示您通过交互式过程生成配置。

先决条件
  • Oracle NoSQL 下载页面下载 Oracle NoSQL Database Migrator ,并将内容提取到计算机中。有关详细信息,请参阅Oracle NoSQL Database Migrator 工作流
  • 确定迁移的源和接收器。
    • 来源: Ashburn 区域中的 user_data 表。
      user_data 表包含以下数据:
      {"id":40,"firstName":"Joanna","lastName":"Smith","otherNames":[{"first":"Joanna","last":"Smart"}],"age":null,"income":75000,"address":{"city":"Houston","number":401,"phones":[{"area":null,"kind":"work","number":1618955},{"area":451,"kind":"home","number":4613341},{"area":481,"kind":"mobile","number":4613382}],"state":"TX","street":"Tex Ave","zip":95085},"connections":[70,30,40],"email":"joanna.smith123@reachmail.com","communityService":"**"}
      
      {"id":10,"firstName":"John","lastName":"Smith","otherNames":[{"first":"Johny","last":"Good"},{"first":"Johny2","last":"Brave"},{"first":"Johny3","last":"Kind"},{"first":"Johny4","last":"Humble"}],"age":22,"income":45000,"address":{"city":"Santa Cruz","number":101,"phones":[{"area":408,"kind":"work","number":4538955},{"area":831,"kind":"home","number":7533341},{"area":831,"kind":"mobile","number":7533382}],"state":"CA","street":"Pacific Ave","zip":95008},"connections":[30,55,43],"email":"john.smith@reachmail.com","communityService":"****"}
      
      {"id":20,"firstName":"Jane","lastName":"Smith","otherNames":[{"first":"Jane","last":"BeGood"}],"age":22,"income":55000,"address":{"city":"San Jose","number":201,"phones":[{"area":608,"kind":"work","number":6538955},{"area":931,"kind":"home","number":9533341},{"area":931,"kind":"mobile","number":9533382}],"state":"CA","street":"Atlantic Ave","zip":95005},"connections":[40,75,63],"email":"jane.smith201@reachmail.com","communityService":"*****"}
      
      {"id":30,"firstName":"Adam","lastName":"Smith","otherNames":[{"first":"Adam","last":"BeGood"}],"age":45,"income":75000,"address":{"city":"Houston","number":301,"phones":[{"area":618,"kind":"work","number":6618955},{"area":951,"kind":"home","number":9613341},{"area":981,"kind":"mobile","number":9613382}],"state":"TX","street":"Indian Ave","zip":95075},"connections":[60,45,73],"email":"adam.smith201reachmail.com","communityService":"***"}
      确定源的区域端点或服务端点和区间名称。
      • 端点:us-ashburn-1
      • 区间:ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya
    • Sink: Phoenix 区域中的 user_data 表。
      确定区域端点或服务端点以及水槽的区间名称。
      • 端点:us-phoenix-1
      • 区间:ocid1.compartment.oc1..aaaaaaaaleiwplazhwmicoogv3tf4lum4m4nzbcv5wfjmoxuz3doreagvdma

      标识接收表方案。

      您可以使用与源表相同的表名和方案。有关其他方案选项的信息,请参阅 Workflow for Oracle NoSQL Database Migrator 中的 Identify the Source and Sink 主题

  • 确定两个区域的 OCI 云身份证明并将其捕获到配置文件中。将配置文件保存在计算机上的 /home/<user>/.oci/config 位置。有关更多详细信息,请参见 Acquiring Credentials

注意:

  • 如果区域位于不同的租户下,则必须在 /home/<user>/.oci/config 文件中为每个区域提供相应的 OCI 云身份证明。
  • 如果区域位于同一租户下,则可以在 /home/<user>/.oci/config 文件中具有单个配置文件。

在此示例中,区域属于不同的租户。DEFAULT 配置文件包括 Ashburn 区域的 OCI 身份证明,DEFAULT2 包含 Phoenix 区域的 OCI 身份证明。

在迁移程序配置文件 endpoint 参数(源和接收器配置模板)中,您可以提供区域的服务端点 URL 或区域 ID。有关 Oracle NoSQL Database Cloud Service 支持的数据区域及其服务端点 URL 的列表,请参阅 Oracle NoSQL Database Cloud Service 文档中的数据区域和关联服务 URL
[DEFAULT]
user=ocid1.user.oc1....
fingerprint=fd:96:....
tenancy=ocid1.tenancy.oc1....
region=us-ashburn-1
key_file=</fully/qualified/path/to/the/private/key/>
pass_phrase=abcd


[DEFAULT2]
user=ocid1.user.oc1....
fingerprint=1b:68:....
tenancy=ocid1.tenancy.oc1....
region=us-phoenix-1
key_file=</fully/qualified/path/to/the/private/key/>
pass_phrase=23456
过程
要将 user_data 表从 Ashburn 区域迁移到 Phoenix 区域,请执行以下操作:
  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates
    {
      "source" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "user_data",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya",
        "credentials" : "/home/<user>/.oci/config",
        "credentialsProfile" : "DEFAULT",
        "readUnitsPercent" : 100,
        "includeTTL" : false,
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-phoenix-1",
        "table" : "user_data",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaaleiwplazhwmicoogv3tf4lum4m4nzbcv5wfjmoxuz3doreagvdma",
        "includeTTL" : false,
        "schemaInfo" : {
          "readUnits" : 100,
          "writeUnits" : 60,
          "storageSize" : 1,
          "useSourceSchema" : true
        },
        "credentials" : "/home/<user>/.oci/config",
        "credentialsProfile" : "DEFAULT2",
        "writeUnitsPercent" : 90,
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
  2. 在计算机上,导航到提取 NoSQL Database Migrator 实用程序的目录。可以从命令行界面访问 runMigrator 命令。
  3. 通过使用 --config 或 -c 选项传递配置文件来运行 runMigrator 命令。
    [~/nosql-migrator-1.5.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. 实用程序继续进行数据迁移,如下所示。user_data 表是在 sink 中创建的,其模式与源表相同,因为您已在 sink 配置模板中将 useSourceSchema 参数配置为 true。
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [cloud sink] : start loading DDLs
    [cloud sink] : executing DDL: CREATE TABLE IF NOT EXISTS user_data (id INTEGER, firstName STRING, lastName STRING, otherNames ARRAY(RECORD(first STRING, last STRING)), age INTEGER, income INTEGER, address JSON, connections ARRAY(INTEGER), email STRING, communityService STRING, PRIMARY KEY(SHARD(id))),limits: [100, 60, 1]
    [cloud sink] : completed loading DDLs
    [cloud sink] : start loading records
    migration completed.
    Records provided by source=5, Records written to sink=5, Records failed=0, Records skipped=0.
    Elapsed time: 0min 5sec 603ms
    Migration completed.

    注意:

    • 如果该表已存在于与源表具有相同方案的水槽中,则会覆盖具有相同主键的行,因为您在配置模板中提供了与 true 相同的 overwrite 参数。
    • 如果源表中已存在具有不同方案的表,迁移将失败。
验证

要验证迁移,您可以登录到凤凰城区域中的 Oracle NoSQL Database Cloud Service 控制台。验证是否将 Ashburn 区域中 user_data 表的源数据复制到此区域中的 user_data 表。有关访问控制台的过程,请参见从基础结构控制台访问服务文章。

Oracle NoSQL Database Cloud Service 迁移到 OCI 对象存储

此示例显示了 Cloud Shell 中 Oracle NoSQL Database Migrator 的用法。

用例

一家初创企业计划使用 Oracle NoSQL Database Cloud Service 作为其数据存储解决方案。该公司希望使用 Oracle NoSQL Database Migrator 将数据从 Oracle NoSQL Database Cloud Service 中的表复制到 OCI 对象存储,以便定期备份其数据。作为经济高效的衡量标准,他们希望从 Cloud Shell 运行 NoSQL Database Migrator 实用程序,所有 OCI 用户都可以访问该实用程序。

在此用例中,您将学习将 NoSQL Database Migrator 实用程序复制到订阅区域中的 Cloud Shell 并执行数据迁移。您可以将源数据从 Oracle NoSQL Database Cloud Service 表迁移到 OCI 对象存储中的 JSON 文件。

通过传递预创建的配置文件运行 runMigrator 实用程序。如果不提供配置文件作为运行时参数,runMigrator 实用程序会提示您通过交互式过程生成配置。

先决条件
  • Oracle NoSQL 下载页面将 Oracle NoSQL Database Migrator 下载到本地计算机。
  • 从云控制台上的开发人员工具菜单启动 Cloud Shell。Web 浏览器将打开您的主目录。单击 Cloud Shell 窗口右上角的云 Shell 菜单,然后从下拉列表中选择上载选项。在弹出窗口中,从本地计算机拖放 Oracle NoSQL Database Migrator 程序包,或者单击从计算机中选择选项,从本地计算机中选择程序包,然后单击上载按钮。您还可以将 Oracle NoSQL Database Migrator 程序包直接从本地计算机拖放到 Cloud Shell 中的主目录。解压缩软件包的内容。
  • 确定备份的源和接收器。
    • 来源:Oracle NoSQL Database Cloud Service Ashburn 区域中的 NDCSupload 表。

      要进行演示,请考虑 NDCSupload 表中的以下数据:
      {"id":1,"name":"Jane Smith","email":"iamjane@somemail.co.us","age":30,"income":30000.0}
      {"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
      {"id":3,"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
      {"id":4,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0} 
      

      确定源的端点和区间 ID。对于端点,您可以提供区域标识符或服务端点。有关 Oracle NoSQL Database Cloud Service 中支持的数据区域列表,请参阅数据区域和关联服务 URL

      • 端点:us-ashburn-1
      • 区间 ID:ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya
    • Sink:OCI 对象存储桶中的 JSON 文件。

      确定 OCI 对象存储的区域端点、名称空间、存储桶和前缀。有关详细信息,请参阅访问 Oracle Cloud 对象存储。有关 OCI 对象存储服务端点的列表,请参阅对象存储端点

      • 端点:us-ashburn-1
      • 存储桶: Migrate_oci
      • 前缀:Delegation
      • namespace:<> 如果未提供名称空间,实用程序将使用租户的默认名称空间。

      注意:

      如果对象存储桶位于不同的区间中,请确保您有权在存储桶中写入对象。有关设置策略的更多详细信息,请参阅允许用户将对象写入对象存储桶
过程
要使用 Cloud Shell 将 NDCSupload 表从 Oracle NoSQL Database Cloud Service 备份到 OCI 对象存储桶中的 JSON 文件,请执行以下操作:
  1. 使用标识的源和接收器详细信息准备配置文件(采用 JSON 格式)。请参见 Source Configuration TemplatesSink Configuration Templates 。确保在源和接收器配置模板中将 useDelegationToken 参数设置为 true
    此用例中使用以下配置模板:
    {
      "source" : {
        "type" : "nosqldb_cloud",
        "endpoint" : "us-ashburn-1",
        "table" : "NDCSupload",
        "compartment" : "ocid1.compartment.oc1..aaaaaaaahcrgrgptoaq4cgpoymd32ti2ql4sdpu5puroausdf4og55z4tnya",
        "useDelegationToken" : true,
        "readUnitsPercent" : 90,
        "includeTTL" : true,
        "requestTimeoutMs" : 5000
      },
      "sink" : {
        "type" : "object_storage_oci",
        "format" : "json",
        "endpoint" : "us-ashburn-1",
        "namespace" : "",
        "bucket" : "Migrate_oci",
        "prefix" : "Delegation",
        "chunkSize" : 32,
        "compression" : "",
        "useDelegationToken" : true
      },
      "abortOnError" : true,
      "migratorVersion" : "1.6.0"
    }
  2. 从 Cloud Shell 中,导航到从中提取 NoSQL Database Migrator 实用程序的目录。
  3. 通过使用 --config 或 -c 选项传递配置文件来运行 runMigrator 命令
    [~/nosql-migrator-1.6.0]$./runMigrator --config <complete/path/to/the/config/file>
  4. NoSQL 数据库迁移程序实用程序继续进行数据迁移。将 useDelegationToken 参数设置为 true 时,Cloud Shell 在运行 NoSQL Database Migrator 实用程序时会自动使用委派令牌进行验证。NoSQL 数据库迁移程序将数据从 NDCSupload 表复制到对象存储桶 Migrate_oci 中的 JSON 文件。检查日志以了解成功的数据备份。
    [INFO] creating source from given configuration:
    [INFO] source creation completed
    [INFO] creating sink from given configuration:
    [INFO] sink creation completed
    [INFO] creating migrator pipeline
    [INFO] migration started
    [INFO] [OCI OS sink] : writing table schema to Delegation/Schema/schema.ddl
    [INFO] [OCI OS sink] : start writing records with prefix Delegation
    [INFO] migration completed.
    Records provided by source=4,Records written to sink=4,Records failed=0.
    Elapsed time: 0min 0sec 486ms
    Migration completed.

    注意:

    数据将复制到文件:Migrate_oci/NDCSupload/Delegation/Data/000000.json

    根据 sink 配置模板中的 chunkSize 参数,源数据可以拆分为同一目录中的多个 JSON 文件。

    方案将复制到文件:Migrate_oci/NDCStable1/Delegation/Schema/schema.ddl

验证

要验证数据备份,请登录 Oracle NoSQL Database Cloud Service 控制台。浏览菜单 Storage > Object Storage & Archive Storage > Buckets。从 Migrate_oci 存储桶中的 NDCSupload/Delegation 目录访问文件。有关访问控制台的过程,请参见从基础结构控制台访问服务文章。

从 CSV 文件迁移到 Oracle NoSQL Database

此示例显示了使用 Oracle NoSQL Database Migrator 将 CSV 文件中的数据复制到 Oracle NoSQL Database

示例

在评估多个选项后,组织最终将 Oracle NoSQL Database 作为其 NoSQL 数据库平台。由于其源内容采用 CSV 文件格式,因此他们正在寻找一种将它们迁移到 Oracle NoSQL Database 的方法。

在本示例中,您将学习从名为 course.csv 的 CSV 文件迁移数据,该文件包含大学提供的各种课程的信息。可以从 runMigrator 实用程序生成配置文件。

您还可以使用标识的源和接收器详细信息准备配置文件。请参阅 Oracle NoSQL Database Migrator Reference

先决条件
  • 确定迁移的源和接收器。
    • 来源:CSV 文件

      在此示例中,源文件为 course.csv

      
      cat [~/nosql-migrator-1.5.0]/course.csv
      1,"Computer Science", "San Francisco", "2500"
      2,"Bio-Technology", "Los Angeles", "1200"
      3,"Journalism", "Las Vegas", "1500"
      4,"Telecommunication", "San Francisco", "2500"
      
    • 池:Oracle NoSQL Database
  • CSV 文件必须符合 RFC4180 格式。
  • 为目标表的方案 course 创建包含 DDL 命令的文件。表定义必须与有关列数及其类型的 CSV 数据文件匹配。

    在此示例中,DDL 文件为 mytable_schema.ddl

    
    cat [~/nosql-migrator-1.5.0]/mytable_schema.ddl
    create table course (id INTEGER, name STRING, location STRING, fees INTEGER, PRIMARY KEY(id));
    
过程
要将 CSV 文件数据从 course.csv 迁移到 Oracle NoSQL Database 服务,请执行以下步骤:
  1. 打开命令提示符并导航到提取 Oracle NoSQL Database Migrator 实用程序的目录。
  2. 要使用 Oracle NoSQL Database Migrator 生成配置文件,请执行不带任何运行时参数的 runMigrator 命令。
    [~/nosql-migrator-1.5.0]$./runMigrator
  3. 由于您未将配置文件作为运行时参数提供,因此实用程序会提示您是否要立即生成配置。键入 y
    可以选择配置文件的位置,也可以通过按 Enter key 来保留缺省位置。
    
    Configuration file is not provided. Do you want to generate
    configuration? (y/n) [n]: y
    Generating a configuration file interactively.
    
    Enter a location for your config [./migrator-config.json]: 
    ./migrator-config.json already exist. Do you want to overwrite?(y/n) [n]: y
    
  4. 根据实用程序中的提示,选择 "Source"(源)配置的选项。
    
    Select the source: 
    1) nosqldb
    2) nosqldb_cloud
    3) file
    4) object_storage_oci
    5) aws_s3
    #? 3
    
    Configuration for source type=file
    Select the source file format: 
    1) json
    2) mongodb_json
    3) dynamodb_json
    4) csv
    #? 4
    
  5. 提供源 CSV 文件的路径。此外,根据实用程序中的提示,可以选择对列名重新排序,选择编码方法,并从目标表中截取尾随空格。
    
    Enter path to a file or directory containing csv data: [~/nosql-migrator-1.5.0]/course.csv
    Does the CSV file contain a headerLine? (y/n) [n]: n
    Do you want to reorder the column names of NoSQL table with respect to
    CSV file columns? (y/n) [n]: n
    Provide the CSV file encoding. The supported encodings are:
    UTF-8,UTF-16,US-ASCII,ISO-8859-1. [UTF-8]: 
    Do you want to trim the tailing spaces? (y/n) [n]: n
    
  6. 根据实用程序中的提示,选择 Sink 配置的选项。
    
    Select the sink:
    1) nosqldb
    2) nosqldb_cloud
    #? 1
    Configuration for sink type=nosqldb
    Enter store name of the Oracle NoSQL Database: mystore
    Enter comma separated list of host:port of Oracle NoSQL Database: <hostname>:5000
    
  7. 根据实用程序中的提示,提供目标表的名称。
    
    Enter fully qualified table name: course
    
  8. 输入用于设置 TTL 值的选项。默认值为 n
    
    Include TTL data? If you select 'yes' TTL value provided by the
    source will be set on imported rows. (y/n) [n]: n
    
  9. 根据实用程序的提示,指定是否必须通过 Oracle NoSQL Database Migrator 工具创建目标表。如果已创建表,建议提供 n。如果未创建表,实用程序将请求包含目标表方案的 DDL 命令的文件的路径。
    
    Would you like to create table as part of migration process?
    Use this option if you want to create table through the migration tool.
    If you select yes, you will be asked to provide a file that contains
    table DDL or to use schema provided by the source or default schema.
    (y/n) [n]: y
    Enter path to a file containing table DDL: [~/nosql-migrator-1.5.0]/mytable_schema.ddl
    Is the store secured? (y/n) [y]: n
    would you like to overwrite records which are already present?
    If you select 'no' records with same primary key will be skipped [y/n] [y]: y
    Enter store operation timeout in milliseconds. [5000]:
    Would you like to add transformations to source data? (y/n) [n]: n
    
  10. 输入您的选择以确定在任何记录无法迁移时是否继续迁移。
    
    Would you like to continue migration if any data fails to be migrated? 
    (y/n) [n]: n
    
  11. 该实用程序在屏幕上显示生成的配置。
    
    Generated configuration is:
    {
      "source" : {
        "type" : "file",
        "format" : "csv",
        "dataPath" : "[~/nosql-migrator-1.5.0]/course.csv",
        "hasHeader" : false,
        "csvOptions" : {
          "encoding" : "UTF-8",
          "trim" : false
        }
      },
      "sink" : {
        "type" : "nosqldb",
        "storeName" : "mystore",
        "helperHosts" : ["<hostname>:5000"],
        "table" : "migrated_table",
        "query" : "",
        "includeTTL" : false,
        "schemaInfo" : {
          "schemaPath" : "[~/nosql-migrator-1.5.0]/mytable_schema.ddl"
        },
        "overwrite" : true,
        "requestTimeoutMs" : 5000
      },
      "abortOnError" : true,
      "migratorVersion" : "1.5.0"
    }
    
  12. 最后,实用程序会提示您指定是否使用生成的配置文件继续迁移。默认选项为 y
    :如果选择 n,则可以使用生成的配置文件执行迁移。指定 ./runMigrator -c./runMigrator --config 选项。
    
    Would you like to run the migration with above configuration?
    If you select no, you can use the generated configuration file to
    run the migration using:
    ./runMigrator --config ./migrator-config.json
    (y/n) [y]: y
    
    
  13. NoSQL 数据库迁移程序将数据从 CSV 文件复制到 Oracle NoSQL Database
    
    creating source from given configuration:
    source creation completed
    creating sink from given configuration:
    sink creation completed
    creating migrator pipeline
    migration started
    [nosqldb sink] : start loading DDLs
    [nosqldb sink] : executing DDL: create table course (id INTEGER, name STRING, location STRING, fees INTEGER, PRIMARY KEY(id))
    [nosqldb sink] : completed loading DDLs
    [nosqldb sink] : start loading records
    [csv file source] : start parsing CSV records from file: course.csv
    migration completed. Records provided by source=4, Records written to sink=4, Records failed=0,Records skipped=0.
    Elapsed time: 0min 0sec 559ms
    Migration completed.
    
验证
在 KVStore 中启动 SQL 提示符。
 java -jar lib/sql.jar -helper-hosts localhost:5000 -store kvstore
验证是否已使用源数据创建新表:

sql-> select * from course;
{"id":4,"name":"Telecommunication","location":"San Francisco","fees":2500}
{"id":1,"name":"Computer Science","location":"San Francisco","fees":2500}
{"id":2,"name":"Bio-Technology","location":"Los Angeles","fees":1200}
{"id":3,"name":"Journalism","location":"Las Vegas","fees":1500}
 
4 rows returned