Etude des Transactions Concurrentes Dans une Base de Données Répartie. Application à l’Intranet...

159
a UNIVERSITE DE KINSHASA Faculté des Sciences Département de Mathématiques et Informatique B.P. : 190 Kinshasa XI Par KAYEMBA KAVUALLA Sagesse Travail réalisé et défendu en vue d’obtention du titre de licencié en science Groupe : Informatique Option : Génie-Informatique Sous la direction de : MBUYI MUKENDI Eugène Professeur Ordinaire Année académique 2010-2011 Etude des Transactions Concurrentes Dans une Base de Données Répartie Application à l’Intranet Gouvernemental de la RDC

Transcript of Etude des Transactions Concurrentes Dans une Base de Données Répartie. Application à l’Intranet...

a

UNIVERSITE DE KINSHASA

Faculté des Sciences

Département de Mathématiques et Informatique

B.P. : 190 Kinshasa XI

Par

KAYEMBA KAVUALLA Sagesse

Travail réalisé et défendu en vue d’obtention

du titre de licencié en science

Groupe : Informatique

Option : Génie-Informatique

Sous la direction de :

MBUYI MUKENDI Eugène

Professeur Ordinaire

Année académique 2010-2011

Etude des Transactions Concurrentes Dans une Base de Données Répartie

Application à l’Intranet Gouvernemental de la RDC

D

u

S

o

f

t

w

a

r

e

a

u

S

a

a

S

* *

S

o

f

t

w

a

D

u

D

u

S

o

f

t

w

a

r

e

a

u

S

a

a

S

* *

S

o

f

t

w

a

D

u

S

o

f

t

w

a

r

e

a

u

S

a

a

S

* *

S

o

f

t

w

a

b

UNIVERSITE DE KINSHASA

Faculté des Sciences

Département de Mathématiques et Informatique

B.P. : 190 Kinshasa XI

Etude des Transactions Concurrentes Dans une Base de Données Répartie

Application à l’Intranet Gouvernemental de la RDC

Par

KAYEMBA KAVUALLA Sagesse

Travail réalisé et défendu en vue d’obtention

du titre de licencié en science

Groupe : Informatique

Option : Génie-Informatique

Sous la direction de :

MBUYI MUKENDI Eugène

Professeur Ordinaire

Année académique 2010-2011

i

Table de Matières

EPIGRAPHE ................................................................................................................................. IV

DEDICACE ................................................................................................................................... V

REMERCIEMENTS ......................................................................................................................... VI

LISTE DES ABREVIATIONS ............................................................................................................. VIII

LISTE DES FIGURES ........................................................................................................................X

LISTE DES TABLEAUX .................................................................................................................... XII

INTRODUCTION GENERALE ............................................................................................................. 1

CHAPITRE I ................................................................................................................................. 6

LES SYSTEMES DISTRIBUES ............................................................................................................. 7

I. 1. Les Systèmes Distribués ............................................................................................... 7

I.1.1. Définitions .............................................................................................................. 8

I.1.2. Caractéristiques et Objectifs .................................................................................. 8

I.1.3. Système Centralisé VS Système Distribué .............................................................. 9

I.1.4. Propriété d’un Système Distribué ........................................................................ 11

I.1.5. Architecture d’un Système Distribué ................................................................... 14

I.2. Les Bases de Données Réparties (Distribuées) ........................................................... 17

I.2.1. Définitions ............................................................................................................ 17

I.2.2. Buts et motivations pour une Base de Données Distribuée : BDD ...................... 19

I.2.3. Avantages et Contraintes ..................................................................................... 20

I.2.4. La Répartition de données (Les Niveaux) ............................................................. 20

I.2.5. Principe d’une Base de Données Réparties ou Distribuée ................................... 21

I.2.6. Systèmes de Gestion de Base de Données Distribuée (SGBDD) et Architectures 22

I.3. La Réplication .............................................................................................................. 24

I.3.1. Les protocoles de contrôle de réplication ............................................................ 24

I.3.2. Architectures de Réplications .............................................................................. 26

I.4. Fragmentation, Allocation et Conception ................................................................... 29

I.4.2. Allocation .............................................................................................................. 32

I.4.3. Conception ........................................................................................................... 34

CHAPITRE II .............................................................................................................................. 36

LES TRANSACTIONS DISTRIBUEES .................................................................................................. 36

II.1. DEFINITIONS D’UNE TRANSACTION ........................................................................... 36

II.2. CLASSIFICATION DES TRANSACTIONS ........................................................................ 40

II.2.1. Suivant la nature de différentes opérations ....................................................... 40

II.2.2. Suivant la durée ................................................................................................... 41

II.3. MODELES DE TRANSACTIONS ................................................................................... 41

II.3.1. Les Transactions Plates (Flat Transactions) : ....................................................... 41

ii

II.3.2. Les Transactions plates avec Points de Sauvegarde (SAVEPOINTS) : .................. 41

II.3.3. Les Transactions Chainées (Chained Transactions) :........................................... 42

II.3.4. Les Transactions Imbriquées ou Emboitées (Nested Transactions) ................... 42

II.3.5. Transactions Compensatrices ............................................................................. 45

II.3.6. Les Transactions Longues .................................................................................... 46

II.3.7. Les transactions Distribuées ................................................................................ 46

II.4. LA JOURNALISATION ET LA REPRISE DES TRANSACTIONS ......................................... 47

II.4.1. Journalisation ...................................................................................................... 47

II.4.2. Reprise ................................................................................................................. 50

II.5. TRANSACTION DISTRIBUEE ET LE MODELE OSI ......................................................... 51

II.5.1. Le Système Transactionnel .................................................................................. 51

II.5.2. Le Modèle OSI pour les Transactions Distribuées ............................................... 53

II.6. GESTION ET CONTROLE DE CONCURRENCE DE TRANSACTIONS (REPARTIE) ............ 57

II.6.1. La cohérence de données.................................................................................... 58

II.6.2. Concurrence d’accès de données........................................................................ 65

CHAPITRE III ............................................................................................................................. 79

LES APPLICATIONS ...................................................................................................................... 79

III.1. Mécanisme de Répartition sous SQL SERVER ........................................................... 79

III.1.1. SQL SERVER ........................................................................................................ 79

III.1.2. Les Bases de Données ........................................................................................ 79

III.1.3. Services et moteurs ............................................................................................ 80

III.1.3.1. SQL Server .......................................................................................................... 80

III.1.3.2. SQL Server Agent ............................................................................................... 81

III.1.4. Transactions ...................................................................................................... 81

III.1.5. Notion de répartition sous SQL SERVER ............................................................. 82

III.2. Gestion de Transactions par la programmation sous .NET (Framework 3.5) ........... 85

III.2.1. Les Transactions locales .................................................................................... 85

III.2.2. Les Niveaux d’Isolations ..................................................................................... 87

III.2.3. Les Transactions Distribuées .............................................................................. 89

III.3. Intranet Gouvernemental de la RDC (République Démocratique du Congo) .......... 91

III.3.1. Quelques définitions .......................................................................................... 91

III.3.2. Objectif du projet ............................................................................................... 92

III.3.3. Avantages pour les utilisateurs .......................................................................... 92

III.3.4. Situation actuelle de l’Intranet........................................................................... 93

III.4. Mise en place d’un Système d’Information de Traitement de Salaire des Agents de

l’Etat .................................................................................................................................. 95

III.4.1. Circonscription ................................................................................................... 95

III.4.2. Modélisation du Système d’Information avec l’UML ......................................... 96

III.4.2.1. Spécification Initiale du Système ................................................................. 96

III.4.2.2. Enoncé du problème ................................................................................... 97

III.4.2.3. Analyse du Domaine .................................................................................... 98

iii

III.4.2.3.1. Diagramme de Cas d’Utilisation ............................................................... 98

III.4.2.3.2. Diagramme de Classe ............................................................................. 100

III.4.2.3.2. Diagramme d’état ................................................................................... 102

III. 4.2.3.3. Diagrammes d’Activités ......................................................................... 103

III.4.2.4. Conception et Implémentation du Système ............................................. 105

III.4.2.4.1. Schéma Global ........................................................................................ 105

III.4.2.4.2. Fragmentations et Allocations ............................................................... 106

III.4.2.4.3. Réplication .............................................................................................. 107

III.4.2.4.4. Implémentations de l’Application .......................................................... 108

CONCLUSION........................................................................................................................... 138

REFERENCE ............................................................................................................................. 140

iv

Epigraphe

… Un Système de Bases de Données Réparties est

suffisamment complet pour décharger les utilisateurs de

tous les problèmes de concurrence, fiabilité, optimisation

de requêtes ou transactions sur des données gérées par

différents SGBDs sur plusieurs sites. [15]

v

Dédicace

A ma très chère Mère, Denise NTUMBA ;

A mon très cher Père, Denis-Robert KAYEMBA ;

Qui, des manières constantes, ont accolé leurs sacrifices pour parfaire l’œuvre que je

suis. Qu’ils en soient remerciés et trouvent par ici la gratitude de mon cœur sincère ;

A tous les miens : parents, amis et connaissance ;

Que je ne peux énumérer

Je dédie ce travail.

KAYEMBA KAVUALLA Sagesse

vi

Remerciements

A celui qui garde l’âme et protège le corps ; le Tout-Puissant Dieu qui renouvelle

les forces, nous transmettons nos tout premiers remerciements ; car après nous avoir

gardés tout au long de notre deuxième cycle en force et bonne santé, a bien voulu que

nous l’achevions avec ce présent travail qui le couronne. Merci Seigneur Jésus Christ.

S’il s’est avéré possible de réaliser ce présent travail, c’est grâce au Prof. Eugène

MBUYI MUKENDI qui nous a accepté sous sa direction et son Assistant Hercule KALONJI

KALALA qui l’a poursuivi jusqu’à sa perfection ; qu’ils trouvent à travers ces lignes

l’expression de notre profonde gratitude et de notre respect.

Nos remerciements s’adressent enfin à tout celui qui, d’une manière ou d’une autre, a

participé à la victoire de cette bataille. En voici quelques uns : Jérémie PANGU NKOYI, Théo

MASAMBOMBO MBIYA, etc.

KAYEMBA KAVUALLA Sagesse

vii

[Les Listes]

viii

Liste des Abréviations

.NET : DotNET 2-PC : Protocole de Validation en Deux Phases 3-PC : Protocole de Validation en Trois Phases ACID : Atomicity, Consistency, Isolation et Durability, ACSE : Association Control Service Element ADO : Activex Data Object APD : Aide Public au Développement API: Application Programming Interface BD : Base de Données BDD : Base de Données Distribuée BDR : Base de Données Répartie C# : CSharp C/S : Client-Serveur CCR: Committment, Concurrency and Recovery CORBA: Common Object Request Broker Architecture CPU : Central Processing Unit DTC : Distributed Transaction Coordinator DTP: Distributed TP ISO : International Standard Organisation JDBC : Java DataBase Connectivity JTS : Java Transaction Service KOICA: Korea Intrnational Cooperation Agency LDF: Log Database File MACF : Multiple Association Control Function MDF: Main Database File MS DTC : Microsoft Distributed Transaction Coordinator MTS : Microsoft Transaction Server NDF : Next Database File NU : Nouvelle Unité ODBC : Open DataBase Connectivity OLAP : On-line Analytical Processing OLTP: On-line Transactional Processing OSI : Open Système Interconnection P2P : Peer-to-Peer ou Pair-à-Pair RDC : République Démocratique du Congo RMI: Remote Method Invocation SAO : Single Association Objects SBDD : Système de Bases de Données Distribuées SGBD : Système de Gestion de Base de Données SGBDD : Système de Gestion de Base de Données Distribué SGBDR : Système de Gestion de Base de Données Réparti SOAP: Simple Object Access Protocol

ix

SQL : Structured Query Language TP: Transactions Processing TPPM : TP Protocol TPSU: TP Service User TPSUI : TPSU Invocation UML : Unified Modeling Language VE : Vue Externe. WW : WOUND-WAIT XML-RPC: Extensible Markup Language-Remote Procedure Call

x

Liste des Figures

Figure 1 : De Centralisé vers Distribué [9] ................................................................................ 10

Figure 2: système distribué avec un middleware [1] [51] ........................................................ 14

Figure 3 : Client-Serveur ........................................................................................................... 15

Figure 4 : Architecture d’une base de données [41] ................................................................ 18

Figure 5 : Architecture d’une BDD............................................................................................ 21

Figure 6 : réplication synchrone ............................................................................................... 24

Figure 7 : réplication asynchrone ............................................................................................. 25

Figure 8 : une transaction dans une base de données cohérente .......................................... 36

Figure 9 : Transaction plates avec SAVEPOINTS [22] ............................................................... 42

Figure 10 : Arbre de Transactions et sous-Transactions ......................................................... 43

Figure 11 : Validation et Abandon de Sous-Transactions ....................................................... 45

Figure 12 : Transactions compensatrices ................................................................................ 46

Figure 13 : L’UNDO d’une mise-à-jour [30]. ............................................................................ 48

Figure 14 : Le REDO d’une mise-à-jour [30]. ........................................................................... 49

Figure 15 : Architecture du système transactionnel [31]......................................................... 51

Figure 16 : Architecture Transactionnelle [46] ........................................................................ 53

Figure 17 : Modèle de Dialogue dans OSI TP ........................................................................... 54

Figure 18 : Arbre de Transactions ............................................................................................ 55

Figure 19 : Les actions du Protocole de Validation en Deux Phases [32] ................................ 60

Figure 20 : Validation normale [15] [22] [40] ........................................................................... 61

Figure 21 : Panne d’un participant avant d’être prêt [15] [22] [40] ........................................ 62

Figure 22 : Panne d’un participant après s’être déclaré prêt [15] [22] [40] ............................ 62

Figure 23 : Panne du coordinateur [15] [40] ............................................................................ 63

Figure 24 : TIME-OUT et panne dans le protocole de validation en trois phases [32] ............ 64

Figure 25 : Exécution non contrôlée des transactions concurrentes ...................................... 65

Figure 26 : Perte d’opérations .................................................................................................. 66

Figure 27 : Ecriture inconsistante ............................................................................................. 67

Figure 28 : Lecture sale ............................................................................................................ 68

Figure 29 : Lecture non-reproductible ..................................................................................... 69

Figure 30 : Le Principe du Verrouillage à deux phases [31] ..................................................... 72

Figure 31 : Le Verrou Mortel (DeadLock) [42].......................................................................... 74

Figure 32 : Cycle dans le Graphe des Attentes ......................................................................... 75

Figure 33 : Réplication peer-to-peer avec trios et quatre nœuds [19] .................................... 83

Figure 34 : Vue de l’architecture de la Réplication transaction [19] ....................................... 83

Figure 35 : Interface de Démarrage du Service de DTC ........................................................... 89

Figure 36 : l’Intranet Gouvernemental [35] ............................................................................. 94

Figure 37 : Diagramme de Cas d’Utilisation ............................................................................. 99

xi

Figure 38 : Diagramme de Classe ........................................................................................... 101

Figure 39 : Diagramme d’état de la classe Agent ................................................................... 102

Figure 40 : Diagramme d’Activité pour l’immatriculation d’un agent ................................... 103

Figure 41 : Diagramme d’Activité pour le calcul et la paie des Agents immatriculés ............ 104

Figure 42 : Diagramme de classe avec toutes les propriétés et les classes association ........ 105

xii

Liste des Tableaux

Tableau 1: Avantages et Désavantages de la combinaison de stratégie ................................. 28

Tableau 2: Compatibilité des Verrous (modes) ........................................................................ 71

Tableau 3 : Compatibilité des Verrous (Opérations) ................................................................ 71

Tableau 4 : Projets Réseaux Gouvernemental par KOICA [35] ................................................ 93

Tableau 5 : Tableau de correspondance de numéro de sites et leurs noms ........................... 95

Tableau 6 : Fragmentations et allocations aux sites .............................................................. 106

xiii

[Introduction Générale]

1

Introduction Générale

Actuellement les besoins d’entreprises et leurs solutions doivent tabler sur

l’infrastructure qui leur est offerte, à savoir les réseaux informatiques de communication, et

aussi pour en profiter de ses avantages, surtout qu’en plus cette infrastructure

correspondrait le mieux possible à l’architecture des entreprises.

Le système d’Information aussi, qui est un apanage pour une entreprise, s’est étendu

sur cette infrastructure en sous systèmes, et par conséquent doit faire collaborer ces

derniers de manière à leur permettre soit de sous-traiter un sous système chez un autre, soit

à permettre plusieurs sous systèmes de pouvoir participer à la réalisation d’un résultat. Ce

type de systèmes s’appelle et sont dits « distribué ou réparti».

Et cette notion de système distribué même, dont la définition est la suivante, une

collection de processus informatiques indépendants qui communiquent mutuellement par

passage de message [27], s’articule sur un seul problème à savoir, la cohérence de données

qui doit être assurée de manière la plus transparente aux utilisateurs.

Dans les Bases de Données Distribuée, comme dans tout autre système distribué, y est

utilisé le concept de la transaction, qui est aussi une voie vers la gestion de la cohérence de

données, vu qu’une transaction a cette propriété d’atomicité qui lui permet d’être défaite ou

validée d’un seul coup lorsque l’ensemble d’opérations qu’elle encapsule ont échoué ou

réussi, afin de laisser les données si pas dans un état de cohérence précédent, mais de les

faire passer dans un autre état de cohérence.

La concurrence aussi, il faut le signaler, même si elle fait partir des objectifs pour

lesquels on construirait un système distribué, reste aussi une cause d’incohérence de

données dans ce dernier. De fait, elle nécessite une bonne gestion ; pour aussi garantir la

cohérence ; le concept de transaction le fait aussi bien, de par sa propriété d’Isolation. D’où,

on parle des transactions concurrentes, ce qui est même l’objet principal de ce présent

travail.

Pour mener à bonne fin notre travail qui s’articule sur l’Intranet Gouvernemental (e-

Gouvernement), nous y avons ciblé un problème très récurrent que nous formulons de la

manière suivante, Mise en place d’un Système d’Information (Automatisé) de Traitement

de Salaire des Agents de l’Etat.

2

Pour que l’Etat ou le Gouvernement salarie un agent, ce dernier doit de prime abord

être immatriculé. Sachant que c’est chaque institution de l’Etat ou l’entreprise elle-même

qui gère ses employé (ses ressources humaines), c'est-à-dire elle organise le

recrutement, mais pour la prise des fonctions, c’est la fonction publique qui attribue les

matricules. Or ces opérations, manuelles soient-elle et faisant intervenir deux sites distants,

exigent souvent beaucoup de déplacements pour acheminer les dossiers et passer toutes les

étapes pour aboutir à un agent immatriculé. Chose qui fait perdre terriblement du temps.

Après immatriculation des agents, la Fonction Publique, qui est l’entité habilitée à

gérer la ressource humaine de l’Etat, est censée connaitre l’effectif de tous les agents de

l’Etat. Or, étant donné que le processus d’immatriculation prend assez de temps, et qu’en

plus puisque c’est manuel, il peut favoriser de cas des agents fictifs ; cette tache peut donc

devenir un peu pénible et erroné.

Venons-en maintenant au problème de salaire ; si l’immatriculation dure aussi

longtemps, on risque d’avoir une situation telle que, un agent en attente de son matricule

peut commencer déjà à travailler au sein de l’entreprise mais sans salaire de la part de l’Etat.

Et aussi si savoir l’effectif des agents est aussi un problème et favorise la présence des

agents fictifs, c’est l’Etat qui va perdre. De fait, le Ministère de la Finance, l’Entité qui calcule

et paie (ou calcule la masse salariale) les agents doit avoir une liste des agents immatriculé

de sorte à ne payer que ceux-là. C’est pour ça que la Fonction Publique édite les

immatriculés et en envoie la liste à la Finance.

Pour maintenant rémunérer ces agents, leurs entreprises respectives participent aussi

dans le calcul, même si c’est la Finance qui paie (ou calcule le salaire). Et alors, calculer le

salaire d’un agent, c’est aussi une tache très délicate, qui nécessite une bonne attention, car

son calcul inclut beaucoup d’autres éléments tels que, les indemnités, la prime, le salaire de

base, les retenues, le prêt, etc., et le faire à la main peut probablement glisser des erreurs.

D’où, un besoin incessant de l’informatisation de processus, afin de pouvoir régulariser

pas mal des choses, à savoir l’immatriculation et la paie, au-delà de certains contrôles

physiques qui doivent toujours être maintenus.

Mettre une moindre transparence dans la gestion des ressources humaines de l’Etat,

chose qui est un volet non négligeable dans la gestion de la RDC, de sorte à assouplir

tant les processus d’immatriculation que ceux de la paie des agents, de sorte aussi à

permettre que les agents et l’Etat se retrouvent tous, et de sorte enfin si pas à contourner le

problème des agents fictifs, mais à l’amoindrir. L’informatique donc, s’avère un outil

incontournable, permettant ainsi d’éviter trop de temps d’attente, trop de déplacement,

trop de formulaires et donc de paperasses dans l’administration de l’Etat.

3

Donc la transparence, la souplesse, et la simplification de procédures, sont des intérêts

que poursuit ce travail.

Pour ce faire, nous allons mettre sur pied une solution informatique, sous un modèle

d’un système distribué, en exploitant plus précisément les Bases de Données Réparties

(BDR), puisque c’est le modèle qui s’accorde le plus à la situation, étant donné qu’elle fait

intervenir plusieurs sites distants et qu’en plus puisque déjà un bon nombre de sites sont

reliés dans le réseau de l’Intranet Gouvernemental.

Et dans les BDRs, nous nous nicherons sur l’utilisation des transactions, puisque ces

dernières, de par leurs propriété, offrent un bon nombre d’avantages, tels que, de gardre les

données de la base de données toujours cohérente, et si elles en venaient d’être dans une

situation de concurrence, elles s’en sortent toujours bien de par la possibilité qu’elles ont

d’être isolée, c'est-à-dire de permettre ou pas l’accès des autres transactions dans la lecture

ou l’écriture des ressources qu’elles utilisent, et bien plus que tout, grâce au journal de

transactions, qui permet d’archiver toutes les opérations effectuées sur la base. Les

transactions donnent donc cette possibilité de pouvoir retracer les opérations.

Certes, il existe nombreuses entreprises de l’Etat. Certes, il existe un bon nombre de

sites déjà relié dans le réseau de l’Intranet Gouvernemental.

Pourtant, pour des raisons de temps et de coût, de concision et de précision de

l’Application ici présentée comme solution informatique, nous n’avons pris en compte

que trois sites dont deux sont très stratégiques et indispensables à savoir, la Fonction

Publique pour l’immatriculation, et la Finance pour le calcul et la paie des agents, et un

troisième site qu’est la Primature pour illustrer le cas des entreprises ou institutions qui

participent passivement dans la rémunération des agents de l’Etat. Il faut signaler alors que

les deux sites sont aussi illustrés par le troisième site, étant donné qu’ils sont des institutions

avec des agents à gérer. Nous nous sommes aussi limités seulement aux éléments du salaire

cités ci haut.

Ainsi, grâce aux techniques de récolte de données suivantes, questionnaires (enquêtes)

et documentation, nous avons pu rassembler des informations nécessaires au montage de

notre Système d’Information.

4

Voici donc alors comment l’organisation du travail se présente :

Le travail est organisé en trois (3) chapitres :

- Le premier chapitre, intitulé Les Systèmes Distribué, donne un aperçu très

clair du domaine dont nous traitons, introduisant ainsi de manière nette, simple et

claire les concepts théoriques de base à utiliser dans la suite du travail, tels que la

réplication et les bases de données réparties.

Voici donc ses points chauds :

Les Systèmes Distribués

Les Bases de Données Répartie (BDR)

La Réplication

Conception, Fragmentation et Allocation d’une BDR

- Le deuxième chapitre, intitulé Les Transactions Distribuées, montre le bien

fondé de l’utilisation des transactions et de leur gestion, en parlant de différents

problèmes liés aux transactions concurrentes et leurs solutions.

Voici donc ses points chauds :

Définitions d’une Transaction

Classification des Transactions

Modèles de Transactions

La Journalisation et la Reprise des Transactions

Transaction distribuée et le Modèle OSI

Gestion et Contrôle de Concurrence de transactions (Répartie)

Et enfin,

- Le troisième chapitre, intitulé Les Applications, c’est ici que nous nous

sommes évertués pour rattraper si pas toutes mais une grande partie de théories

avancées précédemment, dans les outils informatiques utilisés pour mettre en place

une application (répartie) informatique que nous avons nommée « SalaryManager »,

un logiciel de traitement et de calcul de salaire des agents de l’Etat au sein de

l’Intranet gouvernemental (e-Gouvernement), allant de l’immatriculation des agents

jusque et y compris le traitement de leur salaire.

5

Voici donc ses points chauds :

Mécanisme de Répartition sous SQL SERVER 2008

