Installation d’un système de réplication Sybase standby avec des fichiers de ressources

Logo

Introduction

Dans cet article, on se propose de créer un système standby par une synchronisation dump/load avec des fichiers de ressources et de décortiquer les opérations effectuées pas à pas. Utiliser des fichier de ressources, permet d’industrialiser la création d’un système standby et permet d’éviter la lourdeur des interfaces graphiques du binaire rs_init.

Le contexte du schéma de réplication est donné dans le graphique ci-dessous :

schéma de réplication Standby Sybase

La base de données cgcdb sur le serveur primaire DBA_T1_ASE est répliquée en mode standby sur le serveur secondaire DBA_T2_ASE (base cgcdb). Au cours de la mise en place de la réplication standby, la base secondaire cgcdb du serveur DBA_T2_ASE est synchronisée par dump/load avec la base primaire cgcdb du serveur DBA_T1_ASE.

Le serveur de réplication mis en œuvre s’appelle DBA_T1_REP et la base de données système du système de réplication est installée sur le serveur secondaire DBA_T2_ASE et s’appelle RSSD_DB_V15 (RSSD pour Replication Server System Database).

Pour plus d’informations sur l’installation d’un serveur de réplication Sybase : Installation d’un serveur de réplication Sybase 15 avec un fichier de ressources.

Contexte de l’environnement

Environnement Replication Server 15.0

DBA_T1_REP est créé avec une distribution Replication Server 15.0 (RS 15). Cette distribution est installée dans le répertoire /Software/sybase/repsrv-15 et n’est pas installée dans une distribution Sybase ASE 15.0 classique, ceci dans le but d’offrir à Sybase Replication Server 15.0 son propre Open Client 15.0 en cas de nécessité de patch.

Pour prendre l’environnement Replication Server 15.0, les variables ci-dessous doivent être définies :

export SYBASE=/Software/sybase/repsrv-15
export SYBASE_REP=REP-15_0
export SYBASE_OCS=OCS-15_0
PATH=$SYBASE/$SYBASE_REP/bin:$SYBASE/$SYBASE_OCS/bin:$PATH
export PATH
LD_LIBRARY_PATH=$SYBASE/$SYBASE_REP/lib:$SYBASE/$SYBASE_OCS/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

La variable $SYBASE_REP est très importante car elle définit le répertoire REP-15_0 dans la distribution de Sybase Replication Server.

Environnement des serveurs Adaptive Server Enterprise 15.0

Les serveurs Adaptive Server Enterprise DBA_T1_ASE et DBA_T2_ASE sont des versions 15.0 beta 2.

La distribution ASE 15.0 beta 2 est installée dans le répertoire /Software/sybase/15.0.

Pour prendre l’environnement Adaptive Server 15.0 beta2, les variables ci-dessous doivent être définies :

export SYBASE=/Software/sybase/15.0
export SYBASE_ASE=ASE-15_0
export SYBASE_OCS=OCS-15_0
PATH=$SYBASE/$SYBASE_ASE/bin:$SYBASE/$SYBASE_OCS/bin:$PATH
export PATH
LD_LIBRARY_PATH=$SYBASE/$SYBASE_ASE/lib:$SYBASE/$SYBASE_ASE/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

Le fichier interfaces est installé dans le répertoire /Software/sybase.

Concepts de la réplication Standby

La réplication standby copie les opérations DML, certaines opérations DDL et certaines procédures stockées systèmes d’une base de données primaire vers une base de données secondaire dite standby. Le mode standby réplique également les ordres truncate table (cette option peut toutefois être désactivée avec la commande alter logical connection).

Les commandes non répliquées vers la base standby sont :

  • select into
  • update statistics
  • options de bases de données ou serveur appliquées avec les procédures stockées sp_dboption ou sp_configure.
Commandes DDL supportées dans une réplication standby
(*) Sybase ASE 12.5 minimum
alter table create trigger drop view
create default create view grant
create index drop default installjava*
create plan* drop index remove java*
create procedure drop procedure revoke
create rule drop rule
create schema* drop table
create table drop trigger
Procédures stockées système supportées dans une réplication standby
(*) Sybase ASE 12.5 minimum
sp_addalias sp_dropalias sp_recompile
sp_addgroup sp_drop_all_qplans* sp_rename
sp_addmessage sp_dropgroup sp_rename_qpgroup*
sp_add_qpgroup* sp_dropkey sp_setrepcol
sp_adduser sp_dropmessage sp_setreplicate
sp_addtype sp_drop_qpgroup* sp_setrepmode
sp_bindefault sp_droptype sp_setrepproc
sp_bindmsg sp_dropuser sp_setreptable
sp_bindrule sp_export_qpgroup* sp_unbindefault
sp_changegroup sp_foreignkey sp_unbindmsg
sp_chgattribute sp_import_qpgroup* sp_unbindrule
sp_commonkey sp_primarykey sp_procxmode
sp_config_rep_agent

Pour mettre une base de données primaire en mode réplication standby :

exec sp_reptostandby db_name [, 'L1' | 'all' | 'none' ]

L1 représente le niveau de réplication supportée par Sybase ASE 12.5.

Au cours d’une réplication standby :

  • L’agent de réplication (Rep Agent) dans la base primaire cgcdb (DBA_T1_ASE) envoie les commandes DML et DDL vers le serveur de réplication.
  • Les commandes sont répliquées vers la base données standby, pour cela le serveur de réplication se connecte au serveur hébergeant la base standby avec un user de maintenance <db_name>_maint et ce user applique les ordres à répliquer.
  • Lorsque les ordres sont correctement répliquées, le serveur de réplication se connecte au serveur primaire DBA_T1_ASE avec un user de maintenance ayant le rôle replication_role (<db_name>_maint) afin de mettre à jour des informations dans les tables systèmes liées à la réplication (rs_%) comme la table rs_lastcommit.
Réplication standby ASE

Étapes préliminaires

Préparation du serveur primaire pour le mode standby

sp_reptostandby

En fonction du mode standby désiré (L1 ou ALL), la base cgcdb du serveur primaire DBA_T1_ASE doit être mise en mode standby avec la procédure sp_reptostandby à exécuter dans la base cgcdb à répliquer :

DBA_T1_ASE > use cgcdb
DBA_T1_ASE > go
DBA_T1_ASE > exec sp_reptostandby cgcdb,'ALL'
DBA_T1_ASE > go

