注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
将在 MongoDB Atlas 或内部部署上运行的 MongoDB 数据库迁移到 Oracle Autonomous JSON Database
简介
MongoDB 是一种流行的开源数据库,用于在灵活的类似 JSON 的文档中创建和存储数据,这意味着字段可能因文档而异,并且数据结构可以随时间变化。
Oracle 是世界知名的关系型多模型数据库之一,名为融合数据库,具有良好的 JSON 处理能力。Oracle 引入了对 v12c 中 JSON 的支持,将 JSON 数据存储为 varchar2 或大型对象 (LOB)(字符大对象 (Character Large Object,CLOB)/二进制大对象 (Binary Large Object,BLOB))。
MongoDB 的挑战:
-
MongoDB 快速入门,但缺乏企业部署的关键功能。
-
有限的事务处理支持会带来数据一致性挑战。
-
困难和低效的分析查询(没有并行查询)。
-
不成熟的安全功能。
-
美国国家标准协会结构化查询语言 (ANSI SQL) 功能。
在 Oracle 中使用 JSON 数据类型的优点:
-
从 Oracle 版本 21c(以原生格式存储的 JSON)中,用户可以使用标准 SQL 查询 JSON 文档,该 SQL 允许构建具有 Oracle Database 所有功能(例如复制、分区、索引以及 Oracle Database 能够具备的所有功能)的无模式设计模型的灵活性。
-
JSON 可以通过 SQL 查询进行处理。
-
存储为 OSON(JSON 的优化原生二进制表示形式)。
注:请确保在 Oracle Cloud Infrastructure (OCI) GoldenGate 大数据部署、源数据库和目标数据库之间建立连接。
目标
- 使用 OCI GoldenGate Big Data 部署设置 MongoDB 和 Oracle Autonomous JSON Database。
先决条件
-
预配以下资源:
-
OCI 环境,例如(区间、虚拟云网络 (VCN)、子网等)。
-
Oracle Autonomous JSON Database。
-
OCI Compute VM for MongoDB 副本集。
-
OCI GoldenGate 大数据部署。
-
任务 1:安装 MongoDB 二进制文件并启动 MongoDB 服务
-
为复制设置创建三个 OCI 计算实例,并为数据目录附加块存储卷。
-
使用以下命令更新
yum
系统信息库以下载 MongoDB 二进制文件。vi /etc/yum.repos.d/mongodb-enterprise-8.0.repo [mongodb-enterprise-8.0] name=MongoDB Enterprise Repository baseurl=https://repo.mongodb.com/yum/redhat/8/mongodb-enterprise/8.0/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-8.0.asc sudo yum install -y mongodb-enterprise
-
使用以下命令创建数据目录并授予所需的权限。
cd /data ls chmod 755 mongo cd chmod 755 -R /data/mongo chown mongod:mongod -R /data/mongo chmod 400 /etc/mongod.Keyfile chown mongod:mongod -R /etc/mongod.Keyfile
注:安全验证需要密钥文件。为了进行测试,可以使用
open-ssl
命令生成密钥文件。 -
使用以下命令创建配置文件。
cat /etc/mongod.conf
-
使用以下命令禁用
selinux
并启动mongod
服务。setenforce 0 getenforce systemctl start mongod systemctl status mongod
-
对将充当辅助节点的其余两个节点执行相同的操作。
任务 2:创建 MongoDB 副本集
-
连接到第一个节点并连接到管理数据库。
-
运行以下命令以启动复制并创建第一个管理员用户。此复制用户将用于复制配置和管理。
mongosh use admin
rs.initiate() db.createUser({ ... user: "admin", ... pwd: "password", ... roles: [ ... { role: "root", db: "admin" } ... ] ... })
db.auth("admin","password") rs.conf()
-
使用以下命令添加其余两个节点。这些节点将被添加为辅助节点。
rs.add("10.0.1.163;27017")
rs.add("10.0.1.51:27017")
-
使用以下命令检查副本集的配置和状态。
db.auth("admin","password") rs.conf()
rs.status()
rs.printReplicationInfo()
任务 3:将数据加载到 MongoDB 副本集中
-
使用
mongorestore
命令将转储恢复到 MongoDB 副本集。mongorestore --username admin --password password dump/
注:对于在该副本集下运行的所有数据库,以上转储是通过使用
mongodump
命令从另一个 MongoDB 副本集获取的。 -
运行以下命令检查是否已将所有数据库及其各自的集合恢复到 MongoDB 副本集中。
mongosh use admin db.auth("admin","password") show dbs
任务 4:在 OCI 中配置 Oracle Autonomous JSON Database
-
登录到 OCI 控制台,导航到 Oracle Database 、Autonomous Database ,然后输入以下信息,如用于创建自治数据库的映像中所示。
注:为了实现 MongoDB 兼容性,需要将网络访问设置为仅从允许的 IP 和 VCN 进行安全访问,或仅从专用端点访问进行安全访问。
-
单击编辑工具配置,启用 MongoDB API 并复制 URL 。
注:您需要更改以上连接字符串中的用户名和密码。
任务 5:创建 Database Client Machine 以访问 Oracle Autonomous JSON Database 并安装必需的 MongoDB 工具
-
使用以下命令下载 wallet 文件并为 Oracle Autonomous JSON Database 配置连接。
cat tnsnames.Oracle
cat sqlnet.Ora
-
使用以下命令下载用于连接的 MongoDB 工具。
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.5.2.tgz
tar -xvf mongodb-database-toosl-rhel70-x86_64-100.5.2.tgz
wget https://downloads.mongodb.com/compass/mongosh-1.3.1-linux-x64.tgz
tar -xvf mongosh-1.3.1-linux-x64.tgz
-
使用以下命令将 Path 和 URI (Oracle Autonomous Transaction Processing (ATP) 端点)设置为环境变量。
cd export PATH=/home/oracle/mongosh-1.3.1-linux-x64/bin/:$PATH export PATH=$PATH:/home/oracle/mongodb-database-tools-rhel70-x86_64-100.5.2/bin echo $path
-
使用以下命令检查是否能够连接到 Oracle Autonomous JSON Database。
export URI='mongodb://admin:xxxx@xxxxxx-ADBJ.adb.us-ashburn-1.oraclecloudapps.com:27017/admin?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true' mongosh $URI
任务 6:将转储上载到 OCI 对象存储存储桶并导入到 ATP
-
使用
mongoexport
命令转储集合。mongoexport --host=mrep1 --port 27017 --username=admin --authicationDatabase=admin --collection=data --db=sample_weatherdata --out=wheather_data.Json
-
单击上载可上载使用 MongoDB 副本集上的
mongoexport
命令所获取的单个数据库集合的转储。 -
单击查看对象详细信息可获取对象端点详细信息。
-
运行
curl
命令以使用端点从该对象读取数据,并将mongoimport
命令读取到 ATP。curl -X GET https://objectstorage.us-ashburn-1.oraclecloud.com/p/ujXv8Pmhxt9EyLlA9ogm_X524pDRGEymJwbDVyUExAACra1VpAql32U0XaRnaxLt/n/orasenatdoracledigital01/b/jsonbucket/o/wheather_data.json | mongoimport --collection data --uri $URI
-
检查是否已将集合导入 ATP 数据库。
-
交叉检查文档数是否与源相同。
测试成功。现在,我们很乐意将源 MongoDB 副本中多个数据库下运行的所有数据迁移到目标 Oracle Autonomous JSON Database,并部署 OCI GoldenGate 服务以实现几乎零停机迁移。
-
对于数据移动,可以使用
mongodump
命令将数据从源数据库复制到目标数据库作为一次性加载。export URI="mongodb://mrep1:27017 --username admin --authenticationDatabase admin" mongodump --uri=$URI
-
将此转储复制到可以从中运行
mongorestore
命令的目标系统(任务 3 中已说明如何加载到目标 Oracle Autonomous JSON Database 中)。注:请确保在 Oracle Autonomous JSON Database 中为要迁移的数据库集合创建相同的方案名称。
create user sample_airbnb identified by <password>; grant connect, resource to sample_airbnb; grant unlimited tablespace to sample_airbnb; BEGIN ORDS_ADMIN.ENABLE_SCHEMA(p_schema => 'SAMPLE_AIRBNB'); commit; END; /
任务 7:部署 OCI GoldenGate
-
转到 OCI 控制台,导航到 Oracle Database 、GoldenGate 、部署,然后单击创建部署。
对于 MongoDB 到 Oracle Autonomous JSON Database,我们需要选择技术作为大数据,选择部署类型作为数据复制。
-
从 OCI 控制台提前创建密钥,以供管理员用户登录和管理。
任务 8:为 MongoDB 和 Oracle Autonomous JSON Database 创建连接
-
转到 OCI 控制台,导航到 Oracle Database 、GoldenGate 、连接,然后单击创建连接。
-
按图像中所示输入以下信息以创建源数据库连接。
-
重复步骤 1,然后输入如下信息(如图中所示)以创建目标数据库连接。
任务 9:为 OCI GoldenGate 部署分配和测试连接
-
转到 OCI 控制台,导航到 Oracle Database 、GoldenGate 和 Connections ,然后单击任务 8 中创建的连接。
-
单击分配的部署和分配部署。
-
选择部署,然后单击分配部署。
-
单击三个点并测试连接以确保成功。
任务 10:创建提取和复制流程
-
转到 OCI 控制台,导航到 Oracle Database 、GoldenGate 和 Deployments ,然后单击任务 7 中创建的部署。
单击启动控制台,这将打开 OCI GoldenGate 配置控制台。
-
输入在部署期间创建的用户名和密码。
登录到控制台页面后,可以查看 Extract 和 Replicat 配置的所有必需选项。您可以创建提取和复制服务,如后面的步骤中所示。
-
配置提取处理。
选择已为源 MongoDB 数据库创建的连接别名。
在参数文件中,
sample_airbnb
是 MongoDB 中的数据库,*
表示该数据库中的所有集合。 -
配置复制进程。
-
选择 Classic Replicat 作为 Replicat Type 。
-
输入以下所需信息。
您需要选择相同的线索文件名,该文件名在提取流程创建过程中已命名。选择目标作为 Oracle Autonomous JSON Database ,然后输入已在任务 8 中创建的连接别名。
复制进程会将 MongoDB 中的
sample_airbnb
数据库中的所有事务处理复制到 Oracle Autonomous JSON Database 中的sample_airbnb
方案。
注:您需要在配置中分别更改源和目标数据库名称以及方案名称。
-
-
完成提取和复制流程配置后,请相应地启动流程。
注:Oracle Autonomous JSON Database 应配置有专用端点。如果未使用证书,则可以将验证更改为不使用双向 TLS (mTLS)。
如果正确的认证不可用,则复制日志文件中可能会出现以下错误:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
任务 11:启动提取和复制流程并验证
单击管理服务可检查进程状态及其各自的报告和日志文件是否存在任何问题。
-
提取处理状态:
-
复制进程状态:
任务 12:测试数据同步
-
在源和目标中,在使用以下命令插入某些数据之前,请在收集详细信息中检查文档计数。
-
源数据库:
show dbs use sample_airbnb show collections db.emp.countDocuments()
-
目标数据库:
show dbs use Sample_airbnb show collections db.emp.countDocuments()
-
-
使用以下命令检查源和目标数据库上的数据。
-
源数据库:
db.emp.find({"name":"joe"}) db.emp.find({"name":"John"})
-
目标数据库:
db.emp.find({"name":"joe"}) db.emp.find({"name":"John"})
-
-
在源上插入数据,然后使用以下命令检查它是否已复制到目标。
-
源数据库:
dm.emp.insertOne( { "name":"John","job":"Data Analyst","Salary":7000}) db.emp.countDocuments() db.emp.find({"name":"John"})
-
目标数据库:
show DBs show collections db.emp.find({"name":"John"})
-
任务 13:连接到 MongoDB Atlas
连接到 MongoDB Atlas 与连接到内部部署 MongoDB 数据库不同。
-
不支持以下 MongoDB Atlas 默认连接字符串。
mongodb+srv://<db_username>:<db_password>@cluster0.xxxxx.mongodb.net/
-
为了成功连接,我们需要使用以下连接字符串。
mongodb://cluster0-shard-00-00.xxxx.mongodb.net:27017,cluster0-shard-00-01.xxxx.mongodb.net:27017,cluster0-shard-00-02.xxxx.mongodb.net:27017/?ssl=true&replicaSet=xxxx&authSource=admin&retryWrites=true&w=majority&appName=Cluster0
注:如果需要在公共网络中建立连接,请确保创建 NAT 网关并使用 OCI GoldenGate 部署正在使用的专用子网进行附加。
由于连接问题而导致的常见错误
启动复制流程时,与目标 Oracle Autonomous JSON Database 的连接问题可能会导致其他错误:
-
错误 1:
ERROR OGG-01091 Unable to open file "/u02/Deployment/var/lib/data/a1000000000" (error 2, No such file or directory).
-
错误 2:
ERROR OGG-15051 Java or JNI exception: java.lang.NoClassDefFoundError: oracle/goldengate/datasource/UserExitMain. oracle.goldengate.util.GGException: Error detected handling transaction commit event. Exception in thread "main" oracle.goldengate.util.GGException: Error detected handling transaction commit event. at oracle.goldengate.datasource.UserExitDataSource.commitTransaction(UserExitDataSource.java:261 at oracle.goldengate.datasource.UserExitDataSource.commitTx(UserExitDataSource.java:2180) Caused by: java.net.SocketTimeoutException: Connect timed out
-
错误 3:如果集成复制,您可能会遇到以下错误:
OGG-01091 Oracle GoldenGate Delivery, RSNOW.prm: Unable to open file "/u02/Deployment/etc/conf/ogg/<replicat name>001.properties" (error 2, No such file ordirectory). In that case, you need to set below parameter in property file of Replicate parameter. TARGETDB LIBFILE libggjava.so SET property=/u02/Deployment/etc/conf/ogg/<replicatname>.properties
-
错误 4:MongoDB Atlas 中使用默认连接字符串的连接不支持使用 OCI GoldenGate Big Data 部署。您将收到一个错误,如下图所示。
相关链接
确认
- 作者 — Ashish Srivastava(Oracle 北美云服务首席云架构师— NACIE)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Migrate a MongoDB Database Running on MongoDB Atlas or On-Premises to Oracle Autonomous JSON Database
G26114-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.