Sybase Replication Server 15.5 introduit une nouvelle fonctionnalité de réplication en temps réel et optimal vers Sybase IQ : Sybase Replication Server 15.5 RTL Edition (Real Time Loading for IQ).
Cette édition, sous licence, supprime la contrainte de l'envoi de commandes atomiques OLTP (insert, update, delete) depuis Replication Server dans les tables cibles de Sybase IQ, commandes atomiques qui ne sont pas adaptées et optimales pour le moteur IQ (stockage, compression...). La fonctionnalité RTL for IQ supprime également les solutions de réplication via des bases tampons Adaptive Server Enterprise, solutions lourdes en maintenance et complexité (Réplication vers IQ 12.7 via une base tampon ASE staging).

RTL supporte les versions ci-dessous :
L'option HVAR (High Volume Adaptive Replication) est implicitement activée avec Sybase Replication Server Real Time Loading Edition for IQ. L'option HVAR compile et optimise les ordres SQL reçus dans les files (queues) de Replication Server, cette compilation est réalisée en mémoire dans ce qui est appelée la ncdb de Replication Server "In Memory Net Change Database" afin de déverser de façon optimale dans les cibles (ASE, IQ, Oracle...) en utilisant dans la mesure du possible les APIs de chargement massif du moteur cible (Bulk). Le schéma ci-dessous illustre bien l'option HVAR High Volume Adaptive Replication :
Cet article propose une mise en route et une prise en main rapides de Sybase Replication Server Real Time Loading for IQ avec HVAR. Les aspects théoriques de la technologie RTL sont partiellement abordés.
Le schéma de la réplication de Sybase Adaptive Server Enterprise vers Sybase IQ via Replication Server 15.5 RTL est le suivant :

