4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZDM(Zero Downtime Migration)を使ってみた - インストール編 -

Posted at

Oracle Database の移行ツールとして Zero Downtime Migration というソフトウェアがあります。これを使ってみますやで。
彡(^)(^)

1. 参考ドキュメント

以下のマニュアル/ドキュメントを参照しました。

2 Zero Downtime Migrationソフトウェアの設定
https://docs.oracle.com/cd/G22032_01/zdmug/installing-zero-downtime-migration-software.html#GUID-A55FEDBA-236A-4006-91A5-6F28D100C5B2

Oracle Support Document 2630479.1 [ZDM]: How To Install And Uninstall Zero Downtime Migration (ZDM) Software
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2630479.1

[TechNight #90-1] 本当に使える? ZDMの 新機能を実践検証してみた
https://speakerdeck.com/oracle4engineer/oracletechnight90-zdm?slide=61

2. 環境

OCI Compute に Oracle Linux 8 をセットアップしました。難しいところは無いので詳細は省略

image.png

2 oCPU, 32GB Memory, Boot Volume 200GB で作成しました。

3. ソフトウェアのダウンロード

ソフトウェアを下記URLからダウンロードします。

Oracle Software Delivery Cloue(旧eDelivery)に飛ばされます。

image.png

現時点(2025/10/30)でダウンロードできるのは V1051437-01.zip(21.5.2) となります。

My Oracle Support から最新版のパッチ(Patch 33509650)もダウンロードします。

image.png

image.png

4. パッケージのインストール

dnfコマンドで prerequirement となるパッケージをインストールします。

dnf install oraclelinux-developer-release-el8 libnsl perl unzip glibc-devel expect libaio ncurses-compat-libs ncurses-devvel numactl-libs openssl mlocate bind-utils

5. ディレクトリ作成とインストール

opcユーザーのホームディレクトリに zdmディレクトリを作成します。

mkdir zdm

作成したディレクトリに zipファイル をアップロードして解凍します。

cd zdm
unzip V1051437-01.zip

ディレクトリzdm21.5.2が作成されるので、ディレクトリ配下の zdminstall.sh を実行します。
以下のディレクトリ構成でインストールを実行します。

baseディレクトリ /home/opc/zdm/zdm_base
homeディレクトリ /home/opc/zdm/zdm_home
cd ./zdm21.5.2/
./zdminstall.sh setup oraclehome=/home/opc/zdm/zdm_home oraclebase=/home/opc/zdm/zdm_base ziploc=/home/opc/zdm/zdm21.5.2/zdm_home.zip -zdm

インストールログは以下の通りです。

[opc@ayu-prvcomp2 zdm]$ cd ./zdm21.5.2/
[opc@ayu-prvcomp2 zdm21.5.2]$ ./zdminstall.sh setup oraclehome=/home/opc/zdm/zdm_home oraclebase=/home/opc/zdm/zdm_base ziploc=/home/opc/zdm/zdm21.5.2/zdm_home.zip -zdm
ZDM kit home: /home/opc/zdm/zdm21.5.2
/home/opc/zdm/zdm21.5.2
---------------------------------------
Validating zip file...
---------------------------------------
       25  07-24-2025 23:59   rhp/zdm.build
---------------------------------------
Unzipping shiphome to home...
---------------------------------------
Unzipping shiphome...
Shiphome unzipped successfully..
---------------------------------------
##### Performing GridHome Software Only Installation #####
---------------------------------------
Installation log location: /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/logs/runInstaller_1761835124.out
making dir /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf
---------------------------------------
Generating Preference file
---------------------------------------
/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/rhp.pref
Using port 8899 for MySQL
---------------------------------------
Generating Root Certificate
---------------------------------------
Cluster root certificate generated successfully.
---------------------------------------
Generating CA CERTS file
---------------------------------------
spawn /home/opc/zdm/zdm_home/bin/crskeytoolctl -copycacerts -filestore /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security
Enter JRE cacerts truststore password:
JRE cacerts copied to file [/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cacerts].
---------------------------------------
Generating nogi.enabled file
---------------------------------------
nogi.enabled file generated sucessfully
---------------------------------------
Generating standalone_config.properties file
---------------------------------------
Setting base folder permissions
---------------------------------------
Copying service script to bin folder in Oracle Home
label_date is: 240219.27
---------------------------------------
Storing to wallet
---------------------------------------
cacerts  crskeytoolctl.log  cwallet.sso  cwallet.sso.lck
---------------------------------------
Generating random password
---------------------------------------
-rw-------. 1 opc opc 4349 Oct 30 14:38 /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cwallet.sso
-rw-------. 1 opc opc 4349 Oct 30 14:38 /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cwallet.sso
---------------------------------------
Extracting MySQL...
---------------------------------------
---------------------------------------
Setting up MySQL...
---------------------------------------
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysqladmin --defaults-file=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/my.cnf -u root -p ping
---------------------------------------
Storing to wallet
---------------------------------------
cacerts  crskeytoolctl.log  cwallet.sso  cwallet.sso.lck
---------------------------------------
Generating random password
---------------------------------------
-rw-------. 1 opc opc 4469 Oct 30 14:39 /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cwallet.sso
-rw-------. 1 opc opc 4469 Oct 30 14:39 /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cwallet.sso
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysql --socket=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/mysql/metadata/mysql.sock -u root
---------------------------------------
Creating MySQL DB and user...
---------------------------------------
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysql --socket=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/mysql/metadata/mysql.sock -u root -p -e CREATE DATABASE IF NOT EXISTS GHSUSER21;
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysql --socket=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/mysql/metadata/mysql.sock -u root -p
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysql --socket=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/mysql/metadata/mysql.sock -u root -p -e GRANT ALTER, CREATE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, UPDATE ON GHSUSER21.* TO 'GHSUSER21'@'localhost';
current node is active node
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysqladmin --defaults-file=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/my.cnf -u root -p shutdown
---------------------------------------
Adding Certs to ZDM
---------------------------------------
ZDM service setup finished successfully...

ホームディレクトリのコマンドを実行してバージョンを確認します。

[opc@ayu-prvcomp2 zdm21.5.2]$ /home/opc/zdm/zdm_home/bin/zdmcli -build
version: 21.0.0.0.0
full version: "21.5.0"
patch version: "21.5.2"
label date: 240219.27
ZDM kit build date: Jul 24 2025 23:59:08 UTC
CPAT build version: 25.6.0

6. パッチ適用

パッチの zipファイルをアップロードして解凍します。

cd /home/opc/zdm
unzip p33509650_215200_Linux-x86-64.zip

現時点(2025/10/30)のパッチでは zdm21.5.4 が作成されるので、ディレクトリ配下の zdminstall.sh を実行します。オプションは update でパラメータとして home と ziploc を指定します。
※余談ですが元のバイナリ不要でこのパッチ単体でインストール可能なようです……。

cd ./zdm21.5.4/
./zdminstall.sh update oraclehome=/home/opc/zdm/zdm_home ziploc=/home/opc/zdm/zdm21.5.4/zdm_home.zip

ログは以下の通りです。

[opc@ayu-prvcomp2 zdm21.5.4]$ ./zdminstall.sh update oraclehome=/home/opc/zdm/zdm_home ziploc=/home/opc/zdm/zdm21.5.4/zdm_home.zip
ZDM kit home: /home/opc/zdm/zdm21.5.4
/home/opc/zdm/zdm21.5.4
---------------------------------------
Validating zip file...
---------------------------------------
       25  10-09-2025 19:39   rhp/zdm.build
rhp home is: /home/opc/zdm/zdm_home
rhp base is: /home/opc/zdm/zdm_base
label_date is: 240219.27
label_date is: 240219.27
OLDHOME_MAJOR_VERSION: 21
OLDHOME_MINOR_VERSION: 4
OLDHOME_GRID_VERSION: 21
OLDHOME_LABEL_DATE: 240219.27
Attempting to back up the existing ZDM home and ZDM base ...
-rw-rw-r--. 1 opc opc 1134129472 Oct 30 14:50 /home/opc/zdm/zdm21.5.4/oldhome.zip
-rw-rw-r--. 1 opc opc 2491916 Oct 30 14:50 /home/opc/zdm/zdm21.5.4/oldbase.zip
Attempting to stop the service ...
This zdmservice is not running.

---------------------------------------
Running update steps ...
---------------------------------------
DB_TYPE is: MYSQL
update is: 1
cleanup is: 0
Executing detachHome...
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 6143 MB    Passed
The inventory pointer is located at /home/opc/zdm/zdm_home/oraInst.loc
You can find the log of this install session at:
 /home/opc/zdm/zdm_home/inventory/logs/DetachHome2025-10-30_02-50-08PM.log
'DetachHome' was successful.
Deleting oracle home folder
Deinstall finished successfully
nogi.enabled file found. Setup was performed before.
Removing nogi.enabled file ...

---------------------------------------
Unzipping shiphome to home...
---------------------------------------
Unzipping shiphome...
Shiphome unzipped successfully..
---------------------------------------
##### Performing GridHome Software Only Installation #####
---------------------------------------
Installation log location: /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/logs/runInstaller_1761835827.out
---------------------------------------
Restoring Preference file
---------------------------------------
/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/rhp.pref
Set REPOS=MYSQL in rhp.pref
Set CONN_DESC=jdbc:mysql:\/\/localhost:8899\/ in rhp.pref
Set MODE= in rhp.pref
Set CHECKPOINT_DIR= in rhp.pref
Set SHARD= in rhp.pref
Set MYSQL_PORT= in rhp.pref
Set TRANSFERPORT_RANGE= in rhp.pref
Set ISSTAGGER_ENABLED= in rhp.pref
Set ALLOW_HTTP_REST=FALSE in rhp.pref
Set IDCS_CLIENT_ID= in rhp.pref
Set IDCS_CLIENT_TENANT= in rhp.pref
Set IDCS_TOKEN_CLAIM_SCOPE= in rhp.pref
Set IDCS_SERVICE_URL= in rhp.pref
Set IDCS_CLIENT_SECRET_WALLET= in rhp.pref
Resetting default MySQL port
Editing MySQL port...
Set port=8899 in my.cnf
Set \1jdbc:mysql:\/\/localhost:8899\/ in rhp.pref
---------------------------------------
Generating Root Certificate
---------------------------------------
Cluster root certificate generated successfully.
---------------------------------------
Generating CA CERTS file
---------------------------------------
spawn /home/opc/zdm/zdm_home/bin/crskeytoolctl -copycacerts -filestore /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security
Enter JRE cacerts truststore password:
JRE cacerts copied to file [/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security/cacerts].
---------------------------------------
Generating nogi.enabled file
---------------------------------------
nogi.enabled file generated sucessfully
---------------------------------------
Generating standalone_config.properties file
---------------------------------------
Setting base folder permissions
---------------------------------------
Copying service script to bin folder in Oracle Home
label_date is: 240219.31
Updating NOGI home ...
---------------------------------------
Extracting MySQL...
---------------------------------------
current node is active node
---------------------------------------
Adding Certs to ZDM
---------------------------------------
ZDM service update finished successfully...

バージョンを確認します。

[opc@ayu-prvcomp2 zdm21.5.4]$ /home/opc/zdm/zdm_home/bin/zdmcli -build
version: 21.0.0.0.0
full version: "21.5.0"
patch version: "21.5.4"
label date: 240219.31
ZDM kit build date: Oct 09 2025 19:39:31 UTC
CPAT build version: 25.9.0
[opc@ayu-prvcomp2 zdm21.5.4]$

21.5.4 にアップデートされていることが確認できました。

7. 起動/停止

まず ZDM を起動します。

/home/opc/zdm/zdm_home/bin/zdmservice start

起動ログは以下の通りです。

[opc@ayu-prvcomp2 zdm21.5.4]$ /home/opc/zdm/zdm_home/bin/zdmservice start
No zdm instance detected, starting zdmservice
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysqladmin --defaults-file=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/my.cnf -u root -p ping

 WARNING: oracle.jwc.jmx does not exist in the configuration file. It will be TRUE by default.
[jwcctl debug] Environment ready to start JWC
[jwcctl debug] Return code of initialization: [0]

[jwcctl debug] ... BEGIN_DEBUG [Action= start] ...
Start JWC
[jwcctl debug] Loading configuration file: /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/jwc.properties
[jwcctl debug]     oracle.jmx.login.credstore = CRSCRED
[jwcctl debug]     oracle.jmx.login.args = DOMAIN=rhp CACHE_ENABLED=true CACHE_EXPIRATION=180
[jwcctl debug]     oracle.rmi.url = service:jmx:rmi://{0}:{1,number,#}/jndi/rmi://{0}:{1,number,#}/jmxrmi
[jwcctl debug]     oracle.http.url = http://{0}:{1,number,#}/rhp/gridhome
[jwcctl debug]     oracle.jwc.tls.clientauth = false
[jwcctl debug]     oracle.jwc.tls.rmi.clientfactory = RELOADABLE
[jwcctl debug]     oracle.jwc.lifecycle.start.log.fileName = JWCStartEvent.log
[jwcctl debug]     oracle.jwc.http.connector.ssl.protocols = TLSv1.2,TLSv1.3
[jwcctl debug] Get JWC PIDs
[jwcctl debug] Done Getting JWC PIDs
[jwcctl debug] ... JWC containers not found ...
[jwcctl debug]     Start command:-server -Xms2048M -Xmx4096M -Djava.awt.headless=true -Ddisable.checkForUpdate=true -Djava.util.logging.config.file=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -DTRACING.ENABLED=true -DTRACING.LEVEL=2 -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Duse_scan_IP=true -Djava.rmi.server.hostname=localhost -Doracle.http.port=8898 -Doracle.jmx.port=8897 -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -Doracle.rhp.storagebase=/home/opc/zdm/zdm_base -Djava.security.manager -Djava.security.policy=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/catalina.policy -Djava.security.egd=file:/dev/urandom -Doracle.jwc.wallet.path=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security -Doracle.jmx.login.credstore=WALLET -Doracle.rest.enabled=false -Doracle.jmx.enabled=true -Dcatalina.home=/home/opc/zdm/zdm_home/tomcat -Dcatalina.base=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp -Djava.io.tmpdir=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/temp -Doracle.home=/home/opc/zdm/zdm_home -Doracle.jwc.mode=STANDALONE -classpath /home/opc/zdm/zdm_home/jlib/cryptoj.jar:/home/opc/zdm/zdm_home/jlib/oraclepki.jar:/home/opc/zdm/zdm_home/jlib/osdt_core.jar:/home/opc/zdm/zdm_home/jlib/osdt_cert.jar:/home/opc/zdm/zdm_home/tomcat/lib/tomcat-juli.jar:/home/opc/zdm/zdm_home/tomcat/lib/bootstrap.jar:/home/opc/zdm/zdm_home/jlib/jwc-logging.jar org.apache.catalina.startup.Bootstrap start
[jwcctl debug] Get JWC PIDs
[jwcctl debug] Done Getting JWC PIDs
[jwcctl debug] ... JWC Container (pid=92358) ...
[jwcctl debug] ... JWC Container running (pid=92358) ...
[jwcctl debug]     Check command:-Djava.net.preferIPv6Addresses=true -Dcatalina.base=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Doracle.jwc.client.logger.file.name=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/logs/jwc_checker_stdout_err_%g.log -Doracle.jwc.client.logger.file.number=10 -Doracle.jwc.client.logger.file.size=1048576 -Doracle.jwc.wallet.path=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security -Doracle.jmx.login.credstore=WALLET -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -classpath /home/opc/zdm/zdm_home/jlib/jwc-logging.jar:/home/opc/zdm/zdm_home/jlib/jwc-security.jar:/home/opc/zdm/zdm_home/jlib/jwc-client.jar:/home/opc/zdm/zdm_home/jlib/jwc-cred.jar:/home/opc/zdm/zdm_home/jlib/srvm.jar:/home/opc/zdm/zdm_home/jlib/srvmhas.jar:/home/opc/zdm/zdm_home/jlib/cryptoj.jar:/home/opc/zdm/zdm_home/jlib/oraclepki.jar:/home/opc/zdm/zdm_home/jlib/osdt_core.jar:/home/opc/zdm/zdm_home/jlib/osdt_cert.jar:/home/opc/zdm/zdm_home/tomcat/lib/tomcat-juli.jar oracle.cluster.jwc.tomcat.client.JWCChecker localhost 8898 -1
[jwcctl debug] ... JWC Container is ready ...
[jwcctl debug] ... START - Return code = 0 ...
[jwcctl debug]  ... END_DEBUG [Action=start] ...
[jwcctl debug] Return code of AGENT: [0]

Return code is 0
Server started successfully.

ステータスを確認します。

/home/opc/zdm/zdm_home/bin/zdmservice status

ステータス確認ログは以下の通りです。

[opc@ayu-prvcomp2 zdm21.5.4]$ /home/opc/zdm/zdm_home/bin/zdmservice status

---------------------------------------
        Service Status
---------------------------------------

 Running:       true
 Tranferport:
 Conn String:   jdbc:mysql://localhost:8899/
 RMI port:      8897
 HTTP port:     8898
 Wallet path:   /home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security

停止は下記コマンドになります。

/home/opc/zdm/zdm_home/bin/zdmservice stop

停止ログは以下の通りです。

[opc@ayu-prvcomp2 zdm21.5.4]$ /home/opc/zdm/zdm_home/bin/zdmservice stop
spawn /home/opc/zdm/zdm_home/mysql/server/bin/mysqladmin --defaults-file=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/conf/my.cnf -u root -p shutdown
 WARNING: oracle.jwc.jmx does not exist in the configuration file. It will be TRUE by default.
[jwcctl debug] Environment ready to start JWC
[jwcctl debug] Return code of initialization: [0]

[jwcctl debug] ... BEGIN_DEBUG [Action= stop] ...
Stop JWC
[jwcctl debug] Get JWC PIDs
[jwcctl debug] Done Getting JWC PIDs
[jwcctl debug] ... JWC Container (pid=92358) ...
[jwcctl debug]     Stop command:-Dcatalina.base=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp -Doracle.tls.enabled=false -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Doracle.jwc.client.logger.file.name=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/rhp/logs/jwc_shutter_stdout_err_%g.log -Doracle.jwc.client.logger.file.number=10 -Doracle.jwc.client.logger.file.size=1048576 -Doracle.jwc.wallet.path=/home/opc/zdm/zdm_base/crsdata/ayu-prvcomp2/security -Doracle.jmx.login.credstore=WALLET -classpath /home/opc/zdm/zdm_home/jlib/jwc-logging.jar:/home/opc/zdm/zdm_home/jlib/jwc-client.jar:/home/opc/zdm/zdm_home/jlib/jwc-security.jar:/home/opc/zdm/zdm_home/jdk/lib/tools.jar:/home/opc/zdm/zdm_home/tomcat/lib/tomcat-juli.jar oracle.cluster.jwc.tomcat.client.ShutdownContainer 92358
[jwcctl debug] Get JWC shutter PIDs
[jwcctl debug] Done getting JWC shutter PIDs
[jwcctl debug] ... JWC shutter command (pid=92635) ...
[jwcctl debug] ... Initial Check - JWC Shutter JVM waiting (pid=92635) ...
[jwcctl debug] ... Sleep for 1 seconds ...
[jwcctl debug] ... Iteration 0 Check for JWC Shutter ...
[jwcctl debug] Get JWC shutter PIDs
[jwcctl debug] Done getting JWC shutter PIDs
[jwcctl debug] ... JWC shutter command not found ...
[jwcctl debug] ... Iteration 0 Check for JWC Container ...
[jwcctl debug] Get JWC PIDs
[jwcctl debug] Done Getting JWC PIDs
[jwcctl debug] ... JWC containers not found ...
[jwcctl debug] ... JWC Container is stopped ...
[jwcctl debug] ... STOP - Return code = 0 ...
[jwcctl debug]  ... END_DEBUG [Action=stop] ...
[jwcctl debug] Return code of AGENT: [0]

Return code is 0
zdmservice stopped successfully.

8. まとめ

まずはインストール編の完了、次回は実際に Oracle Database のデータを移行するところをやってみます。
彡(^)(^)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?