Gestion de Transactions par la programmation sous .NET

(Framework 3.5)

Intranet Gouvernemental de la RDC (République Démocratique

du Congo)

Mise en place d’un Système d’Information (Automatisé) de

Traitement de Salaire des Agents de l’Etat (SalaryManager)

6

[Chapitre I]

7

Chapitre I

Les Systèmes Distribués

Les réseaux informatiques, qu’est une interconnexion des équipements informatiques,

offrent aux entreprises toute une panoplie des avantages, parmi lesquels ceux qui sont

beaucoup plus à l’intention de ce travail on a, l’échange et partage des données

informatiques et l’accès à des bases de données réparties ou distribuées, aussi bien qu’on le

sache que le partage est l’objectif premier de Réseaux Informatiques [48].

Et à l’apparition de ce réseau, sont nés et y sont déployés des systèmes dits distribués,

l’exploitant pour arriver à leurs propres fins. Ces derniers sont soit des bases de données

distribuées sur ce réseau soit des applications interagissant avec ces bases de données,

spécifiquement pour le cas qui nous concerne.

C’est comme ça que, nous allons commencer par esquisser sur les systèmes distribués

avant de nous plonger de manière la plus détaillée possible sur les bases de données

distribuées.

I. 1. Les Systèmes Distribués

Nous allons commencer par élucider mais, en éludant toute confusion, la différence ou

mieux la ressemblance entre le terme « distribué » et « répartie ».

Le terme « distribué » vient du terme anglais « distributed » ayant comme idée d’une

distribution des tâches réalisées par un coordinateur, pendant que « répartie » suppose une

coopération des tâches en vue de la répartition du travail, et pourtant dans la littérature

anglaise on ne reconnait pas cette différence puisque dans le terme « distributed System »

distributed signifie : « réparti dans l’espace » [10].

De fait, il n’y a donc aucune différence entre Système Distribué et Système Réparti, ou

bien, entre Distribué et Réparti dans le reste du travail.

Par contre au niveau de la Base de Données, [15] montre une certaine nuance

montrant que quand on parle d’une Base de Données Distribuée (BDD), c’est un terme tout

à fait générique et que de ce fait une Base de Données Répartie (BDR) n’est qu’un cas de

BDD, au même titre que les BDs fédérées, les sytèmes multi BD, etc. Nous en parlons dans la

partie y consacrée.

8

I.1.1. Définitions

"Un système réparti est un ensemble de machines autonomes connectées par un

réseau, et équipées d'un logiciel dédié à la coordination des activités du système ainsi qu'au

partage de ses ressources." Coulouris et al. [18].

"Un système réparti est un ensemble d’ordinateurs (ou processus) indépendants qui

apparaît à un utilisateur comme un seul système cohérent". Tanenbaum [7] [25].

"Un système informatique distribué est une collection de processus informatiques

indépendants qui communiquent mutuellement par passage des messages" [27].

Force est de constater, que ces définitions ci-haut données ne se contredisent pas

mais, bien au contraire chacune d’elle définit une idée, qui mise ensemble donne une idée

claire et globale de ce qu’est un Système Distribué.

Aussi, nous en avons pu retenir deux concepts très importants, (i) indépendant, de par

la définition de [7], c'est-à-dire que les ordinateurs ont architecturalement cette capacité de

travailler indépendamment, (ii) le logiciel, de la première définition mais complété par la

deuxième, qui permet à cet ensemble d’ordinateurs de paraître à l’utilisateur comme un

seul.

Cette dernière notion est connue sous le nom d’Image unique du système [18] [43].

Et cette notion d’Image unique du système, fragilise un peu le système à tel enseigne

qu’il ne suffit qu’une simple panne d’un ordinateur, cela peut impacter négativement sur le

bon fonctionnement du système et voire amener à des incohérences.

Leslie Lamport l’a bien dit lorsque définissant un système distribué : "un système qui

vous empêche de travailler si une machine dont vous n’avez jamais entendu parler tombe en

panne" [27] [25].

I.1.2. Caractéristiques et Objectifs

Voici les objectifs pour lesquels on construirait un système distribué, qui font office

directement des caractéristiques de ce dernier :

Le partage des ressources :

Toutes les ressources tant hardware (ordinateurs, organes d’entrée-sortie,

processeurs spécialisés, dispositifs de commande ou de mesure, etc.) que software

sont partagé entre les entités du système.

9

L’ouverture :

Les composants et les logiciels utilisés au sein de ce système peuvent provenir de

différents fournisseurs et travailler sans aucun problème.

La concurrence :

Le traitement concurrent augmente la performance du système.

La grande échelle (ou scalability : en anglais)

C’est la capacité d’un système de ne pas dysfonctionner lorsque sa taille s’accroît, ou

lorsque des nouvelles ressources sont ajoutées.

La tolérance à la faute :

C’est la capacité qu’un système continue de fonctionner malgré quelque défaillance

partielle des composants ou du réseau de communication.

I.1.3. Système Centralisé VS Système Distribué

Le Système Distribué, ne présenterait-il que des avantages ci-haut présentés en termes

d’objectifs ? Et pourtant, un peu ci-haut on a montré un petit problème lié à la notion

d’Image unique. Qu’on le sache, il a des problèmes ou désavantages dont nous allons parler

dans la suite. De plus, par définition, les systèmes distribués sont plus vulnérables que les

systèmes centralisés, car le nombre de points susceptibles d'être attaqués est plus

important, en plus de la faiblesse des réseaux rendus nécessaires par la répartition.

A la différence du système distribué, le système centralisé est celui qui travaille et se

base sur une seule et même machine, tout y est localisé et accessible par des programme. Ce

système est aussi bien illustré par un « mainframe », où il peut y avoir un ou plusieurs CPU

(Central Processing Unit) et les utilisateurs qui communiquent directement avec lui via des

terminaux.

Le seul vrai problème avec ce système, c’est qu’il n’est pas scalable (expansible) [43], il

y a une limitation par rapport au nombre de CPUs à tel enseigne qu’il faut le mettre à jour ou

carrément le remplacé lorsqu’il faut ajouter un CPU.

De par les avantages et objectifs du système distribué, on peut sans aucun effort voir

le pourquoi de ce passage.

10

Et pourtant ce passage amène aussi des nouveaux problèmes tels que la localisation, la

transparence, l’interopérabilité, etc. qui sont pris aux titres des défis, auxquels le système

distribué doit faire face.

Conception d’un système distribué

La conception peut se faire de deux manières, [13], matérielle et logicielle.

Conception matérielle

Elle peut se réaliser sur :

+ Machine multiprocesseurs avec mémoire partagée

+ Cluster (grappe) d’ordinateur dédié au calcul/traitement massif parallèle

+ Ordinateurs standards connecté en réseau.

Conception logicielle

+ Le système logiciel ici, est composé de plusieurs entités disséminé dans un réseau,

s’exécutant indépendamment et parallèlement.

Appelé

Appelant

Souche

Appelant

Squelett

e

Appelé

Réseaux

Centralisé Distribué Figure 1 : De Centralisé vers Distribué [9]

11

I.1.4. Propriété d’un Système Distribué

Les défis tantôt dits sont ici présentés comme des propriétés que doit assurer un

système distribué. Nous allons pour notre compte ne présenter que celles qui sont beaucoup

plus inhérentes à notre travail :

La Transparence :

Contrairement à ce que laisse entendre naturellement ce vocable, elle veut plutôt ici

dire que, tous les détails techniques et organisationnels, complexes du système distribué

sont cachés à l’utilisateur.

Le but de la transparence est de permettre une manipulation des services distants plus

facilement, c'est-à-dire, comme des services locaux [27], sans avoir besoin de connaître sa

localisation ou son détail techniques des ressources [25].

Cette propriété fait alors maximiser la scalabilité et la flexibilité du système, simplifie le

développement des applications et leur maintenance évolutive et corrective.

La norme (ISO, 1995), classifie la transparence sous plusieurs niveaux [18] [25] [27]:

- Accès : il y a pas d’accès spécifique pour des ressources ; l’accès à une ressource tant

distante que locale est identique.

- Concurrence : l’utilisateur du système ne doit pas savoir que telle ou telle autre

ressource peut être partagée ou utilisée simultanément par d’autres utilisateurs.

- Extension (des ressources) : s’il faut étendre ou réduire le système, il ne faudra pas

que l’utilisateur en soit gêné (sauf la performance [18]).

- Hétérogénéité : il doit être caché à l’utilisateur les différences matérielles ou

logicielles des ressources qu’il utilise. La notion d’interopérabilité.

- Localisation : il n’est nullement besoin de savoir l’emplacement d’une ressource du

système pour y accéder. Ceci donne lieu à la transparence de migration [18].

- Migration : le déplacement d’une ressource peut se faire, mais sans qu’on ne s’en

plaigne, car rien ne sera aperçu.

- Panne : lorsqu’il y a panne (réseaux, machines, logiciels) au niveau d’un nœud du

système, l’utilisateur ne doit pas le savoir.

12

- Relocalisation ou Mobilité : une ressource peut changer d’emplacement pendant

qu’elle est utilisée, mais sans qu’on s’en rende compte.

- Réplication : l’utilisateur du système n’a pas besoin de savoir que telle ressource est

dupliquée.

De manière la plus évidente, on voit qu’on peut assurer une transparence totale, et

pourtant il est très difficile et voire impossible de masquer toutes les pannes des ressources.

La Disponibilité

Il existe beaucoup de causes à l’origine de l’indisponibilité d’un système, mais voici

celles que nous notons ici selon [25] :

- Des pannes empêchant au système ou à ses composants de fonctionner

conformément à la spécification ;

- Des surcharges dues à des sollicitations excessives d’une ressource ; la congestion et

la dégradation des performances du système s’en suivent certainement.

- Des attaques de sécurité pouvant causer des dysfonctionnements, voire l’arrêt du

système, des pertes et incohérence de données.

Pour ne citer que ça.

Mais puisque dire « disponibilité » sous-entend que le système doit toujours être à

mesure de délivrer correctement les services et ce conformément à la spécification ; mais il

faut savoir que les pannes ou toute autres tentatives (ci-haut citées) vont toujours essayer

de compromettre le bon fonctionnement du système ; pour ce, il faut le rendre capable de

rester disponible.

Parmi les solutions retenues pour y remédier [25], nous avons choisi de ne parler que

de celle qui va beaucoup plus avec notre travail :

La réplication ; cette technique est utilisé pour pallier à la première (panne) et deuxième

(surcharge) cause d’indisponibilité. Ici, les copies d’une même ressource peuvent se trouver

en même temps dans des emplacements différents. Ainsi, lorsqu’une ressource tombe en

panne, le traitement qu’elle effectuait est déplacé sur une autre ressource disponible. Pour

ce qui est de la surcharge, au lieu que des sollicitations se fassent sur une même et seule

ressource, elles se font parallèlement sur chacune de ses copies (réplique) partout ailleurs.

13

L’Autonomie

Puisque les systèmes existants ou les applications existantes sont souvent difficiles à

remplacer ou à réécrire, logiquement par ce qu’ils sont bien expérimentés et ont une

expertise ; quand on a besoin de les adapter à un autre besoin qui n’y est pas supporté.

Voici donc la bonne motivation parmi tant d’autres de l’autonomie ; un système ou un

composant est dit autonome si son fonctionnement et son intégration dans un système

existant n’exige pas de modifications ni à lui ni à ce dernier.

L’autonomie des composants d’un système favorise par conséquent l’adaptabilité,

l’extensibilité et la réutilisation de ressources de ce système.

Les Intergiciels : Middlewares

Pour compléter à l’autonomie d’un système, on peut aussi intégrer des intergiciels. Un

intergiciel (middleware, en anglais) est un assemblage des fonctionnalités, nouvelles,

formant un logiciel intermédiaire entre deux applications ou système. Il est demandé qu’un

tel logiciel ne soit pas générique mais plutôt spécifique, et cela pour éviter la surcharge qui

est un handicap pour la disponibilité.

- Les objectifs d’un Middleware

Les trois objectifs d’un middleware sont les suivants [1] [51]:

(1) masquer la complexité de l'infrastructure sous-jacente, donc l’hétérogénéité des machines

et systèmes ;

(2) Faciliter la conception, le développement et le déploiement d'applications réparties :

masquer la répartition des traitements et des données.

(3) Fournir des services communs : une interface commode aux applications (programmation

+ API : Application Programming Interface).

14

Site 1 Site 2

Applications

Middleware

Système de

communication

Interfaces

Figure 2: système distribué avec un middleware [1] [51]

Note : Le système de communication permet aux éléments des sites du système distribué

d’échanger des informations entre eux.

Exemples des Intergiciels :

- Java RMI (Remote Method Invocation), CORBA (Common Object Request Broker

Architecture), .NET [-Orienté Objet-]

- JTS (Java Transaction Service) de Sun, MTS (Microsoft Transaction Server) de

Microsoft [-Orientés Transactionnels-]

- Web Services (XML-RPC: Extensible Markup Language-Remote Procedure Call, SOAP:

Simple Object Access Protocol) [-Orientés Web-]

- ODBC (Open DataBase Connectivity), JDBC (Java DBC) de SUN [-Orientés SGBD/SQL-]

Nous n’avons parlé que de ces trois propriétés comme tantôt dit, mais puisqu’en plus

elles entrent beaucoup plus enjeu dans la suite de notre travail. Dans cette liste, se figure

aussi la grande-échelle, c'est-à-dire le passage à l’échelle, c'est-à-dire la « scalability »

(comme définit ci-haut).

I.1.5. Architecture d’un Système Distribué

Quasiment anticipé, l’architecture d’un système distribué est l’agencement ou mieux

la structure des composants constitutifs de ce dernier en termes de logiciels, matériels et

réseaux. Voici ces architectures en question [27]: Client-serveur (C/S), Peer-to-Peer ou Pair-

à-Pair (P2P) et Hybride ; ce dernière est une combinaison du modèle client/serveur et du

modèle Peer.

15

Le Client-serveur : C/S

[Définition]

Le concept client-serveur, c’est pour définir une architecture. Et donc, l’architecture

client-serveur est un modèle de fonctionnement logiciel qui peut se réaliser sur tout type

d’architecture matérielle (petite et grosse machine) pourvu que ces architectures soient

interconnectées. Et là, nous avons deux types de logiciels, le logiciel client qui formule des

requêtes à un autre, et cet autre c’est le logiciel serveur, et les deux s’exécutant

normalement sur deux machines différentes.

Les deux applications dialoguent ou communiquent entre elles, de la manière

suivante :

- Le client demande un service au serveur

- Et le serveur réalise le service, c'est-à-dire, le traitement et le renvoie au client

Client SERVEURRequête

Résultat

Dialogue

Figure 3 : Client-Serveur

C’est le client qui initie le dialogue et le pilote, pendant que le serveur y participe tout

simplement. Et pour dialoguer ou communiquer, ils ont besoin de protocole de

communication.

[Mode de Client-serveur]

- Couches dans le Client

Le modèle client-serveur possède trois couches, dont on a [11]:

+ Couche présentation : qui s’occupe du dialogue entre la machine et

l’utilisateur.

+ Couche applicative : qui réalise des tâches pour produire de résultat escompté.

+ Couche de données : qui gère les données.

16

- Modes ou types ou modèles

Et par rapport à la répartition de ces couches entre serveur et client, on distingue trois

types ou modes client-serveur :

+ Client-serveur de présentation :

Le client ne possède que la couche présentation en son sein et le serveur en

possède soit toutes soit deux restantes.

+ Client-serveur de données :

Le client effectue la gestion du dialogue, la validation des saisies, la mise en

forme des résultats et les traitements (y compris la manipulation des

données). Le serveur gère l'accès aux données et de plus en plus souvent

l'intégrité des données. Il est appelé serveur de données.

Cette mise en œuvre est très répandue car elle a été popularisée par les

SGBDs relationnels qui ont reposé dès leur origine sur le modèle

client/serveur pour ce qui est de leur fonctionnement réparti.

Exemple : Application C# Avec SQL SERVER.

+ Client-serveur de traitements :

Ce type est également qualifié de traitement distribué (ou client-serveur de

procédure [14]). Le client appelle l’exécution d’un traitement stocké sur le

serveur qui effectue les traitements et renvoie les données au client.

On peut également répartir les données sur le poste client ou d’autres serveurs

de données en utilisant un SGBD supportant cette fonctionnalité. Dans ce

cas on effectue de la gestion distribuée de données (bases de données

réparties ou répliquées).

Peer-to-Peer ou Pair-à-Pair : P2P

Cette architecture offre à un système la capacité de passage à l’échelle (scalability),

c'est-à-dire la capacité d’un système à continuer à délivrer avec un temps de réponse

constant un service même si le nombre de clients (nœuds) ou de données augmente de

manière importante [25] [36], afin de partager les ressources dans un réseau largement

distribué. L’avantage de cette architecture est celui de disposer toujours d’une puissance de

calcul, quand bien même le nombre de ressources disponibles dans le système est élevé. Et

cet avantage lui permet de traiter des taches complexes avec un coût relativement faible,

même sans avoir des serveurs gigantesque [36].

17

Dans cette architecture, un nœud peut donc jouer le rôle de client selon qu’il

consomme des ressources disponibles et serveur selon qu’il offre des ressources.

Une autre définition, qui explicite aussi les choses, c’est celle donnée par [34] [36] : «

Le terme "pair-à-pair" représente une classe de systèmes et d’applications qui utilisent des

ressources distribuées afin d’atteindre un objectif précis d’une façon décentralisée. Les

ressources incluent puissance de calcul, données (stockage et contenu), bande passante

et disponibilité (ordinateurs, être humaine ou autres ressources). L’objectif peut

être la répartition de calcul, le partage de données/contenu, la communication et la

collaboration ou le partage des services d’une plateforme. La décentralisation peut être

appliquée sur les algorithmes, les données et les métadonnées ».

I.2. Les Bases de Données Réparties (Distribuées)

Il y a des notions qui ont déjà été expliquées dans la section précédente, et quand

nous les réciterons ici nous n’aurons que la peine de rappeler qu’elles l’ont déjà été

précédemment.

I.2.1. Définitions

- Base de données : BD

Une base de données, de la manière la plus brève possible, c’est une collection des

données structurée reliées par des relations et interrogeable et modifiable par son contenu.

- Base de données répartie (distribuée):BDR ou BDD

Une base de données distribuée, c’est une collection de multiples bases de données

logiquement interconnectées distribuées ou réparties sur un réseau d’ordinateur [24], et

apparaissant à l’utilisateur comme une base de données unique [15].

18

Réseau de Communications

Site 1BD

Site 2BD

Site 3BD

Site 4BD

Site 5

BD

Figure 4 : Architecture d’une base de données [41]

- Système de Gestion de Base de Données : SGBD

Un SGBD est un logiciel informatique permettant aux utilisateurs de structurer,

d’insérer, de modifier, de rechercher de manière efficace des données spécifiques, au sein

d’une grande quantité d’informations, stockées sur mémoires secondaires partagée de

manière transparente par plusieurs utilisateurs.

- Système de Gestion de Base de Données Réparti (Distribué): SGBDR ou SGBDD

Un SGBDD est le logiciel qui gère les BDD, et fournit un mécanisme d’accès qui rend

cette distribution ou répartition transparente à l’utilisateur.

- Système de Bases de Données Distribuées : SBDD

Un SBDD est l’intégration de BDD et SGBDD, laquelle est réalisée à travers le

fusionnement de la BD et les technologies du réseau ensemble [24].

Ceci peut aussi être décrit comme un système qui coordonne une collection de

machines qui n’ont qu’une mémoire partagée (shared memory), cependant paraissant à

l’utilisateur comme une seule machine.

19

- Les concepts « distribué » et « répartie » dans les Base de Données

Le concept « distribué » est très générique et implique beaucoup d’autre [15], tels que

les BD Répartie, les BD fédérées, les Systèmes Multi bases, etc.

Les BD Réparties, par exemple, peuvent être soit hétérogène soit

homogène ;

Les BD Fédérées, ne sont par contre que des BD hétérogènes, mais dont

l’accès est via une seule vue ;

Et les Système Multi bases, sont des bases de données hétérogènes

capables d’inter opérer avec une application via un langage commun,

sans une vue commune.

I.2.2. Buts et motivations pour une Base de Données Distribuée :

BDD

Il faut dire, vu ce qui précède, que la décentralisation a eu sa bonne raison de

transcender la centralisation de par sa valeur ajoutée, mais aussi puisque cette architecture

est la plus adaptée à beaucoup d’organisations des entreprises.

Les BDDs ont donc pour motivation [6]: l’amélioration de la performance du système,

l’augmentation de la disponibilité de données, le partage, le passage à l’échelle (scalability)

et l’accès facile. Nous en parlons en détail pour quelques-uns.

On a, donc :

(1) La nature intrinsèque des certaines situations ou applications. L’exemple d’une

banque qui a une direction centrale à un lieu donné, des succursales dans différentes

autres lieux qui peuvent traiter les données des clients locaux, par rapport au lieu,

mais contrôlés par la centrale. Il est évident qu’une base de données distribué dans

différents site, est appropriée.

(2) La fiabilité et la disponibilité. La fiabilité révèle cette nature d’assurer les services

attendus continuellement ; et la disponibilité, comme dit tantôt, est un élément

important pour accroître la fiabilité.

(3) Meilleure performance : la répartition de données permet souvent la réplication de

celles-ci, or nous avons précédemment dit que cette notion de réplication

assouplissait le trafic à tel enseigne que les sollicitations sur une ressource ou une

donnée étaient parallélisées.

20

I.2.3. Avantages et Contraintes

Voici quelques avantages retenus d’une base de données répartie, on a :

(1) Le rapprochement des données selon qu’un site les demande plus, ce qui permet la

réduction de coût de communication.

(2) L’autonomie de site local ; un site n’a pas besoin d’aller chercher ailleurs les données

qu’il possède lorsqu’un utilisateur demande au site certaines données.

(3) La continuité de services.

(4) Une intégration facile dans un système existant.

Nous en retenons qu’une seule contrainte que nous jugeons de pertinente, c’est la

complexité, qui se situe dans la conception d’une base de données distribuée par rapport à

celle qui est centralisée ; à savoir que cette conception prend en compte la fragmentation

des données, l’allocation des fragments dans des sites et la réplication.

[Contraintes]

- Coût : la distribution de données entraîne des coûts supplémentaires en

terme de communication, et en gestion des communications (hardware et

software à installer pour gérer les communications et la distribution).

- Problème de concurrence. Qui est même le cas traité dans ce travail.

- Sécurité : la sécurité est un problème plus complexe dans le cas des bases de

données réparties que dans le cas des bases de données centralisées.

I.2.4. La Répartition de données (Les Niveaux)

Nous distinguons trois niveaux dans lesquels la répartition de données intervient. Nous

allons présenter l’architecture (de niveau ou de schémas) de la BDR, à l’aide de laquelle,

nous allons expliquer la répartition.

21

Figure 5 : Architecture d’une BDD

Note : VE= Vue Externe.

La répartition d'une base de donnée intervient dans les trois niveaux de son

architecture en plus de la répartition physique des données :

- Niveau externe: les vues sont distribuées sur les sites utilisateurs.

- Niveau conceptuel: le schéma conceptuel des données est associé, par

l'intermédiaire du schéma de répartition (lui-même décomposé en un schéma de

fragmentation et un schéma d'allocation), aux schémas locaux qui sont

réparties sur plusieurs sites, les sites physiques.

- Niveau interne: le schéma interne global n'a pas d'existence réelle mais fait place à

des schémas internes locaux répartis sur différents sites.

I.2.5. Principe d’une Base de Données Réparties ou Distribuée

Le principal fondamental de BDD est la transparence pour l’utilisateur [15], mais que

[41] présente, de manière la plus détaillée, sous forme de niveaux de transparence (pour la

gestion de la BDD). Et nous en avons ci-haut montré ses apports.

Dans une BDD, la transparence s’exprime sous trois niveaux : - transparence de

distribution ou de réseaux, - de réplication et - de fragmentation.

22

- Transparence de distribution ou de réseaux :

Cette transparence renferme deux autres concepts : la transparence de localisation et la

transparence de désignation (naming transparency).

+ De localisation : Le système s’occupe de trouver le site où sont hébergées

les données demandées par l’utilisateur, et pourtant ce dernier n’en sait

rien et lance sa requête comme sur une seule et unique base de données.

+ De désignation : elle implique qu’une fois qu’un objet dans le système est

nommé, il peut être accédé, sans aucune ambigüité et sans aucune autre

spécification que ce nom.

- Transparence de réplication :

Une BDD a souvent des données répliquées dans d’autres sites, et ceci pour accroître une

certaine disponibilité, la performance, et la fiabilité. Alors cette transparence va masquer

cette situation de choses à l’utilisateur.

- Transparence de fragmentation:

La fragmentation est cette technique qui permet de distribuer les données dans tout le

