Réplication de données entre les bases de données cloud d'une même région
Découvrez comment configurer Oracle Cloud Infrastructure GoldenGate pour répliquer des données entre deux bases de données autonomes.
Présentation
Oracle Cloud Infrastructure GoldenGate vous permet de répliquer les bases de données prises en charge au sein de la même région. Les étapes suivantes vous guident tout au long de l'instanciation d'une base de données cible à l'aide d'Oracle Data Pump et de la réplication des données de la source vers la cible.
Ces instructions de démarrage rapide sont également disponibles sous la forme de tutoriel LiveLabs : Consulter l'atelier.

Description de l'image same-region.png
Avant de commencer
Pour continuer, vous devez disposer des éléments suivants :
- Une base de données source existante
- Une base de données cible existante
- Les bases de données source et cible doivent se trouver dans une seule location au sein de la même région
- Si vous avez besoin de données échantillon, téléchargez Archive.zip, puis suivez les instructions fournies dans l'atelier pratique 11, Tâche 3 : charger le schéma ATP.
Tâche 1 : configurer l'environnement
- Créez un déploiement de réplication de données.
- Créez une connexion Oracle Autonomous Transaction Processing (ATP) source.
- Créez une connexion Autonomous Data Warehouse (ADW) cible.
- Affectez une connexion au déploiement.
- Utilisez l'outil SQL Autonomous Database pour activer la journalisation supplémentaire :
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
- Exécutez la requête suivante dans l'outil SQL afin de vous assurer que
support_mode=FULL
pour toutes les tables de la base de données source :select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';
Tâche 2 : créer l'extraction intégrée
L'extraction intégrée capture les modifications continues apportées à la base de données source.
- Sur la page Détails du déploiement, cliquez sur Lancer la console.
- Si nécessaire, entrez oggadmin pour le nom utilisateur et le mot de passe utilisés lors de la création du déploiement, puis cliquez sur Connexion.
- Ajoutez des données de transaction et une table de points de reprise :
- Ouvrez le menu de navigation, puis cliquez sur Connexions de base de données.
- Cliquez sur Se connecter à la base de données SourceATP.
- Dans le menu de navigation, cliquez sur Trandata, puis sur Ajouter Trandata (icône Plus).
- Dans le champ Nom de schéma, saisissez
SRC_OCIGGLL
, puis cliquez sur Submit. - Pour le vérifier, entrez
SRC_OCIGGLL
dans le champ Rechercher et cliquez sur Rechercher. - Ouvrez le menu de navigation, puis cliquez sur Connexions de base de données.
- Cliquez sur Se connecter à la base de données TargetADW.
- Dans le menu de navigation, cliquez sur Point de reprise, puis sur Ajouter un point de reprise (icône Plus).
- Pour Table de point de reprise, entrez
"SRCMIRROR_OCIGGLL"."CHECKTABLE"
, puis cliquez sur Soumettre.
- Ajout d'une extraction.Remarque
Reportez-vous à Options de paramètre d'extraction supplémentaires pour plus d'informations sur les paramètres que vous pouvez utiliser afin d'indiquer des tables source.Sur la page Paramètres d'extraction, ajoutez les lignes suivantes sousEXTTRAIL <trail-name>
:-- Capture DDL operations for listed schema tables ddl include mapped -- Add step-by-step history of -- to the report file. Very useful when troubleshooting. ddloptions report -- Write capture stats per table to the report file daily. report at 00:01 -- Rollover the report file weekly. Useful when IE runs -- without being stopped/started for long periods of time to -- keep the report files from becoming too large. reportrollover at 00:01 on Sunday -- Report total operations captured, and operations per second -- every 10 minutes. reportcount every 10 minutes, rate -- Table list for capture table SRC_OCIGGLL.*;
- Recherchez les éventuelles transactions à longue durée d'exécution . Exécutez le script suivant sur la base de données source :
select start_scn, start_time from gv$transaction where start_scn < (select max(start_scn) from dba_capture);
Si la requête renvoie des lignes, vous devez localiser le numéro SCN de la transaction, puis valider ou annuler la transaction.
Tâche 3 : exporter des données à l'aide d'Oracle Data Pump (ExpDP)
Utilisez Oracle Data Pump (ExpDP) pour exporter des données de la base de données source vers la banque d'objets Oracle.
- Créez un bucket de banque d'objets Oracle.
Notez le nom de l'espace de noms et du bucket en vue de leur utilisation avec les scripts d'export et d'import.
- Créez un jeton d'authentification, puis copiez la chaîne de jeton et collez-la dans un éditeur de texte pour une utilisation ultérieure.
- Créez des informations d'identification dans la base de données source, en remplaçant
<user-name>
et<token>
par le nom utilisateur de compte Oracle Cloud et par la chaîne de jeton que vous avez créée à l'étape précédente :BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'ADB_OBJECTSTORE', username => '<user-name>', password => '<token>' ); END;
- Exécutez le script suivant dans la base de données source pour créer le travail Exporter les données. Veillez à remplacer
<region>
,<namespace>
et<bucket-name>
dans l'URI de banque d'objets de façon appropriée.SRC_OCIGGLL.dmp
est un fichier qui sera créé lors de l'exécution du script.DECLARE ind NUMBER; -- Loop index h1 NUMBER; -- Data Pump job handle percent_done NUMBER; -- Percentage of job complete job_state VARCHAR2(30); -- To keep track of job state le ku$_LogEntry; -- For WIP and error messages js ku$_JobStatus; -- The job status from get_status jd ku$_JobDesc; -- The job description from get_status sts ku$_Status; -- The status object returned by get_status BEGIN -- Create a (user-named) Data Pump job to do a schema export. h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'SRC_OCIGGLL_EXPORT','LATEST'); -- Specify a single dump file for the job (using the handle just returned -- and a directory object, which must already be defined and accessible -- to the user running this procedure. DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE','100MB',DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE,1); -- A metadata filter is used to specify the schema that will be exported. DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''SRC_OCIGGLL'')'); -- Start the job. An exception will be generated if something is not set up properly. DBMS_DATAPUMP.START_JOB(h1); -- The export job should now be running. In the following loop, the job -- is monitored until it completes. In the meantime, progress information is displayed. percent_done := 0; job_state := 'UNDEFINED'; while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts); js := sts.job_status; -- If the percentage done changed, display the new value. if js.percent_done != percent_done then dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done)); percent_done := js.percent_done; end if; -- If any work-in-progress (WIP) or error messages were received for the job, display them. if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) then le := sts.wip; else if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) then le := sts.error; else le := null; end if; end if; if le is not null then ind := le.FIRST; while ind is not null loop dbms_output.put_line(le(ind).LogText); ind := le.NEXT(ind); end loop; end if; end loop; -- Indicate that the job finished and detach from it. dbms_output.put_line('Job has completed'); dbms_output.put_line('Final job state = ' || job_state); dbms_datapump.detach(h1); END;
Tâche 4 : instancier la base de données cible à l'aide d'Oracle Data Pump (ImpDP)
Utilisez Oracle Data Pump (ImpDP) pour importer des données dans la base de données cible à partir du fichier SRC_OCIGGLL.dmp
exporté depuis la base de données source.
- Créez des informations d'identification dans la base de données cible pour accéder à la banque d'objets Oracle (à l'aide des mêmes informations que dans la section précédente).
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'ADB_OBJECTSTORE', username => '<user-name>', password => '<token>' ); END;
- Exécutez le script suivant dans la base de données cible pour importer des données à partir du fichier
SRC_OCIGGLL.dmp
. Veillez à remplacer<region>
,<namespace>
et<bucket-name>
dans l'URI de banque d'objets de façon appropriée :DECLARE ind NUMBER; -- Loop index h1 NUMBER; -- Data Pump job handle percent_done NUMBER; -- Percentage of job complete job_state VARCHAR2(30); -- To keep track of job state le ku$_LogEntry; -- For WIP and error messages js ku$_JobStatus; -- The job status from get_status jd ku$_JobDesc; -- The job description from get_status sts ku$_Status; -- The status object returned by get_status BEGIN -- Create a (user-named) Data Pump job to do a "full" import (everything -- in the dump file without filtering). h1 := DBMS_DATAPUMP.OPEN('IMPORT','FULL',NULL,'SRCMIRROR_OCIGGLL_IMPORT'); -- Specify the single dump file for the job (using the handle just returned) -- and directory object, which must already be defined and accessible -- to the user running this procedure. This is the dump file created by -- the export operation in the first example. DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE',null,DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE); -- A metadata remap will map all schema objects from SRC_OCIGGLL to SRCMIRROR_OCIGGLL. DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA','SRC_OCIGGLL','SRCMIRROR_OCIGGLL'); -- If a table already exists in the destination schema, skip it (leave -- the preexisting table alone). This is the default, but it does not hurt -- to specify it explicitly. DBMS_DATAPUMP.SET_PARAMETER(h1,'TABLE_EXISTS_ACTION','SKIP'); -- Start the job. An exception is returned if something is not set up properly. DBMS_DATAPUMP.START_JOB(h1); -- The import job should now be running. In the following loop, the job is -- monitored until it completes. In the meantime, progress information is -- displayed. Note: this is identical to the export example. percent_done := 0; job_state := 'UNDEFINED'; while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop dbms_datapump.get_status(h1, dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts); js := sts.job_status; -- If the percentage done changed, display the new value. if js.percent_done != percent_done then dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done)); percent_done := js.percent_done; end if; -- If any work-in-progress (WIP) or Error messages were received for the job, display them. if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) then le := sts.wip; else if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) then le := sts.error; else le := null; end if; end if; if le is not null then ind := le.FIRST; while ind is not null loop dbms_output.put_line(le(ind).LogText); ind := le.NEXT(ind); end loop; end if; end loop; -- Indicate that the job finished and gracefully detach from it. dbms_output.put_line('Job has completed'); dbms_output.put_line('Final job state = ' || job_state); dbms_datapump.detach(h1); END;
Tâche 5 : ajouter et exécuter une réplication non intégrée
- Ajoutez et exécutez une réplication.Sur l'écran Fichier de paramètres, remplacez
MAP *.*, TARGET *.*;
par le script suivant :-- Capture DDL operations for listed schema tables -- ddl include mapped -- -- Add step-by-step history of ddl operations captured -- to the report file. Very useful when troubleshooting. -- ddloptions report -- -- Write capture stats per table to the report file daily. -- report at 00:01 -- -- Rollover the report file weekly. Useful when PR runs -- without being stopped/started for long periods of time to -- keep the report files from becoming too large. -- reportrollover at 00:01 on Sunday -- -- Report total operations captured, and operations per second -- every 10 minutes. -- reportcount every 10 minutes, rate -- -- Table map list for apply -- DBOPTIONS ENABLE_INSTANTIATION_FILTERING; MAP SRC_OCIGGLL.*, TARGET SRCMIRROR_OCIGGLL.*;
Remarque
DBOPTIONS ENABLE_INSTATIATION_FILTERING
active le filtrage de numéro CSN sur les tables importées à l'aide d'Oracle Data Pump. Pour plus d'informations, reportez-vous à Référence DBOPTIONS. - Effectuez des insertions dans la base de données source :
- Revenez à la console Oracle Cloud et utilisez le menu de navigation pour revenir à Oracle Database, à Autonomous Transaction Processing, puis à SourceATP.
- Sur la page Détails du DAV source, cliquez sur Actions de base de données, puis sur SQL.
- Entrez les insertions suivantes, puis cliquez sur Exécuter un script :
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1000,'Houston',20,743113); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1001,'Dallas',20,822416); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1002,'San Francisco',21,157574); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1003,'Los Angeles',21,743878); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1004,'San Diego',21,840689); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1005,'Chicago',23,616472); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1006,'Memphis',23,580075); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1007,'New York City',22,124434); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1008,'Boston',22,275581); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1009,'Washington D.C.',22,688002);
- Dans la console de déploiement OCI GoldenGate, cliquez sur le nom d'extraction (UAEXT), puis sur Statistiques. Vérifiez que SRC_OCIGGLL.SRC_CITY est répertorié avec 10 insérations.
- Revenez à l'écran Aperçu, cliquez sur le nom de réplication (REP), puis sur Statistiques. Vérifiez que SRCMIRROR_OCIGGLL.SRC_CITY est répertorié avec 10 insertions