LTM Truncation point has not been established with DBCC SETTRUNC. Changes to the
objects in the database may not be replicated until the truncation point is
set.
The replication status for database 'cgcdb' has been set to 'ALL'.

Activation des threads agents de réplication (enable rep agent threads)

Sur le serveur primaire, le futur agent de réplication ne peut être autorisé à s’exécuter que si le paramètre serveur "enable rep agent threads" est positionné à 1 (ce paramètre est dynamique) :

DBA_T1_ASE > exec sp_configure "enable rep agent threads",1
DBA_T1_ASE > go

Préparation du serveur de réplication pour le mode standby (create logical connection)

Au préalable, la connexion logique L_DBA_T2_ASE.l_cgcdb pour le mode standby est créée au niveau du serveur de réplication DBA_T1_REP avec la commande create logical connection.

create logical connection to <Logical_dataserver>.<Logical_dbname>
DBA_T1_REP > create logical connection to L_DBA_T2_ASE.l_cgcdb
DBA_T1_ASE > go

Logical connection to 'L_DBA_T2_ASE.l_cgcdb' is created.

Pour vérifier la création de la connexion logique L_DBA_T2_ASE.l_cgcdb, lancer la commande admin logical_status au sein du serveur de réplication :

admin logical_status
DBA_T1_REP > admin logical_status
DBA_T1_ASE > go
Logical Connection Name            Active Connection Name             Active Conn State
Standby connection name            Standby Conn State                   Controller RS
Operation in Progress              State of Operation in Progress       Spid
-----------------------------      -------------------------------    ---------------------------
[102] L_DBA_T2_ASE.l_cgcdb         None                               None
None                               None                               [16777317] DBA_T1_REP
None                               None

Ajout de la base primaire DBA_T1_ASE.cgcdb dans le système de réplication standby

Préparation du fichier de ressources

Un fichier exemple de ressources setupdb.rs est fourni en standard dans la distribution Replication Server dans le répertoire <localisation_repserver>/$SYBASE_REP/init/rs (dans le cas pratique de cette documentation : /Software/sybase/reprsrv-15/REP-15_0/init/rs).

Il suffit de copier ce fichier setupdb.rs et de personnaliser cette copie pour l’ajout du serveur primaire DBA_T1_ASE dans le système de réplication. Ce fichier de ressources est appelé setup_DBA_T1_ASE.rs et est installé dans le répertoire /Software/sybase/repsrv-15/REP-15_0/install.

Sections du fichier install_DBA_T1_ASE.rs

Dans le fichier de ressources, les paramètres sybinit.release_directory, sybinit.product et rs.rs_operation sont obligatoirement renseignés :

sybinit.release_directory Répertoire d’installation de la distribution Replication Server /Software/sybase/repsrv-15
sybinit.product Produit (rs pour Replication Server) rs
rs.rs_operation Précise si il s’agit d’une installation (rs_install), d’un upgrade (rs_upgrade), d’un downgrade (rs_downgrade) d’un système de réplication ou du paramétrage d’une base de données dans le système de réplication (rs_setup_db) rs_setup_db
install_DBA_T1_ASE.rs
sybinit.release_directory: /Software/sybase/repsrv-15
sybinit.product: rs
rs.rs_operation: rs_setup_db

REPLICATION SERVER INFORMATION

La section REPLICATION SERVER INFORMATION précise les paramètres du serveur de réplication :

rs.rs_name Nom du serveur de réplication DBA_T1_REP
rs.rs_rs_sa_user Login sa du serveur de réplication
rs.rs_rs_sa_pass Mot de passe du login sa du serveur de réplication
install_DBA_T1_ASE.rs
rs.rs_name: DBA_T1_REP
rs.rs_rs_sa_user: sa
rs.rs_rs_sa_pass: <sa_password>

DATABASE INFORMATION

La section DATABASE INFORMATION est importante car elle précise la base de données à ajouter dans le système de réplication.

rs.rs_ds_name Nom du serveur ASE à ajouter dans le système de réplication DBA_T1_ASE
rs.rs_ds_sa_user Login sa du serveur ASE à ajouter (par défaut : sa) USE_DEFAULT
rs.rs_ds_sa_password Mot de passe du login sa du serveur ASE à ajouter <à renseigner>
rs.rs_db_name Base de données du serveur ASE à ajouter dans le système de réplication cgcdb
rs.rs_needs_repagent Le système de réplication utilisera-t-il la méthodologie des agents de réplication (Rep Agents), ce qui est le cas ici. yes
rs.rs_requires_ltm Le système de réplication utilisera-t-il la méthodologie LTM pour la réplication (Log Transfer Manager, ASE 11.x et RS 11.x), ce qui n’est pas le cas ici no
rs.rs_db_maint_user Nom du user dans la base de données à ajouter qui enverra les données à répliquer vers le serveur de réplication. Par défaut : <rs_db_name>_maint
rs.rs_db_maint_password Mot de passe du user dans la base de données à ajouter qui mettra à jour les données répliquées. Par défaut <rs_db_name>_maint_ps
rs.rs_db_dbo_user Propriétaire de la base de données à ajouter (utilisé seulement dans le contexte de la méthodologie LTM Log Transfer Manager, ce qui n’est pas le cas ici).
rs.rs_db_dbo_password Mot de passe du propriétaire de la base de données à ajouter (utilisé seulement dans le contexte de la méthodologie LTM Log Transfer Manager, ce qui n’est pas le cas ici).
install_DBA_T1_ASE.rs
rs.rs_ds_name: DBA_T1_ASE
rs.rs_ds_sa_user: USE_DEFAULT
rs.rs_ds_sa_password: <sa_password>
rs.rs_db_name: cgcdb
rs.rs_needs_repagent: yes
rs.rs_requires_ltm: no
rs.rs_db_maint_user: USE_DEFAULT
rs.rs_db_maint_password: USE_DEFAULT
rs.rs_db_dbo_user: USE_DEFAULT
rs.rs_db_dbo_password: USE_DEFAULT

RSSD LOG TRANSFER MANAGER INFORMATION

