将数据从 MongoDB 迁移到 Oracle NoSQL Database Cloud Service

可以使用 Oracle NoSQL Database Migrator 将数据从 MongoDB 迁移到 Oracle NoSQL Database Cloud Service 有两个选项:

  • 使用 Oracle NoSQL 默认方案
  • 使用自定义模式

这两个选项都需要配置 JSON 文件,该文件包含有关源文件和目标数据库 (sink) 的信息。在这两种情况下,源文件都是 MongoDB 格式的 JSON 文件,存储在 OCI 对象存储中,而目标文件是 Oracle NoSQL Database Cloud Service 数据库。使用定制方案时,配置 JSON 文件必须包括 transforms 部分。

使用 Oracle NoSQL 默认方案迁移数据

使用默认方案进行迁移时,会创建一个新的 Oracle NoSQL Database Cloud Service 表,其中包含两列:iddocument。对于 MongoDB JSON 导出文件中的每个条目,_id 列将迁移到 Oracle NoSQL Database Cloud Service 表中的 id,而 MongoDB JSON 导出文件的其他列将在新的 document 列中聚合。

以下步骤介绍了如何使用 Oracle NoSQL 默认方案迁移数据。

  1. 登录 MongoDB 并运行 mongoexport 将数据收集导出到 MongoDB 格式的 JSON 文件。例如:
    [opc@mongodb-server ~] mongoexport --collection collection_name --out collection_name.json
  2. 使用 Oracle Linux split 实用程序将记录超过 13,500 个的 MongoDB JSON 文件拆分成多个 JSON 文件,每个 13,500 个记录。MongoDB例如:
    $split -l 13500 –additional-suffix .json collection_name.json collection_name
  3. 登录 OCI 控制台以创建 OCI 对象存储存储桶(如果尚不存在)。
    记下存储桶名称和名称空间
  4. 使用 OCI 控制台或 REST API 将第 2 步中的文件上载到第 3 步中的存储桶。
  5. 在 OCI 控制台中,为将拥有目标 Oracle NoSQL Database Cloud Service 表的 OCI 用户创建 API 密钥。此用户必须具有创建和管理表的权限。
    请注意用户 OCID、租户 OCID、指纹和 OCI 区域 ID。将私钥和公钥保存在 PEM 文件中。Oracle NoSQL Database Migrator 使用此 API 密钥检索 MongoDB 格式的 JSON 文件,创建新表,然后将数据从 MongoDB JSON 文件上载到表中。
  6. Oracle NoSQL Database Cloud Service 表创建区间(如果尚不存在)。
    记下区间名称。
  7. 创建计算实例。
    此计算实例将运行 Oracle NoSQL Database Migrator 软件。始终免费的计算实例 (VM.Standard.E4)。具有 1 个 OCPU 和 16GB 内存的弹性 ) 足够且经济高效。
  8. 使用 SSH 以 opc user 身份登录到新计算实例,以便按如下方式安装 Java 11:
    [opc@oci-compute ~]$ sudo yum install java-11
  9. 如果尚未下载 Oracle NoSQL Database Migrator 1.5.0 二进制文件,有关详细信息,请参见“查看软件要求”部分。
  10. 使用 SCP 将 Oracle NoSQL Database Migrator ZIP 文件上载到新计算实例中的 opc user's 主目录。
  11. 使用 SSH 以 opc user 身份登录计算实例,以解压缩上一步中下载的 Oracle NoSQL Database Migrator 软件。文件的内容将解压缩到名为 /home/opc/nosql-migrator-1.5.0 的新目录。按如下方式解压缩文件:
    [opc@oci-compute ~]$ unzip V1033765-1.zip
    [opc@oci-compute ~]$ ls -l
    total 61964
    drwxr-xr-x. 3 opc opc 4096 Feb 23 20:32 nosql-migrator-1.5.0
    -rw-r--r--. 1 opc opc 63446080 Feb 14 19:26 V1033765-01.zip
    [opc@jc-bastion-phx migrator]$
  12. 使用 SCP 将步骤 5 中的私有密钥 PEM 文件上载到上一步中解压缩了 Oracle NoSQL Database Migrator 的计算实例 opc user 的主目录。
  13. 使用 SSH 以 opc user 身份登录计算实例,以创建 OCI 身份文件。使用以下内容在 /home/opc/.oci 目录中创建 OCI 身份文件:
    [opc@oci-compute ~]$ cat .oci/config 
    [DEFAULT]
    user=user_OCID_from_step_5
    fingerprint=fingerprint_from_step_5
    tenancy=tenancy_OCID_from_step_5
    region=region_ID_from_step_5
    key_file=full_path_to_private_key_PEM_file_uploaded_step_12
  14. 在计算实例中,将目录更改为 nosql-migrator-1.5.0 子目录。创建迁移配置 JSON 文件,该文件包含有关源和目标 (sink) 的信息,如下所示:
    [opc@oci-compute nosql-migrator-1.5.0]$ cat migrator-config-mongodbjson-bucket_def-schema.json 
    {
       "source":{
          "type":"object_storage_oci",
          "format":"mongodb_json",
          "endpoint":"https://objectstorage.region_ID_from_step_5.oraclecloud.com",
          "namespace":"namespace_from_step_3",
          "bucket":"bucket_name_from_step_3",
          "prefix":"source_json_filename_or_prefix_from_step_2",
          "credentials":"/home/opc/.oci/config",
          "credentialsProfile":"default"
       },
       "sink":{
          "type":"nosqldb_cloud",
          "endpoint":"https://nosql.oci_region_ID_from_step_5.oci.oraclecloud.com",
          "table":"new_Oracle_NoSQL_Database_Cloud_Service_table_name",
          "schemaInfo":{
             "defaultSchema":true,
             "readUnits":50,
             "writeUnits":50,
             "storageSize":25
          },
          "compartment":"compartment_name_from_step_6",
          "includeTTL":false,
          "credentials":"/home/opc/.oci/config",
          "credentialsProfile":"DEFAULT",
          "writeUnitsPercent":90,
          "overwrite":true,
          "requestTimeoutMs":5000
       },
       "abortOnError":false,
       "migratorVersion":"1.5.0"
    }
    [opc@oci-compute nosql-migrator-1.5.0]$
  15. 使用 Oracle NoSQL Database Migrator 和在上一步中创建的迁移配置 JSON 文件运行数据迁移,如下所示:
    [opc@oci-compute nosql-migrator-1.5.0]$ ./runMigrator --config ./migrator-config-mongodbjson-bucket_def_schema.json
    迁移作业将使用默认方案创建新的 Oracle NoSQL Database Migrator 表,然后从 OCI 对象存储中读取 MongoDB 格式的 JSON 文件,然后将数据从这些文件导入新创建的表。