système. Nous allons dans la suite montrer qu’il en existe deux sortes : verticale et

horizontale. Mais la transparence de fragmentation fera que l’utilisateur ne soit au courant

ni de la fragmentation de donné, ni de l’existence de fragments. Ainsi, lorsque l’utilisateur

lance requête (globale), le système s’occupera de la transformer en plusieurs requêtes de

fragment.

I.2.6. Systèmes de Gestion de Base de Données Distribuée (SGBDD)

et Architectures

Il existe plusieurs SGBDD, qui puissent être différents les uns des autres, et eux tous

ont un point que voici en commun [41]: les données et les logiciel sont distribués sur

plusieurs sites interconnectés dans une forme de réseau de communication.

Et pourtant, nous allons présenter dans cette section un seul facteur, qui est vraiment

inhérent à notre travail, qui différencie des SGBDDs, c’est l’Homogénéité.

[Homogénéité]

Quand on parle du degré d’Homogénéité de logiciel de SGBDD, il y a deux facteurs

reliés à ce problème de degré :

23

o [-Facteur 1-]

Si tous les serveurs (ou les SGBDDs locaux individuels) utilisent un logiciel identique et

que tous les utilisateurs (clients) utilisent aussi un logiciel identique, alors le SGBDD est dit

Homogène. Sinon, il est dit Hétérogène.

o [-Facteur 2-]

Un autre facteur relatif au degré d’Homogénéité, c’est le degré d’autonomie locale.

On parle d’un degré d’autonomie si les transactions locales peuvent avoir un accès

direct au serveur. Par contre, si le site local n’a pas de provision lui permettant de

fonctionner en tant qu’un SGBDD indépendant, alors le système ne possède pas

d’autonomie locale.

[Architecture]

Les SGBDDs peuvent avoir plusieurs architectures, qui sont classées selon différentes

approches de séparation de fonctionalité sur les processus (traitements) de SGBD. Nous

allons, ici, présenter deux architectures [41]: Client-serveur et serveur collaboratif

(collaborating server).

o [-Client-serveur-]

Nous en avons déjà parlé ci-haut ; ce système a un ou plusieurs processus client et

serveur. Et un processus client peut envoyer une requête à l’un des processus serveurs. Les

clients sont chargés de l’interface utilisateur et peuvent tourner dans un PC (personal

computer) et envoyer des requêtes à un serveur, qui, lui, gère les données et exécute les

transactions.

o [-Serveur Collaboratif-]

L’idée dans ce genre de système, c’est qu’on peut avoir une collection des serveurs de

bases de données, et chacun étant capable d’exécuter les transactions sur les données

locales, mais aussi qui exécutent les transactions coopérativement sur plusieurs serveurs.

Un serveur qui reçoit une requête accédant sur plus d’un serveur, il en produit des

sous-requêtes pour chaque serveur et à la fin rassemble les résultats à la requête du début.

Ce découpage (décomposition) de requêtes en sous-requêtes se fait par optimisation [15].

24

I.3. La Réplication

Nous pouvons en retenir qu’elle augmente la performance, en diminuant la charge qui

devrait être imposée à un seul site (serveur) par la duplication de données, de favoriser la

disponibilité en cas de pannes par exemple, toujours par la duplication de données dans

différents sites, cette dernière permet donc de travailler avec les données d’un site si un

autre tombe en panne ou dans le souci de diminuer le temps de réponse des transactions.

Mais, il faut tout de suite le signaler qu’elle n’a pas que les bons côtés ; pour ce qui est

de ses inconvénients, c’est le problème de mise-à-jour. Les données dupliquées doivent

donc être uniforme ; de fait, une mise-à-jour sur un fragment de données ne doit pas laisser

les autres indifférents et différents, et pourtant cette mise-à-jours et sa synchronisation ne

sont pas immédiates. On peut donc constater que malgré tout, l’utilisation de la réplication

exige de nous une certaine vigilance par rapport à la cohérence de la base. Car, En effet,

permettre aux transactions de manipuler plusieurs copies d’une même donnée peut générer

des incohérences [5].

Il faut donc faire le contrôle de la réplication, pour assurer la cohérence de la base.

I.3.1. Les protocoles de contrôle de réplication

On distingue deux principaux modèles pour ces protocoles (techniques) [5] :

- Le modèle de réplication synchrone :

Une transaction doit se synchroniser avec toutes les copies qu’elle modifie avant

validation.

C'est-à-dire qu’une modification d’une donnée dans un site entraîne celles de ses

copies dans d’autres. C’est la mise à jour temps réel de données.

Figure 6 : réplication synchrone

La technologie appliquée ici, c’est celle de la validation à deux phases. Avec son

avantage de rassurer la convergence de tous les sites au COMMIT ou ABORT. Et Ceci,

rappelons-le, rassurera autant la cohérence de la base.

25

* Les avantages et les désavantages

+ Avantage :

Identité de copies (pas d’incohérence)

La lecture (locale) de la dernière copie la plus mise à jour

Les modifications sont atomiques, c'est-à-dire, soit ils ont lieu eux-

toutes à la fois, soit rien.

+ Désavantage :

Une exécution très longue de la transaction, vue que celle doit faire

les mises à jour de tous les sites, et ceci crée souvent de TIMEOUT

(voir dans le chapitre suivant)

- Le modèle de réplication asynchrone :

Les modifications introduites par une transaction sont propagées aux autres sites

seulement après validation de la transaction.

C'est-à-dire, d’abord un site connait des changements et les valide, puis après ce

dernier peut les propager aux autres sites.

Figure 7 : réplication asynchrone

Les technologies utilisées sont : les Triggers (déclencheurs), les journaux d’images

(après), etc.

* Les avantages et les désavantages

+ Avantage :

Les transactions sont toujours locales (un bon temps de réponse)

26

+ Désavantage :

Des incohérences de données

Une lecture locale de données ne retourne pas toujours la valeur la

plus mise à jour.

Les modifications à tous les sites ne sont garanties

De fait, la réplication n’est pas transparente.

I.3.2. Architectures de Réplications

De ce qui précède, il est évident que l’emplacement de l’exécution d’une transaction

est un point capital, et d’ailleurs [5] montre qu’il existe deux architectures qui déterminent

cet emplacement même, on a : primary copy et update everywhere.

- Primary Copy :

Aussi appelé réplication asymétrique [23].

Ici, chaque copie possède une copie primaire dans un site spécifique (serveur), appelée

aussi « publisher ». Les transactions sont seulement exécutées sur les serveurs des données

qu’elles manipulent, ou mieux elles ne mettent à jour que cette copie, et les mises à jour sont

envoyées aux autres copies (secondaires) sur les autres sites.

* Les avantages et les désavantages

+ Avantage :