Comme pour la réplication vers Sybase ASE, Replication Server utilise un compte de maintenance dans la base IQ pour appliquer les transactions. Le compte de maintenance doit disposer des droits ci-dessous :
Dans ce guide pratique, le compte est appelé rs155db, rs155db est également le propriétaire des tables répliquées dans le serveur IQ DAS_U1_ASQ.
Pour démarrer les tests et l'évaluation du produit RS RTL/HVAR, le privilège DBA est donné au compte rs155db_maint, évidemment cette configuration doit être bannie pour un environnement de production.
sybase@DAS_U1_ASQ > iqisql -Usa grant connect to rs155db identified by ********* go grant DBA to rs155db go grant membership in group rs_systabgroup to rs155db go
RTL créé des tables temporaires de travail dans le dbspace temporaire de Sybase IQ pour traiter les ordres update, delete avec jointures, les indexes temporaires nécessaires etc.... L'espace nécessaire dans ce dbspace dépend de la quantité de données traitée. Avant le démarrage des tests, vérifier l'espace disponible dans le dbspace temporaire :
sybase@DAS_U1_ASQ > iqisql -Usa sp_iqdbspace IQ_SYSTEM_TEMP go
DBSpaceName DBSpaceType ... TotalSize ... --------------- ----------- --------- IQ_SYSTEM_TEMP TEMPORARY 1.95GB
Pour ajouter de l'espace au dbspace temporaire IQ Temp, utiliser la commande ALTER DBSPACE ( ! : la syntaxe est différente entre la version 12.7 et les versions 15.x).
Le paramétrage de RTL/HVAR vers Sybase IQ est configuré au niveau du thread DSI (Data Server Interface) vers la base IQ, il ne s'agit pas d'un paramètre serveur du moteur de réplication RS à modifier avec la commande configure replication server.
Les connexions vers les cibles dans Replication Server sont au format <dataserver>.<database>, le fichier interfaces doit donc référencer une entrée pour le serveur IQ comme s'il s'agissait d'un serveur Sybase Adaptive Server Enterprise.
cat $SYBASE/interfaces
DAS_U1_ASQ
master tli tcp fluorine 30071
query tcp ether fluorine 30071
Avec la version RS 15.5 RTL edition, une nouvelle classe d'erreurs et une nouvelle classe de fonctions (function strings) spécifiques à Sybase IQ font leur entrée : rs_iq_function_class et rs_iq_error_class.
sybase@IDB_U1_REP > isql -Usa admin show_function_classes go Class ParentClass Level ---------------------- -------------------------- ----- ... rs_iq_function_class rs_default_function_class 1 ... |
sybase@IDB_U1_ASA > isql -Usa rs_helpclass go Error Class(es) PRS for CLASS ------------------- ------------------- rs_iq_error_class Not Yet Defined. ... |
La création de la connexion vers la base IQ est réalisée avec la commande create connection dans Replication Server en spécifiant le profil rs_ase_to_iq, profil qui affectera automatiquement à cette connexion la classe d'erreurs rs_iq_error_class et la classe de fonctions rs_iq_function_class.
sybase@IDB_U1_REP > isql -Usa
create connection to DAS_U1_ASQ.rs155db
using profile rs_ase_to_iq; standard
set username to rs155db
set password to *********
go
Connection to 'DAS_U1_ASQ.rs155db' is created.
La connexion au serveur IQ est testée lors du lancement de la commande create connection.
Les classes à la connexion IQ sont correctement affectées, pour le vérifier, lancer la commande rs_helpdb dans la base RSSD.
sybase@RSD_U1_ASA > isql -Usa rs_helpdb go
dsname dbname dbid
controlling_prs errorclass
repserver_errorclass funcclass
status
------------------------------ ------------------------------ -----------
------------------------------ ------------------------------
------------------------------ ------------------------------
-----------------------------------------------------------------
DAS_U1_ASQ rs155db 104
IDB_U1_REP rs_iq_error_class
rs_repserver_error_class rs_iq_function_class
Log Transfer is OFF, Distribution is ON
Si l'option "using profile rs_ase_to_iq" a été omise durant la création de la connexion, utiliser les commandes alter connection set error class to et set function string class pour affecter les classes rs_iq_error_class et rs_iq_function_class à la connexion vers IQ.
La mise en route de RTL est réalisée en configurant le thread DSI (Data Server Interface) qui réplique vers la base IQ, il ne s'agit pas de paramètres globaux au niveau serveur du moteur de réplication.
5 paramètres dsi_% pour RTL :
sybase@IDB_U1_REP > isql -Usa alter connection to DAS_U1_ASQ.rs155db set dsi_compile_enable to 'on' go alter connection to DAS_U1_ASQ.rs155db set dsi_compile_max_cmds to '50000' go alter connection to DAS_U1_ASQ.rs155db set dsi_bulk_threshold to '15' go alter connection to DAS_U1_ASQ.rs155db set dsi_command_convert to 'i2di,u2di' go suspend connection to DAS_U1_ASQ.rs155db go resume connection to DAS_U1_ASQ.rs155db go
Config parameter 'dsi_compile_enable' is modified. This change will not take effect until the connection/route is restarted. A connection/route can be restarted with the suspend and resume commands. Config parameter 'dsi_compile_max_cmds' is modified. Config parameter 'dsi_bulk_threshold' is modified. Config parameter 'dsi_command_convert' is modified. This change will not take effect until the connection/route is restarted. A connection/route can be restarted with the suspend and resume commands. Connection to 'DAS_U1_ASQ.rs155db' is suspended. Connection to 'DAS_U1_ASQ.rs155db' is resumed.
Le paramètre dsi_compile_enable est le paramètre majeur qui gouverne les chargements optimisés dans IQ avec INSERT LOCATION etc... depuis Replication Server. Lorsque ce paramètre est à off, la réplication classique transactionnelle est réalisée dans le moteur IQ. Lorsque dsi_compile_enable est à on, HVAR et RTL sont activées au niveau du serveur Replication Server.
Les paramètres dsi_compile_enable et dsi_command_convert ne sont appliqués qu'au redémarrage de la connexion ou de la route avec les commandes suspend connection/resume connection et suspend route/resume route.
Dans l'exemple ci-dessus, les valeurs par défaut recommandées par Sybase pour RTL sont appliquées : 15 pour dsi_bulk_threshold, 50000 pour dsi_compile_max_cmds et "i2di,u2di" pour dsi_command_convert.
Le paramètre dsi_dataserver_make est souvent optionnel : il est peut être défini à ase, iq, sqlany, ora, mssql, udb, db2. Replication Server déduit le type de serveur de données en cible en fonction du profil spécifié à la création de la connexion (create connection ... using profile <profile>...). Dans le cas ici, le profil rs_ase_to_iq a été appliqué à la création de la connexion, Replication Server en déduit automatiquement que le paramètre dsi_dataserver_make est iq.
sybase@IDB_U1_REP > isql -Usa admin config, "connection", DAS_U1_ASQ, rs155db, dsi_dataserver_make go
Configuration
Config Value
Run Value
Default Value
Legal Values
Datatype
Status
-------------------------------
dsi_dataserver_make
iq
iq
default
list: ase,sqlany,iq,ora,mssql,udb,db2
string
Connection/route restart required
(1 row affected)
Dans les étapes qui suivent, les tables dbo.QUOTE et rs155db.QUOTE existent respectivement dans IDB_D1_ASE et DAS_U1_ASQ avec les droits nécessaires. La connexion vers la source ASE IDB_D1_ASE est déjà créée avec un fichier de ressources et l'agent de réplication dans IDB_D1_ASE / base investment est en route.
La démo va être réalisée sur la table QUOTE, table de 225 millions de lignes dans la source ASE. La clé primaire est définie sur les trois premières colonnes de cette table : INSTRUMENT_ID, RETRIEVAL_DTE et SOURCE_ID.
La définition de la réplication pour la table QUOTE est réalisée avec la commande create replication definition de Replication Server :
sybase@IDB_U1_REP > isql -Usa create replication definition QUOTE_investment with primary at IDB_D1_ASE.investment with primary table named 'QUOTE' with replicate table named rs155db.'QUOTE' ( RETRIEVAL_DTE datetime , INSTRUMENT_ID int , SOURCE_ID varchar(12) , QUOTE float , QUOTE_DATE datetime , UNIT_PRICE float , ACCRUED_INTEREST float , ACCRUED_INTEREST_DATE datetime , CREATED_BY varchar(20) , CREATED_ON datetime , UPDATED_BY varchar(20) , UPDATED_ON datetime ) primary key(INSTRUMENT_ID,RETRIEVAL_DTE,SOURCE_ID)
La souscription de réplication pour la table QUOTE vers DAS_U1_ASQ.rs155db est ensuite lancée avec la commande Replication Server create subscription (sans matérialisation)
sybase@IDB_U1_REP > isql -Usa create subscription sub_QUOTE_dasu1 for QUOTE_investment with replicate at DAS_U1_ASQ.rs155db without materialization
Subscription 'sub_QUOTE_dasu1' is in the process of being created.
La connexion vers DAS_U1_ASQ est alors suspendue et rétablie avec les commandes suspend/resume connection to DAS_U1_ASQ.rs155db.
Le paramètre dsi_command_convert a été appliqué précédemment à "i2di,u2di" pour la connexion vers DAS_U1_ASQ.rs155db. Cette définition a les conséquences suivantes pour la réplication d'une table vers DAS_U1_ASQ.rs155db :
La table QUOTE est une table d'historique, les lignes ne sont jamais supprimées dans la source, par conséquent le mode de conversion des commandes Replication Server est personnalisé pour cette table et mis à d2none : aucune commande delete lancée avant les insertions. Le changement du paramètre dsi_command_convert pour une table donnée est réalisé avec la commande alter connection :
sybase@IDB_U1_REP > isql -Usa alter connection to DAS_U1_ASQ.rs155db for replicate table named rs155db.QUOTE set dsi_command_convert to 'd2none' go
Config parameter 'dsi_command_convert' is modified. This change will not take effect on existing connections/routes until they are restarted. A connection/route can be restarted with the suspend and resume commands.
La personnalisation est prise en compte dès le redémarrage de la connexion vers DAS_U1_ASQ.rs155db aves les commandes suspend/resume connection to DAS_U1_ASQ.rs155db
Utiliser la commande admin config avec l'option "table" pour vérifier la personnalisation du paramètre dsi_command_convert pour la table QUOTE :
sybase@IDB_U1_REP > isql -Usa admin config, "table", DAS_U1_ASQ, rs155db, QUOTE go
Configuration
Config Value
Run Value
Default Value
Legal Values
Datatype
Status
Table
-------------------------------
dsi_compile_enable
<server default>
<server default>
on
list: on,off
string
Connection/route restart required
rs155db.QUOTE
dsi_command_convert
d2none
d2none
none
list: none, i2none, d2none, u2none, i2di, u2di, t2none
string
Connection/route restart required
rs155db.QUOTE
(2 rows affected)
La réplication de la table QUOTE est activée sur l'environnement primaire ASE IDB_D1_ASE (base investment) avec la commande sp_setreptable :
sybase@IDB_D1_ASE > isql -Usa use investment go sp_setreptable "QUOTE",true go
The replication status for 'QUOTE' is set to true, owner_off. (return status = 0)
Dans la démo de réplication de la table QUOTE vers IQ, 2000 lignes sont insérées massivement dans la source sur IDB_D1_ASE, mais avant l'insertion massive, des traces sont mises en place côté Replication Server pour mieux comprendre la cinématique :
La trace sur le DSI vers IQ est activée avec la commande trace 'on','dsi','dsi_buf_dump' dans Replication Server. Toutes les actions réalisées par le DSI vers DAS_U1_ASQ.rs155db sont dès lors consignées dans le fichier de log de Replication Server.
sybase@IDB_U1_REP > isql -Usa trace 'on','dsi','dsi_buf_dump' go
Les compilations HVAR et l'exécution vers IQ sont suspendues avec l'option hold de la commande sysadmin cdb. La commande sysadmin cdb de Replication Server permet de lister les informations et inspecter la NCDB de Replication Server (net change database)
Pour suspendre, reprendre les compilations HVAR dans la net change database avec sysadmin cdb :
sysadmin cdb, q_number, q_type, { hold | hold_next | unhold }
Pour pour lister les informations dans la net change database avec sysadmin cdb :
sysadmin cdb, [q_number [,q_type] [list [, ["table_owner.]table_name"] | [[dump_i | dump_d | dump_u | dump_nc |], table_name ] | dump_nc ]]
sysadmin cdb sans paramètre affiche toutes les queues de Replication Server et leurs propriétés HVAR/RTL (compilation, suspension, commandes en attente).
sybase@IDB_U1_REP > isql -Usa sysadmin cdb go
DSName DBName Queue
QType Compile Hold
CdbName Commands_in_Group
------------------------------- ------------------------------- -----------
----------- ------- -----
------------------------------------------------- -----------------
IDB_D1_ASE investment 107
0 Off No
0
DAS_U1_ASQ rs155db 106
0 On No
0
RSD_U1_ASA RSD_U1_ASA 101
0 Off No
0
La sortie de sysadmin cdb permet de retrouver le numéro de la file (ou queue) et le type de la file (1: inbound - entrée, 0: outbound - sortie) pour laquelle l'option HVAR est active (colonne compile à on). Dans cette démo : Queue # 106 pour DAS_U1_ASQ.rs155db, Qtype à 0 (outbound queue, file de sortie).
Les compilations HVAR sont alors suspendues pour inspection avec l'option hold de sysadmin cdb sur la queue 106:0
sybase@IDB_U1_REP > isql -Usa sysadmin cdb, 106, 0, hold go sysadmin cdb go
DSName DBName Queue
QType Compile Hold
CdbName Commands_in_Group
------------------------------- ------------------------------- -----------
----------- ------- -----
------------------------------------------------- -----------------
IDB_D1_ASE investment 107
0 Off No
0
DAS_U1_ASQ rs155db 106
0 On Yes
0
RSD_U1_ASA RSD_U1_ASA 101
0 Off No
0
La colonne Hold (suspension de la HVAR) pour la queue 106:0 est bien à On.
L'option hold n'est appliquable que pour la prochaine transaction, elle ne peut jamais agir sur une transaction en cours de compilation HVAR et d'exécution vers IQ.
L'insertion massive est réalisée dans la base primaire. La transaction, une fois validée (commit) dans le serveur ASE, arrive dans la queue 106:0 de Replication Server pour être compilée par l'option HVAR :
sybase@IDB_D1_ASE > isql -Usa use investment go set rowcount 2000 go begin tran insert into QUOTE select * from QUOTEVW where RETRIEVAL_DTE='2010 FEB 01' go (2000 rows affected) commit go
La commande sysadmin cdb dans Replication Server montre bien les 2000 ordres SQL pour la queue vers DAS_U1_ASQ.rs155db (Commands_in_Group)
sybase@IDB_U1_REP > isql -Usa sysadmin cdb go
DSName DBName Queue
QType Compile Hold
CdbName Commands_in_Group
------------------------------- ------------------------------- -----------
----------- ------- -----
------------------------------------------------- -----------------
IDB_D1_ASE investment 107
0 Off No
0
DAS_U1_ASQ rs155db 106
0 On Yes
rs155db_49_5 2000
RSD_U1_ASA RSD_U1_ASA 101
0 Off No
0
Un nom cdb (CdbName) est automatiquement donné dans la net change database cdb de RS pour une transaction à traiter par l'option HVAR : ici rs155db_49_5. Ce nom de base de données cdb rs155db_49_5 sera utilisé dans la commande INSERT LOCATION envoyée dans IQ, un nom de base de données étant obligatoire.
Des informations encore plus précises sont fournies avec l'option list sur la queue 106:0 de la commande sysadmin cdb.
sybase@IDB_U1_REP > isql -Usa sysadmin cdb, 106, 0, list go
CdbName
Replicate_Table Status Cmd_Convert
AutoCorrection Nb_Columns PK_Cols
CdbTable
Insert_Table Inserts
Update_Table Updates
Delete_Table Deletes
Non_Compilable_Cmds Update_Worktable
Delete_Worktable Reduced_Inserts
Reduced_Updates Reduced_Deletes
-------------------------------------------------
rs155db_49_5
rs155db.QUOTE
compilable d2none
No 12 3
QUOTE_49_1
rs_iQUOTE_49_1 2000
rs_uQUOTE_49_1 0
rs_dQUOTE_49_1 0
0
0
0 0
Les 2000 insertions sont bien présentes pour la table virtuelle HVAR rs_iQUOTE_24_1 qui sera utilisée pour charger en massif dans IQ en mode INSERT LOCATION.
Les options dump_i (insert), dump_u (update), dump_d (delete) et dump_nc (non compilables) de la commande sysadmin cdb permettent d'aller encore plus loin en granularité pour une table à répliquer dans une transaction. Les options dump% donnent le contenu pour les insertions, les updates, les delete et les commandes non compilables dans la cdb, contenu qui sera traité au mieux en mode massif par l'option HVAR :
sybase@IDB_U1_REP > isql -Usa sysadmin cdb, 106,0, dump_i,"rs155db.QUOTE" go
Feb 2 2010 12:00AM 27433
FACTFTSP ....
Pour une file mise au statut hold, l'état suspendu est notifié dans le fichier de log de Replication Server uniquement lorsqu'une transaction arrive dans la file HVAR.
T. 2010/07/16 15:37:46. (24): HQ end of transaction, holding ...
L'état de mise en attente (pour inspection) est alors retiré pour déclencher la réplication vers IQ avec l'option unhold de la commande sysadmin cdb :
sybase@IDB_U1_REP > isql -Usa sysadmin cdb, 106, 0, unhold go sysadmin cdb go
DSName DBName Queue
QType Compile Hold
CdbName Commands_in_Group
------------------------------- ------------------------------- -----------
----------- ------- -----
------------------------------------------------- -----------------
IDB_D1_ASE investment 107
0 Off No
0
DAS_U1_ASQ rs155db 106
0 On No
0
RSD_U1_ASA RSD_U1_ASA 101
0 Off No
0
La trace dsi dans le fichier de log de Replication Server montre la commande IQ INSERT LOCATION dans la table rs155db.QUOTE depuis la table HVAR rs_iQUOTE_49_1 contenant les 2000 insertions :
insert into rs155db.QUOTE (RETRIEVAL_DTE,INSTRUMENT_ID,SOURCE_ID,QUOTE,QUOTE_DATE, UNIT_PRICE,ACCRUED_INTEREST,ACCRUED_INTEREST_DATE,CREATED_BY, CREATED_ON,UPDATED_BY,UPDATED_ON) location 'IDB_U1_REP.rs155db_49_5' { select * from rs_iQUOTE_49_1 }
cat IDB_U1_REP.log
T. 2010/07/16 17:55:31. (49): Command sent to 'DAS_U1_ASQ.rs155db':
T. 2010/07/16 17:55:31. (49): 'set temporary option Load_Memory_MB='100''
T. 2010/07/16 17:55:31. (49): 'set temporary option Minimize_Storage='on''
T. 2010/07/16 17:55:31. (49): 'set temporary option join_preference=5'
T. 2010/07/16 17:55:31. (49): Command sent to 'DAS_U1_ASQ.rs155db':
T. 2010/07/16 17:55:31. (49): 'lock table rs155db.QUOTE in write mode wait'
T. 2010/07/16 17:55:31. (49): Command(s) to 'DAS_U1_ASQ.rs155db':
T. 2010/07/16 17:55:31. (49): 'begin transaction '
T. 2010/07/16 17:55:31. (49): Command sent to 'DAS_U1_ASQ.rs155db':
T. 2010/07/16 17:55:31. (49): 'insert into rs155db.QUOTE (RETRIEVAL_DTE,INSTRUMENT_ID,S
OURCE_ID,QUOTE,QUOTE_DATE,UNIT_PRICE,ACCRUED_INTEREST,ACCRUED_INTEREST_DATE,CREATED_BY,
CREATED_ON,UPDATED_BY,UPDATED_ON) location 'IDB_U1_REP.rs155db_49_5' { select * from rs
_iQUOTE_49_1 }'
T. 2010/07/16 17:55:31. (50): Insert location table QUOTE_49_1
T. 2010/07/16 17:55:31. (50): 'Bulk columns : (RETRIEVAL_DTE,INSTRUMENT_ID,SOURCE_ID,QU
OTE,QUOTE_DATE,UNIT_PRICE,ACCRUED_INTEREST,ACCRUED_INTEREST_DATE,CREATED_BY,CREATED_ON,
UPDATED_BY,UPDATED_ON)'
T. 2010/07/16 17:55:31. (50): 'Bulk row : ("20100201 00:00:00:000",30611,"DATASTREAM",1
,"20100201 00:00:00:000",1, NULL, NULL,"dbo","20100202 02:40:41:266", NULL, NULL)'
T. 2010/07/16 17:55:31. (50): 'Bulk row : ("20100201 00:00:00:000",30726,"DATASTREAM",1
,"20100201 00:00:00:000",1, NULL, NULL,"dbo","20100202 02:40:41:266", NULL, NULL)'
T. 2010/07/16 17:55:31. (50): 'Bulk row : ("20100201 00:00:00:000",2722,"DATASTREAM",1,
"20100201 00:00:00:000",1, NULL, NULL,"dbo","20100202 02:40:41:266", NULL, NULL)'
La transaction contient 2000 lignes, le paramètre dsi_bulk_threshold positionné à 15 est donc dépassé, aussi les commandes Bulk row et INSERT LOCATION sont déclenchées pour optimiser et réaliser une insertion massive dans IQ.
Le fichier iqmsg du serveur IQ confirme l'insertion en mode optimisé avec INSERT LOCATION :
cat DAS.iqmsg
I. 07/16 17:55:35. 0000034619 Insert Started.
I. 07/17 17:55:35. 0000034619 QUOTE
I. 07/16 17:56:01. 0000034619 [20895]: Insert Pass 1 completed in 26 seconds.
I. 07/16 17:56:01. 0000034619 [20895]: Insert Pass 2 completed in 0 seconds.
I. 07/16 172:56:01. 0000034619 [20834]:
2000 records were inserted into 'QUOTE'.
I. 07/16 17:56:01. 0000034619 [20896]: Insert for 'QUOTE' completed in 26 second
s. 2000 rows inserted.
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 03/2010 | Version initiale |
Sybase Replication Server
15.5, Heterogeneous Guide, Real Time Loading for IQ
Sybase Replication Server
15.5, sysadmin cdb
Sybase Replication Server
15.5, admin config
Sybase Replication Server
15.5
Sybase Adaptive Server
Enterprise 15.0.3
Sybase IQ 15.2