La section RSSD LOG TRANSFER MANAGER INFORMATION précise les paramètres dans le contexte de l’utilisation du Log transfer Manager (ASE 11.x et RS 11.x), ce qui n’est pas le cas ici. Il n’est pas nécessaire de renseigner cette section dès lors que le paramètre rs.rs_requires_ltm est à no dans le fichier de ressources (rs.rs_requires_ltm: no).

LOGICAL CONNECTION INFO FOR WARM STANDBY

La section LOGICAL CONNECTION INFO FOR WARM STANDBY est très importante pour paramétrer la base de données primaire.

rs.rs_db_physical_for_logical Permet de spécifier si il s’agit d’une connexion physique vers un serveur ASE à travers une connexion logique ou non. C’est le cas ici, la connexion physique vers DBA_T1_ASE.cgcdb s’effectue à travers la connexion logique L_DBA_T2_ASE.l_cgcdb définie dans une des étapes précédentes yes
rs.rs_db_active_or_standby Indique si il s’agit de la connexion active (serveur primaire) ou standby (serveur secondaire) active
rs.rs_db_logical_ds_name Nom logique du serveur ASE L_DBA_T2_ASE
rs.rs_db_logical_db_name Nom logique de la base de données l_cgcdb
install_DBA_T1_ASE.rs
rs.rs_db_physical_for_logical: yes
rs.rs_db_active_or_standby: active
rs.rs_db_logical_ds_name: L_DBA_T2_ASE
rs.rs_db_logical_db_name: l_cgcdb

Autres sections

La section REPLICATION SERVER INTERFACES INFORMATION précise les paramètres à ajouter dans le fichier interfaces pour le serveur de réplication, ce qui n’est pas le cas ici car le fichier interfaces est déjà renseigné avec le serveur de réplication. Il n’est pas nécessaire de renseigner cette section et de laisser rs.do_add_replication_server à no.

La section LOG TRANSFER MANAGER INTERFACES précise les paramètres à ajouter dans le fichier interfaces dans le contexte de l’utilisation du Log transfer Manager (ASE 11.x et RS 11.x), ce qui n’est pas le cas ici. Il n’est pas nécessaire de renseigner cette section et de laisser rs.do_add_ltm à no.

Lancement de l’ajout du serveur primaire DBA_T1_ASE.cgcdb (rs_init)

Après personnalisation du fichier de ressource setup_DBA_T1_ASE.rs, l’ajout de la base de données primaire cgcdb du serveur DBA_T1_ASE est déclenché avec le binaire rs_init dans le répertoire <path_distribution_replicationserver>/$SYBASE_REP/install (/Software/sybase/repsrv-15/REP-15_0/install dans le contexte de cet article).

rs_init [-a]
  [-c charset]
  [-e]
  [-h]
  [-l language]
  [-log log_file]
  [-r resource_file]
  [-s release_directory]
  [-v]

L’option -r permet de donner un fichier de ressources au binaire rs_init et évite ainsi l’utilisation graphique et interactive du binaire rs_init.

Pour lancer l’ajout de la base de données primaire cgcdb du serveur DBA_T1_ASE avec le binaire rs_init en utilisant le fichier de ressource /Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T1_ASE.rs.

export SYBASE=/Software/sybase/repsrv-15
export SYBASE_REP=REP-15_0
export SYBASE_OCS=OCS-15_0
PATH=$SYBASE/$SYBASE_REP/bin:$SYBASE/$SYBASE_OCS/bin:$PATH
export PATH
LD_LIBRARY_PATH=$SYBASE/$SYBASE_REP/lib:$SYBASE/$SYBASE_OCS/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$SYBASE/$SYBASE_REP/install/rs_init -r/$SYBASE/$SYBASE_REP/install/setup_DBA_T1_ASE.rs
     -log $SYBASE/$SYBASE_REP/install/setup_DBA_T1_ASE.log

Opérations effectuées lors de l’ajout de DBA_T1_ASE.cgcdb

Dans ce paragraphe sont expliquées les différentes phases lancées avec le binaire rs_init , phases qui sont :

(le fichier de log allégé est donné en annexe 1 de cette documentation).

  1. création du user de maintenance cgcdb_maint dans le serveur DBA_T1_ASE.
  2. exécution du script rsinspri.sql dans la base de données cgcdb primaire (DBA_T1_ASE).
  3. attribution des droits.
  4. attribution du rôle replication_role au user de maintenance cgcdb_maint dans la base de données primaire cgcdb (DBA_T1_ASE).
  5. configuration de l’agent de réplication dans la base de données primaire cgcdb du serveur DBA_T1_ASE.
  6. configuration de la connexion vers DBA_T1_ASE.cgcdb au sein du serveur de réplication DBA_T1_REP.
  7. démarrage de l’agent de réplication pour la base de données cgcdb du serveur primaire DBA_T1_ASE.

Étape 1 : création du user de maintenance cgcdb_maint dans le serveur DBA_T1_ASE

La toute première étape consiste à créer le login cgcdb_maint dans le serveur ASE primaire et le user cgcdb_maint dans la base de données primaire cgcdb :

DBA_T1_ASE > exec sp_addlogin cgcdb_maint,cgcdb_maint_ps,cgcdb
DBA_T1_ASE > go
DBA_T1_ASE > exec sp_adduser cgcdb_maint, cgcdb_maint
DBA_T1_ASE > go

Étape 2 : exécution du script rsinspri.sql

Le script rsinspri.sql localisé dans le répertoire $SYBASE/$SYBASE_REP/scripts (/Software/sybase/repsrv-15/scripts dans notre exemple) est exécuté dans la base de données primaire cgcdb. Ce script installe les tables rs_% et les procédures stockées rs_% nécessaires à la réplication dans l’environnement de la base de données primaire cgcdb.

Étape 3 : attribution des droits

À l’issue de l’exécution rsinspri.sql sur la base de données primaire, les droits nécessaires sont donnés sur les objets rs_%.

Par ailleurs, la table rs_lastcommit est définie comme ne devant pas être répliquée avec la procédure sp_setreptable et la table rs_update_lastcommit est définie comme devant être répliquée toujours avec la procédure sp_setreptable.

DBA_T1_ASE > grant execute on rs_update_lastcommit to PUBLIC
DBA_T1_ASE > grant execute on rs_marker to PUBLIC
DBA_T1_ASE > grant execute on rs_check_repl_stat to PUBLIC
DBA_T1_ASE > exec sp_setreplicate rs_lastcommit,false
DBA_T1_ASE > exec sp_setreplicate rs_update_lastcommit,true
DBA_T1_ASE > grant execute on rs_get_lastcommit to cgcdb_maint
DBA_T1_ASE > grant all on rs_lastcommit to cgcdb_maint

