RS> Connexion dans Replication Server
RSSD> Connexion dans la base RSSD
PRI> Connexion dans la base primaire (source)
SEC> Connexion dans la base cible/standby
UX> Console Unix
Mise en veille (mode quiesced)
RS> suspend log transfer from {data_server.database | all}
RS> admin quiesce_force_rsi
RS> admin quiesce_check
Lorsque la mise en veille est réussie, le message
"Replication <RS> is quiesced"
est affiché.
Pour supprimer le mode veille :
RS> resume log transfer from {dataserver.database | all}
Suppression massive des exceptions dans une base RSSD Adaptive Server Enterprise
Pour cette opération, le moteur de réplication est mis en veille (mode quiesced).
Troncature des tables rs_excepts%
dans la base RSSD :
RSSD> truncate table rs_exceptshdr
RSSD> truncate table rs_exceptslast
RSSD> truncate table rs_exceptscmd
Purge de la table rs_systext
:
RSSD> select * into #rs_systext
from rs_systext
where texttype != 'C'
RSSD> truncate table rs_systext
RSSD> insert into rs_systext
select * from #rs_systext
Ne pas oublier de supprimer le mode veille à l’issue de la purge des tables
Lister et extraire des commandes SQL dans une exception
Lister les exceptions dans la base RSSD :
RSSD> rs_helpexception
Afficher le détail d’une exception XactID
:
RSSD> rs_helpexception XActID
Pour extraire les commandes SQL dans une exception XactID
:
- Créer la procédure stockée
sp_dba_dumpexception
retournant les colonnesXActID
,sequence
ettextval
pour une exceptionXActID
donnée en paramètre. - Créer la table proxy
v_dba_dumpexception
ayant pour source de données la procéduresp_dba_dumexception
.
RSSD> create procedure sp_dba_dumpexception
@xactid int=NULL
as
select
@xactid,
sequence,
textval
from rs_systext,
rs_exceptscmd
where cmd_id = parentid
and texttype='C'
and cmd_type='L'
and
(case (select convert(int, 0x0000100))
when 65536 then
convert(int,reverse(substring(sys_trans_id,5,8)))
else
convert(int,substring(sys_trans_id, 5, 8))
end
) = @xactid
order by src_cmd_line,sequence
go
create existing table v_dba_dumpexception (
xactid int not null,
sequence int not null,
textval varchar(255) not null
)
external procedure at
'loopback.<RSSD>.dbo.sp_dba_dump
- Créer une vue
v_xactid
interrogeant la vuev_dba_dumpexception
pour l’exceptionXActID
à extraire.
RSSD> create view v_xactid as
select * from v_dba_exception
where xactid=<XActID>
- Extraire les données de la vue
v_xactid
dans un fichier plat avec le binaire bcp en spécifiant un séparateur TSEP non présent dans les commandes SQL de l’exception.
UX> bcp <RSSD>..v_xactid out v_xactid_tmp.sql –Usa
–P<password> -S<RSSD_SERVERNAME> -t'TSEP' -c
- Traiter le fichier obtenu avec le programme awk ci-dessous afin de concaténer les commandes SQL réparties sur plusieurs séquences.
UX> cat v_xactid_tmp.sql | awk -F"TSEP" 'BEGIN
{ vTextVal="" } \
{ if ($2==1) { print vTextVal; vTextVal=$3; } else
{ vTextVal = vTextVal$3 } } \
END { print vTextVal; }' > v_xactid.sql
Déplacer des partitions sans modifier les noms logiques
Pour cette opération, le moteur de réplication est d’abord mis
en veille (mode quiesced), puis éteint avec la
commande shutdown
.
RS> shutdown
Les partitions sont déplacées physiquement.
Les nouveaux chemins des partitions sont mis à jour dans la
base RSSD en mettant à jour directement la table
rs_diskpartitions
:
RSSD> update rs_diskpartitions
set name='<nouveau chemin>'
where logical_name='<nom logique de la partition>'
Le serveur de réplication est redémarré puis le mode veille est retiré.
Assigner une classe d’erreurs personnalisée à une connexion (DirectConnect for MSSQL etc…)
Création de la classe d’erreurs custom_errorclass
:
RS> create error class <custom_erroclass>
La nouvelle classe d’erreurs custom_errorclass
hérite d’une
classe d’erreurs parente pour prédéfinir les actions sur les
erreurs :
RSSD> rs_init_erroractions <custom_erroclass>,
<parent_errorclass>
RSSD> rs_init_erroractions dcmssql_error_class,
rs_sqlserver_error_class
La classe dcmssql_error_class
hérite de la classe
d’erreurs système rs_sqlserver_error_class
dans l’exemple ci-dessus.
Assignation d’une action spécifique pour un numéro d’erreur rencontrée sur une cible :
RS> assign action { ignore | warn | retry_log |
log | retry_stop | stop_replication }
for error_class
to data_server_error [, data_server_error ]
RS> assign action retry_stop for
dcmssql_error_class to 30291
Application de la classe d’erreurs personnalisée
custom_errorclass
à une cible :
RS> alter connection to <dataserver>.<database>
set error class to <custom_errorclass>
Après application d’une classe d’erreurs personnalisée à une cible, la connexion vers la cible est suspendue et reprise pour la prise en compte :
RS> suspend connection to <dataserver>.<database>
RS> resume connection to <dataserver>.<database>
Surcharge de la fonction rs_usedb avec une chaîne fonction (function string)
Création de la classe de fonctions personnalisée
custom_function_class
en spécifiant la classe de fonctions
parente pour héritage :
RS> create function string class
<custom_function_class> set parent to
<parent_function_class>
RS> create function string class
rtds_function_class set parent to
rs_default_function_class
Surcharge de la fonction rs_usedb
:
RS> create function string rs_usedb for
<custom_function_class>
with overwrite output language
′use ?rs_destination_db!sys_raw?;
Commandes TSQL de surcharge
′
RS> create function string rs_usedb for
rtds_function_class
with overwrite output language
′use ?rs_destination_db!sys_raw?;
set transactional messaging FULL;
′
Application de la nouvelle classe de fonctions
custom_function_class
à la cible :
RS> alter connection to <dataserver>.<database>
set function string class <custom_function_class>
Après application d’une classe de fonctions personnalisée à une cible, la connexion vers la cible est suspendue et reprise pour la prise en compte :
RS> suspend connection to <dataserver>.<database>
RS> resume connection to <dataserver>.<database>