Aucune synchronisation inter-site n’est nécessaire (elle se réalise au

niveau de la copie primaire (primary copy)

Il y a toujours un seul site qui a toutes les modifications

+ Désavantage :

La charge imposée uniquement sur la copie primaire peut devenir

assez grande

La lecture locale peut risquer de ne pas rendre une valeur la plus

mise à jour.

27

- Update everywhere :

Aussi appelé réplication symétrique [23]

Le principal à retenir ici, c’est que, aucune copie n’est privilégiée, par rapport au

précédent. Chaque copie dans n’importe quel site peut être mise à jour à n’importe quel

instant et ainsi le système assure la diffusion ultérieure de ces mises à jour à tous les autres

copies.

* Les avantages et les désavantages

+ Avantage :

De n’importe quel site peut s’exécuter une transaction

La charge est équitablement distribuée

+ Désavantage :

Les copies auront tout le temps besoin de la synchronisation

Toutes les quatre techniques ou stratégie ci-haut, peuvent être combinées en vue d’obtenir

une bonne performance et une bonne cohérence ou consistance de données, ainsi on a :

Réplication asymétrique synchrone

Réplication asymétrique asynchrone

Réplication symétrique synchrone

Réplication symétrique asynchrone

28

* Les avantages et les désavantages de la combinaison de stratégie

Symétrique Asymétrique

Synchrone Réplication symétrique synchrone Réplication asymétrique synchrone

+ Avantage :

Pas d’incohérences

La symétrie des sites + Désavantage :

Un temps de réponse long

Les modifications ont besoin d’être coordonnées

+ Avantage :

Les modifications n’ont pas besoin d’être coordonnées

Pas d’incohérence + Désavantage :

Un temps de réponse plus long

Seulement important avec peu des modifications

Les copies locales ne sont lues que localement

Asynchrone Réplication symétrique asynchrone Réplication asymétrique asynchrone

+ Avantage :

Pas de coordination centralisée

Temps de réponses très court

+ Désavantage :

Incohérence

Les mises à jour peuvent être perdues.

+ Avantage :

Pas de coordination nécessaire

Temps de réponses court + Désavantage :

Les copies locales ne sont pas mise à jour

Incohérence

Tableau 1: Avantages et Désavantages de la combinaison de stratégie

Il se suit de ce tableau ci-haut que,

- Réplication symétrie synchrone :

La cohérence de donnée est garantie. La performance peut sérieusement être

dérangée avec cette stratégie. Le système peut avoir un problème de passage à

l’échelle (verrou mortel : verrouillage à deux phases : voir dans le chapitre suivant) ;

dans ce sens que si le nombre de nœuds augmente, cela favorise le verrou mortel à

tout temps. Mais une tolérance à la panne très élevée.

29

- Réplication asymétrie synchrone :

A part l’absence de verrou mortel, cette stratégie est similaire au précédent. Mais ici,

le problème c’est le goulot d’étranglement qu’est la copie primaire.

- Réplication asymétrie asynchrone :

La performance est bonne (presque comme s’il n’y avait de réplication). Ainsi les

incohérences surgissent (de par le fait que chaque site a sa propre valeur de données).

- Réplication symétrie asynchrone :

La performance est excellente (presque comme s’il n’y a pas de réplication). Tolérance

à la panne élevée. Incohérence de la base. Et la reprise de mises à jour perdues est

dur à résoudre, on la fait presque manuellement.

I.4. Fragmentation, Allocation et Conception

Nous l’avons montré ci-haut que, la fragmentation et l’allocation des fragments dans

les sites du système étaient le vrai problème même dans les bases de données distribuée. Ce

problème set très critique qu’il demande d’énormes efforts lors de la conception d’une base

de données distribuée. L’allocation ou la fragmentation, [6], a un plus grand impact dans la

qualité sur la solution finale et par conséquent sur l’efficacité opérationnelle du système.

D’où, la performance de la base de données distribuée y dépend totalement.

La conception d’une base de données distribuée est un problème d’optimisation, qui

peut se subdiviser en deux problèmes [6], ou en trois [47] pour le cas d’une BDD répliquée:

- La conception de fragmentation des relations (tables) globale

- La conception de l’allocation de ces fragments à travers les sites du

réseau de communication

- Et/ou la réplication de ces fragments

I.4.1. Fragmentation

La fragmentation ou le partitionnement est une technique de conception qui consiste

à diviser une relation (unique) d’une base de données en deux ou plusieurs partitions telles

que leur combinaison reproduise la base de données originale sans aucune perte de

données [47].

Nous distinguons en gros deux types de fragmentation : horizontale et verticale, et un

troisième : hybride ou mixte.

30

- Fragmentation horizontale :

Elle permet de partitionner une relation (table) en tuples (ligne d’enregistrement)

disjoint, par sélection selon un critère donné.

L’exemple suivant servira d’illustration :

Soit la relation ou table suivante : Employé (de l’université de Kinshasa : UNIKIN)

Employé :

Matricule Noms Postnom Direction

06/30351 MASIDI LANDU COMMERCIALE

06/30352 MAPULUNGU ADELINE ETUDES

06/30353 MBWEBWE ROBERT COMMERCIALE

O6/30354 NTUMBA DENISE COMMERCIALE

06/30355 MUTOMBO TSHILEMEBE ETUDES

06/30356 PANGU NKOYI COMMERCIALE

Et les fragments sont obtenu par sélection, soit :

Employé_1=SELECT * FROM Employé WHERE Direction = ‘COMMERCIALE’

Employé_2=SELECT * FROM Employé WHERE Direction <> ‘COMMERCIALE’

Employé_1 :

Matricule Noms Postnom Direction

06/30351 MASIDI LANDU COMMERCIALE

06/30353 MBWEBWE ROBERT COMMERCIALE

06/30356 NTUMBA DENISE COMMERCIALE

06/30356 PANGU NKOYI COMMERCIALE

Employé_2 :

Matricule Noms Postnom Direction

06/30352 MAPULUNGU ADELINE ETUDES

06/30355 MUTOMBO TSHILEMBE ETUDES

La reconstruction:

Employé = Employé_1 U Employé_2

31

- Fragmentation verticale :

Elle permet de partitionner une relation ou table en une collection de colonne ou

attribut, à l’exception de la clé primaire [47]. Chacune de collections possèdera la clé

primaire, ce qui est normale, car cette servira de liens. Elle est basée sur la projection.

L’exemple suivant servira d’illustration :

Soit la relation ou table suivante : Commande

Commande :

NCde NClient Produit Quantité

C1 CLI1 P1 20

C2 CLI1 P2 22

C3 CLI2 P3 43

C4 CLI2 P4 100

Et les fragments sont obtenus par projection, soient :

Commande_1=SELECT Code_Commande, Code_Client FROM Commande

Commande_2=SELECT Code_Commande, Produit, Quantité FROM Commande

Commande_1 :

NCde NClient

C1 CLI1

C2 CLI1

C3 CLI2

C4 CLI2

Commande_2 :

NCde Produit Quantité

C1 P1 20

C2 P2 22

C3 P3 43

C4 P4 100

32

La reconstruction:

Pour cela, on fait la sélection avec un critère sur la clé primaire, qui est un lien entre les

fragments :

Commande = (SELECTION * FROM Commande_1, Commande_2 WHERE Commande_1.NCde

= Command_2.NCde)

- Fragmentation mixte ou hybride :

Dans cette sorte de fragmentation, on combine les deux précédentes, et ce de

manière tout à fait arbitraire, c'est-à-dire soit on commence par l’horizontale et puis

la verticale, vice-versa selon le besoin.

Exemples : (Sur la relation Commande ci-haut)

- Commande=SELECTION Code_Commande, Code_Client FROM Commande WHERE

Quantité >= 50

- Commande=SELECTION Code_Commande, Code_Client FROM Commande WHERE

Quantité > 50

Note : il existe un problème qui entache cette notion de fragmentation, c’est qu’elle est liée

à l’existence préalable de données [47], ce qui n’est pas toujours le cas quand on est au

début de la conception de la BDD. Mais, une bonne et efficace connaissance sur l’emploi ou

le besoin sur la BDD (d’une organisation) pourra permettre de savoir au préalable l’ensemble

de requêtes immédiates [16], et ceci facilitera évidemment la fragmentation dite statique.

Mais, dans le futur de l’organisation, d’autre besoins pourront naître d’où d’autres requêtes

et ceci pourra générer d’autres fragments ou déplacer ceux qui existaient, fragmentation

dynamique.

I.4.2. Allocation

Et à présent, après avoir fragmenté la base de données, c’est l’allocation qui s’en suit.

L’allocation, c’est cette étape où l’on affecte chaque fragment à un site du réseau. Les

données ou fragments assignés, peuvent être soit répliqués dans d’autres sites soit gardés

en un seul fragment dans un seul site. Ainsi on parle respectivement redondante et non-

redondante [6].

33

Son but, c’est de stocker les fragments de données plus proche, où ils peuvent être

fréquemment utilisés afin d’accroître la performance, et par conséquent de diminuer la

communication entre les sites. De fait, [6] montre que dans une base de données distribuée

bien conçue, nonante pourcent (90%) de données devraient être trouvées dans le site local

et dix pourcent (10%) seulement devraient être accédées dans un site distant.

Allocation dynamique

Les requêtes à l’origine de chaque site et grâce auxquelles sont affectée les premières

données (fragments) dans chaque site, ont été fixées ou réalisées sur base des besoins

initiaux ou de la connaissance du domaine, et pourtant comme dit tantôt d’autres besoins

peuvent surgir après et ainsi d’autres requêtes peuvent se réaliser, c’est sera alors la

fragmentation dynamique.

D’où comme la première fragmentation avait permis la première affectation de

fragments (allocation) et constituer donc le schéma d’allocation, la fragmentation

dynamique qui entraîne une nouvelle allocation, entrainera de même la modification du

schéma d’allocation : l’allocation dynamique, c'est-à-dire, les fragments peuvent se déplacer

d’un site à un autre d’où il est appelé.

[15] montre que la technique de l’allocation dynamique est une alternative à la

duplication (réplication) et s’avère la plus efficace dans le cas de multiples modifications.

Cliché (Snapshot)

Le cliché, c’est la technique de copie figée d’un fragment [15]. C'est-à-dire, ici, on

utilise une copie (image) d’un fragment d’un temps donné et qu’on ne va pas mettre à jour,

cette copie devient inutile au fil du temps. Ceci évite ce lourd travail de mettre à jour toutes

copies (fragments) correspondants dans les sites. On n’utilise cette technique pour les

données qui ne changent à chaque petit écart de temps, mais dont l’ancienneté de ses

valeurs n’entamera pas la réalité de choses.

34

I.4.3. Conception

Nous distinguons deux types de conception d’une base de données distribuée :

ascendante et descendante.

Conception ascendante

C’est de cette conception qui s’agit lorsqu’il est question de créer une nouvelle base de

données distribuée. On commence par définir un schéma conceptuel global de la BDD, puis

on distribue sur les différents sites en des schémas conceptuels locaux, par la technique de

fragmentation (cf. ci-haut).

Conception descendante

L’approche se base sur le fait que la répartition est déjà faite, mais il faut

réussir à intégrer les différentes BDs existantes en une seule BD globale. En d’autres termes,

les schémas conceptuels locaux existent et il faut réussir à les unifier dans un schéma

conceptuel global [15] [45].

35

[Chapitre II]

36

Chapitre II

Les Transactions Distribuées

Le SQL (Structured Querry Language) est un langage par excellence pour l’interrogation

d’une base de données ou mieux d’un serveur de base de données, et pourtant si vous

effectuez une série de requêtes, il y a beaucoup de risques que l’une d’entre elles échoue et

une autre réussisse, et sur ce, les informations dans la base de données courent le risque

d’incohérence. D’où il existe un concept : « transaction », qui lui permet d’encapsuler un

ensemble d’opérations sur la base de données pour former un seul tout ; cette manière de

faire qu’est la transaction a un effet très positive sur les données à tel enseigne qu’elle

garantit la stabilité et l’intégrité des informations, c.-à.- d lorsqu’ une transaction (qui est un

bloc ou ensemble) est exécutée, la validation ou l’annulation se fait d’un bloc et soit laisse la

base de donnée comme avant (stable) ou elle l’amène dans un autre état de stabilité.

Une transaction peut être locale, lorsqu’il s’agit d’une transaction en une phase et

aussi gérée directement par la base de données ou très simplement lorsqu’elle effectue des

opérations sur une seule ressource (une base de données, etc.), et distribuée lorsqu’elle

utilise de nombreuses ressources, [21], [37].

II.1. DEFINITIONS D’UNE TRANSACTION

Une transaction, c’est un ensemble de requêtes regroupés en une seule unité logique

de travail, qui pourra ensuite être, soit validée, soit annulée;

C’est une collection d’actions [28] qui transforment une base de données (ou un

fichier), depuis un état cohérent en un autre état cohérent [3]; il faut dire que la cohérence

de la base de données est assurée par le système et celle de la transaction par le

programmeur.

Figure 8 : une transaction dans une base de données cohérente

37

Modélisation d’une transaction

On peut modéliser une transaction comme une suite finie d’actions sur des objets

donnés [31] ;

Soit une transaction T, on a :

T = {Oi.Aj, | i = 1..n ; j = 1..p}

Où :

• i désigne un site visité par T

• Oi désigne un objet du site i

• Oi.Aj désigne une action j exécutée au sein de l'objet Oi

Les actions inhérentes à une transaction :

- Début_transaction : initialisation de la séquence transactionnelle

- Valider_transaction : terminaison de la séquence transactionnelle

- Annuler_transaction : arrêt de la transaction

- Lire (objet) : chargement d'une image de l'objet dans l'espace de travail

- Ecrire (objet) : sauvegarde d'une image de l'objet en mémoire secondaire

Note :

Transaction centralisée ou locale : les objets sont sur un seul site.

Transaction répartie ou distribuée : les objets (et les actions) sont sur plusieurs sites.

38

Exemple :

Réduire la commande (cde) N° 10 de 5 unités et les reporter à la cde 12

Transaction Report-qté

begin

exec sql UPDATE cde

SET qte = qté - 5

WHERE ncde = 10;

exec sql UPDATECde

SET qté = qté + 5

WHERE ncde = 12;

exec sql COMMIT WORK;

end.

Ce mécanisme d’encapsuler un ensemble de requêtes ou une collection d’actions ou

opérations en une seule entité qu’est donc la transaction garantit alors la cohérence des

données grâce à l’atomicité de la dite entité (transaction), c'est-à-dire s’il y a validation c’est

pour tout et de même pour l’annulation ; c’est « tout » ou « rien ».

Les opérations dans la transaction peuvent être soit de lecture soit d’écriture soit les

deux à la fois, et pourtant chaque transaction est marquée par un début (Begin Of

Transaction : BOT), et une fin (End Of Transaction : EOT) [45] et vérifie un ensemble de

propriétés représentées par l’acronyme ACID tiré de termes anglais suivants Atomicity,

Consistency, Isolation et Durability, dont elle bénéficie de la cohérence et de la fiabilité [45]

.

Voici comment se traduisent les termes ci-haut :

Atomicity : Atomaticité ;

Consistency : Cohérence ou Consistence

Isolation : Isolement [17] ou Isolation

Durabity : Durabilité

39

Voici ce que veut dire chacun de termes :

Atomicité : La séquence d’instructions est indivisible, c'est-à-dire toutes les requêtes exécutées dans le cadre de cette transaction sont validées en même temps ou aucune ne l’est (principe du tout ou rien). L’ensemble des opérations réalisées sont vues de l’extérieur comme une seule et même opération.

C’est le mécanisme de validation [31].

Il faut garantir qu'en cas de défaillance (processus avorté avant sa terminaison) :

- ou bien l'exécution est totale : l'ensemble des actions correspondant à la transaction est complètement effectué et amène la base jusqu'à un nouvel état.

- ou bien l'exécution n'a aucun effet sur les objets car l'exécution est impossible : toutes les modifications partielles engagées sont complètement annulées et l'on reste à l'ancienne version

Cohérence : la transaction ne viole pas les invariants du système, quand elle est validée, elle génère un nouvel état stable du système, ou si un problème survient, le système retourne dans l’état qui était considéré comme stable avant qu’elle n’ait commencé.

Une transaction correcte est celle qui est constante avec la sémantique de cohérence de l'ensemble des objets.

Isolement [17]: Une transaction, tant qu’elle n’a pas été validée reste isolée des autres transactions. Les autres transactions n’ont pas accès aux modifications effectuées par cette transaction ; plus clairement le résultat des actions intermédiaires (état temporairement incohérent) est masqué aux autres transactions.

C’est le mécanisme de contrôle d'accès concurrents.

L'isolation ou l’Isolement est cette propriété qui permet à un ensemble de transactions s'exécutant simultanément (concurremment dans le même environnement) d'apparaître comme s'exécutant de façon indépendante les unes des autres (sérialisabilité).

C'est le travail de contrôle de concurrence proprement dit.

40

Durabilité : Les données validées sont enregistrées telles quelles, même si un problème survient ou que le système redémarre. Les données sont disponibles dans un état correct et sont désormais permanents.

C’est le mécanisme de reprise après panne (recovery).

Les effets des opérations décidées (validées) définitivement doivent être durables (persistants) même en cas de défaillance (de processeurs ou de communication)

La fin d'une transaction est un point de non-retour.

C’est aussi le mécanisme de reprise après panne [31].

Lorsqu’une transaction a débuté, il y a lieu de constater trois cas : la validation,

l’annulation et l’interruption :

- Validation : appelée COMMIT ; la transaction a bien aboutit jusqu’à la fin et la base

de données enregistre les modifications;

- Annulation : appelée ROLLBACK, le mécanisme chargé de défaire les modifications

effectuées par la transaction ;

- Interruption : appelée ABORT

II.2. CLASSIFICATION DES TRANSACTIONS

On peut classer les transactions suivant plusieurs critères tels que la nature de

différentes opérations qui la composent, la durée qu’elle peut prendre [25] :

II.2.1. Suivant la nature de différentes opérations

Transaction de Lecture, Transaction d’Ecriture

Si une transaction contient au moins une opération qui effectue des modifications sur

les données de la base, la transaction est dite transaction d’écriture ou de mise à jour. Si

toutes les opérations ne font que des lectures sur les données de la base, la

transaction est dite transaction de lecture.

41

II.2.2. Suivant la durée

On-Line :OLTP, Batch : OLAP

Une transaction peut être classée on-line ou batch. Les transactions on-line,

communément appelées transactions courtes, sont caractérisées par un temps de

réponse relativement court (quelques secondes) et accèdent à une faible portion des

données. Les applications qui utilisent ce modèle de transaction sont dénommées

applications OLTP (On-line Transactional Processing) parmi lesquelles, nous avons les

applications bancaires, de réservation de billets, de gestion de stocks, etc. Les

transactions batch, appelées transactions longues, peuvent prendre plus de temps pour

s’exécuter (minutes, heures, jours) et manipulent une très grande quantité des

données. Les applications utilisant ce type de transactions sont les applications

décisionnelles ou OLAP (On-line Analytical Processing), de conception, de workflow, de

traitement d’image, etc.

II.3. MODELES DE TRANSACTIONS

Il en existe plusieurs, et en voici quelques uns selon [28]

II.3.1. Les Transactions Plates (Flat Transactions) :

C’est la plus simple de transactions, celle définie un peu plus haut. Une transaction

peut être soit interrompue par le programme l’exécutant (une Base de Données, par

exemple) soit à cause d’une défaillance externe, telle que le crash d’un système.

II.3.2. Les Transactions plates avec Points de Sauvegarde

(SAVEPOINTS) :

Une transaction peut donc être découpée en étapes, et après chaque étape on peut

insérer un point de sauvegarde (SAVEPOINT) donnant toujours cette possibilité de valider

(COMMIT) ou annuler (ROLLBACK) en partie ou en entièreté les modifications apportée par

la transaction à la fin de celle-ci [15] [22] [28].

42

Les SAVEPOINTS ont chacun un nom unique, garantissant que si jamais il y a

une interruption, les modifications déjà effectué et ayant déjà été marquée par un

SAVEPOINT persisteront [28].

II.3.3. Les Transactions Chainées (Chained Transactions) :

Ce sont une variante de SAVEPOINTS. Toutefois, plutôt que de marquer simplement un

point de cohérence d’où peut retourner une transaction, la commande de travail de la

chaine valide en fait le travail jusqu’à là. Il n’y a donc pas lieu de faire le ROLLBACK sur le

travail précédent. Toutefois, la transaction elle-même va survivre. Au cas où il y a un verrou

posé par la transaction, il va continuer ainsi jusqu’à la fin du travail. Le verrou sera relâché

seulement si toute la transaction a été validée.

II.3.4. Les Transactions Imbriquées ou Emboitées (Nested

Transactions)

[Définitions]

> Une transaction imbriquée est composée d’une hiérarchie de sous-transactions

ou un arbre de transaction [28].

Début de la nouvelle

Transaction

Fin Transaction

précédente

ROLLBACK

COMMIT

DATABASE

INSERT UPDATE DELETE

SAVEPOINT N1 SAVEPOINT N2

Début

Transaction

Fin

Transaction

Figure 9 : Transaction plates avec SAVEPOINTS [22]

43

Figure 10 : Arbre de Transactions et sous-Transactions

L’arbre de Transactions ; une transaction peut avoir n’importe quel nombre de sous-

transactions, lesquelles peuvent aussi être composées de n’importe quel nombre de sous-

transactions, ainsi se résulte une transaction imbriquée.

La transaction racine est appelée Top-Level Transaction (le niveau le plus supérieur)

car elle n’a pas un autre nœud de transaction auquel elle est liée ; les transactions ayant des

sous-transactions sont appelées des parents (des mères) et les sous-transactions des enfants

(des filles), les filles d’une même mère sont des sœurs. On parle ainsi des descendants (en

partant de la racine vers les enfants) et des ancêtres (inversement). Et les transactions et les

sous-transactions, elles sont toutes des transactions.

On appelle filles ou feuilles des transactions qui n’ont plus d’autres sous-transactions

et ces dernières sont des transactions plates.

> Une sous-transaction est une unité de reprise.

- L'abandon d'une sous-transaction implique l'abandon de ses descendants

mais pas de ses ancêtres.

> Une sous-transaction est une unité d'exécution indépendante

- Isolation des sous-transactions s'exécutant en parallèle

- Les sous-transactions peuvent s'exécuter sur le même site ou sur des sites

différents

> Les transactions sont ACID alors que les sous-transactions sont AI

(Atomicity, Isolation)

> Les feuilles de l’arbre de transaction sont des transactions plates (flat

transactions) [28].

44

(*) Une transaction parent peut passer son verrou à une transaction enfant. Une sous-

transaction peut être validée (COMMIT) ou être interrompue n’importe quand, et dans ce

cas tout verrou possédé par une sous-transaction passe au parent. Tous les verrous sont

relâchés seulement quand la transaction racine a été validée.

[Objectifs]

> Obtenir un mécanisme de reprise multi-niveaux

> Permettre de reprendre des parties logiques de transactions

> Faciliter l'exécution parallèle de sous-transactions

[Règles d’Isolation]

Quelque notions déjà énoncée précédemment au (*)

> (R1) Seules les transactions feuilles accèdent aux ressources partagées (ex:

base de données)

> (R2) Quand une sous-transaction valide, ses ressources sont héritées par sa

mère

> (R3) Quand une sous-transaction abandonne, ses ressources sont relâchées

> (R4) Une sous-transaction ne peut accéder une ressource que si elle est libre

ou détenue par un ancêtre

[Atomicité et Durabilité]

Comme aussi dit tant tôt ;

> (R1) Quand une sous-transaction valide, ses effets sont hérités par sa

mère

> (R2) Quand une sous-transaction abandonne, ses effets sont abandonnés

> (R3) Quand la transaction racine valide, ses effets sont installés dans la

base

45

Illustration

Figure 11 : Validation et Abandon de Sous-Transactions

Veuillons donc voir les règles de [Atomicité et Durabilité] dans cette illustration.

Ici, nous avons la transaction T1 qui a deux sous-transactions T11 et T12

- A l’état initial, X=0 ;

- Et après T11 le modifie, X :=X+1, d’où X=1 ;

- Alors, T11 valide ses modifications selon (R1), mais comme tous les traitements de

l’arbre de transactions ne sont pas finis alors, X=0;

- Et au tour de T12 de faire les modifications, X=X+1, d’où X=2, mais X=0 ;

- Mais T12 vient à abandonner ses modifications selon (R2) ;

- Et en fin quand T1 valide, selon (R3), X=1 conformément à tout ce qui précède.

II.3.5. Transactions Compensatrices

Les Transactions Compensatrices sont des transactions qui sont à la fin des

Transactions proprement dite et qui s’exécutent en cas de panne de paire de

transactions qu’elles doivent compenser.

46

Figure 12 : Transactions compensatrices

II.3.6. Les Transactions Longues

Comme montré au point (2), les transactions Batch sont un exemple de transactions

longues qui peuvent contenir un millier de mises-à-jour et durent beaucoup d’heures. Cela

peut devenir une situation intolérable.

Une solution existe, c’est celle de découper le travail du batch en mini-batch travaillant

sur les données avec un même attribut, tel qu’une collection de clés [28].

Malgré cette solution, elle n’est pas la parfaite du fait que l’atomicité de toute la

transaction ne peut pas être maintenue.

II.3.7. Les transactions Distribuées

Nous l’avons aussi déjà dit tant tôt, les transactions distribuées sont celles qui doivent

s’exécuter à travers un réseau de bases de données. Elles sont similaires aux transactions

imbriquées. Toutefois, l’arbre de transaction pour une transaction imbriquée dépend de

l’application, pendant que l’arbre pour une transaction distribuée dépend de données. Les

transactions distribuées sont essentiellement des transactions plates (flat transactions).

Toutefois, si les données sont hébergées dans une base de données distante doivent être

mises à jour, alors une sous-transaction débute sur cette base de données. Le bloc de sous-

transaction est l’ensemble d’opérations sur la base de données. Au moment du COMMIT, la

transaction parent (mère) interroge toutes ses sous-transactions pour s’assurer qu’elles sont

toutes prêtes pour les COMMITS avant d’entamer la commande d’un COMMIT. Si une ou

plus d’une transaction peut ne pas faire le COMMIT, alors la transaction connait un ABORT

Nous en parlons encore en abondance et en vif dans la suite avec le modèle OSI à

l’appui.

47

II.4. LA JOURNALISATION ET LA REPRISE DES

TRANSACTIONS

II.4.1. Journalisation

C’est la technique appliquée pour prévenir les pannes, toutes les modifications

apportées à la Base de Données sont écrites dans un fichier journal appelé Log.

Chaque fois qu’il y a écriture au niveau de la base de données, il y a aussi une autre y

correspondant dans un support sûr (log) ;

Le journal de transaction est le pilier de la reprise consistante [28] et la terminaison

d’une action atomique interrompue par une panne.

On distingue donc [30]:

- Le Journal des images avant

- Le Journal des images après

Pour chaque donnée dans la base.

Le journal de transaction peut grossir et se remplir avec le temps, mais c’est le

Gestionnaire de Journaux (Log Manager) qui permet de :

- L’archivage de journaux

- D’apprêter (vider) le journal pour une prochaine utilisation après qu’il soit remplit

- Et il fournit au Gestionnaire de Transactions et de Données une interface publique au

journal, et ce pour la reprise, vu que ce dernier fournit des informations nécessaires

pour restaurer une base de données endommagée à son dernier état cohérent [28].

(a) Le Journal des images avant

Il contient les débuts de transactions, les valeurs d'enregistrement avant mises à

jour, les fins de transactions (COMMIT ou ABORT)

Il permet donc de défaire (UNDO) les mises à jour effectuées par une transaction

48

Figure 13 : L’UNDO d’une mise-à-jour [30].

Toute mise à jour doit être précédée d'une écriture dans le journal des images avant

Avant tout, signalons que ce journal est utilisé pour défaire les actions d’une

transaction lorsqu’un site participant (cfr Protocole à Deux Phases, un peu plus loin) tome en

panne avant la validation (globale) de celle-ci.

Chaque fois quand une transaction démarre, il y a deux pages qui se lancent aussi :

page lue et page modifié (en mémoire cache).

- Page lue, contient l’ancienne valeur ou mieux pointe son adresse dans le journal

- Page modifiée, contient la valeur modifiée. Et c’est elle modifie vraiment la base de

donnée.

Alors, pour défaire, la base de données lire (READ) dans la page lue (1), et celle-ci

récupère l’ancienne value du journal (2), et apporte une modification la page modifiée avec

cette valeur (3) et enfin la page modifiée écrit dans la base de données (4) et cette dernière

revient à son état initial.

(b) Le Journal des images après

Il contient les débuts de transactions, les valeurs d'enregistrement après mises à

jour, les fins de transactions (COMMIT ou ABORT)

Il permet également de refaire (REDO) les mises à jour effectuées par une

transaction

49

Figure 14 : Le REDO d’une mise-à-jour [30].

Toute validation de transaction doit être précédée de l'écriture de son journal

d'images après sur un disque différent de celui contenant la base de données.

Pareillement avec la méthode de page ombre [52], lorsqu’il y a validation la page

modifié devient la page lue ;

Alors, pour défaire, la base de données lire (READ) dans la page lue (1), et celle-ci

rapporte une modification la page modifiée avec les dernières valeurs de la transaction (2),

et la page modifiée prend toutes informations de la transaction (validation, etc.) du journal

(3) et enfin la page modifiée écrit dans la base de données (4) et ainsi les mêmes mises-à-

jour sont de nouveau apportées à la base de données.

Note :

[30] et [28] montrent qu’il existe deux autres type de journaux, à savoir Logique et physique

• Journal physique:

* On enregistre la valeur avant et après modification

* La structure peut être : IdTrans, NumPageDisk, Adresse, Valeur

* Pour défaire, on écrase la valeur actuelle avec les valeurs avant

* Pour refaire, on écrase la valeur actuelle avec les valeurs après

50

• Journal Logique

+ On enregistre l’action logique qui a entraîné la modification

+ La structure peut être : IdTrans, IdObjet, IdActions, Arguments

+ Exemple: Ajouter 500 au tuple xxx

+ pour refaire, on ré-applique l’action logique

II.4.2. Reprise

On a vu que lorsqu’une transaction se déroulait, elle pouvait subir une interruption

(ABORT), et cela est dû principalement à une panne ou défaillance.

A la reprise (après une défaillance), le système transactionnel parcourt le journal pour

analyser l'état des transactions interrompues au moment de l'incident.

(a) Différent types de pannes (défaillances)

> Abandon d’une Transaction

Dû souvent à un problème d’accès concurrent [44].

> Panne Système

Dû à un arrêt brutal des travaux, d’où une perte de contenu de la RAM ou une

défaillance matérielle ou logicielle d'un système local ou du système de

communication

> Panne du support de reprise

(b) Traitement de reprise

Respectivement pour les deux dernier cas de pannes, on y remédie avec une reprise à

chaud et une reprise à froid.

> Reprise à chaud

+ Défaire les actions des transactions interrompues sur les sites en

fonctionnement

+ Redémarrer le site interrompu (ou reconnexion en cas de panne réseau)

+ Défaire les actions des transactions sur le site reconnecté

+ Ré-exécuter les transactions

> Reprise à froid

+ Restaurer la mémoire secondaire dans un état cohérent à l'aide d'une image

sauvegardée antérieurement (grâce au CHECKPOINT)

+ Refaire les actions des transactions perdues à cause de la défaillance

Toutes ces reprises se font grâce aux points de reprise (CHECKPOINTS) créés bien avant.

51

(c) Le Point de Reprise (CHECKPOINT)

Ce point se réalise après un état cohérent de la base de données provoqué par une

mise-à-jour et aussi après une sauvegarde ; il permet ainsi de situer une transaction

effectuée et ses actions soit pour un UNDO ou un REDO après une défaillance.

II.5. TRANSACTION DISTRIBUEE ET LE MODELE OSI

Avant d’entrer dans le vif de ce point, nous aimerions lui faire un préambule axé sur le

système transactionnel, qui est le système dans lequel ou mieux entre lesquels les

transactions se déroulent.

II.5.1. Le Système Transactionnel

L’objectif principal de ce système, c’est le traitement transactionnel soit OLTP à savoir

On-Line Transaction Processing, qui est un mode d’organisation d’une application

informatique qui permet à un grand nombre d’utilisateurs de soumettre, via leurs

terminaux, des transactions à un système qui doit les traiter le plus vite possible et

répercuter les effets sur une grande base de données [1].

En voici l’architecture :

Poste Client

Machine Serveur

Figure 15 : Architecture du système transactionnel [31]

52

Termes inhérents au système transactionnel :

+ Programme d’Application :

Celui-ci définit les limites de transactions et spécifie les actions que constitue une

transaction.

+ Gestionnaire de transactions :

C’est lui qui est chargé de fournir les informations nécessaires pour une reprise

donnée ;

Il reçoit d’une application donnée les commandes de BEGIN, COMMIT et ABORT et le

transmet au Gestionnaire de données approprié.

C’est lui donc qui garantie la propriété ACID d’une transaction.

Enfin s’appuyant sur le journal de transactions, le Gestionnaire de Transactions a

plusieurs autres tâches telles que : le ROLLBACK des transactions, le redémarrage du

Gestionnaire de données et du système global (de tous les gestionnaires de données), etc.

[28].

+ Gestionnaire de données :

Le Gestionnaire permet ainsi les mises-à-jour et les lectures des données ; il est chargé

d’écrire dans le journal d’image avant et après de données à toute modification.

Note : Le Système Global (les deux gestionnaires) permet donc d’assurer l’intégrité

transactionnelle de données modifiées [1].

+ Moniteur Transactionnel :

Il permet la communication et la mise en relation de processus client et serveur et

cette communication reste transparente (pour le processus et pour les medias).

Il permet aussi de gérer les transactions (du point de vue respect de la propriété ACID),

dans un contexte, éventuellement distribué, mettant en jeu plusieurs Gestionnaire de

données.

Il faut donc dire que le SGBD et le moniteur reste indissociable pour un système OLTP

[1], car ce dernier offre une interface programmatique et des outils de supervision qui

facilite le rôle des développeurs des applications et des administrateurs.

53

II.5.2. Le Modèle OSI pour les Transactions Distribuées

L’organisation de Standardisation Internationale (ISO : International Standard

Organisation) a mise en place une norme OSI TP (Open System Interconnect Transactions

Processing) dont le standard axe sur les trois points principaux suivant le modèle, le service

et le protocole de spécification pour les transactions distribuées.

Tous ces concepts sont mieux explicités dans les documents du standard dont les

références sont [26] ; Nous n’allons pourtant juste que présenter ici les notions

nécessaires.

(a) Modèle

C’est aussi appelé OSI DTP Reference Model (DTP : Distributed TP).

(1) Association

Lorsque deux systèmes ouverts doivent prendre part dans un même traitement distribué, ils ont besoin d’être mise en connexion ; et c’est cette dernière qu’on appelle Association ; c’est l’ACSE (Association Control Service Element ; Partie de la couche 7 OSI - application permettant de faire communiquer deux entités [2]) qui est chargé de l’établir.

(2) Architecture, Dialogue et Arbre

[-Architecture transactionnelle-]

La figure ci-dessous illustre l’architecture transactionnelle de trois nœuds X, Y et Z

S

A

O

S

A

O

MACFO

TPPM

S

A

O

TPPM

TPSU TPSU

S

A

O

TPPM

TPSU

NŒUD_X NŒUD_Y NŒUD_Z

Figure 16 : Architecture Transactionnelle [46]

54

TPPM (TP Protocol Machine) : c’est un système ouvert [26] ; il fournit le service OSI TP et en

outre est un représentant local de l’application répartie appelé TPSU (TP Service User).

SAO (Single Association Objects) : c’est un ensemble de modules que constitue aussi une

entité de TPPM. Il a pour but la gestion de la communication sur une association avec un

nœud voisin.

MACF (Multiple Association Control Function) : mis à part le SAO, le MACF est aussi une

entité qui constitue un TPPM. il a pour but la coordination entre tous les SAOs.

[-Dialogue-]

On appelle Dialogue, une relation peer-to-peer entre deux TP Service Users qui

communiquent après des invocations (appels) entre eux ou carrément entre deux TPSUIs

(TPSU Invocation). Lorsqu’il y a établissement de dialogue, alors les deux participants

peuvent communiquer pour se transférer des données, notifier des erreurs, initier ou

achever une transaction, terminer un dialogue, ou synchroniser les activités.

Et comme l’illustre aussi la figure juste ci-dessus, voici un exemple de dialogue entre

TPSUI A et B :

Il faut dire que chaque fois qu’il y a dialogue, il y a immanquablement un initiateur et

un répondant, dont respectivement l’un est un supérieur et l’autre un subordonné. Et même

si le dialogue fait intervenir plus d’une association de TP (TP Association), il reste un concept

logique et en même temps en est indépendant.

TPSUI A

TPPM

TPSUI B

TPPM

Figure 17 : Modèle de Dialogue dans OSI TP

55

[-Arbre de Dialogue et de Transaction -]

De par des invocations des différents TP Service Users, nous avons déjà un Arbre de

dialogue dont les nœuds sont ces dernières et les arcs les dialogues. Cet arbre de dialogue

représente une topologie de la communication des systèmes ouverts participants dans le

traitement distribué.

Et comme une transaction distribuée (répartie) est celle qui enjambe beaucoup de

ressources (dans différents nœuds ou sites) ; une partie d’elle est exécuté par un couple de

TP Service Users comme ils sont en dialogue. Chaque partie est une branche de la dite

transaction distribuée.

Un arbre de Transactions est tout similaire à celui de Dialogue, sauf qu’ici les arcs sont

les branches de transactions ; ce qui est logique.

On distingue dans cet arbre trois types de nœuds : la racine, les intermédiaires et les

feuilles ; la racine est l’invocation du TPSU qui n’a pas un nœud supérieur et les feuilles sont

ceux qui n’ont aucun nœud subordonné. Un nœud un sous-arbre de transactions qui

respecte les même règles énoncées juste ci-haut. (Cette notion d’arbre de transaction est

aussi vue un peu ci-haut avec les transactions imbriquées).

Racine

Intermédiaire Feuille

Feuille

Intermédiaire

Figure 18 : Arbre de Transactions

56

(b) Services et Protocole

Pour établir et libérer les associations, le TPPM ou la machine protocolaire utilise l’ASE

(Application Service Element [2] [1]) de l’ACSE.

Le TPPM joue ce rôle de fournir les services pour assurer la propriété ACID, alors pour

ce fait lorsqu’une TPSUI veut établir un dialogue, il doit le spécifier.

Les services sont regroupés en unité fonctionnelles [1], dont nous avons :

+ Le noyau :

C’est l’unité fonctionnelle chargée de dialogues entres les TPSUIs, elle

comprend donc les services pour ouvrir, terminer, interrompre, refuser

l’ouverture d’un dialogue et de traiter les erreurs.

+ Le contrôle partagé :

C’est l’unité fonctionnelle qui permet les TPSUIs et leur assure un contrôle de

leurs dialogues de façon cohérente.

+ Le contrôle polarisé :

Pareille que l’unité précédente, sauf qu’ici, à un instant donné une seule

TPSUI possède le contrôle.

+ La synchronisation :

C’est l’unité fonctionnelle qui permet aux TPSUIs de synchroniser leur

traitement, c'est-à-dire avoir la possibilité de vérifier qu’ils ont atteint un

point de traitement convenu.

+ Le Commit :

C’est l’unité fonctionnelle qui rend possible la validation (COMMIT) fiable ou

le retour (ROLLBACK) des transactions.

Le commit ou la coordination, assure la phase terminale de la transaction

pour la validation à deux phase.

Note [20] [1]:

* L’unité fonctionnelle de Contrôle partagé et polarisé sont mutuellement exclusive

pour un dialogue.

* La validation à deux phases, dont nous allons parler prochainement mais en long et

en large, comprend donc l’arbre de transaction, la journalisation, la gestion de

données liées et le pilotage de CCR (Committment, Concurrency and Recovery :

protocole de validation et de reprise de transactions [26]) ; nous l’allons montrer

dans la suite.

57

II.6. GESTION ET CONTROLE DE CONCURRENCE DE

TRANSACTIONS (REPARTIE)

La mise au point de l’utilisation de transactions, comme dit tant tôt, avait pour but,

aussi palliatif soit-il, de garantir la cohérence ou la consistance de données. L’intégrité de

données. Et une transaction atomique et cohérence ne met en cause aucunement l’intégrité

des données. Ce sont d’ailleurs les deux propriétés qui distinguent les transactions de

n'importe quelle séquence d'actions - éventuellement réduite à une seule - sur la BD.

Tout tourne autour de la terminaison de la transaction, afin que celle respectant la

propriété d’ACID, arrive aussi à maintenir la base de données cohérente. D’où la gestion de

transactions est capitale, et reprend celle de ce deux point :

* La cohérence ou la consistance de données (contrôle de cohérence de données) :

La définition de la cohérence résulte de la sémantique de l’application, c’est l’ensemble

de techniques mises en œuvre pour assurer la validité du système informatique par

rapport au monde réel qu’il modélise.

Mais, le contrôle de cohérence nécessite deux mécanismes de contrôle [46]:

+ Un contrôle de concurrence :

Pour l’accès à des données locales communes à des processus d’applications

réparties différentes.

+ Un contrôle de synchronisation

Dans les modifications effectuées, à la fin de chaque étape, par différents

processus d’une application répartie.

* La concurrence de données (contrôle de concurrence de données) :

La concurrence, c’est cette possibilité que donne un SGBDR (Système Gestion de Base

de Données Réparti) multiutilisateur de permettre un accès simultané de transactions dans

une base de données ; c’est d’ailleurs une qualité pour un SGBDR. La concurrence a pour but

d’améliorer le système et le temps de réponse, permettre différentes transactions d’accéder

dans différentes parties de la base de données. Et pourtant si elle n’est pas contrôlée elle

provoque une incohérence ou inconsistance de données.

58

II.6.1. La cohérence de données

Pour terminer une transaction, il faut décider de son issue : la validation (COMMIT) ou

l’annulation (ROLLBACK) [50] ; La validation rend les modifications définitives ; l’annulation

ramène les processus à leur état avant transaction (propriété d’atomicité). Et comme les

transactions distribuées, ce dont même nous parlons dans notre travail, concernent

plusieurs ressources, sa validation (COMMIT) est assurée par des protocoles de validation

qui sont des algorithmes pour assurer l’atomicité d’une transaction distribué et ils sont

utilisés dans un SGBDR (Système de Gestion de Base de Données Réparti) pour montrer un

comportement bien-défini de chacun de sites, particulièrement pour le COMMIT et le

ROLLBACK des transactions [32].

Nous en citons deux, que nous allons développer dans ce travail :

> Validation en deux phases : dite bloquante, car une transaction peut rester bloqué

suite à la panne du coordinateur (l’initiateur du dialogue, la racine [26]).

> Validation en trois phases : dite non-bloquante.

(a) Règles générales d’un protocole de validation

> Le coordinateur valide la transaction, si inévitablement tous les sites participants

valident ;

> Sinon il annule ;

> Tout site en bon état, coordinateur ou participant, peut éventuellement décider de

valider ou d’annuler ;

> Il ne suffit qu’un site, alors n’importe le quel, décide de valider ou annuler, alors plus

un autre ne décidera autrement.

(b) Point de validation : COMMIT POINT

Chaque fois quand une transaction doit s’exécuter, le SGBD désigne un site afin

qu’il soit le point de commit avec un rôle aussi précis que de lancer le COMMIT ou

ROLLBACK selon que lui ordonne le coordinateur global.

Le critère de sélection d’un site en tant que point de commit est le suivant :

> Le site ne doit pas être en lecture, c.-a.-d. il doit pouvoir modifier ses données

locales pendant une transaction

En cas de plus d’un site correspondant au critère, le coordinateur fait un choix au

hasard ; car tous les sites ont la même chance de sélection.

59

En cas d’échec de la phase de préparation par le coordinateur, aucun point n’est

désigné et le coordinateur lance un ROLLBACK.

Le point de commit est un site distingué des autres, on a :

+ Il n’entre jamais en phase de préparation ;

+ Il stocke des données importantes, qui restent jamais incertaines même quand il

y a panne (fiabilité);

+ Il stocke les informations sur le statut de la transaction

(c) Protocole de Validation en Deux Phases : 2-PC

Nous avons deux types de nœuds ou sites dans une validation en Deux phases, le

Coordinateur et le Participant. Le coordinateur est celui qui a pour but de lancer, découper

en sous transaction les transactions qui seront exécutées sur les sites restant [22] [15] et

coordonner la terminaison de ces transactions. C’est donc un serveur auquel les autres sites

dits clients se connecte lorsqu’ ils veulent effectuer une transaction.

Voici ci-dessous, deux automates à états finis non déterministes (AEFND) (aussi bien

défini dans [39]) modélisant les actions du coordinateur et du participant :

[Etats]

- q1, q2 : des états initiaux

- a1, a2, c1, c2 : des étaux finaux, respectivement « a » pour ABORT et « c » pour

COMMIT

- w1 : état intermédiaire, w pour WAIT (Lorsque le coordinateur attend les réponses

des participant)

- p2 : état intermédiaire, p pour PRE-COMMIT (du participant)

[Transitions]

Exemple : 𝑋𝑎𝑐𝑡−𝑟𝑒𝑞𝑢𝑒𝑠𝑡

𝑆𝑡𝑎𝑟𝑡_𝑋𝑎𝑐𝑡 ;

Le message au dessus de la ligne, c’est celui qui est reçu et en dessous est celui qui est

envoyé entre le coordinateur et les participants.

60

Figure 19 : Les actions du Protocole de Validation en Deux Phases [32]

Le principe du protocole de validation en deux phases [46] [32] [20] est le suivant :

- La phase 1 :

C’est la phase de préparation ou de consensus entre tous les sites participant à la

validation des effets de la transaction, alors ces derniers peuvent voter oui ou non (yes ou

no), comme le montre la figure juste ci-dessus.

Une fois le consensus établi, c'est-à-dire tous les sites participants ont voté « yes »

(PRE-COMMIT) et le renvoie au coordinateur, alors il lance la deuxième phase pour le

COMMIT.

Si, par contre, même un seul site vote « no », il n’y a donc pas consensus et le

coordinateur ordonne alors à tous les sites pour le ROLLBACK.

- La phase 2 :

Ici, tous les sites participant à la transaction valident ou annulent simultanément selon

qu’ils ont reçu le message de COMMIT ou ROLLBACK

Explication de la figure ci-dessus

Le coordinateur reçoit (de l’application) Xact_request en « q1 » c'est-à-dire une

requête de transaction et l’envoie (Start_Xact) aux participant en « q2 », et de là le

participant peut soit l’exécuter et renvoyer « yes » pour passer en état « p2 » : PRE-COMMIT

(près pour le COMMIT) ou soit carrément renvoyer « no » et passer en « a2 » : ABORT. Et

c’était donc la première phase. Et la deuxième phase débute en « w1 » d’où le coordinateur

attendait les réponses des participants ; s’il reçoit « yes », alors de manière non-

déterministe, il renvoie « commit » ou « abort » aux participants pour valider ou annuler

simultanément et ils le reçoivent en « p2 » et peuvent ainsi achever cette action finales.

61

Note :

- Yes = Oui = Prêt

- No = Non = Abandon

Cas favorable de la validation (normale) à Deux Phases (Illustration)

Figure 20 : Validation normale [15] [22] [40]

Ici, tous les participants ont voté prêt ou oui et ainsi ensemble avec le coordinateur, ils

font une validation globale simultanément.

Validation en deux phases face aux pannes

L’efficacité de ce protocole réside dans l’utilisation des journaux [46], qui ne perdent

pas d’information. Lorsqu’il y a une panne, probablement de sites qui sont silencieux ou de

communication (plus de ligne de transmission), le mécanisme de reprise sera fait sur base

des informations des journaux de transaction.

Par exemple, dans le cas d’une panne de communication, le participant qui est prêt

reste bloqué puisqu’il ne peut pas communiquer avec son coordinateur et par conséquent

ne peut savoir sa dernière décision. On dit qu’il est dans un état incertain ou de doute.

Que faire en cas de doute ?

Le participant doit émettre des requêtes [46] auprès des autres pour savoir la décision

finale. Ou forcer la transaction locale à l’état ABORT ou COMMIT et puis l’ignorer.

62

> Quelques cas de panne : cas défavorable (Illustration)

Panne d’un participant avant d’être prêt

Figure 21 : Panne d’un participant avant d’être prêt [15] [22] [40]

Dans ce cas, le participant P2 tombe en panne avant de voter yes ou no pendant que

P1 vote yes et le renvoie au coordinateur ; et à cause de ça il y a un timeout (temps de

réponse imparti expiré) et le coordinateur commande, selon le principe de la validation à

deux phases, d’abandonner (annuler).

Panne d’un participant après s’être déclaré prêt

Figure 22 : Panne d’un participant après s’être déclaré prêt [15] [22] [40]

63

Ici, tout se passe bien jusqu’au consentement des participant (prêt), mais juste après le

participant P2 tombe en panne et quand le coordinateur envoie la commande de valider,

elle le trouve ainsi. L’autre la reçoit et l’exécute et c’en est fini avec lui ; mais lui attendra

que qu’il y ait reprise et alors il va valider.

Panne du Coordinateur

Figure 23 : Panne du coordinateur [15] [40]

Bien que garantissant la convergence des acteurs vers un même état (COMMIT ou

ABORT), Et il est plausiblement clair que le défaut le plus notoire de ce protocole, c’est le

blocage. Pour cela, il ne suffit que le coordinateur tombe en panne après émission du

message PREPARE (Xact_start), tout participant ayant voté prêt (yes) est alors bloqué

(TIME-OUT).

D’où le protocole de validation en trois phases.

En outre, ce protocole menace aussi l’inconsistance d’états [32] et pour Dale Skeen et

Michael Stonebraker [12], un état est dit inconsistant lorsque son vecteur d’état global

contient à la fois les états COMMIT et ABORT. Un exemple pour le participant qui est déjà à

l’état de PRE-COMMIT « p2 ».

Proposition OSI pour le protocole de validation en deux phases

Pour le cas de ce protocole, OSI TP [26] veut qu’il soit modélisé dans une structure

hiérarchique. C'est-à-dire la racine, c’est le coordinateur ou l’initiateur de la transaction.

Chaque site ou nœud a cette possibilité de signaler ses voisins l’annulation de son

processus : annulation unilatérale ou le « Presumed Rollback » [46], en cas des opérations

anormales.

64

(d) Protocole de Validation en Trois Phases : 3-PC

A la différence du précédent, celui-ci est non bloquant où on a :

+ Préparation ou consensus

+ Préparation pour la validation (PREPARE TO COMMIT)

+ Global COMMIT

+ Global ABORT

Et plus clairement [12] montre qu’un état PRE-COMMIT « p1 » est ajouté au

coordinateur ne pouvant être atteint que si tous les participants ont voté pour le COMMIT :

« yes ». Mais lorsqu’il y a panne d’un participant après que le coordinateur ait atteint le PRE-

COMMIT « p1 », le coordinateur n’a qu’une seule option c’est annuler (ABORT) : TIME-OUT ;

sinon la transaction aboutit alors et les participant renvoient un acquittement (ACK).

Figure 24 : TIME-OUT et panne dans le protocole de validation en trois phases [32]

Ce protocole assure toujours un COMMIT global même lorsque le coordinateur étant

déjà au PRE-COMMIT (« p2 ») tombe en panne et il y a lieu d’une élection d’un nouveau

coordinateur.

Ce protocole aurait résolu le problème de blocage et pourtant ne reste pas parfait à

tout égard ; son seul problème c’est quand il y a plusieurs pannes de sites.

65

II.6.2. Concurrence d’accès de données

Une exécution concurrente non-contrôlée des plusieurs transactions peut amener des

incohérences ; par exemple lorsque des données liées par une contrainte d’intégrité sont

mises à jour par deux transactions dans des ordres différents de sorte à violer la contrainte.

La figure ci-dessous l’illustre très bien :

Figure 25 : Exécution non contrôlée des transactions concurrentes

De cette figure, se révèle un problème, c’est celui d’interférence ; [45] montre que ce

problème se résume en deux cas :

+ Interférences entre écrivains, Transactions d’écriture

+ Interférences entre lecteurs et écrivains, Transactions de lecture et d’écriture

66

(a) Interférences entre écrivains

Perte d’opérations (Lost Update)

Ici, la mise à jour faite par une première Transaction est perdue

Exemple :

TEMPS

READ A

t1

X = A + 1

WRITE A = X

t3

TRANSACTION_1

t2 READ A

Y = A * 7

t4 WRITE A = Y

TRANSACTION_2

Figure 26 : Perte d’opérations

67

Ecriture inconsistante ou sale (Dirty Write)

Une Transaction T1 lit une valeur V et la modifie, et la Transaction T2 lit l’actuelle

valeur V et la modifie à partir de là ; mais après ça la Transaction T1 vient à s’annuler

(ROLLBACK) et voilà que la dernière valeur modifiée par T2 n’a plus de sens.

L’écriture inconsistante ou sale, c’est tout simplement celle à partir d’une valeur

temporaire des données.

Exemple :

Initialement, C le crédit d’un compte est < 500. Une première transaction modifie le

crédit C d'un compte. Une deuxième lit C dans ce nouvel état, puis, constatant que la

provision est suffisante, modifie le débit D du compte. Après annulation de la 1ére

transaction, la contrainte d'intégrité D ≤ C n’est plus vérifiée.

TEMPS

READ C

C = C + 1000

WRITE C

t1

TRANSACTION_1

t2

READ A

t3 IF C > 500 THEN

D = D + 500

WRITE D

TRANSACTION_2

Figure 27 : Ecriture inconsistante

68

(b) Interférence entre Lecteur et Ecrivain

Lecture Inconsistante ou sale (Dirty Read)

Une transaction T2 lit une valeur V donnée par une transaction T1. Ensuite la

transaction T1 annule son affectation (ROLLBACK) et valeur lue par T2 est donc fausse.

La Lecture inconsistante ou sale, c’est tout simplement celle d’une valeur temporaire

des données, et non persistante.

Exemple :

La première transaction a pour but de faire un virement entre deux comptes A et B, qui

satisfait la contrainte d'intégrité "somme A+B invariante". La deuxième transaction lit A

et B juste après que la 1ére transaction ait déduit 1000 de A. Elle trouve A+B diminué.

TEMPS

READ A

A = A - 1000

WRITE A

t1

READ B

B = B + 1000

WRITE B

t3

COMMIT t4

TRANSACTION_1

t2

READ A

READ B

TRANSACTION_2

Figure 28 : Lecture sale

69

Lecture non-reproductible (Non-Repeatable Read)

Une transaction lit 2 fois une même valeur et ne trouve pas la même valeur 2

fois puisqu’elle est modifiée par une autre transaction entre les lectures.

Exemple :

Une première transaction consulte les places libres dans un avion et laisse un temps de

réflexion à l'utilisateur. Entre temps, une deuxième transaction, qui voit les mêmes

places libres, valide deux réservations. La 1ère demande à nouveau les places libres: la liste

est diminuée alors qu'elle n'a pas encore choisi ses réservations!

TEMPS

READ P

t1

READ P

t3

READ P

TRANSACTION_1

t2 READ P

P = P-2

WRITE P

T4 COMMIT

TRANSACTION_2

Figure 29 : Lecture non-reproductible

70

Lecture Fantôme (Phantom Read)

C’est presqu’identique au cas précédent, une transaction ajoute des données sans que

les autres s’en aperçoivent ; Il n'y a pas alors de conflit à proprement parler mais seulement

interrogation sur la validité de ces "apparitions fantômes".

Tous ces cas d’interférence ci-haut cités violent la propriété d’Isolation (Isolement [17])

d’une transaction, car c’est elle qui maintient le contrôle de la concurrence.

L’Isolation (Isolement [17]) d’une transaction est appelée sous plusieurs noms tels que

la consistance, le contrôle de concurrence (le problème), la sérialisabilité (la théorie), et le

verrouillage (la solution) [28].

(c) Contrôle de concurrence

Le contrôle de concurrence est la solution appropriée à cette dernière, il se réalise par

l’entremise des algorithmes dont selon [4] la plupart revient parmi ces trois classes

fondamentales : Verrouillage, Estampillage et la certification (ou les algorithmes

optimistes).

Mais en gros, nous avons deux classes de bases : Verrouillage et Estampillage, dont

nous allons parler dans cette section, car la certification n’utilise rien d’autre que

l’estampillage [4].

Le contrôle de concurrence, c’est tout simplement la sérialisabilité, cette propriété

que possède les SGBDs de contrôler l’exécution simultanée des transactions afin qu’elles

produisent les mêmes résultats qu’une exécution séquentielle. Et d’ailleurs, tous ses

algorithmes vont dans ce sens.

(1) Le Verrouillage

C’est la voie la plus utilisé pour implémenter la sérialisation des transactions. Il

consiste à mettre de verrou sur des données où accède la transaction jusqu’à la fin de celle.

Le verrouillage peut être fait en deux modes principaux, le mode Optimiste et le mode

Pessimiste, selon le but pour lequel la transaction accède aux données, soit pour les modifier

ou pas.

• Mode Pessimiste :

La première transaction accédant à la donnée, la verrouille de sorte que les autres

puissent seulement la lire et non la modifier jusqu’à la fin de la première.

La garantie de ce mode réside dans le fait qu’une transaction premièrement accédé dans

la donnée sache toujours lui appliquer des modifications.

71

• Mode Optimiste :

La première transaction accédant à la donnée ne la verrouille aucunement pas. Et

pendant qu’elle progresse, une autre peut toujours modifier la donnée. Si maintenant elle

décide la modifier mais qu’elle découvre les modifications de l’autre, elle doit les signifier

à l’initiateur.

Ici, accéder à la donnée la première n’est pas une garantie pour la modifier.

La classification de verrou, nous donne les modes suivants de verrou :

• Partagé :

Dans ce cas la transaction peut lire l’objet, et les transactions concurrentes ont

également l’accès en lecture à l’objet.

• Exclusif :

Dans ce cas la transaction peut lire et écrire l’objet, et aucune transaction concurrente

n’a accès à l’objet.

Le mode partagé est compatible avec lui-même, et incompatible avec le mode exclusif.

Le mode exclusif est incompatible avec lui-même.

Compatibilité des Verrou selon le mode partagé ou exclusif [33] :

Pas de Verrou Verrou partagé Verrou exclusif

Pas de Verrou Oui Oui Oui

Verrou partagé Oui Oui Non

Verrou exclusif Oui Non Non

Tableau 2: Compatibilité des Verrous (modes)

Compatibilité des opérations de Verrou selon la lecture ou l’écriture :

Lecture Ecriture

Lecture Oui Non

Ecriture Non Non

Tableau 3 : Compatibilité des Verrous (Opérations)

72

Cas d’algorithme de Verrou

Nous allons prendre un exemple d’algorithme utilisation le verrouillage :

> Le Verrouillage à Deux Phases

Dans cet algorithme, les transactions accédant aux données mettent des verrous de

lecture et les convertissent en des verrous d’écriture sur d’autres au moment de la

modification [4] [42].

Pour lire une donnée, il faut :

- Mettre un verrou de lecture sur toutes copies de la donnée, afin que la copie locale

soit aussi verrouillée.

Pour modifier une donnée, il faut que :

- Les verrous d’écriture soient mis sur toutes les copies.

Avant la lecture ou l’écriture de données, la transaction a besoin d’y en avoir respectivement

un verrou de lecture ou d’écriture, mais pour question d’éviter le conflit d’opérations (cfr la

matrice de compatibilité des opérations). Mais la possession du verrou [42] est régie par les

deux règles suivantes :

(R1) Diverses transactions ne peuvent pas posséder simultanément des verrous

conflictuels ou incompatibles

(R2) Une fois qu’une transaction lâche le verrou, il ne pourra en obtenir d’autre.

Le Principe du Verrouillage à Deux Phases

Verrou

Acquisitions Restitutions

Point de Verrouillage

Phase 1 Phase2

Temps

Figure 30 : Le Principe du Verrouillage à deux phases [31]

73

• Première phase : l'acquisition

Du début jusqu'au point de verrouillage, la transaction acquiert des verrous.

• Deuxième phase : le relâchement

Du point de verrouillage jusqu'à la fin, la transaction réalise des écritures dans la base et

relâche les verrous.

Problème de Verrou Mortel ou Inter-Blocage

Il y a un cas d’un verrou mortel lorsque les transactions s’attendent indéfiniment les

une les autres pour accéder aux ressources quand ces dernières vont les lâcher. Il peut

concerner deux ou trois transactions.

Par exemple, une transaction T1 détenant le verrou d’écriture sur l’objet X souhaite en

obtenir un autre sur Y et qu’une autre transaction T2 détenant le verrou d’écriture sur

l’objet Y souhaite en obtenir sur X. Elles sont donc toutes deux inter-bloqués

74

Illustration [42]:

Transactions

T1: BEGIN;

READ (X); WRITE (Y);

END

T2: BEGIN;

READ (Y); WRITE (Z);

END

T3: BEGIN;

READ (Z); WRITE (X);

END

Et maintenant supposons que ces transactions s’exécutent simultanément, chacune s’engageant à son READ avant le END des autres.

Représentons cette exécution partielle par les journaux suivants :

DM A: r1 [x1] ; DM B: r2 [y2] ; DM C: r3 [z3]

Note: ri[x] dénote l’opération dm-read(x) lancé par Ti; DM: Data Manager (Gestionnaire de Ressource ou Données)

A ce point, T1 a le verrou de lecture sur x1, T2 le verrou de lecture sur y2, T3 le verrou de lecture sur z3

Avant de poursuivre, toutes les transactions doivent obtenir des verrous d’écriture. T1 demande des verrous d’écriture sur Y1 et Y2 ; T2 demande des verrous d’écriture sur z2 et z3 T3 demande des verrous d’écriture sur X1

Mais, T1 ne peut pas avoir de verrous d’écriture sur y2, jusqu’à ce que T2 lâche le verrou de lecture. T2 ne peut pas avoir de verrous d’écriture sur z3, jusqu’à ce que T3 lâche le verrou de lecture. T3 ne peut pas avoir de verrous d’écriture sur x1, jusqu’à ce que T1 lâche le verrou de lecture.

Ça c’est un VERROU MORTEL (DEADLOCK)

Bases de Données

X1

Y1 A

X2

Z2 B

Z3 C

Figure 31 : Le Verrou Mortel (DeadLock) [42]

75

Détection, Guérison et Prévention

Pour détecter le verrou mortel, on se serre du graphe des attentes. Ce graphe se

construit au fur et à mesure qu’une transaction demande un verrou sur un objet qui est déjà

verrouillé.

Rappelons qu’une transaction distribuée a une représentation hiérarchique (Arbre :

qui est un graphe [29]), d’où on a :

- Les nœuds sont les transactions

- Les arêtes sont l’attente entre T1 et T2, c'est-à-dire si T1 attend un verrou détenu par

T2

Et il y a verrou mortel ou inter-blocage lorsque ce graphe des attentes contient un

cycle ([29] parle amplement de la notion de graphe).

Figure 32 : Cycle dans le Graphe des Attentes

Pour résoudre ce problème, l’algorithme du Verrouillage à Deux Phases procède

comme suit :

- Il cherche l’inter-blocage local et global. Après avoir détecté, les transactions prises

dans le cycle sont relancées [4] et mais avant cela toutes leurs modifications sont

défaites.

Pour prévenir ce problème,

- [42] montre comment la prévention de l’inter-blocage est implémentée dans le

Verrouillage à Deux Phases. Et là, cette prévention est un plan prudent dans lequel

une transaction est du coup relancée dès que le système a « peur » qu’inter-blocage

peut survenir.

- Une approche dit qu’il faut limiter la profondeur d’attente de transactions bloquées à

un [8] et ceci pour minimiser le traitement dû au fait des redémarrages (relancer) des

transactions.

Les inter-blocages peuvent être carrément évités en répondant toutes les demandes de

verrous à la fois avant qu’une transaction fasse la validation ou simplement à son début.

76

Un autre algorithme utilisant aussi le verrouillage, c’est le WOUND-WAIT (WW).

> WOUND-WAIT (WW)

Ce dernier est similaire au précédent ; mais la simple différence est au niveau du

traitement du problème de Verrou Mortel ou inter-blocage.

Cet algorithme utilise l’estampillage pour gérer ou prévenir le problème d’inter-

blocage :

- A chaque transaction est accordé un numéro à son premier lancement,

- Et les transactions les plus récentes sont empêchées de faire attendre les plus

anciennes. Ainsi la possibilité d’un inter-blocage est éliminée.

- Dans le cas où une ancienne transaction demande un verrou et que celle-ci pourrait

lui mener à attendre une plus récente, cette dernière est « blessé » (WOUND) c'est-à-

dire elle sera relancée sauf si elle est déjà dans sa deuxième phase de son protocole

de validation (dans lequel cas la plaie « WOUND » n’est pas fatale, et sera

simplement ignorée)

(2) L’Estampillage

Un cas d’utilisation des estampilles est montré dans l’algorithme précédent. Mais nous

allons donner un algorithme où les estampilles sont utilisées pour le contrôle de

concurrence.

> Ordonnancement par estampillage

Pareillement et pourtant différemment que le WOUND-WAIT qui lui utilise le verrou,

celui-ci associe plutôt les estampilles avec toutes les données récemment accédées. Il y a un

ainsi ordre d’estampille selon lequel les transactions problématiques (celles qui participent

dans les accès conflictuel de données) doivent suivre lors de leurs exécutions. Sinon la

transaction est relancée (annulée et relancée).

Une demande de lecture de données sera permise si l’estampille du demandeur est

supérieure à celle de l’écriture. Vice versa. Dans le cas contraire, c'est-à-dire, si l’estampille

est inférieure, la règle d’écriture de Thomas [4] dit que les mises-à-jour vont simplement

être ignorées.

Et nous allons clôture ce chapitre avec la notion de niveau d’isolation.

77

(d) Les Niveaux d’Isolation

Les niveaux d’Isolation permettent donc une exécution parallèle des transactions en

donnant ces dernières une certaine possibilité de manipulation des données, et ce à travers

les propriétés d’isolation.

Chaque propriété définit un niveau d’accès aux données en cours de modification

par d’autres transactions en cours. Les données qui sont en cours de modification sont

dites données volatiles [21].

Il faut dire que les Niveaux d’Isolation entre en ligne de compte pour la résolution de

problème de contrôle de concurrence.

+ READCOMITTED : les données volatiles ne peuvent pas être lues pendant la

transaction, mais peuvent être modifiées.

+ READUNCOMMITTED : les données volatiles peuvent être lues et modifiées

pendant la transaction.

+ REPEATABLEREAD : les données volatiles peuvent être lues mais pas modifiées

pendant la transaction. De nouvelles données peuvent être ajoutées.

+ SERIALIZABLE : niveau d’isolation par défaut. Les données volatiles peuvent être lue

mais pas modifiées. De même aucune nouvelle donnée ne peut être ajoutée pendant

la transaction.

Le choix de niveaux est capital, et dépend souvent de la nature d’une application.

78

[Chapitre III]

79

Chapitre III

Les applications

Dans ce chapitre où nous avons consacré nos efforts pour essayer tant soit peu de

rattraper la pratique. Voici les outils utilisés pour arriver à bon bout :

- Le SQL SERVER (version 2008) de Microsoft :

- La plateforme .NET (Framework 3.5, version 2008 : Full Team), précisément le

langage C# de Microsoft :

- UML (Unified Modeling Language) :

En outre, on aura à présenter l’intranet gouvernemental de la République sur lequel

nous avons pu concevoir une application (distribuée) et afin cette application. Mais avant

tout, commençons par présenter les outils.

III.1. Mécanisme de Répartition sous SQL SERVER

Nous présentons ici des notions essentiales et inhérentes à ce que traite ce travail, une

grande source nous vient de [53], [19], [38].

III.1.1. SQL SERVER

Microsoft SQL Server est un système de gestion de base de données (abrégé en SGBD

ou SGBDR pour « Système de gestion de base de données relationnelles ») développé et

commercialisé par la société Microsoft.

III.1.2. Les Bases de Données

Les bases de données sont contenues physiquement dans des fichiers. Les fichiers portent généralement les extensions :

MDF (Main Database File) pour le premier fichier de données NDF (Next Database File) pour les autres fichiers de données LDF (Log Database File) pour les fichiers du journal de transaction

80

Les fichiers sont divisés en blocs de 8196 octets appelés pages et organisées par blocs de 8 pages appelées extensions. Jusqu'à la version 2000, les lignes étaient limitées à une taille maximale de 8060 octets (les colonnes de type LOBs (image, text, ntext) n'étant pas comptabilisées dans cette limite). Depuis la version 2005 il est possible de dépasser largement cette limite et d'aller jusqu'à 2 milliards d'octets. En revanche la taille utile de la page est de 8096 octets.

