附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
將在 MongoDB Atlas 或內部部署上執行的 MongoDB 資料庫移轉至 Oracle Autonomous JSON Database
簡介
MongoDB 是常用的開放原始碼資料庫之一,用來以類似 JSON 的彈性文件建立和儲存資料,這表示欄位會因文件而異,而資料結構可隨時間變更。
Oracle 是世界知名的關聯式多模型資料庫之一,稱為融合式資料庫,具有良好的處理 JSON 功能。Oracle 導入了 v12c 的 JSON 支援,將 JSON 資料儲存為 varchar2 或大型物件 (LOB) (字元大型物件 (CLOB) / 二進位大型物件 (BLOB))。
MongoDB 的挑戰:
-
MongoDB 快速入門,但缺乏企業部署的主要功能。
-
有限的交易支援導致資料一致性挑戰。
-
難以且效率不佳的分析查詢 (沒有平行查詢)。
-
成熟的安全功能。
-
美國國家標準協會結構化查詢語言 (American National Standards Institute Structured Query Language,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 大數據部署設定 MongoDB 和 Oracle Autonomous JSON Database。
必要條件
-
佈建下列資源:
-
OCI 環境,例如區間、虛擬雲端網路 (VCN)、子網路等等。
-
Oracle Autonomous JSON Database。
-
MongoDB 複本集的 OCI Compute VM。
-
OCI GoldenGate 大數據部署。
-
工作 1:安裝 MongoDB 二進位檔案並啟動 MongoDB 服務
-
建立三個 OCI Compute 執行處理以進行複寫設定,並連附區塊磁碟區以進行資料目錄。
-
使用下列命令更新
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:建立資料庫從屬端機器以存取 Oracle Autonomous JSON Database 並安裝必要的 MongoDB 工具
-
使用下列命令下載公事包檔案並設定 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 、連線,然後按一下在 Task 8 中建立的連線。
-
按一下指派的部署和指派部署。
-
選取部署,然後按一下指派部署。
-
按一下三個點和測試連線,確定連線成功。
工作 10:建立 Extract 和 Replicat 處理作業
-
移至 OCI 主控台,瀏覽至 Oracle Database 、GoldenGate 、部署,然後按一下在任務 7 中建立的部署。
按一下啟動主控台,這將會開啟 OCI GoldenGate 組態主控台。
-
輸入建置期間所建立的使用者名稱和密碼。
登入主控台頁面後,您可以看到擷取和 Replicat 組態的所有必要選項。您可以建立 Extract 和 Replicat 服務,如後續步驟所示。
-
設定擷取處理程序。
選取已為來源 MongoDB 資料庫建立的連線別名。
在參數檔中,
sample_airbnb
是 MongoDB 中的資料庫,*
代表該資料庫中的所有集合。 -
設定 Replicat 處理作業。
-
選取 Classic Replicat 作為 Replicat 類型。
-
輸入下列必要資訊。
您必須選取擷取處理建立時已命名的相同軌跡檔案名稱。選取目標作為 Oracle Autonomous JSON Database ,然後輸入已在「工作 8」中建立的連線別名。
Replicat 處理作業會將 MongoDB 中
sample_airbnb
資料庫的所有交易複製到 Oracle Autonomous JSON Database 中的sample_airbnb
綱要。
注意:您必須在組態中分別變更來源和目標資料庫名稱和綱要名稱。
-
-
完成 Extract 和 Replicat 處理作業組態之後,請相應地啟動處理作業。
注意: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:開始擷取與複製處理並驗證
按一下管理服務,檢查處理狀態及其個別報表和日誌檔是否有任何問題。
-
擷取處理作業狀態:
-
Replicat 處理作業狀態:
作業 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:使用 OCI GoldenGate Big Data 部署不支援 MongoDB Atlas 中使用預設連線字串的連線。您將會收到如下圖所示的錯誤。
相關連結
認可
- 作者 - Ashish Srivastava (Oracle North America Cloud Services 的主要雲端架構師 - NACIE)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Migrate a MongoDB Database Running on MongoDB Atlas or On-Premises to Oracle Autonomous JSON Database
G26115-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.