Openflow Connector for Oracle : Configurer la base de données Oracle¶
Note
Ce connecteur est soumis aux conditions d’utilisation de Snowflake Connector.
Note
L’Openflow Connector for Oracle est également soumis à des conditions de service supplémentaires en plus des conditions de service standard du connecteur. Pour plus d’informations, consultez le Complément du connecteur Openflow pour Oracle.
Cette rubrique décrit comment configurer la base de données Oracle pour Openflow Connector for Oracle.
Note
La configuration de votre base de données Oracle dépend des politiques de sécurité et de l’architecture de base de données de votre organisation. Par exemple, si les tables résident dans une base de données de conteneur (CDB), une base de données pluggable (PDB), plusieurs PDBs, ou une combinaison des deux.
Les étapes fournies dans cette rubrique ne sont que des exemples. Modifiez-les selon les besoins de votre environnement.
En tant qu’administrateur de base de données Oracle, effectuez les procédures suivantes sur votre base de données source :
Configurer la période de conservation pour les journaux redo archivés
Configurer l’utilisateur de connexion du serveur sortant XStream
Configurer l’utilisateur de capture du serveur sortant XStream
Note
Les étapes de cette rubrique sont écrites pour une architecture multi-locataire avec une base de données de conteneur (CDB) et une ou plusieurs bases de données pluggables (PDB). Si votre base de données Oracle utilise une architecture à locataire unique, consultez Configurer XStream pour les bases de données à locataire unique.
Configurer la période de conservation pour les journaux redo archivés¶
Vous devez activer le mode ARCHIVELOG pour vous assurer que les données de modification sont disponibles pour la réplication.
Si vous utilisez AWSRDS pour Oracle, vous devez également configurer la période de conservation des journaux redo archivés. Déterminez cette période en fonction du volume des modifications apportées à la base de données source et à votre capacité de stockage.
Pour définir la période de conservation, par exemple à 24 heures, suivez les procédures du tableau suivant :
Version de la base de données |
Procédure |
|---|---|
AWS RDS (Standard) |
Exécutez ce qui suit :
Pour plus d’informations, consultez Conservation des journaux redo archivés . |
AWS RDS personnalisé |
Pour plus d’informations, consultez Restauration d’un RDS personnalisé pour l’instance Oracle. |
Activer XStream et la journalisation supplémentaire¶
Note
XStream est inclus avec la base de données Oracle et ne nécessite aucun logiciel supplémentaire.
Pour activer et configurer la réplication XStream pour capturer et diffuser les données de modification, exécutez les commandes suivantes :
Activez la réplication XStream :
ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
Note
Snowflake recommande de définir la taille du pool des flux à 2,5 GB. Cette allocation couvre les éléments suivants :
1 GB pour la capture
1 GB pour l’application
Un tampon supplémentaire de 25 %
Pour activer la journalisation supplémentaire afin de garantir que les journaux redo capturent les informations requises pour la réplication logique, exécutez les commandes suivantes :
Confirmez que la base de données est en mode ARCHIVELOG, comme indiqué dans l’exemple suivant :
SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
Snowflake recommande de forcer la journalisation au niveau de l’espace de la base de données ou de la table.
Définissez le conteneur en conteneur racine et ajoutez une journalisation supplémentaire à la base de données :
ALTER SESSION SET CONTAINER = CDB$ROOT; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Vous pouvez également activer la journalisation uniquement sur des tables spécifiques, comme indiqué dans l’exemple suivant :
ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Créez l’utilisateur administrateur XStream¶
Un utilisateur administrateur XStream est nécessaire pour gérer les composants XStream, y compris la création et la modification de serveurs sortants. Vous pouvez soit créer un utilisateur dédié à cet effet, soit utiliser un utilisateur existant, à condition que les privilèges d’administration XStream soient accordés (voir la section suivante).
L’exemple suivant détaille la configuration d’un utilisateur administrateur XStream dédié dans le conteneur racine d’unCDB.
Note
L’exemple suivant suppose que la base de données possède également une PDB contenant des tables à répliquer.
Connectez-vous en tant que SYSDBA ou en tant qu’utilisateur avec les privilèges appropriés et exécutez les commandes suivantes :
-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create a tablespace for the XStream administrator user.
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/cdb/xstream_adm_tbs.dbf'
SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
-- Switch to the Pluggable Database (PDB) and create a tablespace there.
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/pdb/xstream_adm_tbs.dbf'
SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
-- Switch back to the root container to create the common user.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create the XStream administrator user.
-- Note 'c##' prefix indicates a common user in a CDB environment, and CONTAINER=ALL grants privileges across all containers.
-- Replace "YOUR_XSTREAM_ADMIN_PASSWORD" with a strong, secure password.
CREATE USER c##xstreamadmin IDENTIFIED BY "YOUR_XSTREAM_ADMIN_PASSWORD"
DEFAULT TABLESPACE xstream_adm_tbs
QUOTA UNLIMITED ON xstream_adm_tbs
CONTAINER=ALL;
Accorder les privilèges d’administrateur XStream¶
Accordez les privilèges requis à l’utilisateur administrateur XStream en fonction de la version de votre base de données Oracle.
Pour les bases de données Oracle 19c et 21c
Connectez-vous en tant que SYSDBA ou en tant qu’utilisateur avec les privilèges appropriés.
Accordez les privilèges système nécessaires à l’administrateur XStream en exécutant la commande suivante :
GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING TO c##xstreamadmin CONTAINER=ALL; -- Grant XStream administration privileges using DBMS_XSTREAM_AUTH. -- This procedure grants the necessary permissions to manage XStream capture processes across all containers. BEGIN DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE( grantee => 'c##xstreamadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL'); END; /
Pour la base de données Oracle 23c
Connectez-vous en tant que SYSDBA ou en tant qu’utilisateur avec les privilèges appropriés.
Accordez les privilèges système nécessaires et les rôles XStream pour la base de données Oracle 23c en exécutant la commande suivante :
GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING, XSTREAM_CAPTURE TO c##xstreamadmin CONTAINER=ALL;
Configurer l’utilisateur de connexion au serveur XStream¶
Le connecteur Snowflake Openflow utilise un utilisateur de connexion dédié pour établir une connexion avec le serveur sortant XStream et recevoir des données de modification. Cet utilisateur a besoin de privilèges spécifiques pour faciliter la réplication :
Lire à partir du serveur sortant XStream : L’utilisateur doit pouvoir accéder au flux de données de modification à partir du serveur sortant XStream configuré.
Sélectionner parmi les vues du dictionnaire de données : L’utilisateur de connexion a besoin de l’accès SELECT à diverses vues du dictionnaire de données. Pour ce faire, il convient d’accorder SELECT_CATALOG_ROLE ou SELECT ANY DICTIONARY. Si l’attribution de SELECT ANY DICTIONARY n’est pas souhaitée en raison de la politique de l’entreprise, l’utilisateur a spécifiquement besoin de l’accès SELECT aux vues suivantes :
ALL_USERS
ALL_TABLES
ALL_TAB_COLS
ALL_CONS_COLUMNS
ALL_CONSTRAINTS
V$DATABASE
Sélectionner parmi les tables sources : L’utilisateur doit disposer des privilèges SELECT sur toutes les tables qui sont destinées à la réplication.
L’exemple suivant vous montre comment configurer un tel utilisateur dans le conteneur racine de la CDB. L’exemple suppose que la base de données possède également unePDB contenant des tables à répliquer.
-- Connect as SYSDBA or a user with appropriate privileges
-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create the connect user.
-- Replace "YOUR_CAPTURE_USER_PASSWORD" with a strong, secure password.
CREATE USER c##connectuser IDENTIFIED BY "YOUR_CAPTURE_USER_PASSWORD"
CONTAINER=ALL;
-- Grant necessary privileges to the connect user.
-- You can choose to grant access to specific tables
-- instead of SELECT ANY TABLE for more granular control,
-- for example, GRANT SELECT ON schema.table TO c##connectuser;
GRANT CREATE SESSION, SELECT_CATALOG_ROLE TO c##connectuser CONTAINER=ALL;
GRANT SELECT ANY TABLE TO c##connectuser CONTAINER=ALL;
GRANT LOCK ANY TABLE TO c##connectuser CONTAINER=ALL;
Créer un serveur sortant XStream¶
Le serveur sortant XStream capture les modifications des journaux redo pour une consommation par le connecteur Openflow. Définissez les schémas ou les tables à répliquer. Pour plus d’informations, consultez la DBMS_XSTREAM_ADM.CREATE_OUTBOUND documentation.
Considérations importantes relatives au champ d’application de la réplication :
Si une table est incluse dans la commande des règles de filtrage sortante XStream, elle ne sera pas répliquée.
Une table ou un schéma inclus ici doit également être défini dans les paramètres du connecteur pour être répliqué. Vous pouvez inclure un schéma entier dans les règles de filtrage du serveur et, par la suite, dans les paramètres du connecteur, spécifier uniquement certaines tables de ce schéma pour la réplication.
Note
Le serveur sortant XStream peut uniquement être créé à partir du conteneur racine. Cependant, à partir de la version 23ai de la base de données Oracle, il peut également être créé au niveau de la PDB.
Ci-dessous figurent trois exemples de configuration du serveur sortant XStream basé sur différents besoins de réplication. En pratique, lors de la configuration de votre serveur sortant XStream sur votre environnement de production, vous devez être sélectif quant aux modifications que vous capturez. Capturer toutes les données peut avoir de graves conséquences pour les performances de votre base de données et l’utilisation des ressources. Pour éviter un impact important sur votre CPU et votre réseau, et pour éviter que vos files d’attente ne soient remplies de données non pertinentes, il est essentiel d’utiliser une approche granulaire. La meilleure façon de le faire est d’utiliser la procédure DBMS_XSTREAM_ADM.ADD_TABLE_RULES, qui vous permet de ne choisir spécifiquement que les tables dont vous avez besoin.
Plus d’informations sur la configuration du serveur sortant XStream peuvent être trouvées dans la documentation Oracle : Configuration d’un XStream sortant.
Exemple 1 : Capturer toutes les tables de tous les schémas dans le conteneur racine et toutes les PDBs
-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;
DECLARE
tables DBMS_UTILITY.UNCL_ARRAY;
schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
-- To replicate all tables in all schemas across all containers, set both to NULL.
tables(1) := NULL;
schemas(1) := NULL;
DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
server_name => 'XOUT1',
table_names => tables,
schema_names => schemas,
include_ddl => TRUE
);
DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
RAISE;
END;
/
Exemple 2 : Capturer toutes les tables d’un seul schéma dans une base de données pluggable (PDB)
-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;
DECLARE
tables DBMS_UTILITY.UNCL_ARRAY;
schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
-- To replicate all tables in a schemas in the single PDB, set source_container_name.
tables(1) := NULL;
schemas(1) := 'schema_name';
DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
server_name => 'XOUT1',
table_names => tables,
schema_names => schemas,
include_ddl => TRUE,
source_container_name => 'YOUR_PDB_NAME'
);
DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
RAISE;
END;
/
Configurer l’utilisateur de connexion du serveur sortant XStream¶
Configurez l’utilisateur de connexion sur le serveur sortant XStream. Cela garantit que l’utilisateur de connexion précédemment créé est associé au serveur sortant XStream (XOUT1), ce qui lui permet de recevoir des données de modification.
Note
L’exemple suivant suppose que l’utilisateur de connexion est c##connectuser.
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
connect_user => 'c##connectuser');
END;
/
Configurer l’utilisateur de capture du serveur sortant XStream¶
Si vous avez configuré un utilisateur de capture distinct, configurez le serveur sortant XStream pour l’utiliser. Cela garantit que l’utilisateur de capture dédié est associé au serveur sortant XStream (XOUT1), ce qui lui permet de capturer les données de modification.
Si vous souhaitez que les données soient capturées par le même utilisateur que celui qui a créé le serveur (l’administrateur), ignorez cette étape.
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
capture_user => 'yourcaptureuser');
END;
/
Configurer XStream pour les bases de données à locataire unique¶
L’architecture par défaut pour Oracle 12c et versions ultérieures est une architecture multi-locataire avec une base de données de conteneur (CDB) et une ou plusieurs bases de données pluggables (PDB).
Si votre base de données Oracle utilise une architecture à locataire unique, notez les différences suivantes dans la configurationXStream :
N’utilisez pas les commandes
ALTER SESSION SET CONTAINER. Dans une base de données à locataire unique, il n’y a qu’une seule instance, donc le changement de conteneur ne s’applique pas.Ne créez qu’un seul espace de table
xstream_adm_tbs. Ne créez pas de deuxième espace de table dans une PDB.N’utilisez pas le préfixe
C##sur les noms d’utilisateurs. Par exemple, créezxstreamadminau lieu de``c##xstreamadmin`` etconnectuserau lieu de``c##connectuser``. Le préfixeC##est requis uniquement dans les environnements multi-locataires.N’incluez pas
CONTAINER=ALLoucontainer => 'ALL'dans les commandes. Ces clauses accordent des privilèges sur plusieurs conteneurs et ne s’appliquent pas dans une base de données à locataire unique.