Les bases de données ne peuvent fonctionner que lorsque tous les fichiers sont présents.

Les fichiers de données sont regroupés logiquement dans la base de données dans des groupes de fichiers. Ces fichiers et groupes de fichiers peuvent être sauvegardés de façon indépendante à condition qu'il n'existe aucune interdépendance logique entre les objets d'un fichier et d'un autre (intégrité référentielle en particulier).

III.1.3. Services et moteurs

III.1.3.1. SQL Server

Il s'agit du moteur de bases de données. À chaque instance de SQL Server correspond un service Windows Sql Server. Ce service peut être repéré dans les services Windows sous les noms MSSQL$Nom_instance pour les instances nommées et MSSQLServer pour l'instance par défaut.

Chaque instance créée possède au départ 4 à 6 bases de données systèmes. Le moteur SQL Server s'appuie sur la base de données système master qui contient la définition des autres bases de données.

Les autres bases systèmes sont :

msdb : utilisée par l'agent SQL Server, la réplication, Data Transformation Services, Integration Services...

model : utilisée comme modèle pour créer de nouvelles bases de données. Toute nouvelle base de données est une copie de celle-ci.

tempdb : Base de données temporaire, elle sert à stocker les données temporaires créées par des utilisateurs ou générées par des curseurs, des créations d'index, lors d'un tri volumineux. Sous SQL Server 2005, elle contient aussi les versions d'enregistrement générées par les niveaux d'isolation SNAPSHOT, le contenu des pseudo tables inserted et deleted utilisées dans les triggers et celles générées par les opérations d'index en ligne. Cette base de données système est systématiquement vidée au démarrage du service SQL Server.