Étape 4 : attribution du rôle replication_role au user de maintenance dans la base de données primaire cgcdb (DBA_T1_ASE)

Le rôle replication_role est ensuite donné au user de maintenance dans la base de données primaire cgcdb (DBA_T1_ASE) :

DBA_T1_ASE > exec sp_role "grant", replication_role, cgcdb_maint

Étape 5 : Configuration de l’agent de réplication dans la base de données primaire cgcdb (DBA_T1_ASE), sp_config_rep_agent

L’agent de réplication est alors configuré pour la base de données primaire cgcdb avec la procédure sp_config_rep_agent.

La première commande sp_config_rep_agent permet de spécifier le nom du serveur de réplication (DBA_T1_REP) auquel l’agent de réplication doit se connecter ainsi que le user et le mot de passe avec lequels se connecter.

exec sp_config_rep_agent [dbname [, {'enable',
  'repserver_name', 'repserver_username'. 'repserver_password'} ]]
DBA_T1_ASE > exec sp_config_rep_agent "cgcdb", enable,
                "DBA_T1_REP", "DBA_T1_REP_ra", "DBA_T1_REP_ra_ps"

La seconde commande sp_config_rep_agent permet de spécifier à l’agent de réplication de la base de données primaire de se mettre en mode standby dans l’envoi des transactions.