使用定制方案迁移数据

使用定制方案进行迁移时,新的 Oracle NoSQL Database Cloud Service 表的定义必须与 MongoDB 表的方案类似。NoSQL 数据库迁移程序配置文件必须包含一个转换条目,指示 NoSQL 数据库迁移程序如何在新表中将列 _id 转换为 id

以下步骤介绍了如何使用 Oracle NoSQL 定制方案迁移数据。

  1. 登录 MongoDB 并运行 mongoexport 将数据收集导出到 MongoDB 格式的 JSON 文件。例如:
    [opc@mongodb-server ~] mongoexport --collection collection_name --out collection_name.json
  2. 使用 Oracle Linux split 实用程序将记录超过 13,500 个的 MongoDB JSON 文件拆分成多个 JSON 文件,每个 13,500 个记录。MongoDB例如:
    $split -l 13500 –additional-suffix .json collection_name.json collection_name
  3. 使用 Oracle Linux catvi 命令检查生成的 MongoDB 格式的 JSON 文件。请注意下列内容:
    • 记下每列的名称和数据类型。使用此信息可以创建 Oracle NoSQL Database Cloud Service 表方案数据定义语言 (DDL)。
    • 第一列必须命名为 id。其余列的名称和类型应与 MongoDB JSON 文件中的名称和类型相同。
  4. 将方案 DDL 保存到文件。方案 DDL 应类似于以下内容:
    $ cat collection_name.ddl
    CREATE TABLE table_name ( id string, column_2_name column_2_type, column_n_name column_n_type, PRIMARY KEY ( id ) )
  5. 登录 OCI 控制台以创建 OCI 对象存储存储桶(如果尚不存在)。
    记下存储桶名称和名称空间。
  6. 使用 OCI 控制台或 REST API 将第 2 步和第 3 步中的文件上载到在第 5 步中创建的新存储桶。
  7. 在 OCI 控制台中,为将拥有目标 Oracle NoSQL Database Cloud Service 表的 OCI 用户创建 API 密钥。此用户必须具有创建和管理表的权限。
    请注意用户 OCID、租户 OCID、指纹和 OCI 区域 ID。将私钥和公钥保存在 PEM 文件中。Oracle NoSQL Database Migrator 使用此 API 密钥检索 MongoDB 格式的 JSON 文件,创建新表,然后将数据从 MongoDB JSON 文件上载到表中。
  8. Oracle NoSQL Database Cloud Service 表创建区间(如果尚不存在)。
    记下区间名称。
  9. 创建计算实例。
    此计算实例将运行 Oracle NoSQL Database Migrator 软件。始终免费的计算实例 (VM.Standard.E4)。具有 1 个 OCPU 和 16GB 内存的弹性 ) 足够且经济高效。
  10. 使用 SSH 以 opc user 身份登录到新计算实例,以便按如下方式安装 Java 11:
    [opc@oci-compute ~]$ sudo yum install java-11
  11. 如果尚未下载 Oracle NoSQL Database Migrator 1.5.0 二进制文件,有关详细信息,请参见“查看软件要求”部分。
  12. 使用 SCP 将 Oracle NoSQL Database Migrator ZIP 文件上载到新计算实例中的 opc user's 主目录。
  13. 使用 SSH 以 opc user 身份登录计算实例,以解压缩上一步中下载的 Oracle NoSQL Database Migrator 软件。文件的内容将解压缩到名为 /home/opc/nosql-migrator-1.5.0 的新目录。按如下方式解压缩文件:
    [opc@oci-compute ~]$ unzip V1033765-1.zip
    [opc@oci-compute ~]$ ls -l
    total 61964
    drwxr-xr-x. 3 opc opc 4096 Feb 23 20:32 nosql-migrator-1.5.0
    -rw-r--r--. 1 opc opc 63446080 Feb 14 19:26 V1033765-01.zip
    [opc@jc-bastion-phx migrator]$
  14. 使用 SCP 将步骤 7 中的私有密钥 PEM 文件上载到上一步中解压缩了 Oracle NoSQL Database Migrator 的计算实例 opc user 的主目录。
  15. 使用 SSH 以 opc user 身份登录计算实例,以创建 OCI 身份文件。使用以下内容在 /home/opc/.oci 目录中创建 OCI 身份文件:
    [opc@oci-compute ~]$ cat .oci/config 
    [DEFAULT]
    user=user_OCID_from_step_7
    fingerprint=fingerprint_from_step_7
    tenancy=tenancy_OCID_from_step_7
    region=region_ID_from_step_7
    key_file=full_path_to_private_key_PEM_file_uploaded_step_14
  16. 在计算实例中,将目录更改为 nosql-migrator-1.5.0 子目录。创建迁移配置 JSON 文件,该文件包含有关源和目标 (sink) 的信息,如下所示:
    [opc@oci-compute nosql-migrator-1.5.0]$ cat migrator-config-mongodbjson-bucket-src_schema.json 
    {
      "source": {
        "type": "object_storage_oci",
        "format": "mongodb_json",
        "endpoint": "https://objectstorage.region_ID_from_step_7.oraclecloud.com",
        "namespace": "namespace_from_step_5",
        "bucket": "bucket_name_from_step_5",
        "prefix": "source_json_filename_or_prefix_from_step_2",
        "schemaInfo": {
          "schemaObject": "collection_name_ddl_from_step_3"
        },
        "credentials": "/home/opc/.oci/config",
        "credentialsProfile": "DEFAULT"
      },
      "sink": {
        "type": "nosqldb_cloud",
        "endpoint": "https://nosql.oci_region_ID_from_step_7.oci.oraclecloud.com",
        "table": "new_Oracle_NoSQL_Database_Cloud_Service_table_name_from_step_3",
        "schemaInfo": {
          "useSourceSchema": true,
          "readUnits": 50,
          "writeUnits": 50,
          "storageSize": 25
        },
        "compartment": "compartment_name_from_step_8",
        "includeTTL": false,
        "credentials": "/home/opc/.oci/config",
        "credentialsProfile": "DEFAULT",
        "writeUnitsPercent": 90,
        "overwrite": true,
        "requestTimeoutMs": 5000
      },
      "transforms": {
        "renameFields": {
          "_id": "id"
        }
      },
      "abortOnError": true,
      "migratorVersion": "1.5.0"
    }
    [opc@oci-compute nosql-migrator-1.5.0]$
  17. 使用 Oracle NoSQL Database Migrator 和在上一步中创建的迁移配置 JSON 文件运行数据迁移,如下所示:
    [opc@oci-compute nosql-migrator-1.5.0]$ ./runMigrator --config ./migrator-config-mongodbjson-bucket-src_schema.json
    迁移作业将使用定制方案创建新的 Oracle NoSQL Database Migrator 表,然后从 OCI 对象存储中读取 MongoDB 格式的 JSON 文件,然后将数据从这些文件导入新创建的表。