distribution : N'est présente que dans le cadre d'une réplication si votre serveur joue le rôle du distributeur.

mssqlsystemresource : Présente uniquement à partir de SQL Server 2005. Elle n'est pas accessible directement, et elle contient tous les objets systèmes (hors tables).

81

III.1.3.2. SQL Server Agent

Il s'agit de l'agent de maintenance de l'instance de SQL Server. À chaque instance de SQL Server correspond un service Windows Sql Server Agent. Ce service peut être repéré dans les services Windows sous les noms SQLAgent$Nom_instance pour les instances nommées et SQLAgent pour l'instance par défaut. Le moteur SQL Server Agent s'appuie sur la base msdb. Ce moteur permet de gérer les sauvegardes, les plans de maintenance, les travaux planifiés, la surveillance de la base, les alertes administratives...

L'Agent a aussi comme rôle la surveillance du service de SQL Server et le déclenchement automatique du redémarrage de celui-ci en cas d'arrêt inattendu.

III.1.4. Transactions

SQL Server est un SGBD transactionnel. Il est capable de préparer des modifications sur les données d'une base et de les valider ou de les annuler d'un bloc. Cela garantit l'intégrité des informations stockées dans la base.

Lors d'une transaction, les blocs de données contenant les lignes de données modifiées par cette transaction sont verrouillées. Les autres utilisateurs, en fonction du niveau d'isolation choisi, doivent attendre ou non la fin de la transaction pour pouvoir les modifier à nouveau.

Les verrouillages s'effectuent au niveau des lignes, pages, extensions, tables ou base de données. SQL Server ne verrouille que les ressources dont il a besoin (par défaut les enregistrements) et en fonction des besoins peut verrouiller à un niveau plus élevé (pages ou objet). Cela évite aux utilisateurs d'attendre la fin d'une transaction pour mettre à jour des lignes de données qui n'ont pas été touchées par une modification et permet de diminuer la quantité de ressources consommées

Les transactions sont enregistrées dans le journal de transaction et les modifications des données sont intégrées à la base de données lors de points de contrôle (check point). Il est possible de forcer un point de contrôle grâce à l'instruction CHECKPOINT

Le journal des transactions peut être conservé de trois manières différentes :

Mode simple : toutes les modifications sont enregistrées dans le journal sauf pour les instructions de chargements en bloc (BULK INSERT, CREATE INDEX, reconstruction d'index et SELECT INTO) qui sont enregistrées de manière plus simple. Les transactions terminées sont supprimées du journal de transaction à chaque point de contrôle.

Mode journalisé en bloc : journalise de façon minimale les opérations en bloc. Ce mode est utilisé pour effectuer d'importantes opérations de masse.

82

Mode complet : toutes les modifications sont enregistrées dans le journal. Les transactions terminées dont les données sont écrites sur le disque sont supprimées du journal de transaction à chaque sauvegarde de celui-ci.

Dans les 2 derniers modes, il est possible de sauvegarder la base de données et de la restaurer telle qu'elle était à n'importe quel point du temps à la seconde près et à la transaction près (avec cependant des limites pour le mode journalisé en bloc). Ce mode permet aussi la sauvegarde de fichiers ou de groupes de fichiers.

III.1.4.1. Distributed Transaction Coordinator

Connu aussi sous le nom de MS DTC, sert a gérer les transactions distribuées. C’est-à-dire les transactions entre plusieurs serveurs de transactions SQL Server, entre un serveur SQL Server et des serveurs de base de données autres, entre plusieurs sources de données différentes, qu'ils soient des moteurs de base de données ou de simples composants.

III.1.4.2. Gestion de Transaction sous SQL SERVER

On a vu que le grand problème de transaction, c’était la concurrence et pour le gérer, SQL SERVER implémente le niveau d’isolation pour pallier aux anomalies transactionnelle que peuvent causer cette concurrence.

III.1.5. Notion de répartition sous SQL SERVER

Après avoir conçu une Base de Donné Répliquée, il faudrait les fragmenter et puis l’allocation de ces fragments dans différents sites, ceci peut s’accompagner de la réplication. Pour faire la fragmentation du schéma global et puis l’allocation des fragments, le SQL SERVER dispose d’une technologie : transactional replication [19].

La “Transactional réplication”: la réplication transactionnelle, c’est un mécanisme

utilisé par le SQL SERVER pour permettre de publier de donnée incrémentale et les

changements de schéma aux abonnés (souscripteurs). Les changements sont publiés (le flux

de réplication) dans l’ordre dans le quel ils ont été effectués, et effectivement il y a un temps

de latence entre les changements dans le Publisher et l’abonnés [19].

Les architectures étudiées dans le chapitre 1 d’un système distribute sont aussi

appliquées, à savoir le peer-to-peer et le client-serveur.

La réplication transactionnelle peer-to-peer, par exemple, en SQL SERVER simplifie

l’implémentation la topologie de la réplication transactionnelle bidirectionnelle, où le flux de

données va dans les deux sens.

83

Figure 33 : Réplication peer-to-peer avec trios et quatre nœuds [19]

III.1.5.1. Technologies

La réplication transactionnelle et la réplication peer-to-peer utilise la même architecture pour transférer entre les servers dans une topologie de réplication. L’illustration suivante est une vue sur les composants participant dans la réplication transactionnelle.

Figure 34 : Vue de l’architecture de la Réplication transaction [19]

84

Voici les trois roles minimum d’un serveur requis pour la réplication transactionnelle :

• Publisher, pour la base de données de la publication

• Distributor, pour la base de données de la distribution

• Subscriber, pour la base de données de la subscription

Les différents agents sur lesquels la réplication transactionnelle se repose, pour

effectuer les taches associées au transfert des modifications (changements) et à la

distribution des données. On a [38]:

• Snapshot Agent, qui tourne au niveau du Distributor (Distributeur). Il prépare les

fichiers de schéma et de données initiales des tables et objets publiés, enregistre les

fichiers du snapshop et les informations sur la synchronisation dans la base de

données de la distribution.

• Log Reader Agent, qui tourne au niveau du distributor (distributeur). Il connecte au

Publisher et lui transfère les transactions marquées pour la réplication à partir du log

(journal) de transaction de base de données de la publication à la base de données

de la distribution.

• Distribution Agent, qui tourne au niveau du Distributor pour pousser les

souscriptions et au niveau du Subscriber pour tirer les souscriptions. Il appique le

snapshop initial au Subscriber (souscripteur) et transfère les transactions tenues

dans la base de données aux souscripteurs.

• Queue Reader Agent, qui tourne au niveau du Distributor. Il est seulement utilisé

pour la réplication transactionnelle avec des souscriptions modifiables et renvoie les

modifications effectuées sur les Subscriber au Publisher.

III.1.5.2. Réaliser une Publication et un abonnement sous SQL SERVER

Nous allons à la fois montrer ceci dans la section dédiée à l’application proprement dite et montrer comment faire une fragmentation horizontale, verticale et hybride pour une allocation donnée de données.

85

III.2. Gestion de Transactions par la programmation

sous .NET (Framework 3.5)

.NET est une plateforme de programmation, un produit de MICROSOFT, depuis sa version la plus antérieure (2005) que celle-ci (2008) et jusqu’à l’actuelle (2010), on pouvait déjà et on peut donc arriver utiliser les transactions à la place de requêtes SQL, on en a vu l’avantage, et aussi arriver à gérer ces transactions, ses anomalies découlant de la concurrence par bien sûr les mécanismes de niveau d’isolation.

Il va de soi de comprendre que nous n’avons eu qu’à utilisé la version de .NET à notre disposition étant donné que l’implémentation de base de classes manipulant les transactions est restée la même. Par conséquent, nous avons utilisé la version .NET 2008, avec le langage C# ;

C’est donc cette voix de solution que nous avons choisie pour pouvoir aisément les transactions, et même les transactions concurrentes.

III.2.1. Les Transactions locales

Dans l’ADO (Activex Data Object), l’API (Application Programming Interface) de Microsoft pour l’accès de données, pour créer une transaction, on a en premier la classe « DbTransaction » se trouvant dans l’espace de nom « System.Data.Common » du composant System.data.dll du Framework .NET [21]. Toutes les autres classes des transactions en dérivent.

Cette classe possède des méthodes «BeginTransaction, Commit et Rollback », essentielles dans la mise en œuvre des transactions.

Voici les espaces de noms, où se trouvent les classes selon qu’il s’agit de fournisseur aux bases de données :

- System.Data.Odbc.OdbcTransaction

- System.Data.OleDb.OleDbTransaction

- System.Data.OracleClient.OracleTransaction

- System.Data.SqlClient.SqlTransaction

Nous allons donc utiliser le dernier, pour le cas qui est le nôtre.

86

Voici les méthodes principales :

- BeginTransaction (): méthode qui permet de débuter la transaction. - Commit() : méthode qui permet de valider les modifications effectuées par les

requêtes exécutées au sein de la transaction. - Rollback() : méthode qui permet d’annuler ces modifications.

Illustration

Soit un Serveur nommé PRIMATURE_SERVER, où on a une base de données nommée GestPers, et précisément la table agent ;

// C# import System.Data.SqlClient.SqlTransaction; import System.Data; string connectionString = "Data Source=.\PRIMATURE_RESVER;Initial Catalog=GestPers;Integrated Security=true"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); SqlCommand commande = connection.CreateCommand(); commande.Transaction = transaction; try { //commande 1 commande.CommandText = "INSERT agent (id, nom, prenom, adresse, telephone, mail, information) VALUES (1, 'Tshabola', 'Joseph', '0', '0', '0', '0')"; commande.ExecuteNonQuery(); //commande 2 commande.CommandText = "INSERT agent (id, nom, prenom, adresse, telephone, mail, information) VALUES (2, 'Kalenda', 'Isaac', '0', '0', '0', '0')"; commande.ExecuteNonQuery(); transaction.Commit(); MessageBox.Show("Transaction validée"); } catch (Exception Ex) { transaction.Rollback(); MessageBox.Show(Ex.Message); } finally { connection.Close(); } }

87

III.2.2. Les Niveaux d’Isolations

Pour arriver à gérer des nombreuses transactions concurrentes, on dispose ici de

l’Enumération « IsolationLevel » associée à l’objet Transaction, dont voici les propriétés :

- Chaos : les données en attente de transactions très isolées ne peuvent être écrasées.

- ReadComitted : les données volatiles ne peuvent pas être lues pendant la

transaction, mais peuvent être modifiées.

- ReadUncommitted : les données volatiles peuvent être lues et modifiées

pendant la transaction.

- RepeatableRead : les données volatiles peuvent être lues mais pas modifiées

pendant la transaction. De nouvelles données peuvent être ajoutées.

- Serializable : niveau d’isolation par défaut. Les données volatiles peuvent être lue

mais pas modifiées. De même aucune nouvelle donnée ne peut être ajoutée pendant

la transaction.

- Snapshot : les données volatiles peuvent être lues. La transaction vérifie que les

données initiales n’ont pas changées avant de valider la transaction. Cela

permet de régler les problèmes liés à l’accès concurrentiels aux données.

- Unspecified : aucun niveau ne peut être déterminé.

Chaque propriété définie un niveau d’accès aux données en cours de modification

par d’autres transactions en cours. Les données qui sont en cours de modification sont

dites données volatiles [21].

Illustration

// C#

//…

SqlConnection oConnexion;

SqlTransaction oTransaction = null;

SqlCommand oCommande;

IsolationLevel oNiveauIsolationDonnees;

try

{

// Création de la connexion.

oConnexion = new SqlConnection(@"Data Source=.\PRIMATURE_RESVER;Initial Catalog=GestPers;Integrated Security=true") ;");

// Ouverture de la connexion.

oConnexion.Open();

if (ChkUtiliserTransaction.Checked)

{ // Création de la transaction.

oTransaction =

88

oConnexion.BeginTransaction(oNiveauIsolationDonnees);

}

// Création de la commande.

oCommande = new SqlCommand("SELECT * FROM agent", oConnexion,

oTransaction);

// Création et paramétrage du DataDapter.

oDataAdapter = new SqlDataAdapter(oCommande);

SqlCommandBuilder oCommandBuilder = new

SqlCommandBuilder(oDataAdapter);

// Création de la table de données.

oTable = new DataTable("agent");

// Exécution de la requête et remplissage de la table de données.

oDataAdapter.Fill(oTable);

// Affichage des données.

LstAgent.DataSource = oTable;

}

catch (Exception aEx)

{

MessageBox.Show(aEx.Message);

}

// …

89

III.2.3. Les Transactions Distribuées

Une transaction distribuée est ainsi dite suite au fait qu’il fait appelle à plusieurs ressources. D’où le Gestionnaire de ressources, géré par le gestionnaire de transaction.

Le gestionnaire de Transaction, c’est le DTC (Distributed Transaction Coordinator), qui est démarré manuellement (Invite de commande : > Services.msc), faute de quoi il y a erreur.

Figure 35 : Interface de Démarrage du Service de DTC

Lorsqu’une transaction est amorcée dans une application, une requête de validation est envoyée au gestionnaire de transaction. Ce dernier enverra une commande de préparation à tous les gestionnaires de ressources de la transaction. Après traitement de la commande les gestionnaires de ressources enverront à leur tour un message d’échec ou de succès de préparation au gestionnaire de transaction.

90

Illustration

string connectionString1 = = "Data Source=.\PRIMATURE_RESVER;Initial

Catalog=GestPers;Integrated Security=true";

string connectionString2 = = "Data Source=.\FINANCE_RESVER;Initial

Catalog=GestPers;Integrated Security=true";

using (TransactionScope Transaction = new TransactionScope()) {

using (SqlConnection connection1 = new SqlConnection(connectionString1)) {

try {

SqlCommand commande = connection1.CreateCommand();

commande.CommandText = "DELETE FROM agent WHERE matricule = 'K88s';";

connection1.Open();

commande.ExecuteNonQuery();

connection1.Close();

using (SqlConnection connection2 = new SqlConnection(connectionString2)) {

try {

SqlCommand commande2 = connection2.CreateCommand();

commande.CommandText = "DELETE FROM salaire WHERE matricule = 'K88s';";

connection1.Open();

commande.ExecuteNonQuery();

connection2.Close();

} catch (Exception ex) {

MessageBox.Show(ex.Message);

}

} catch (Exception ex) {

MessageBox.Show(ex.Message);

}

}

Transaction.Complete();

}

Ainsi, nous venons de voir qu’il était possible de gérer les transactions sous la

plateforme .NET

91

III.3. Intranet Gouvernemental de la RDC

(République Démocratique du Congo)

La mise au point de l’intranet gouvernemental est un projet sous le nom de « e-

Gouvernement » mené par la KOICA (Korea Intrnational Cooperation Agency), grâce à son

programme APD (Aide Public au Développement), conformément à l’ordonnance définie

07/. 018 du 16 mai 2007 fixant les attributions des Ministères. Le titre du projet est

« L’infrastructure des TIC pour le projet d’E-Gouvernement de la République Démocratique

du Congo ».

III.3.1. Quelques définitions

III.3.1.1. Intranet :

Un Intranet est l'utilisation de tout ou partie des technologies et des infrastructures de l'Internet pour les besoins de transport et de traitement des flux d'informations internes d'un groupe d'utilisateurs identifiés.

Il peut être constitué de nombreuses applications et services :

forums de discussion entre des équipes projets au sein d'une entreprise

interconnexion sécurisée des réseaux locaux de l'entreprise et ses filiales en utilisant les infrastructures publiques de l'Internet

la création de serveurs Web interne

la création d'un serveur Web, accessible depuis l'entreprise et depuis l'Internet par une communauté fermée d'utilisateurs, les clients ou les partenaires de l'entreprise par exemple

la mise en place d'une messagerie

l'interconnexion des différents systèmes d'information de l'entreprise et de ses fournisseurs en utilisant le protocole TCP/IP

Donc en se basant sur le protocole TCP/IP (Transmission Control Protocole/Internet Protocole) qui est un protocole de l’Internet, il arrive à fournir pas mal d’applications et services autant que le ferait l’internet.

Pourtant, reste des différences entre Intranet et Internet :

- Internet = des infrastructures publiques de transmissions de données (payées par les opérateurs Internet.

- Intranet = des infrastructures privées de transmission de données (les réseaux locaux)

- une plus grande maîtrise des infrastructures réseaux et du débit possible. Il est plus facile sur Intranet d'envisager des applications qui restent difficiles à exploiter sur l'Internet telle que la visioconférence.

92

III.3.1.2. E-Gouvernement :

L’E-Gouvernement est l’utilisation des technologies de l’information et de la communication pour améliorer l’accès et la prestation des services publics au bénéfice de la population.

III.3.2. Objectif du projet

Crée l’e-Gouvernement (electonic-Gouvernement), impliquerait une utilisation des

technologies de l’information et de la communication (TIC) par les Institutions publiques et

le gouvernement de la RDC pour rendre les services de l’Etat plus accessible à leurs

utilisateurs et améliorer leurs propres opérations internes.

Les principaux objectifs du projet sont les suivants (quelques):

- renforcer la participation de citoyens au processus décisionnel du gouvernement.

- Améliorer la transparence et l’efficacité de dans l’administration publique.

Pour ne citer ces deux.

III.3.3. Avantages pour les utilisateurs

Nous citerons des avantages parmi tant évoqué dans [35], mais les plus éloquents, par

rapport à notre travail :

- Améliorer la facilité d’usage (moins de files d’attente, plus d’information, plus

d’informations, pas besoin de se déplacer).

- Offrir des nouveaux services personnalisés aux citoyens et aux entreprises (par

exemple, le calcul d’impôt en ligne, le suivi des procédures administratives, la

consultation du dossier personnel, l’emploi, l’envoi des informations sur l’intranet/

internet).

- Simplifier les procédures notamment en réduisant les formulaires, les imprimés et les

certificats de valeur.

Pour ne citer ceux-ci.

93

III.3.4. Situation actuelle de l’Intranet

La situation actuelle peut être présentée dans le tableau qui suit :

III.3.4.1. Tableau des Projets

Item 1er Projet (2007-2008)

2ème Projet (2008-2009)

3ème Projet (2009-2010)

Nom du projet Projet d’Etablissement du

Réseau Gouvernemental en

RDC

Projet d’Etablissement du

Réseau Gouvernemental de 6 Ministères en RDC

Etablissement Intranet entre le

Ministère des Mines et ses trois

organismes majeurs

Agence d’exécution Ministère des affaires étrangères

Ministère des affaires étrangères

Ministère des Mines

Sites ciblés Présidence, Ministère des

affaires étrangères, Primature, Ministère

de la Fonction Publique

Ministère des Postes, Téléphones et

Télécommunications, Ministère des

Finances, Ministère du Budget et

Ministère d’Infrastructure,

Travaux Publics et Reconstruction

Ministère des Mines, CTCPM, SAESSCAM,

CAMI

Nombre de Sites 4 6 4

Tableau 4 : Projets Réseaux Gouvernemental par KOICA [35]

Ce qui fait qu’actuellement l’Intranet compterait 14 sites dont trois sous réseaux

interconnectés.

94

III.3.4.1. Présentation topologique de l’Intranet

Site 6

Site 10

Site 9

Site 5

Site 7

Site 8

Site 1

Site 2 Site 3 Site 4

Site 11

Site 12 Site 13 Site 14

Projet 1 Projet 2

Projet 3

Figure 36 : l’Intranet Gouvernemental [35]

95

Tableau de correspondance de sites et leurs noms

Site Noms

1 Ministère des Affaires Etrangères

2 Présidence

3 Primature

4 Fonction Publique

5 Justice

6 Ministère des Postes, Téléphones et Télécommunications

7 Ministère du Budget

8 Ministère du Plan

9 Ministère d’Infrastructure, Travaux Publics et Reconstruction

10 Ministère de Finance

11 Ministère de Mines

12 CTCPM

13 SAESSCAM

14 CAMI

Tableau 5 : Tableau de correspondance de numéro de sites et leurs noms

III.4. Mise en place d’un Système d’Information de

Traitement de Salaire des Agents de l’Etat

C’est à cette section que sont dédiées toutes les précédentes, elles ont balisé la route,

préparé les outils pour son abordage aisé, ou disons le autrement, c’est ici qu’on essaie de

concrétiser toutes les notions avancées précédemment.

III.4.1. Circonscription

Ce problème de traitement de salaire ou bien de gestion de paie des agents couvrent

normalement toutes les institutions étatiques. Et pourtant pour insérer dans ce projet

d’intranet gouvernemental, selon même ses objectifs, notre participation plus

concrètement, nous nous nicherons sur des sites contextuellement les plus stratégiques.

96

On a donc :

- Fonction publique : qui immatricule tous les agents de l’Etat,

- Finance : qui salarie ces agents sur bases de la liste agents immatriculés en

provenance de la Fonction publique.

Ces sont les deux sites principaux, pour notre cas ; mais il faut dire que ces sites à part

leurs taches administratives, sont aussi des institutions publiques avec des agents. On juge

les autres sites de normaux

III.4.2. Modélisation du Système d’Information avec l’UML

UML, Unified Modeling Language : langage de modélisation, ici, pour des systèmes

d’Information. Elle dispose de plus d’une dizaine de diagramme pour la modélisation, mais

nous allons nous service de quelques un qui nous permettent d’étayer le processus de la

création de notre application.

Cette modélisation débouchera sur une Application Informatique, un logiciel que nous

allons nommer « SalaryManager » : Gestionnaire de Salaire, en Français.

III.4.2.1. Spécification Initiale du Système

En vue d’une amélioration du présent système de paiement des agents, cette batterie

d’étapes va nous permettre d’automatiser des processus manuels, d’où une application

informatique est attendue à l’issue de cette étude.

Cette application informatique est conçue à l’idée de pouvoir :

- Aider l’entité habilitée (Ministère de Finance) de payer les agents de l’Etat, à calculer

la masse salariale (périodique aussi) correspondante à toutes les institutions, et à

réellement payer les vrais agents sur base des listes des agents immatriculés.

- Aider l’entité habilitée (Ministère de Fonction Publique) d’immatriculer les agents, à

savoir l’effectif des agents, et ce par institution.

- Aider les institutions de pouvoir enregistrer de nouvelles unités (NU), de les envoyer

(sans se déplacer) à la Fonction Publique en vue d’immatriculation et de calculer

localement le salaire de chaque agent selon tous les éléments de salaire (indemnité,

prime, etc.) et de les envoyer à la Finance en vue de la paie.

Cette application sera par conséquent répartie.

97

o A qui l’application, est-elle destinée ?

Comme dit tantôt, à l’entité du Ministère de la Fonction Publique chargée

d’immatriculation, à gestionnaire de paie de la cellule de paie du Ministère de la

Finance, et aux gestionnaires de paies de chaque institution.

o Quels problèmes l’application, résoudra-t-elle ?

Permettre une immatriculation aisée, connaître l’effectif des agents, calcul de la

masse salariale des institutions étatique et individuelles des agents. Conséquence

logique, ne payer que les vrais agents immatriculés.

o Comment l’application fonctionnera-t-elle ?

Cette application en est naturellement une dont les taches sont répartie entre aux

moins trois sites, elle travaille :

- En client-serveur : architecture 3-tiers (interface ou présentation, logique de

programmation, et donnée), précisément client-serveur de donnée, entre

l’application (en C#) et SQL SERVER(les Serveurs) ;

- Et en peer-to-peer, pour ce qui des serveurs de base de données entre eux.

III.4.2.2. Enoncé du problème

En vue d’une automatisation de processus de paiement des agents et d’ailleurs

conformément au projet e-Gouvernement, il est question ici de faire une gestion

informatisée des ressources humaines de l’Etat qui est un volet non négligeable dans la

gestion de la RDC, celle-ci est l’apanage de la FONCTION PUBLIQUE qui est l’un de site

compté dans l’Intranet Gouvernemental.

La fonction publique est l’entité sur circuit prend en charge l’élaboration des

matricules des employés de l’Etat, un employé appartient à une entreprise publique, il

possède un matricule que lui procure la fonction publique de la manière suivante :

- L’employé arrive comme une nouvelle unité dans le service lui attribué par ses

supérieurs,

- Après approbation de ses qualités, une liste des personnes devant être affectées est

envoyé au ministère de travail pour la signature du ministre qui est significative d’un

engagement totale, ce matricule confère un grade à l’employé en fonction de ses

aptitudes et du temps passé dans la société ;

- L’employé exerce une fonction spécifique dans la société son affectation,

- La Fonction publique peut à tout moment selon l’ordre ou un arrêté transférer un

employé une institution à une autre

98

- Chaque entreprise elle-même gère ses employé (ses ressources humaines) c'est-à-

dire elle organise le recrutement, mais pour la prise des fonctions, c’est la fonction

publique qui attribue les matricules, elle participe aussi le calcul de salaire de chaque

agent, puis le transfère à la finance pour la paie selon le listing des immatriculés en

provenance de la Fonction Publique.

L’entité finance du présent projet a pour mission d’enregistrer la masse monétaire

(volume de paiement) à remettre aux agents de l’Etat répertoriés par la fonction publique,

les finances reçoit la liste de chaque entreprise selon le barème de paiement prévu.

III.4.2.3. Analyse du Domaine

De ce qui précède c'est-à-dire l’énoncé, nous allons présenter des modèles d’analyse

qui résultent aussi bien de recherche, du bons sens que de l’expérience du monde réel. D’où,

on a :

- Les modèles d’interactions : qui montre les objets du système coopère pour obtenir

un résultat [49], on ne va présenter ici que le Diagramme de Cas d’Utilisation et le

Diagramme d’Activités.

- Les modèles de classes : décrit la structure statique des objets d’un système et leurs

relations [49], on a seulement le Diagramme de classe.

- Les modèles d’états : décrit les états successifs d’un objet au cours du temps. On n’a

que le Diagramme d’état.

III.4.2.3.1. Diagramme de Cas d’Utilisation

Voici les acteurs du système :

- Ministère de la fonction publique

- Ministère de la Finance

- Autres sites : regroupe tous les autres sites qui n’ont pas de taches spécifiques

comme les deux premiers, mais y compris ces deux premiers.

99

Système de Traitement et paies de Salaires

Enregistrement des Agents

(NU)

Calcul des salaires des

agents

Authentification

« Inclut »

Immatriculation des

agents

« Etend »

Autres Sites

« Inclut »

« Etend »

Ministère de la

Fonction Publique

Calcul d’effectifs des

agents

« Etend »

Calcul du volume salarial et

paie des agents

« Etend »

« Etend »

« Inclut »

Ministère de la

Finance

Figure 37 : Diagramme de Cas d’Utilisation

- Résumé de quelques cas d’utilisation :

a) Enregistrement des Agents (NU) : par « Autres sites », mais précédé d’une

authentification, qui donne lieu (b) et (c).

b) Calcul de salaire des agents

c) Immatriculation des agents : qui permet de calculer le vrai effectif des agents

d) Calcul du volume salarial et paie des agents : qui étend de (b) et (c).

