OCI : Utiliser Zero Downtime Migration pour migrer une base de données (1/2)
Introduction
Pour les besoins de migrations de bases de données vers OCI, il existe un outil bien pratique : Zero Downtime Migration (ZDM).
ZDM est une solution simplifiée à l'extrême et grandement automatisée pour la mise en place d'une migration d'une base On-Premises vers une infrastructure OCI, Exac@C ou encore Exadata On-Premises, le tout sans ou avec un downtime négligeable.
Le principe de ZDM est le suivant : ZDM construit une copie de votre base de données sur OCI et garde cette copie synchronisée avec la base source.
ZDM se base sur des fonctionnalités techniques telles que GoldenGate ou Data Guard pour garantir une Haute Disponibilité et permettre une migration à chaud.
Depuis les dernières versions, ZDM supporte les Autonomous Databases (ATP et ADW) en tant que cible sur OCI.
Cibles possibles de migration
Voici les différentes cibles de migration qu'il est possible de choisir :
Oracle Database Cloud Service : Bare Metal & Virtual Machine
Oracle Exadata Cloud Service
Oracle Exadata Cloud at Customer
Autonomous Transaction Processing (Dedicated and Shared)
Autonomous Data Warehouse (Dedicated and Shared)
Installation
Nous allons procéder à l'installation de ZDM sur une instance Linux créée sur OCI (Oracle Linux 7).
Dans un premier temps, il faut installer les packages systèmes ci-dessous :
ZDM kit home: /sources/zdm21.1
/sources/zdm21.1
---------------------------------------
Unzipping shiphome to ZDM home...
---------------------------------------
Unzipping shiphome...
Shiphome unzipped successfully..
---------------------------------------
##### Performing GridHome Software Only Installation #####
---------------------------------------
Installation log location: /u01/app/oracle/crsdata/oralinux/rhp/logs/runInstaller_1627050481.out
making dir /u01/app/oracle/crsdata/oralinux/rhp/conf
---------------------------------------
Generating Preference file
---------------------------------------
/u01/app/oracle/crsdata/oralinux/rhp/conf/rhp.pref
Using port 8897 for MySQL
---------------------------------------
Generating Root Certificate
---------------------------------------
Cluster root certificate generated successfully.
---------------------------------------
Generating CA CERTS file
---------------------------------------
spawn /u01/app/oracle/zdm21/bin/crskeytoolctl -copycacerts -filestore /u01/app/oracle/crsdata/oralinux/security
Enter JRE cacerts truststore password:
JRE cacerts copied to file [/u01/app/oracle/crsdata/oralinux/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
---------------------------------------
Storing to wallet
---------------------------------------
cacerts crskeytoolctl.log cwallet.sso cwallet.sso.lck
---------------------------------------
Generating random password
---------------------------------------
-rw-------. 1 zdmuser zdm 4389 Jul 23 16:28 /u01/app/oracle/crsdata/oralinux/security/cwallet.sso
-rw-------. 1 zdmuser zdm 4389 Jul 23 16:28 /u01/app/oracle/crsdata/oralinux/security/cwallet.sso
RHP_PT.ZDM21_LINUX.X64_210228.2
rhpctl working
label_date is: 210228.2
---------------------------------------
Setting up MySQL...
---------------------------------------
mysqld will log errors to /u01/app/oracle/crsdata/oralinux/rhp/mysql/metadata/mysql-error.log
mysqld is running as pid 25940
---------------------------------------
Storing to wallet
---------------------------------------
cacerts crskeytoolctl.log cwallet.sso cwallet.sso.lck
---------------------------------------
Generating random password
---------------------------------------
-rw-------. 1 zdmuser zdm 4501 Jul 23 16:28 /u01/app/oracle/crsdata/oralinux/security/cwallet.sso
-rw-------. 1 zdmuser zdm 4501 Jul 23 16:28 /u01/app/oracle/crsdata/oralinux/security/cwallet.sso
spawn /u01/app/oracle/zdm21/mysql/server/bin/mysql --socket=/u01/app/oracle/crsdata/oralinux/rhp/mysql/metadata/mysql.sock -u root
---------------------------------------
Creating MySQL DB and user...
---------------------------------------
spawn /u01/app/oracle/zdm21/mysql/server/bin/mysql --socket=/u01/app/oracle/crsdata/oralinux/rhp/mysql/metadata/mysql.sock -u root -p -e CREATE DATABASE IF NOT EXISTS GHSUSER21;
spawn /u01/app/oracle/zdm21/mysql/server/bin/mysql --socket=/u01/app/oracle/crsdata/oralinux/rhp/mysql/metadata/mysql.sock -u root -p
spawn /u01/app/oracle/zdm21/mysql/server/bin/mysql --socket=/u01/app/oracle/crsdata/oralinux/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 /u01/app/oracle/zdm21/mysql/server/bin/mysqladmin --defaults-file=/u01/app/oracle/crsdata/oralinux/rhp/conf/my.cnf -u root -p shutdown
ZDM service setup finished successfully...
Démarrer ensuite le service ZDM :
$ZDM_HOME/bin/zdmservice start No instance detected, starting zdmservice
mysqld will log errors to /u01/app/oracle/crsdata/oralinux/rhp/mysql/metadata/mysql-error.log
mysqld is running as pid 26426WARNING: oracle.jwc.rest does not exist in the configuration file. It will be FALSE by default. 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: /u01/app/oracle/crsdata/oralinux/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=/u01/app/oracle/crsdata/oralinux/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=oralinux -Doracle.http.port=8896 -Doracle.jmx.port=8895 -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -Doracle.rhp.storagebase=/u01/app/oracle -Djava.security.manager -Djava.security.policy=/u01/app/oracle/crsdata/oralinux/rhp/conf/catalina.policy -Djava.security.egd=file:/dev/urandom -Doracle.jwc.wallet.path=/u01/app/oracle/crsdata/oralinux/security -Doracle.jmx.login.credstore=WALLET -Doracle.rest.enabled=false -Doracle.jmx.enabled=true -Dcatalina.home=/u01/app/oracle/zdm21/tomcat -Dcatalina.base=/u01/app/oracle/crsdata/oralinux/rhp -Djava.io.tmpdir=/u01/app/oracle/crsdata/oralinux/rhp/temp -Doracle.home=/u01/app/oracle/zdm21 -Doracle.jwc.mode=STANDALONE -classpath /u01/app/oracle/zdm21/jlib/cryptoj.jar:/u01/app/oracle/zdm21/jlib/oraclepki.jar:/u01/app/oracle/zdm21/jlib/osdt_core.jar:/u01/app/oracle/zdm21/jlib/osdt_cert.jar:/u01/app/oracle/zdm21/tomcat/lib/tomcat-juli.jar:/u01/app/oracle/zdm21/tomcat/lib/bootstrap.jar:/u01/app/oracle/zdm21/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=26493) ... [jwcctl debug] ... JWC Container running (pid=26493) ... [jwcctl debug] Check command:-Djava.net.preferIPv6Addresses=true -Dcatalina.base=/u01/app/oracle/crsdata/oralinux/rhp -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Doracle.jwc.client.logger.file.name=/u01/app/oracle/crsdata/oralinux/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=/u01/app/oracle/crsdata/oralinux/security -Doracle.jmx.login.credstore=WALLET -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -classpath /u01/app/oracle/zdm21/jlib/jwc-logging.jar:/u01/app/oracle/zdm21/jlib/jwc-security.jar:/u01/app/oracle/zdm21/jlib/jwc-client.jar:/u01/app/oracle/zdm21/jlib/jwc-cred.jar:/u01/app/oracle/zdm21/jlib/srvm.jar:/u01/app/oracle/zdm21/jlib/srvmhas.jar:/u01/app/oracle/zdm21/jlib/cryptoj.jar:/u01/app/oracle/zdm21/jlib/oraclepki.jar:/u01/app/oracle/zdm21/jlib/osdt_core.jar:/u01/app/oracle/zdm21/jlib/osdt_cert.jar:/u01/app/oracle/zdm21/tomcat/lib/tomcat-juli.jar oracle.cluster.jwc.tomcat.client.JWCChecker localhost 8896 -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.
Vérifier le status du service ZDM :
$ZDM_HOME/bin/zdmservice start
---------------------------------------
Service Status
---------------------------------------Running: true
Tranferport:
Conn String: jdbc:mysql://localhost:8897/
RMI port: 8895
HTTP port: 8896
Wallet path: /u01/app/oracle/crsdata/oralinux/security
L'installation de ZDM est maintenant terminée.
Dans un second article, nous procéderons à sa configuration et son utilisation pour migrer une base de données vers OCI.
Partage
Gardez un oeil sur tout
Recevez des notifications dès la publication d’un nouvel article et restez informé de l’actualité Cloud !
Pour offrir les meilleures expériences, nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations des appareils. Le fait de consentir à ces technologies nous permettra de traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines caractéristiques et fonctions.
Fonctionnel
Toujours activé
L’accès ou le stockage technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’utilisateur, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
L’accès ou le stockage technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou l’internaute.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques.Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
L’accès ou le stockage technique est nécessaire pour créer des profils d’internautes afin d’envoyer des publicités, ou pour suivre l’utilisateur sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.