exec sp_config_rep_agent [dbname [, { 'send warm standby xacts', {'true' | 'false'} ]]
DBA_T1_ASE > exec sp_config_rep_agent "cgcdb", "send warm",true

Étape 6 : Configuration de la connexion vers DBA_T1_ASE.cgcdb au sein du serveur de réplication DBA_T1_REP, create connection

La création de la connexion active vers la base de données primaire cgcdb du serveur DBA_T1_ASE pour la connexion logique L_DBA_T2_ASE.l_cgcdb est alors définie avec la commande create connection au niveau du serveur de réplication DBA_T1_REP :

DBA_T1_REP > create connection to "DBA_T1_ASE"."cgcdb"
            set error class rs_sqlserver_error_class
            set function string class rs_sqlserver_function_class
            set username "cgcdb_maint" set password "cgcdb_maint_ps"
            with log transfer on as active for "L_DBA_T2_ASE"."l_cgcdb"

Étape 7 : Démarrage de l’agent de réplication pour la base de données primaire cgcdb (DBA_T1_ASE), sp_start_rep_agent

L’agent de réplication dans la base de données primaire cgcdb (DBA_T1_ASE) est ensuite démarré avec la procédure stockée sp_start_rep_agent :

DBA_T1_ASE > exec sp_start_rep_agent "cgcdb"

Ajout de la base standby DBA_T2_ASE.cgcdb dans le système de réplication standby

Préparation du user de maintenance cgcdb_maint dans le serveur secondaire DBA_T2_ASE

Le user cgcdb_maint défini dans la base DBA_T1_ASE.cgcdb à l’étape précédente doit également être défini manuellement dans la base secondaire DBA_T2_ASE.cgcdb :

DBA_T2_ASE > exec sp_addlogin cgcdb_maint,cgcdb_maint_ps,cgcdb
DBA_T2_ASE > go
DBA_T2_ASE > use cgcdb
DBA_T2_ASE > go
DBA_T2_ASE > exec sp_adduser cgcdb_maint, cgcdb_maint
DBA_T2_ASE > go

Synchronisation des logins et users entre le serveur primaire et le serveur secondaire

Cette étape est cruciale, il est impératif que les suid des logins et users dans les bases primaire DBA_T1_ASE.cgcdb et DBA_T2_ASE.cgcdb soient rigoureusement identiques pour éviter toute désynchronisation lors du dump/load.

Dans le contexte de cette documentation, c’est pas le cas :

DBA_T1_ASEDBA_T2_ASE
select name, suid from syslogins
 cgcdb_dbo           4
 cgcdb_maint         5
select name, suid from syslogins
 cgcdb_dbo           6
 cgcdb_maint         7

Pour resynchroniser les logins et users, la méthode ci-dessous a été utilisée :

DBA_T1_ASE > exec sp_configure 'allow updates to system tables', 1
DBA_T1_ASE > go
DBA_T1_ASE > use cgcdb
DBA_T1_ASE > go
DBA_T1_ASE > exec sp_changedbowner sa
DBA_T1_ASE > go
DBA_T1_ASE > update sysusers set suid=7 where name='cgcdb_maint'
DBA_T1_ASE > go
DBA_T1_ASE > use master
DBA_T1_ASE > go
DBA_T1_ASE > update syslogins set suid=7 where name='cgcdb_maint'
DBA_T1_ASE > go
DBA_T1_ASE > update syslogins set suid=6 where name='cgcdb_dbo'
DBA_T1_ASE > go
DBA_T1_ASE > use cgcdb
DBA_T1_ASE > go
DBA_T1_ASE > exec sp_changedbowner 'cgcdb_dbo'
DBA_T1_ASE > go
DBA_T1_ASE > exec sp_configure 'allow updates to system tables', 0
DBA_T1_ASE > go

Préparation du fichier de ressources pour l’ajout de la base standby DBA_T2_ASE.cgcdb

Un fichier exemple de ressources setupdb.rs est fourni en standard dans la distribution Replication Server dans le répertoire <localisation_repserver>/$SYBASE_REP/init/rs

(dans le cas pratique de cette documentation : /Software/sybase/reprsrv-15/REP-15_0/init/rs).

Il suffit de copier ce fichier setupdb.rs et de personnaliser cette copie pour l’ajout du serveur secondaire DBA_T2_ASE dans le système de réplication. Ce fichier de ressources est appelé setup_DBA_T2_ASE.rs et est installé dans le répertoire /Software/sybase/repsrv-15/REP-15_0/install.

Sections du fichier setup_DBA_T2_ASE.rs

Dans le fichier de ressources, les paramètres sybinit.release_directory, sybinit.product et rs.rs_operation sont obligatoirement renseignés :

sybinit.release_directory Répertoire d’installation de la distribution Replication Server /Software/sybase/repsrv-15
sybinit.product Produit (rs pour Replication Server) rs
rs.rs_operation Précise si il s’agit d’une installation (rs_install), d’un upgrade (rs_upgrade), d’un downgrade (rs_downgrade) d’un système de réplication ou du paramétrage d’une base de données dans le système de réplication (rs_setup_db) rs_setup_db
setup_DBA_T2_ASE.rs
sybinit.release_directory: /Software/sybase/repsrv-15
sybinit.product: rs
rs.rs_operation: rs_setup_db

REPLICATION SERVER INFORMATION

La section REPLICATION SERVER INFORMATION précise les paramètres du serveur de réplication :

rs.rs_name Nom du serveur de réplication DBA_T1_REP
rs.rs_rs_sa_user Login sa du serveur de réplication
rs.rs_rs_sa_pass Mot de passe du login sa du serveur de réplication
setup_DBA_T2_ASE.rs
rs.rs_name: DBA_T1_REP
rs.rs_rs_sa_user: sa
rs.rs_rs_sa_pass: <sa_password>

DATABASE INFORMATION

La section DATABASE INFORMATION est importante car elle précise la base de données à ajouter dans le système de réplication.

rs.rs_ds_name Nom du serveur ASE à ajouter dans le système de réplication DBA_T2_ASE
rs.rs_ds_sa_user Login sa du serveur ASE à ajouter (par défaut : sa) USE_DEFAULT
rs.rs_ds_sa_password Mot de passe du login sa du serveur ASE à ajouter <à renseigner>
rs.rs_db_name Base de données du serveur ASE à ajouter dans le système de réplication cgcdb
rs.rs_needs_repagent Le système de réplication utilisera-t-il la méthodologie des agents de réplication (Rep Agents), ce qui est le cas ici. yes
rs.rs_requires_ltm Le système de réplication utilisera-t-il la méthodologie LTM pour la réplication (Log Transfer Manager, ASE 11.x et RS 11.x), ce qui n’est pas le cas ici no
rs.rs_db_maint_user Nom du user dans la base de données à ajouter qui enverra les données à répliquer vers le serveur de réplication. Par défaut : <rs_db_name>_maint
rs.rs_db_maint_password Mot de passe du user dans la base de données à ajouter qui mettra à jour les données répliquées. Par défaut <rs_db_name>_maint_ps
rs.rs_db_dbo_user Propriétaire de la base de données à ajouter (utilisé seulement dans le contexte de la méthodologie LTM Log Transfer Manager, ce qui n’est pas le cas ici).
rs.rs_db_dbo_password Mot de passe du propriétaire de la base de données à ajouter (utilisé seulement dans le contexte de la méthodologie LTM Log Transfer Manager, ce qui n’est pas le cas ici).
setup_DBA_T2_ASE.rs
rs.rs_ds_name: DBA_T2_ASE
rs.rs_ds_sa_user: USE_DEFAULT
rs.rs_ds_sa_password: <sa_password>
rs.rs_db_name: cgcdb
rs.rs_needs_repagent: yes
rs.rs_requires_ltm: no
rs.rs_db_maint_user: USE_DEFAULT
rs.rs_db_maint_password: USE_DEFAULT
rs.rs_db_dbo_user: USE_DEFAULT
rs.rs_db_dbo_password: USE_DEFAULT

RSSD LOG TRANSFER MANAGER INFORMATION

La section RSSD LOG TRANSFER MANAGER INFORMATION précise les paramètres dans le contexte de l’utilisation du Log transfer Manager (ASE 11.x et RS 11.x), ce qui n’est pas le cas ici. Il n’est pas nécessaire de renseigner cette section dès lors que le paramètre rs.rs_requires_ltm est à no dans le fichier de ressources (rs.rs_requires_ltm: no).

LOGICAL CONNECTION INFO FOR WARM STANDBY

La section LOGICAL CONNECTION INFO FOR WARM STANDBY est très importante pour paramétrer la base de données secondaire, qui est une standby de la base de données primaire cgcdb du serveur DBA_T1_ASE

rs.rs_db_physical_for_logical Permet de spécifier si il s’agit d’une connexion physique vers un serveur ASE à travers une connexion logique ou non. C’est le cas ici, la connexion physique vers DBA_T2_ASE.cgcdb s’effectue à travers la connexion logique L_DBA_T2_ASE.l_cgcdb définie dans une des étapes précédentes yes
rs.rs_db_active_or_standby Indique si il s’agit de la connexion active (serveur primaire) ou standby (serveur secondaire) standby
rs.rs_db_logical_ds_name Nom logique du serveur ASE L_DBA_T2_ASE
rs.rs_db_logical_db_name Nom logique de la base de données l_cgcdb
rs.rs_db_active_ds_name Nom du serveur ASE primaire DBA_T1_ASE
rs.rs_db_active_db_name Base de données du serveur ASE primaire
rs.rs_db_active_sa Login sa du serveur primaire ASE
rs.rs_db_active_sa_pw Mot de passe du login sa du serveur primaire ASE
rs.rs_init_by_dump La base de données secondaire est-elle synchronisée à partir d’un dump de la base de données primaire ?
rs.rs_db_use_dmp_marker Au cours de la synchronisation par dump/load, la réplication positionne-t-elle un marqueur dans le journal de transactions de la base primaire ?
setup_DBA_T2_ASE.rs
rs.rs_db_physical_for_logical: yes
rs.rs_db_active_or_standby: standby
rs.rs_db_logical_ds_name: L_DBA_T2_ASE
rs.rs_db_logical_db_name: l_cgcdb
rs.rs_db_active_ds_name: DBA_T1_ASE
rs.rs_db_active_db_name: cgcdb
rs.rs_db_active_sa: sa
rs.rs_db_active_sa_pw: <sa_password>
rs.rs_init_by_dump: yes
rs.rs_db_use_dmp_marker: yes

Autres sections

La section REPLICATION SERVER INTERFACES INFORMATION précise les paramètres à ajouter dans le fichier interfaces pour le serveur de réplication, ce qui n’est pas le cas ici car le fichier interfaces est déjà renseigné avec le serveur de réplication. Il n’est pas nécessaire de renseigner cette section et de laisser rs.do_add_replication_server à no.

La section LOG TRANSFER MANAGER INTERFACES précise les paramètres à ajouter dans le fichier interfaces dans le contexte de l’utilisation du Log transfer Manager (ASE 11.x et RS 11.x), ce qui n’est pas le cas ici. Il n’est pas nécessaire de renseigner cette section et de laisser rs.do_add_ltm à no.

Lancement de l’ajout du serveur secondaire DBA_T2_ASE (rs_init)

Après personnalisation du fichier de ressource setup_DBA_T2_ASE.rs, l’ajout de la base de données standby cgcdb du serveur DBA_T2_ASE est déclenché avec le binaire rs_init dans le répertoire <path_distribution_replicationserver>/$SYBASE_REP/install (/Software/sybase/repsrv-15/REP-15_0/install dans le contexte de cet article).

rs_init [-a]
  [-c charset]
  [-e]
  [-h]
  [-l language]
  [-log log_file]
  [-r resource_file]
  [-s release_directory]
  [-v]

L’option -r permet de donner un fichier de ressources au binaire rs_init et évite ainsi l’utilisation graphique du binaire rs_init.

Pour lancer l’ajout de la base de données standby cgcdb du serveur DBA_T2_ASE avec le binaire rs_init en utilisant le fichier de ressource /Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T2_ASE.rs

export SYBASE=/Software/sybase/repsrv-15
export SYBASE_REP=REP-15_0
export SYBASE_OCS=OCS-15_0
PATH=$SYBASE/$SYBASE_REP/bin:$SYBASE/$SYBASE_OCS/bin:$PATH
export PATH
LD_LIBRARY_PATH=$SYBASE/$SYBASE_REP/lib:$SYBASE/$SYBASE_OCS/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

$SYBASE/$SYBASE_REP/install/rs_init -r/$SYBASE/$SYBASE_REP/install/setup_DBA_T2_ASE.rs
            -log $SYBASE/$SYBASE_REP/install/setup_DBA_T2_ASE.log

Opérations effectuées lors de l’ajout de DBA_T2_ASE.cgcdb

La création de la connexion standby vers la base de données secondaire cgcdb du serveur DBA_T2_ASE pour la connexion logique L_DBA_T2_ASE.l_cgcdb est alors définie avec la commande create connection au niveau du serveur de réplication DBA_T1_REP :

DBA_T1_REP > create connection to "DBA_T2_ASE"."cgcdb"
              set error class rs_sqlserver_error_class
              set function string class rs_sqlserver_function_class
              set username "cgcdb_maint" set password "cgcdb_maint_ps"
              with log transfer on as standby
              for "L_DBA_T2_ASE"."l_cgcdb"
              use dump marker

L’option use dump marker indique qu’une synchronisation de la base standby est effectuée par dump/load de la base primaire avec un marqueur.

La création de ce marqueur est indiquée dans le fichier de log du serveur de réplication :

Placing marker in DBA_T1_ASE.cgcdb log
WARNING #41100 CREATE(DBA_T2_ASE.cgcdb) - \stdbint.c(1538)
Create Standby DBA_T2_ASE.cgcdb: If you are using dump/load to initialize the standby database,
make sure that the suids in sysusers table in DBA_T2_ASE.cgcdb match suids in syslogins table
Create completed : DBA_T2_ASE.cgcdb

Vérification de la mise en place de la connexion standby

Les commandes Replication Server admin who et admin logical_status permettent de vérifier la mise en place de la connexion active vers DBA_T1_ASE.cgcdb et de la connexion standby DBA_T2_ASE.cgcdb.

DBA_T1_REP > admin who
DBA_T1_REP > go

Spid   Name             State                       Info
----   -----------      ------------------------    -----------------------------------
15     DIST             Awaiting Wakeup             102 L_DBA_T2_ASE.l_cgcdb
19     SQT              Awaiting Wakeup             102:1 DIST L_DBA_T2_ASE.l_cgcdb
11     SQM              Awaiting Message            102:1 L_DBA_T2_ASE.l_cgcdb
10     SQM              Awaiting Message            102:0 L_DBA_T2_ASE.l_cgcdb
23     DSI EXEC         Awaiting Command            103(1) DBA_T1_ASE.cgcdb
12     DSI              Awaiting Message            103 DBA_T1_ASE.cgcdb
26     REP AGENT        Awaiting Command            DBA_T1_ASE.cgcdb
       DSI EXEC         Suspended                   106(1) DBA_T2_ASE.cgcdb
       DSI              Suspended                   106 DBA_T2_ASE.cgcdb

Avec la commande admin who, tous les threads vers DBA_T1_ASE.cgcdb et L_DBA_T2_ASE.l_cgcdb doivent être en mode Awaiting. Seuls les threads DSI vers DBA_T2_ASE.cgcdb doivent être suspendus (Suspended).

DBA_T1_REP > admin logical_status
DBA_T1_ASE > go
Logical Connection Name            Active Connection Name             Active Conn State
Standby connection name            Standby Conn State                   Controller RS
Operation in Progress              State of Operation in Progress       Spid
-----------------------------      -------------------------------    ---------------------------
[102] L_DBA_T2_ASE.l_cgcdb          [103] DBA_T1_ASE.cgcdb             Active/
[106] DBA_T2_ASE.cgcdb              Suspended/Waiting for              [16777317] DBA_T1_REP
                                     Enable Marker
None                               None

Avec la commande admin logical_status, il faut retrouver les informations ci-dessous :

  • Logical Connection Name : L_DBA_T2_ASE.l_cgcdb
  • Active Connection Name : DBA_T1_ASE.cgcdb
  • Active Conn State : Active/
  • Standby Connection Name : DBA_T2_ASE.cgcdb
  • Standby Conn State : Suspended/Waiting for Enable Marker

L’état de la connexion standby doit impérativement être Suspended/Waiting for Enable Marker, état qui indique que le marqueur de dump est attendu après la resynchronisation par dump/load.

Synchronisation

Dump / Load

La base cgcdb sur le serveur primaire DBA_T1_ASE est alors sauvegardée puis chargée sur le serveur secondaire DBA_T2_ASE par dump/load.

DBA_T1_ASE > dump database cgcdb to '/cgcdb/sybase/DBA_T1_ASE/export/cgcdb.dmp'
DBA_T1_ASE > go

DBA_T2_ASE > load database cgcdb from '/cgcdb/sybase/DBA_T1_ASE/export/cgcdb.dmp'
DBA_T2_ASE > go

DBA_T2_ASE > online database cgcdb
DBA_T2_ASE > go

Mise en mode dbo du user cgcdb_maint sur le serveur secondaire DBA_T2_ASE

À l’issue du chargement de la base cgcdb sur le serveur secondaire DBA_T2_ASE, le user cgcdb_maint est alors supprimé et cgcdb_maint est aliasé au dbo :

DBA_T2_ASE > use cgcdb
DBA_T2_ASE > go
DBA_T2_ASE > exec sp_dropuser 'cgcdb_maint'
DBA_T2_ASE > go
DBA_T2_ASE > exec sp_addalias 'cgcdb_maint','dbo'
DBA_T2_ASE > go

Suppression du point de troncature dans le base standby

Le point de troncature de la réplication provenant du chargement de la base primaire doit être annulé sur la base standby avec la commande dbcc settrunc et les options ltmet ignore :

DBA_T2_ASE > use cgcdb
DBA_T2_ASE > go
DBA_T2_ASE > dbcc settrunc ('ltm','ignore')
DBA_T2_ASE > go

Activation et test de la réplication standby

La resynchronisation étant effectuée entre la base primaire et la base standby, la réplication peut être mise en route avec la commande resume connection :

DBA_T1_REP > resume connection to DBA_T2_ASE.cgcdb
DBA_T1_REP > go

À l’issue de la commande resume connection, surveiller le fichier de log du serveur de réplication pour vérifier que le marqueur de dump est atteint.

The DSI thread for database 'DBA_T2_ASE.cgcdb' is started.
Setting Replication Agent truncation to 'ignore' for DBA_T2_ASE.cgcdb log
DSI for DBA_T2_ASE.cgcdb received and processed Enable Replication Marker. Waiting for Dump Marker
DSI for DBA_T2_ASE.cgcdb received and processed Dump Marker. DSI is now applying commands to the Standby

Le message "DSI is now applying commands to the standby" confirme que la resynchronisation est effectuée et que la réplication est en route.

Pour tester la réplication standby, créer une table et insérer une ligne dans celle-ci, puis vérifier que celle-ci est bien créée sur le serveur secondaire :

DBA_T1_ASE > create table rst_beat (id integer not null, sdate smalldatetime)
DBA_T1_ASE > go
DBA_T1_ASE > insert into rst_beat (1,getdate( ))
DBA_T1_ASE > go
DBA_T2_ASE > select * from rst_beat
DBA_T2_ASE > go

Annexe 1 : Fichier de log de l’installation de DBA_T1_ASE.cgcdb

BEGIN ENVIRONMENT INFORMATION
USER ENVIRONMENT
----------------------------------------
current directory:             /Software/sybase/repsrv-15/REP-15_0/install
character set:                 cp850
language:                      us_english
Component Directory:           /Software/sybase/repsrv-15/REP-15_0
working release directory:     /Software/sybase/repsrv-15
END ENVIRONMENT INFORMATION
Directory service provider: 'InterfacesDriver'.
Using resource file '/Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T1_ASE.rs' for product attributes.
Running task: check the SQL Server.
Task succeeded: check the SQL Server.
Running task: verify users and their passwords.
Verified that 'DBA_T1_REP_ra' can log into Replication Server 'DBA_T1_REP'.
Verified that 'sa' can log into Replication Server 'DBA_T1_REP'.
Task succeeded: verify users and their passwords.
Running task: check the database.
Verified that database 'cgcdb' exists.
Sending the following SQL command to the server: 'dbcc is_replication_enabled'.
Verified that SQL Server 'DBA_T1_ASE' supports replication.
Sending the following SQL command to the server: 'use master'.
 ...
Sending the following SQL command to the server:
'exec sp_addlogin cgcdb_maint, "cgcdb_maint_ps", cgcdb'.
SQL Server message: msg 0, level 10, state 1
"Password correctly set."
SQL Server message: msg 0, level 10, state 1
"Account unlocked."
SQL Server message: msg 0, level 10, state 1
"New login created."
Sending the following SQL command to the server: 'use master'.
 ...
Sending the following SQL command to the server: 'exec rs_install_sql_proc_2'.
SQL Server message: msg 0, level 10, state 1
"New user added."
Added maintenance user login 'cgcdb_maint' to database 'cgcdb'.
 ...
Sending the following SQL command to the server: 'use master'.
Verified that maintenance user 'cgcdb_maint' can log into SQL Server 'DBA_T1_ASE'.
Task succeeded: check the database.
Running task: configure database for primary data.
Loading script 'rsinspri.sql' into database 'cgcdb'.
Sending the following SQL command to the server: 'use cgcdb'.
Done
Loaded script 'rsinspri.sql' successfully.
Granting permissions on the lastcommit functions and rs_marker.
Sending the following SQL command to the server:
'grant execute on rs_update_lastcommit to PUBLIC'.
Sending the following SQL command to the server:
'grant execute on rs_marker to PUBLIC'.
Sending the following SQL command to the server:
'grant execute on rs_check_repl_stat to PUBLIC'.
Granting permissions on the lastcommit functions.
Sending the following SQL command to the server:
'sp_setreplicate rs_lastcommit,false'.
SQL Server message: msg 17962, level 16, state 1
WARNING: "The replication status for 'rs_lastcommit' is already set to false. Replication status for 'rs_lastcommit' does not change."
Sending the following SQL command to the server:
'sp_setreplicate rs_update_lastcommit,true'.
SQL Server message: msg 0, level 10, state 1
"The replication status for 'rs_update_lastcommit' is set to true."
Sending the following SQL command to the server:
'grant execute on rs_get_lastcommit to cgcdb_maint'.
Sending the following SQL command to the server:
'grant all on rs_lastcommit to cgcdb_maint'.
Granted maintenance user permissions on the lastcommit functions and rs_marker.
Sending the following SQL command to the server:
'sp_role "grant", replication_role, cgcdb_maint'.
SQL Server message: msg 0, level 10, state 1
"Authorization updated."
Granted replication role to maintenance user
Task succeeded: configure database for primary data.
Running task: configure the Replication Agent.
Sending the following SQL command to the server: 'use cgcdb'.
Sending the following SQL command to the server:
'exec sp_config_rep_agent "cgcdb", enable,"DBA_T1_REP", "DBA_T1_REP_ra", "DBA_T1_REP_ra_ps"'.
SQL Server message: msg 0, level 10, state 1
"Replication Agent enabled for database 'cgcdb'. The Replication Agent thread needs to be started using sp_start_rep_agent."
Sending the following SQL command to the server:
'exec sp_config_rep_agent "cgcdb", "send warm",true '.
SQL Server message: msg 0, level 10, state 1
"Replication Agent configuration changed for database 'cgcdb'. The changes will take effect the next time the Replication Agent thread is started."
Task succeeded: configure the Replication Agent.
Running task: set connection to the database.
Adding database 'cgcdb' to the replication system.
Sending the following SQL command to the server: 'admin version'.
Sending the following SQL command to the server:
'admin logical_status,"DBA_T1_ASE","cgcdb"'.
Sending the following SQL command to the server:
'drop connection to "DBA_T1_ASE"."cgcdb"'.
Sending the following SQL command to the server:
'create connection to "DBA_T1_ASE"."cgcdb"
set error class rs_sqlserver_error_class
set function string class rs_sqlserver_function_class
set username "cgcdb_maint" set password  "cgcdb_maint_ps"
with log transfer on as active
for "L_DBA_T2_ASE"."l_cgcdb"'.
Successfully executed 'create connection'. Database 'cgcdb' is now managed by Replication Server 'DBA_T1_REP'.
Task succeeded: set connection to the database.
Running task: start the Replication Agent.
Sending the following SQL command to the server: 'exec sp_start_rep_agent "cgcdb" '.
Task succeeded: start the Replication Agent.
Configuration completed successfully.
Exiting.
The log file for this session is '/Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T1_ASE.log'.
Log close.

Annexe 2 : Fichier de log de l’installation de DBA_T2_ASE.cgcdb

BEGIN ENVIRONMENT INFORMATION
USER ENVIRONMENT
----------------------------------------
current directory:             /Software/sybase/repsrv-15/REP-15_0/install
character set:                 cp850
language:                      us_english
Component Directory:           /Software/sybase/repsrv-15/REP-15_0
working release directory:     /Software/sybase/repsrv-15
END ENVIRONMENT INFORMATION
Directory service provider: 'InterfacesDriver'.
Using resource file '/Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T2_ASE.rs' for product attributes.
Running task: check the SQL Server.
Task succeeded: check the SQL Server.
Running task: verify users and their passwords.
Verified that 'DBA_T1_REP_ra' can log into Replication Server 'DBA_T1_REP'.
Verified that 'sa' can log into Replication Server 'DBA_T1_REP'.
Task succeeded: verify users and their passwords.
Running task: check the database.
Verified that database 'cgcdb' exists.
Sending the following SQL command to the server: 'dbcc is_replication_enabled'.
Verified that SQL Server 'DBA_T1_ASE' supports replication.
Sending the following SQL command to the server: 'use master'.
Verified that the maintenance user 'cgcdb_maint' is defined in database 'cgcdb'.
Sending the following SQL command to the server: 'use master'.
Verified that maintenance user 'cgcdb_maint' can log into SQL Server 'DBA_T1_ASE'.
Verified that maintenance user 'cgcdb_maint' can log into SQL Server 'DBA_T2_ASE'.
Task succeeded: check the database.
Running task: configure database for primary data.
Sending the following SQL command to the server: 'use cgcdb'.
Sending the following SQL command to the server:
'grant all on rs_update_lastcommit to cgcdb_maint'.
Sending the following SQL command to the server:
'grant execute on rs_get_lastcommit to cgcdb_maint'.
Sending the following SQL command to the server:
'grant all on rs_lastcommit to cgcdb_maint'.
Granted maintenance user permissions on the lastcommit functions and rs_marker.
WARNING: Please verify that suids in the syslogins table of the Standby SQL server correspond to syslogins of the Active SQL Server
Sending the following SQL command to the server:
'sp_role "grant", replication_role, cgcdb_maint'.
Granted replication role to maintenance user
Granted replication role to maintenance user
Task succeeded: configure database for primary data.
Running task: configure the Replication Agent.
Sending the following SQL command to the server: 'use cgcdb'.
Sending the following SQL command to the server:
'exec sp_config_rep_agent "cgcdb", enable,"DBA_T1_REP",
"DBA_T1_REP_ra", "DBA_T1_REP_ra_ps"'.
Sending the following SQL command to the server:
'exec sp_config_rep_agent "cgcdb", "send warm",true'.
Task succeeded: configure the Replication Agent.
Running task: set connection to the database.
Adding database 'cgcdb' to the replication system.
Sending the following SQL command to the server: 'admin version'.
Sending the following SQL command to the server:
'admin logical_status,"DBA_T2_ASE","cgcdb"'.
Sending the following SQL command to the server:
'drop connection to "DBA_T2_ASE"."cgcdb"'.
Sending the following SQL command to the server: 'use cgcdb'.
Sending the following SQL command to the server:
'sp_setreplicate rs_lastcommit,false'.
SQL Server message: msg 17962, level 16, state 1
WARNING: "The replication status for 'rs_lastcommit' is already set to false. Replication status for 'rs_lastcommit' does not change."
Sending the following SQL command to the server:
'sp_setreplicate rs_update_lastcommit,true'.
SQL Server message: msg 17962, level 16, state 1
WARNING: "The replication status for 'rs_update_lastcommit' is already set to true. Replication status for 'rs_update_lastcommit' does not change."
Sending the following SQL command to the server:
'create connection to "DBA_T2_ASE"."cgcdb"
set error class rs_sqlserver_error_class
set function string class rs_sqlserver_function_class
set username "cgcdb_maint" set password  "cgcdb_maint_ps"
with log transfer on as standby for "L_DBA_T2_ASE"."l_cgcdb"
use dump marker'.
Successfully executed 'create connection'. Database 'cgcdb' is now managed by Replication Server 'DBA_T1_REP'.
Task succeeded: set connection to the database.
Running task: start the Replication Agent.
Sending the following SQL command to the server:
'exec sp_start_rep_agent "cgcdb" '.
Task succeeded: start the Replication Agent.
Configuration completed successfully.
Exiting.
The log file for this session is '/Software/sybase/repsrv-15/REP-15_0/install/setup_DBA_T2_ASE.log'.
Log close.