100

III.4.2.3.2. Diagramme de Classe

On a donc :

- Identification de classes pertinentes : agent, grade, fonction, service, indemnité,

prime, prêt, institution, salaire, retenue ;

- Identification des associations pertinentes : prendre, avoir, appartenir, concerner,

immatriculation, toucher, tirer sur.

- Identification des attributs des objets :

o Agent (codeagent, nom, postnom, prenom, sexe, date_naissance, etat_civil, nombre_enfant, telephone, avenue, numero, quartier, commune, niveau_etude, date_embauche) ;

o Fonction (idfonction) ; o Grade (idgrade, salaire_base); o Indemnite (nomIndemnite, info) ; o Prêt (numpret, libelle, montant, date_pret) ; o Prime (nomPrime, info) ; o Retenue (nomRetenue, montant) ; o Salaire (numSalaire, trace_operation, net_a_payer, date_paiement,

mois_paiement) ; o Service (idservice, info) ; o Institution (nomInstitution, adresse).

101

Agent

Grade

Fonction

Service

Indemnité

Prime

Retenue

Salaire

Institution

Prêt

ConcernerIndemnité

ConcernerPrime

Immatriculation

Toucher*

1

Ap

pa

rte

nir

*

1

* *

*

*

Avo

irFon

ction *

Avo

irG

rad

e

*

1

1

Pre

nd

re

*

1

Tire

r su

r

*

*

Montant

Montant

*

*

Figure 38 : Diagramme de Classe

Les méthodes ou opérations des classes

Voici les méthodes génériques et immanquables des toutes ces classes, y compris des classes associations :

- Insérer(…) - Modifier(…) - Suppression (…) - Charger_Information() - Etc.

102

III.4.2.3.2. Diagramme d’état

- Identifications des classes du domaine ayant des états Trouver des états et les événements (sont dans les parenthèses) :

o Agent : Nouvelle Unité – NU (événement : enregistrement), Immatriculé (événement : immatriculation)

Selon la limitation du système, on peut se limité à ces deux états de la classe

Nouvelle Unité (NU)

Immatriculé Récrutement

Immatriculation

Agent

Figure 39 : Diagramme d’état de la classe Agent

103

III. 4.2.3.3. Diagrammes d’Activités

- Pour l’immatriculation d’un nouvel agent

Autres Sites Fonction Publique Finance

Enregistrement de NU

Vérifier la NU

Immatriculer NU

Mise à jours de la Base de Données

Pour nouveaux immatriculés

Immatriculation

Mise à jours de la Base de Données

Pour nouveaux immatriculés pour

La paie

Figure 40 : Diagramme d’Activité pour l’immatriculation d’un agent

104

- Pour le calcul et la paie des agents immatriculés

Autres Sites Fonction Publique Finance

Calcul des salaires des agents

locaux

Listing des agents

immatriculés

Calcul de volume

salarial des Agents

immatriculés

Envoi de la masse

Salariale aux

Institutions

Paiement

Figure 41 : Diagramme d’Activité pour le calcul et la paie des Agents immatriculés

105

III.4.2.4. Conception et Implémentation du Système

A cette phase, il est plausible de pouvoir décider du stockage des données. Force est de constater que les informations qui circulent entre les entités sont des informations fréquemment utilisées, d’où l’idéal c’est l’utilisation de Base de donnée.

Et pour le cas qui est le notre, vu la nature intrinsèquement distribué du Système

d’Information, nous allons utiliser les bases de données distribuée ou mieux répartie (BDR), pour profiter de ses avantages.

Dans ce cas, nous allons premièrement présenter le schéma global de notre base de données répartie à partie de notre diagramme de classes.

Et signalons que la conception de notre BDR sera descendante, vu que nous sommes

entrain de la créer nouvellement.

III.4.2.4.1. Schéma Global

Toutes les classes et classes association deviendront des tables, et spécialement ces

dernières bénéficieront des identifiants de ses participants, et on aura donc un modèle comme ci-dessous :

Agent

CodeagentnomPostnomPrenomSexedate_naissanceetat_civilnombre_enfantTelephoneAvenueNumeroQuartierCommuneniveau_etudeidserviceidgradeIdfonctiondate_embauche

Fonction

idfonction

Prêt

numpretlibellemontant date_pretCodeagent

Service

Idserviceinfo

Grade

idgradesalaire_base

Retenue

nomRetenuemontant

Indemnite

nomIndemniteinfo

Prime

nomPrimeinfo

ConcernerPrime

idgradenomPrime

montant

Institution

nomInstitutionadresse

Salaire

numSalairetrace_operationnet_a_payerdate_paiementmois_paiementCodeagent

ConcernerIndemnite

idgradenomIndemnitemontant

immatticulation

CodeagentnomInstitution

matricule

Tirer_sur

numsalairenomRetenue

Figure 42 : Diagramme de classe avec toutes les propriétés et les classes association

106

III.4.2.4.2. Fragmentations et Allocations

Le tableau ci-dessous, nous permettra de montrer comment les fragments seront

placés ou alloués aux sites.

Autres Sites Fonction Publique Finance

Nous trouverons toutes les tables, sauf « Institution » et « Immatriculation »

Ici, nous aurons 3 tables Et ici, 3 tables

Agent Fonction Grade Indemnite Prêt Prime Retenue Salaire Service ConcernerPrime ConcernerIndemnite Tirer_sur Immatriculation

Agent Institution Immatriculation

Agent Salaire Immatriculation

Tableau 6 : Fragmentations et allocations aux sites

Note : Rappelons que les Sites Fonction Publique et Finance sont aussi représentées par « Autres Sites », de par le fait elles ont aussi des agents à gérer localement.

Fragmentations et types de fragmentation utilisés

- De « Autres Sites » vers « Fonction Publique » : la fragmentation verticale de la table Agent, on a : Select codeagent, nom, postnom, prenom from Agent;

Ceci dans le but de permettre à la Fonction Publique de pourvoir immatriculer

les agents (NU) dans la table Immatriculation

107

- De « Fonction Publique » vers « Autres Sites » : la fragmentation hybride de la

table Immatriculation, on a :

Select codeagent, matricule from Immatriculation where institution =

‘primature’

Ceci dans le but de permettre aux autres de pouvoir savoir ceux qui sont

immatriculé

- De « Fonction Publique » vers « Finance » : ici on prend le plus grand

fragment, à savoir la table elle, Immatriculation, on a :

Select * from Immatriculation

Ceci dans le but de permettre à la Finance de pouvoir savoir ceux qui sont

immatriculé et les payer, de sorte à ne payer qu’eux.

- De « Autres Sites » vers « Finance » : la fragmentation verticale de la table Agent et toute la table Salaire, on a : Select codeagent, nom, postnom, prenom from Agent; Select * from Salaire; Ceci dans le but de permettre à la Finance de pourvoir payer les agents, mais

alors les agents immatricules.

- Etc.

Allocations de Fragments

L’allocation d’un grand nombre de fragments s’est réalisée par la connaissance de

l’emploi de la Base de Données, c'est-à-dire où les besoins s’avéraient les plus importants. Et s’est senti le besoin d’évolutivité de données au niveau de certains fragments dans un site, mais dont est principalement dans un autre site ; ainsi, nous avons utilisé l’allocation par cliché (Snapshop), vu qu’en plus dans notre cas la contrainte temps n’est pas trop de rigueur. Exemple pour le cas d’immatriculation. III.4.2.4.3. Réplication

Eu égards au type d’allocation utilisée, il s’en suit que la réplication utilisée entre les

sites est : Asynchrone Asymétrique.

Ainsi l’application pourra profiter des avantages d’une bonne conception, d’une bonne politique de fragmentation, allocation et réplication.

108

III.4.2.4.4. Implémentations de l’Application

Implémentation de la Base de Données : sous SQL SERVER (Version 2008)

On ne va, ici, présenter que pour deux cites : « Autres Sites » et « Fonction Publique »

Notes : pour « Autres Site », nous considérerons le cas de la Primature. Les Etapes :

- Lancement

109

- Scripts de la création de quelques tables

(1) Nom de la Première BD dans le site de la Primature : Primature_BD_Salaire

Table Agent et toutes ses contraintes : USE [Primature_BD_Salaire]

GO

CREATE TABLE [dbo].[PRI_T_Agent](

[codeagent] [nchar](20) NOT NULL,

[nom] [nvarchar](max) NULL,

[postnom] [nvarchar](max) NULL,

[prenom] [nvarchar](max) NULL,

[sexe] [nvarchar](max) NULL,

[date_naissance] [date] NULL,

[etat_civil] [nvarchar](max) NULL,

[nombre_enfant] [int] NULL,

[telephone] [nvarchar](max) NULL,

[avenue] [nvarchar](max) NULL,

[numero] [nvarchar](max) NULL,

[quartier] [nvarchar](max) NULL,

[commune] [nvarchar](max) NULL,

[niveau_etude] [nvarchar](max) NULL,

[idservice] [nchar](30) NULL,

[idgrade] [nchar](30) NULL,

[idfonction] [nchar](30) NULL,

[date_embauche] [date] NULL,

CONSTRAINT [PK_PRI_T_Agent] PRIMARY KEY CLUSTERED

(

[codeagent] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,

ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

110

Table Grade : USE [Primature_BD_Salaire]

GO

CREATE TABLE [dbo].[PRI_T_Grade](

[idgrade] [nchar](30) NOT NULL,

[salaire_base] [money] NULL,

CONSTRAINT [PK_PRI_T_Grade] PRIMARY KEY CLUSTERED

(

[idgrade] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

Table Indemnité :

USE [Primature_BD_Salaire]

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[PRI_T_Indemnite](

[nomIndemnite] [nchar](30) NOT NULL,

[info] [nvarchar](max) NULL,

CONSTRAINT [PK_PRI_T_Indemnite] PRIMARY KEY CLUSTERED

(

[nomIndemnite] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

Table Prêt avec toutes contraintes :

USE [Primature_BD_Salaire]

GO

CREATE TABLE [dbo].[PRI_T_Indemnite](

[nomIndemnite] [nchar](30) NOT NULL,

[info] [nvarchar](max) NULL,

CONSTRAINT [PK_PRI_T_Indemnite] PRIMARY KEY CLUSTERED

(

[nomIndemnite] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

Table Prime :

111

USE [Primature_BD_Salaire]

GO

CREATE TABLE [dbo].[PRI_T_Prime](

[nomPrime] [nchar](30) NOT NULL,

[info] [nvarchar](max) NULL,

CONSTRAINT [PK_PRI_T_Prime] PRIMARY KEY CLUSTERED

(

[nomPrime] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

Table Retenue

USE [Primature_BD_Salaire]

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[PRI_T_Retenue](

[nomRetenue] [nchar](30) NOT NULL,

[montant] [money] NULL,

CONSTRAINT [PK_PRI_T_Retenue] PRIMARY KEY CLUSTERED

(

[nomRetenue] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

112

Table Salaire avec toutes ses contraintes : USE [Primature_BD_Salaire]

GO

CREATE TABLE [dbo].[PRI_T_Salaire](

[numSalaire] [int] IDENTITY(1,1) NOT NULL,

[trace_operation] [nvarchar](max) NULL,

[net_a_payer] [money] NULL,

[date_paiement] [date] NULL,

[mois_paiement] [nvarchar](max) NULL,

[codeagent] [nchar](20) NULL,

CONSTRAINT [PK_PRI_T_Salaire] PRIMARY KEY CLUSTERED

(

[numSalaire] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

ALTER TABLE [dbo].[PRI_T_Salaire] WITH CHECK ADD CONSTRAINT

[FK_PRI_T_Salaire_PRI_T_Agent] FOREIGN KEY([codeagent])

REFERENCES [dbo].[PRI_T_Agent] ([codeagent])

ON UPDATE CASCADE

GO

ALTER TABLE [dbo].[PRI_T_Salaire] CHECK CONSTRAINT

[FK_PRI_T_Salaire_PRI_T_Agent]

GO

- Présentation de la BD implémentée

113

(2) Nom de la Deuxième BD dans le Site de la Fonction : FONC_BD_IMMATRICULATION

Table Institution : USE [FONC_BD_IMMATRICULATION]

GO

CREATE TABLE [dbo].[FONC_IMM_T_Institution](

[nomInstitution] [nchar](50) NOT NULL,

[adresse] [nvarchar](max) NULL,

CONSTRAINT [PK_FONC_IMM_T_Institution] PRIMARY KEY CLUSTERED

(

[nomInstitution] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

114

Tableau Immatriculation USE [FONC_BD_IMMATRICULATION]

GO

CREATE TABLE [dbo].[FONC_IMM_T_Immatriculation](

[matricule] [nchar](20) NOT NULL,

[codeagent] [nchar](20) NULL,

[nomInstitution] [nchar](50) NULL,

CONSTRAINT [PK_FONC_IMM_T_Immatriculation] PRIMARY KEY CLUSTERED

(

[matricule] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =

OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

- Présentation de la BD implémentée

115

Configuration de la Réplication : sous SQL SERVER (Version 2008) (1) Création de la Publication

- Pour configurer la réplication d’une Base de Données, on fait ce qui suit dans le

module « Réplication » de l’SQL SERVER.

- Choisir la BD à répliquer

116

- Choisir le type de Publication, en d’autre terme, quelle type de réplication

Nous avons donc choisi, la capture instantanée, le snapshop. Publication de capture instantanée :

Le serveur de publication envoie une capture instantanée des données publiées aux Abonnés, à des intervalles planifiés.

Publication transactionnelle :

Le serveur de publication diffuse les transactions aux Abonnés une fois qu'ils ont reçu une capture instantanée initiale des données publiées.

Publication transactionnelle avec abonnements pouvant être mis à jour :

Le serveur de publication diffuse les transactions aux Abonnés SQL Server une fois qu'ils ont reçu une capture instantanée initiale des données publiées. Les transactions en provenance des Abonnés sont appliquées sur le serveur de publication. Publication de fusion :

Le serveur de publication et les Abonnés peuvent mettre à jour les données publiées de manière indépendante, une fois que les Abonnés ont reçu une capture instantanée initiale des données publiées. Les modifications sont fusionnées périodiquement. Microsoft SQL Server Compact Edition ne peut s'abonner qu'aux publications de fusion.

117

- A ce niveau, c’est déjà la fragmentation, soit verticale comme notre cas, soit horizontale, dans lequel cas on doit simplement filtre les la requête à l’aide de la fenêtre suivante.

- Fixation du délai de la mise à jour de la capture

A lieu tous les jours toutes les 1 heure(s) entre 00:00:00 et 23:59:59. La planification sera utilisée en commençant le 19/02/2012.

118

- On nomme la publication

- Et on termine. Succès !

(2) Création d’Abonnement de la publication (Précédente)

- Choisir la publication dans un serveur donné (dans un autre poste ou en local)

119

- Choisir la BD où s’appliquera la réplication

- On fait « suivant » et on termine. Succès !

Et bien voila, pour la publication et l’abonnement, le résultat.

120

III.4.2.4.5. Présentation de l’Application

Dans les « Autres Sites » : « Primature » :

- Enregistrement d’une nouvelle unité

(1) Accueil de l’Application « SalaryManager »

- 1 : on s’authentification d’abord - 2 : puis on choisit une rubrique, comme pour notre cas, c’est la rubrique

« Information sur l’Agent ».

2

1

121

(2) Enregistrement d’une Nouvelle Unité

On vient d’enregistrer l’agent NU dont le code est : « pri/ag/5 », et maintenant il en reste pour l’immatriculation.

pri/ag/5

122

Dans le Site de la Fonction Publique :

- Immatriculation de la nouvelle unité : pri/ag/5

(3) Accueil de l’Application « SalaryManager »

123

(4) Retrouver les NU et Immatriculer : (pri/ag/5)

-

- 1 : choisir, l’institution ; - 2 : valider, et on a la liste, avec la NU dont le code « pri/ag/5 » ; - 3 : puis enregistrement du matricule - 4 : validation avec succès.

Allons maintenant voir la répercussion dans l’autre base de données.

pri/ag/5 1

2

3

4

124

De retour dans les « Autres Sites » : « Primature » :

- Affichage des immatriculés

(5) Visualisation de la NU immatriculé

KIN/12/0003

Immatriculé avec succès

125

Calcul de Salaire dans les « Autres Sites » : « Primature » :

- Dans la Rubrique : « Rémunération »

(6) Retrouver l’agent « pri/ag/5 » pour calculer son volume salarial du mois de janvier.

L’Agent « pri/ag/5 » dont le nom est Kayemba Mbwebwe Denis touchera 755$ pour le mois de Janvier.

Pri/ag/5

126

Voici les éléments à base de ce montant : le salaire de base, l’indemnité, les primes, le retenue et le prêt.

Salaire Net = Salaire de Base + Prime + Indemnité – Retenue - Prêt

Une fois que le calcul est fait, la Finance reçoit la situation de tous les agents de toutes les entreprises, avec tous les détails prouvant la somme du salaire et ainsi la Finance et rapport avec le Listing des agents reconnus par L’Etat Congolais c'est-à-dire immatricule, se rend compte de tout et paie ces derniers.

Présentation de Code source en C# :

Comme l’analyse a débouché sur l’utilisation de la BD, alors toutes les classes sont devenues des tables de la BD pour faire la couche Donnée sous SQL SERVER ; la couche Présentation ou Interface (Homme-Machine), c’est celle présentées juste un peu ci-haut et pour la couche métier ou applicative, on a : Couche applicative, on a :

3 fichiers de classes : - TransactionLecture.cs : pour exécuter des transactions de lecture, c’est

aussi ici que nous faisons la gestion de la concurrence par le biais de niveau d’isolation.

- TransactionEcriture.cs : pour exécuter des transactions d’écriture à savoir, d’insertion, de mise à jour et de suppression. La gestion de la concurrence y est implémentée.

- AutresOperations.cs : qui rassemble les autres opérations essentielles pour chaque formulaire.

Et en plus, on a des modules derrière chaque formulaire.

127

(1) TransactionLecture.cs using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;

using System.Windows.Forms;

namespace Salary

{

class TransactionLecture

{

static string site = "Primature_";

static string _table = "PRI_T_";

SqlConnection connexion = null;

SqlCommand commande = null;

string chaineConnexion = "Data Source=." +

@"\LASOURCESERVER2;Initial Catalog="+site+"BD_Salaire;Integrated

Security=true;";

IsolationLevel niveau_iso = IsolationLevel.Serializable;

SqlTransaction transaction = null;

public TransactionLecture()

{

try

{

connexion = new SqlConnection(chaineConnexion);

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public SqlDataReader ExecuterTransaction(string requete)

{

try

{

connexion.Open();

transaction = connexion.BeginTransaction(niveau_iso);

commande = connexion.CreateCommand();

commande.Transaction = transaction;

commande.CommandText = requete;

return (SqlDataReader)commande.ExecuteReader();

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

return null;

}

public void FermerConnexion()

128

{

try

{

connexion.Close();

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public static string Table

{

get

{

return _table;

}

}

}

}

(2) TransactionEcriture.cs using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;

using System.Windows.Forms;

namespace Salary

{

class TransactionsEcriture

{

static string site = "Primature_";

static string _table = "PRI_T_";

protected SqlConnection connexion = null;

protected SqlCommand commande = null;

protected string chaineConnexion = "Data Source=." +

@"\LASOURCESERVER2;Initial Catalog=" + site + "BD_Salaire;Integrated

Security=true;";

IsolationLevel niveau_iso = IsolationLevel.Serializable;

public TransactionsEcriture(string requete)

{

try

{

connexion = new SqlConnection(chaineConnexion);

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

129

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

using (SqlConnection connection = new

SqlConnection(chaineConnexion))

{

connection.Open();

SqlTransaction transaction =

connection.BeginTransaction(niveau_iso);

SqlCommand commande = connection.CreateCommand();

commande.Transaction = transaction;

try

{

commande.CommandText = requete;

commande.ExecuteNonQuery();

//

transaction.Commit();

MessageBox.Show("Transaction validée");

}

catch (Exception ex)

{

transaction.Rollback();

MessageBox.Show("Une Erreur est survenue! La voici ::

\n" + ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

finally

{

connection.Close();

}

}

}

public string Table

{

get

{

return _table;

}

}

}

}

130

(3) Formulaire de Rémunération : Form4 using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace Salary

{

public partial class Form4 : Form

{

string table = "";

string traceOperation = "";

public Form4()

{

InitializeComponent();

}

public void RemplirRetenueListe()...

public void RemplirAgentsListe()...

public void RemplirIndemniteGradeListe(string grade)...

public void RemplirPrimeGradeListe(string grade)...

public void RemplirPretListe(string codeagent, DateTime dat)...

public void RemplirAgentsListe(string requete)...

public string Trace()...

public void AfficherInfoSalaire(string codeagent, string

numsalaire)...

public void AfficherTraceSalaire(string numsal)...

public void RemplirSalaireListe(string requete)

{

try

{

TransactionLecture transSalaire = new TransactionLecture();

SqlDataReader Lect =

transSalaire.ExecuterTransaction(requete);

dgvListeSalaire.Rows.Clear();

int i = 0;

decimal totalMontant = 0;

while (Lect.Read())

{

dgvListeSalaire.Rows.Add(Lect.GetValue(5).ToString().Trim(),

new

AutreOperations().RetournerCodeNom(Lect.GetValue(5).ToString().Trim()),

131

new

AutreOperations().TraiteStringArgent(Lect.GetValue(2).ToString().Trim())

, Lect.GetValue(4).ToString().Trim(),

new

AutreOperations().RetournerDateValide(Lect.GetValue(3).ToString().Trim()));

dgvListeSalaire.Rows[i].HeaderCell.Value =

Lect.GetValue(0).ToString().Trim();

totalMontant += decimal.Parse(new

AutreOperations().TraiteStringArgent

(Lect.GetValue(2).ToString().Trim()));

i++;

}

dgvListeSalaire.Rows.Add("TOTAL", "", totalMontant, "","");

dgvListeSalaire.Rows[i].HeaderCell.Value = "#";

transSalaire.FermerConnexion();

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public void InsererInfoSalaire(string codeag, string grade, string

nom, string mois)

{

try

{

if (codeag == string.Empty || nom == string.Empty || grade

== string.Empty

|| mois == "...")

{

MessageBox.Show("Des Champs sont Vides!", "Attention

!",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

else

{

string datePaiement =

dtdatePaiement.Value.Date.ToShortDateString();

string moisPayer =

dtmoisPayer.Text.Split(char.Parse("/"))[1] + "/" +

dtmoisPayer.Text.Split(char.Parse("/"))[2];

string mont;

bool existe = new

AutreOperations().ExisteAgentSalaire(codeag.Trim(), moisPayer.Trim(),out

mont);

if (existe == true)

{

MessageBox.Show("L'Agent :: ["+codeag+"]-[" + new

AutreOperations().RetournerCodeNom(codeag) +

"] a reçu son salaire de [" + mont + " $]; Pour le

mois de [" + moisPayer + "] ::", "Attention !",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

else

{

string trace = Trace();

string salaireNet = rbsalaireNet.Text;

132

decimal salaire = decimal.Parse(salaireNet.Trim());

salaireNet = new

AutreOperations().TraiteStringArgent

(salaire.ToString().Trim());

string requete = "insert into " + table +

"Salaire(trace_operation, net_a_payer,

date_paiement," +

" mois_paiement, codeagent) values ('" +

trace.Trim() + "','" +

salaireNet.Trim() + "','" + datePaiement.Trim()

+ "','" +

moisPayer.Trim() + "','" + codeag.Trim() +

"')";

TransactionsEcriture transSalaire = new

TransactionsEcriture(requete);

RemplirSalaireListe("select * from " + table +

"Salaire order by date_paiement");

}

}

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public void MiseAJourInfoSalaire(string cle, string codeag, string

grade, string nom, string mois)

{

try

{

if (cle == "..." || codeag == string.Empty || nom ==

string.Empty || grade == string.Empty

|| mois == "...")

{

MessageBox.Show("Des Champs sont Vides!", "Attention

!",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

else

{

if (DialogResult.Yes == MessageBox.Show("Etes-Vous sure

? \n\nVous êtes en train de " +

" supprimer l'information sur la table Salaires " +

@" """ + cle + @""" !" + "\n\nEt La Répercusion

sera dans toute la Base de Données!",

"Confirmation !", MessageBoxButtons.YesNo,

MessageBoxIcon.Question))

{

string requete = "delete from " + table + "Salaire

where numSalaire = '" + cle + "'";

TransactionsEcriture transRetenue = new

TransactionsEcriture(requete);

RemplirSalaireListe("select * from " + table +

"Salaire order by date_paiement");

133

}

}

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public void NettoyerSalaire()...

public void NettoyerSalaire_Rec()...

public void RemplirSalaireListeParMois(string mois, string code)

{

try

{

string requete = "";

if (code == "")

{

requete = "select * from " + table + "Salaire order by

date_paiement";

}

else

{

requete = "select * from " + table + "Salaire where

codeagent = '" +

code + "' order by date_paiement";

}

TransactionLecture transSalaire = new TransactionLecture();

SqlDataReader Lect =

transSalaire.ExecuterTransaction(requete);

dgvListeSalaire.Rows.Clear();

int i = 0;

decimal totalMontant = 0;

while (Lect.Read())

{

string ladate = new

AutreOperations().RetournerDateValide(Lect.GetValue(3).ToString().Trim());

if (ladate.EndsWith(mois))

{

dgvListeSalaire.Rows.Add(Lect.GetValue(5).ToString().Trim(),

new

AutreOperations().RetournerCodeNom(Lect.GetValue(5).ToString().Trim()),

new

AutreOperations().TraiteStringArgent(Lect.GetValue(2).ToString().Trim())

, Lect.GetValue(4).ToString().Trim(),

new

AutreOperations().RetournerDateValide(Lect.GetValue(3).ToString().Trim()));

dgvListeSalaire.Rows[i].HeaderCell.Value =

Lect.GetValue(0).ToString().Trim();

totalMontant += decimal.Parse(new

AutreOperations().TraiteStringArgent

(Lect.GetValue(2).ToString().Trim()));

i++;

}

}

134

dgvListeSalaire.Rows.Add("TOTAL", "", totalMontant, "",

"");

dgvListeSalaire.Rows[i].HeaderCell.Value = "#";

transSalaire.FermerConnexion();

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

public void RechercheSalaire(string codeAg, string mois, string

dat)

{

try

{

RemplirSalaireListe("select * from " + table + "Salaire

order by date_paiement");

string requete = "";

mois = mois.Trim().Split(char.Parse("/"))[1] + "/" +

mois.Trim().Split(char.Parse("/"))[2];

if (chkdatePaie.CheckState == CheckState.Checked)

{

requete = "select * from " + table + "Salaire where

date_paiement = '" +

dat + "' order by codeagent";

RemplirSalaireListe(requete);

}

if (chkparAgent.CheckState == CheckState.Checked)

{

requete = "select * from " + table + "Salaire where

codeagent = '" +

codeAg + "' order by date_paiement";

RemplirSalaireListe(requete);

}

if (chkparDate.CheckState == CheckState.Checked)

{

requete = "select * from " + table + "Salaire where

mois_paiement = '" +

mois + "' order by date_paiement";

RemplirSalaireListe(requete);

}

if ((chkparAgent.CheckState == CheckState.Checked) &&

(chkparDate.CheckState == CheckState.Checked))

{

requete = "select * from " + table + "Salaire where

codeagent = '" +

codeAg + "' and mois_paiement = '" + mois + "'

order by date_paiement";

RemplirSalaireListe(requete);

}

if ((chkparAgent.CheckState == CheckState.Checked) &&

(chkdatePaie.CheckState == CheckState.Checked))

{

requete = "select * from " + table + "Salaire where

codeagent = '" +

codeAg + "' and date_paiement = '" + dat + "'

order by codeagent";

135

RemplirSalaireListe(requete);

}

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

private void Form4_Load(object sender, EventArgs e)...

private void cbbagentMatricule_SelectedIndexChanged(object sender,

EventArgs e)...

private void tbgrade_TextChanged(object sender, EventArgs e)...

private void tbnomAgent_rec_TextChanged(object sender, EventArgs

e)...

private void btnAjouterPret_Click(object sender, EventArgs e)...

private void btnCalculSalaire_Click(object sender, EventArgs e)...

private void dgvListeSalaire_CellMouseClick(object sender,

DataGridViewCellMouseEventArgs e)...

private void btnActualiser_Click(object sender, EventArgs e)...

private void btnVisualiser_Click(object sender, EventArgs e)...

private void btnNettoyerPret_Click(object sender, EventArgs e)...

private void btnSupprimerPret_Click(object sender, EventArgs e)...

private void btnRecherchePret_Click(object sender, EventArgs e)

{

RechercheSalaire(cbbagent_rec.Text, dtdateSalaire_rec.Text,

dtdatesal_rec.Text);

}

private void btnValiderConv_Click(object sender, EventArgs e)

{

try

{

if (tbtauxFranc.Text == string.Empty || tbsomme1.Text ==

string.Empty)

{

MessageBox.Show("Des Champs sont Vides!", "Attention

!",

MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

else

{

decimal tauxf = decimal.Parse(tbtauxFranc.Text.Trim());

decimal som1 = decimal.Parse(tbtauxFranc.Text.Trim());

tbsomme2.Text = (som1 * tauxf).ToString();

}

136

}

catch (Exception ex)

{

MessageBox.Show("Une Erreur est survenue! La voici :: \n" +

ex.Message,

"ATTENTION!", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

private void chkmodifier_CheckedChanged(object sender, EventArgs

e)...

private void button2_Click(object sender, EventArgs e)...

private void elémentsDuSalaireToolStripMenuItem1_Click(object

sender, EventArgs e)...

private void elémentsDuSalaireToolStripMenuItem_Click(object

sender, EventArgs e)...

private void informationSurLAgentToolStripMenuItem_Click(object

sender, EventArgs e)...

private void Form4_FormClosing(object sender, FormClosingEventArgs

e)...

private void accueilToolStripMenuItem_Click(object sender,

EventArgs e)...

}

}

Rappels

Ce chapitre si long, qu’on ne perd de vue malgré ça, nous a permis à présenter notre

contribution en mettant au point un Logiciel de Traitement de salaire « SalaryManager »

tablé sur les notions présentées ci précédemment à savoir, depuis les notions introductives

des systèmes distribués à celle de transactions et de la gestion de transactions concurrentes.

Nous avons donc eu ce temps de montrer comment ces notions pouvaient être

d’application tant dans la conception de la BDR que dans les outils utilisés pour la mise en

place de l’application, ce chapitre en témoigne de soi.

137

[Conclusion]

138

Conclusion

La concurrence, voire la concurrence de transactions est pourtant loin d’être une

poursuite pour les Bases de Données Réparties, c’est plutôt une contrainte que ces dernières

sont censées gérer, car en tant qu’un système distribué, elles doivent censément gérer des

traitements concurrents. A travers les théories si bellement et méticuleusement exposées,

on a vu que la concurrence, qui est aussi une sollicitation simultanée, pouvaient causer, à

part l’incohérence de données, de la surcharge qui entache la disponibilité du Système, et on

a vu que qu’une bonne réplication pouvait amoindrir le taux d’une sollicitation excessive

d’une ressource. Cette notion de réplication est aussi d’application dans les Bases de

Données Réparties.

Conformément à ce que reprend [6], que nonante pourcent (90%) de données doivent

être trouvé dans le site local, et seulement dix (10%) dans un site distant, et puisque

l’emplacement d’exécution d’une transaction est un point très capital [5], il va de soi à dire

que réellement la réplication est aussi une voie pour contourner le méfait de la concurrence,

même si elle est exigeante du coté mise à jour et synchronisation de fragments.

Aux points positifs ci-dessus, on peut maintenant ajouter une bonne gestion de

transactions concurrentes par le biais des algorithmes de contrôle de concurrence qui sont

implémentés par exemples dans SQL SERVER par le niveau d’isolation qu’on attribue à

chaque transaction lorsqu’elle s’exécute de sorte à pouvoir contrôler tant son accès aux

données que celui des autres transactions qui lui sont concurrente. Chaque niveau

détermine donc un comportement donné dans l’accès de données tant pour la lecture que

pour l’écriture, d’où son choix est très important.

Toute cette logique de gestion de concurrence de transactions réunie ensemble et

mise en pratique dument, permet donc de mettre sur pied des systèmes distribués, dont

bien sûr la Base de Données répartie reste disponible et cohérente.

Ceci, nous avons l’audace de le croire, est le cas pour notre application informatique,

qui est passée par cette logique, et qui censure en même temps notre étude par sa

concrétisation.

A cette étape, nous pouvons déjà faire le bilan de notre solution informatique et voir si

la problématique posée tout au début, a rencontré la solution la plus appropriée.

Bien sûr qu’à présent, grâce à la solution informatique qui s’articule sur le logiciel

nommé SalaryManager monté par l’entremise des technique et technologie avancée ci haut,

l’immatriculation des agents est désormais très aisée, et grâce à la réplication, il ne suffit

qu’une entreprise enregistre une nouvelle unité (NU) , la Fonction Publique sera alors dans

139

un bref délai tenu informé dans sa base de donnée et pourra alors et simplement

l’immatriculer, et inversement une fois que la NU est immatriculée, l’information répercute

ou mieux se réplique à la source. Ceci a un avantage de gain en temps et de souplesse dans

les tâches et évites aussi trop de paperasses. Et par conséquent, il y a une facilité de

connaître l’effectif des tous les agents de l’Etat.

Et aussi mêmement, quand la NU est immatriculée, la Fonction Publique réplique cette

information ou mieux toutes les informations sur les agents immatriculés à la Finance.

De cette manière, chaque entreprise déjà connectée dans l’e-Gouvernement et

possédant ce logiciel a cette possibilité à son niveau local de calculer le salaire des agents, et

ainsi d’un coup et dans un bref délai les informations de calcul vont se synchroniser aussi au

niveau du ministère de Finance, et comme ça ce dernier pour payer ces agents aussi en

fonction des agents déjà immatriculés en provenance de la Fonction Publique.

Ce présent travail, ainsi que sa solution toute complète est un projet très vaste

et très coûteux depuis son étude jusqu’à sa réalisation ; et la solution apportée peut

encore comporter d’autres paramètres tels que : le calcul détaillé de élément constituant

le salaire de base, depuis la prestation jusqu’aux heures supplémentaires, le suivi en temps

réel des opérations de mutation et de transfert des agents de l’Etat, etc. pour avoir un

Logiciel très complet du personnel de l’Etat.

140

Référence

[1] A. Eftekari, Systèmes Transactionnels Répartis, Laboratoire Gracimp (ICTT) de l’INSA.

[2] Achraf Cherti, Jargon Informatique, Logiciel, Version 1.3.6, Avril 2006

[3] Anne Doucet, Transactions réparties, Module BDR Master d’Informatique (SAR) ; Cours.

[4] Arun Kumar Yadav et Ajay Agarwal, An Approach for Concurrency Control in

Distributed Database System, International Journal of Computer Science & Communication Vol. 1, No. 1, January-June 2010

[5] Anis Haj Said, Laurent Amanton, Bruno Sadeg, Contrôle de la réplication

dans les SGBD temps réel distribués, Laboratoire d’Informatique, de Traitement de l’Information et des Systèmes (LITIS) – Université du Havre, [email protected]

[6] Arjan SINGH and K.S. KAHLON, Non-replicated Dynamic Data Allocation in Distributed Database Systems, IJCSNS International Journal of Computer Science and Network Security, VOL.9 No.9, September 2009.

[7] A. S. Tanenbaum and M. VAN STEEN. Distributed Systems : Principles and Paradigms. Prentice Hall, 1999.

[8] Alexander Thomasian (Senior Member, IEEE), Distributed Optimistic Concurrency Control Methods for High-Performance Transaction Processing, IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING, VOL. 10, NO. 1 , JANUARY/FEBRUARY 1998

[9] Aurélien Esnard, Systèmes Répartis, ENSEIRB PG306-IT343, [email protected],

http://www.labri.fr/~esnard

[10] Bertrand DUCOURTHIAL, Introduction aux systèmes répartis (chapitre 1), [email protected], 2007 v0.9-POLY.

[11] Darius KUGEL, Client-serveur : Introduction aux modèles client-serveur, Cours, [email protected]

[12] D. Skeen and M. Stonebraker, “A formal model of crash recovery in a distributed system,” IEEE Trans. Software Eng., vol. 9, no. 3, pp. 219–228, 1983.

141

[13] Eric Cariou, Introduction aux Systèmes Distribués, Licence Informatique 3ème année, Université de Pau et des Pays de l'Adour - Département Informatique, [email protected]

[14] Eric Leclercq & Marinette Savonnet, Chapitre I : Protocoles client serveur et architectures distribuées, Département IEM / UB, [email protected], Février 2008, Page 3.

[15] Eugene MBUYI, Système d’Information et Base de Données (Deuxième partie), Université de Kinshasa – Fac Sciences- Dpt Math-Info - L1-L2 Génie Informatique – 2010-2011

[16] Eltayeb Salih Abuelyaman, An Optimized Scheme for Vertical Partitioning of a

Distributed Database, CCIS, Prince Sultan University, Riyadh 11586, Saudi Arabia

[17] Articles sur les transactions dans le FireBirdsql, http://www.firebirdsql.org

[18] Frank SINGHOFF, Introduction aux systèmes à objets et services répartis, Bureau C-203, Université de Brest, France, LISyC/EA 3883, [email protected]

[19] Gopal Ashok (Microsoft Corporation) et Paul S. Randal (SQLskills.com), SQL Server Replication: Providing High Availability using Database Mirroring

[20] GRAHAM CHEN, distributed transaction processing standards and their applications, Tiré de “ the Computer Standards and Interfaces 17 (1995) pp 363-373”

[21] Harold CUNICO, ADO .NET : utilisation des transactions Version 1.0, Association

DotNet France, www.dotnetfrance.com

[22] Hercule KALONJI KALALA, Transactions reparties (Systèmes d’objets répartis), Université de Kinshasa – Fac Sciences- Dpt Math-Info – Licence - Génie Informatique – 2009-2010

[23] Hercule KALONJI KALALA, réplication des données (Systèmes d’objets répartis :

Chapitre VII), Université de Kinshasa – Fac Sciences- Dpt Math-Info - Licence - Génie Informatique – 2009-2010

[24] Haroun RABABAAH, DISTRIBUTED DATABASES FUNDAMENTALS AND RESEARCH,

Advanced Database – B561. Spring 2005. Dr. H. Hakimzadeh, Department of Computer and Information Sciences, Indiana University South Bend.

[25] Idriss SARR, Routage de Transaction dans les Bases de Données à Large Echelle, Thèse – O7-Octobre-2010, Université Pierre et Marie Curie (Parie VI)

[26] ISO/IEC 10026-1, Information technology-Open Systems Interconnection-Distributed

142

Transaction : Part 1 OSI TP Model, Part 2 OSI TP Service Definition, Part 3 OSI TP Protocol Specification, - 1993

[27] Joël LILONGA BOKELETUMBA, Langage Pour Système, Université de Kinshasa – Fac Sciences- Dpt Math-Info – L1 Génie Informatique – 2010-2011

[28] Jim Gray, Transaction Processing: Concepts and Techniques, April 2007,© 2007

Sombers Associates, Inc., and W. H. Highleyman, www.availabilitydigest.com

[29] KAYEMBA KAVUALLA Sagesse, Recherche d’un chemin minimal facilitant le Service Anti-incendie d’atteindre le lieu de sinistre, Travail de fin de cycle, Université de Kinshasa – Fac Sciences- Dpt Math-Info – G3 Informatique – 2008 – 2009

[30] Luc Bouganim, Bases de données : Architecture et Systèmes ; Cours 2 : Transactions ;

PRiSM Versailles - INRIA, Rocquencourt

[31] Laurence Duchien, Le Transactionnel Réparti, Transactions et environnements CORBA, CNAM- Laboratoire CEDRIC ; 292, rue St Martin, 75141 Paris, Cedex 03, email : [email protected]

[32] Muhammad Atif, Analysis and Verification of Two-Phase Commit & Three-Phase

Commit Protocols, Department of Mathematics and Computer Science, Technische Universiteit Eindhoven, P.O. Box 513, 5600 MB Eindhoven, The Netherlands, Email: [email protected]

[33] Matthieu Exbrayat, Gestion de Transactions dans les Systèmes Distribués, ULP

Strasbourg – Décembre 2007

[34] D. S. Milojicic, V. Kalogeraki, R. Lukose, K. Nagaraja, J. Pruyne, B. Richard, S. Rollins and Z. Xu, “Peer-to-Peer Computing”. Tech. Report: HPL-2002-57, available on line at: http://www.hpl.hp.com/techreports/2002/HPL-2002-57.pdf

[35] Ministère des Postes, Téléphones et Télécommunications (MPTT), Rapport de l’étude de faisabilité, L’infrastructure des TIC pour le projet d’E-Gouvernement de la République Démocratique du Congo, Mai 2007

[36] M. Raddad AL KING, Localisation de sources de données et optimisation de requêtes réparties en environnement pair-à-pair, Université Toulouse III – Paul Sabatier, Discipline : Informatique, Mai 2010

[37] MSDN, Microsoft Developper Network, msdn.microsoft.com – 02 Décembre 2011 (Date de visitation du site)

[38] http://msdn.microsoft.com/en-us/library/ms151198(SQL.100).aspx, for SQL Server

2008

[39] Nathanael KASORO, Langage Formel et Compilation, Cours, Université de Kinshasa –

Fac Sciences- Dpt Math-Info – Licence, 2010-2011

143

[40] Nicolas LUMINEAU, Interopérabilité et Intégration des systèmes d’information : TIW3,

Université de Claude Bernard – Lyon 1, [email protected], 2008, Page 5-6

[41] Olabode OLATUBOSUN et Solanke OLAKUNLE, Framework for Client-Server Distributed Database System for Licensing and Registration of Automobiles in Nigeria, E-mail: [email protected].

[42] PHILIP A. BERNSTEIN AND NATHAN GOODMAN, Concurrency Control in Distributed Database Systems, Computer Corporation of America, Cambridge, Massachusetts 02139, February 1981

[43] Paul Krzyzanowski, Lectures on distributed systems: A taxonomy of distributed

systems, Rutgers University – CS 417, 2000-2003

[44] Roland BALTER, Gestion répartie des transactions, Projet INRIA Sirac ; 655, av de l’Europe ; 38330 Montbonnot ; Août 1993 ;

[45] Rim MOUSSA, Systèmes de Gestion de Bases de Données Réparties & Mécanismes de Répartition avec Oracle, Novembre 2006,

Ecole Supérieure de Technologie et d’Informatique à Carthage, 2005-2006, [email protected], http://ceria.dauphine.fr//Rim/SupportBDR.pdf

[46] Ricardo R. JACINTO MONTES, Protocoles de validation à deux phases dans les

systèmes transactionnels répartis : Spécification Modélisation et vérification, LABORATOIRE D’ ANALYSE ET D’ARCHITECTURE DES SYSTEMES DU CNRS, Toulouse-France, Thèse – O6-Janvier – 1995

[47] Shahidul Islam Khan et Dr. A. S. M. Latiful Hoque, A New Technique for Database

Fragmentation in Distributed Systems, International Journal of Computer Applications (0975 – 8887) Volume 5– No.9, August 2010

[48] Saint-Jean DJUNGU, Réseaux Informatiques, Université de Kinshasa – Fac Sciences- Dpt Math-Info - L2 Gestion Informatique – 2010-2011

[49] Saint-Jean DJUNGU, Génie logiciel et construction des programmes, Université de

Kinshasa – Fac Sciences- Dpt Math-Info - L2 Gestion Informatique – Mai 2009

[50] Sacha Krakowiak, Validation atomique, Université Joseph Fourier, Projet Sardes (INRIA et IMAG-LSR), http://sardes.inrialpes.fr/people/krakowia, Ecole Doctorale de Grenoble, Master 2 Recherche “Systèmes et Logiciel”

[51] Sacha Krakowiak, Introduction aux systèmes et applications répartis, Université

Joseph Fourier, Projet Sardes (INRIA et IMAG-LSR), http://sardes.inrialpes.fr/krakowia

144

[52] Sylvain Lecomte, Cartes Orientées Services Transactionnels et Systèmes Transactionnels Intégrant des Cartes : COST-STIC, Thèse de Doctorat, Université des Sciences et Technologies de Lille, Page 32-33

[53] www.Wikipedia.com