Vous êtes sur la page 1sur 76

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail


DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

SECTEUR NTIC

OFPPT

SECTEUR NTIC
Filire : TDI
Niveau Technicien spcialis

Manuel de TP
Module18 : Systme de Gestion de Bases de Donnes II

p. 1

MODULE 18 : SYSTME DE GESTION DE BASES DE DONNES II


Code : TDI-18

Dure : 75 h

PRECISIONS SUR LE COMPORTEMENT


ATTENDU

CRITERES PARTICULIERS DE
PERFORMANCE

A. crire des scripts dans le langage


procdural du SGBD.

B. Surveiller et dpanner SQL Server

C. Manipuler les jeux denregistrement.


D. Programmer des procdures et des
fonctions sur le SGBD.

E. Crer des packages sur le SGBD.


F. Programmer des dclencheurs.

G. Optimiser les performances SQL Server

Prsentation des instructions du langage de


programmation :
les variables et les types de donnes ;
les variables lmentaires et complexes ;
les structures de contrle ;
les conditions ;
Les EXCEPTIONS : prdfinies et utilisateur.
Identification des problmes de la fonction de SQL
Server.
Identification des problmes d'accs concurrentiels.
Identification des problmes de l'excution du travail
de l'Agent SQL.
Recherche des informations sur l'erreur.
Dfinition d'un curseur : implicite, explicite.
Dfinition des attributs de curseurs.
Manipulation du contenu dun curseur.
Description du formalisme respecter.
Programmation des procdures stockes sur le
SGBD.
Appel des fonctions partir de requtes SQL.
Test du programme et correction des erreurs.
Description du formalisme respecter.
Prsentation des packages standard.
Programmation des packages.
vnements qui dclenchent les triggers.
Formalisme respecter.
Programmation des Triggers.
Test du trigger et correction des erreurs.
Mise en uvre du gouverneur de ressources.
Assistant Paramtrage du moteur de base de
donnes.
Collecte des donnes de trace l'aide du gnrateur
de profils SQL Server.
Collecte des donnes de performances en utilisant
des vues de gestion dynamique (DMV).
Collecte des donnes de performance l'aide du
moniteur systme.
UTI Performance Studio.

p. 2

H. Mettre en uvre la haute disponibilit

Mise en uvre de la mise en miroir de base de


donnes.
Mise en place dune instance en cluster de SQL
Server.
Mise en uvre de lenvoi de journaux.
Implmentation de la rplication.

p. 3

Activit dapprentissage 1
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A001

Activit

Dclarer et manipuler des variables

Dure

45 mn

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Dclarer des variables de diffrentes types


Transact-Sql.
Initialiser des variables
Utiliser des variables.

.
..
............

p. 4

DESCRIPTION DE LACTIVIT
Pour grer les membres dun forum de programmation, on dispose de la table suivante :
Membre (Pseudo, E-mail, Mot de passe, Date de naissance, Date dinscription, Ville)
Travail faire :
Crer la table Membre.
Enregistrer quelques membres dans la table.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

Dclarer une variable @ville et linitialiser avec le nom de votre ville.


En utilisant la variable @ville dans une requte SELECT, renvoyer la liste des
membres originaire de votre ville.
Dclarer une variable @nbMembre de type int
Affecter cette variable le nombre total des membres du forum
Afficher, si elles existent, les villes contenant plus que 20% du nombre total des
membres
Dclarer une variable @DateDmarrage de type date
Affecter cette variable la date dinscription du premier membre (la date
dinscription la plus ancienne)
Affecter une autre variable la date du dixime jour aprs linscription du
premier membre, (utiliser DATEADD (day , 10, @DateDmarrage))
En utilisant les deux variables, calculer le nombre des membres inscrits,
pendant les 10 premiers jours.
De la mme manire, calculer le nombre des inscrits les 10 jours suivants
Quel tait le taux dvolution du nombre dinscription ?
taux dvolution = (Nombre dinscrits 2 - Nombre dinscrits 1) / Nombre dinscrits 1
Calculer dans une nouvelle variable lge moyen des membres
Afficher les membres dont lge est suprieur lge moyen calcul
prcdemment.

p. 5

Activit dapprentissage 2
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A002

Activit

Implmenter linstruction de contrle : IF- ELSE

Dure

30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Dfinir les conditions avec la structure IF...


ELSE.
Implmenter la structure conditionnelle
Cration de blocs de code avec BEGIN...
END

.
..
............

p. 6

DESCRIPTION DE LACTIVIT
Facture deau

La facture deau est calcule selon un barme tranche.


La consommation mensuelle deau est rpartie en tranches, les informations
concernant les tranches sont donnes dans le tableau suivant :
Quantit m3

Prix unitaire Dh/ m3

<=8

1,29

Entre 9 et 20

4,29

Entre 20 et 36

6,59

> 36

10,37

crire un lot transact-sql qui calcule le montant payer pour une consommation
donne.
Dclarer une variable @consommation et lui affecter la valeur 26.
En utilisant la structure if else calculer et afficher le montant de la consommation.
Excuter le lot
Calculer le montant de la facture pour les consommations suivantes : 6 m3, 15 m3 et 40
m3

p. 7

Activit dapprentissage 3
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A003

Activit

Implmenter linstruction de contrle : IF- ELSE

Dure

30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Dfinir les conditions avec la structure IF...


ELSE.
Implmenter la structure conditionnelle
Cration de blocs de code avec BEGIN...
END

.
..
............

p. 8

DESCRIPTION DE LACTIVIT
Pour encourager lentraide des membres du forum, un systme de bonus point a t
instaur.
Un extrait de la base de donnes est le suivant :
Membre (Pseudo, E-mail, Mot de passe, Date de naissance, Date dinscription, Ville)
Bonus (PseudoMembre, NbPoint)
Travail faire :
Crer la table Membre
Ajouter quelques membres la table
crire un lot Transact-sql qui permet dajouter la base de donnes la table Bonus si
elle nexiste pas et/ou crer la contrainte FOREIGN KEY si elle nexiste pas.
Pour tester lexistence dun objet dans la base de donnes, vous pouvez utiliser
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Nom
objet'))
Dans un nouveau lot Transact-sql, on souhaite ajouter un nombre de points au score d
un membre :
Dclarer une variable @pseudo et lui affecter la valeur TDI2
Dclarer une variable @point et lui affecter la valeur 2
Si le membre a dj eu un bonus, augmenter donc ses points par la valeur de la variable
@point
Sinon ajouter une nouvelle entre dans la table Bonus (@pseudo, @point).

p. 9

Activit dapprentissage 4
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A004

Activit

Implmenter linstruction de contrle : WHILE

Dure

1h30mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Implmenter la structure rptitive


Dfinir la condition darrt de la boucle
While
Cration de blocs de code avec BEGIN...
END
Contrler l'excution des instructions de la
boucle WHILE avec BREAK et CONTINUE.

.
..
............

p. 10

DESCRIPTION DE LACTIVIT
Pour la gestion des rendez-vous dun cabinet mdical, un extrait de la base de donnes
vous est fourni :
RDV (NUM_RDV, DATE_RDV, HEURE_RDV, PATIENT)
Heure_RDV (Heure)
le champ Heure est de type time
Dclarer les variables suivantes
Nom variable
Type
@HeureDebut
Time
@HeureFin
Time
@dure
Int

Valeur initiale
8 :00
14:00
20

Supprimer le contenu de la table Heure_RDV


En utilisant les trois variables, et la structure While, crire une boucle permettant de
remplir la table Heure_RDV comme suit
Heure
8 :00
8 :20
8 :40
13 :40
Pour ajouter @n minute @heure, on crit :
SET @heure = dateadd(minute, @n, @heure)
Pour la prise d'un RDV, on souhaite trouver la date et lheure les plus proches :
Dclarer une variable @jour de type date
Affecter cette variable la date systme.
Dans le bloc dune boucle While, en incrmentant la variable @jour, chercher si elle
existe une heure libre (non affecte un rendez-vous)
le code ne doit pas proposer des rendez-vous le week-end.
Les heures libres peuvent tre obtenues par la requte
SELECT Heure FROM Heure_RDV
EXCEPT
SELECT HEURE_RDV FROM RDV WHERE DATE_rdv = @jour
DATEPART (weekday, @jour) retourne le numro du jour dans la
semaine

p. 11

Activit dapprentissage 5
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A005

Activit

Utiliser des gestionnaires d'erreur dans le code T-SQL

Dure

1 h 30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Intercepter et contrler les erreurs l'aide de


la structure TRY/CATCH
Utiliser des gestionnaires d'erreur dans le
code T-SQL

.
..
............

p. 12

DESCRIPTION DE LACTIVIT
Soit une base de donnes SQL Server contenant les tables suivantes :
Salle (NumSalle, Etage, NombreChaises)
Transfert (NumSalleOrigine, NumSalleDestination, NbChaisesTransfres,
DateTransfert)
Crer la base de donnes
Le nombre de chaises dans une salle doit tre compris entre 20 et 30 chaises par salle
Implmenter cette rgle laide dune contrainte CHECK
Saisir les donnes suivantes :
Numro salle
1
2
3
4

Etage
1
1
1
2

Nombre de chaises
24
26
26
28

laide dune transaction, crire le code qui permet de dplacer un nombre de chaise
dune salle une autre.
Dmarche :
Dclarer les variables suivantes :
Variable
type
@SalleOrigine
int
@SalleDest
int
@NbChaises
int
@dateTransfert
Date

Valeur
2
3
4
Getdate()

Dans un bloc BEGIN TRY END TRY, crire le code qui permet de :
a. dbuter une transaction (BEGIN TRANSACTIN)
b. modifier le nombre de chaises de la salle dont le numro = @SalleOrigine
(NombreChaises = NombreChaises - @NbChaises)
c. modifier le nombre de chaises de la salle dont le numro = @SalleDest
(NombreChaises = NombreChaises + @NbChaises)
d. enregistrer lopration dans la table transfert
e. valider la transaction (COMMIT TRANSACTION)
dans le bloc BEGIN CATCH .. . END CATCH, crire le code qui permet de :
a. annuler la transaction (ROLLBACK TRANSACTION)
b. afficher le message derreur Impossible deffectuer le transfert des chaises
excuter le code puis consulter les tables salle et transfert, le transfert doit tre effectu
parce que la contrainte CHECK est vrifie pour les deux salles
en essayant de r-excuter le code une deuxime fois, le message derreur sera affich

p. 13

Activit dapprentissage 6
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A006
Dclenchement d'une exception via
RAISERROR

Activit
Dure

1 heure

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une erreur personnalise.


Dclencher une exception avec RAISERROR
Communiquer des problmes au client avec
RAISERROR.

.
..
............

p. 14

DESCRIPTION DE LACTIVIT
Soit la base de donnes suivante :
Adhrents (Num_Adh, Nom_Adh, Prnom_Adh, Date_Naissance)
Livres (Num_Li, Titre, Dure_Max_Emprunt, Emprunt)
Emprunts (Num_Emp, Num_Adh, Num_Li, Date_Emprunt, Date_Retour)
Travail faire ( modifier pas de ps)
1. Crer la base de donnes
2. Remplir la table Adhrents et la table Livres.
A l'aide de sp_addmessage, dfinir les messages derreur suivants :
Id message
Message
Severity
60000
Le livre nexiste pas
16
60001
ladhrent nexiste pas
16
60002
le livre est dj emprunt
16
60003
ladhrent emprunte dj 3 livres
16
3. crire un lot transact-sql qui enregistre une opration demprunt en tenant
compte des indications suivantes :
Dclarer deux variables @Num_Adh et @Num_Li et leur affecter des
valeurs de votre choix.
Dclencher lerreur numro 60000, si le livre nexiste pas (utiliser
linstruction RAISERROR)
Dclencher lerreur numro 60001, si ladhrent nexiste pas.
Dclencher lerreur numro 60002, si le livre est dj emprunt.
Dclencher lerreur numro 60003, si ladhrent a trois 3 livres non
retourns.
Enregistrer lopration demprunt (la date demprunt est la date systme).
4. On souhaite enregistrer lopration de retour dun livre
dclarer une variable @Num_Livre
Enregistrer le retour du livre en levant des erreurs si le livre nexiste pas
ou sil nest pas emprunt
La date de retour est la date systme.
Afficher le nombre de jour de retard sil on a dpass la dure max
demprunt.

p. 15

Activit dapprentissage 7
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A007

Activit

Cration et utilisation de tables temporaires

Dure

45 mn

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une table temporaire.


Remplir une table temporaire.
Utiliser et manipuler les donnes dune
table temporaire

.
..
............

p. 16

DESCRIPTION DE LACTIVIT
A partir dune liste de personnes, on souhaite calculer et renvoyer le nombre de
personnes par tranches d'ge.
Crer une base de donnes contenant la table suivante : Personne (nom, adresse,
dateNaissance)
Remplir la table avec quelques enregistrements.
Crer une table temporaire dont la structure est la suivante :
Age min
Age max
NOMBRE

Int
Int
Int

Dclarer une variable @palier et lui affecter la valeur 10


Dclarer une variable @max et lui affecter lge de la personne la plus ge
Dans une boucle, calculer pour chaque tranche dge, le nombre de personnes et
lajouter la table temporaire
Afficher le rsultat obtenu
Exemple :
Age min
0
10
20

p. 17

Age max
9
19
29

NOMBRE
6
4
15

Activit dapprentissage 8
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

crire des scripts dans le langage procdural


du SGBD

Code Activit

A008

Activit

Utilisation de variables de type table

Dure

45 mn

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Dclarer des variables de type table.


stocker temporairement un ensemble de
lignes dans des variables de tables
renvoyer le contenu dune variable de
table.

.
..
............

p. 18

DESCRIPTION DE LACTIVIT
La base de donnes dun centre de formation contient la table suivante :
Formation (Num, Titre, Date_dbut, Date_fin, NbParticipants)
Le responsable du centre souhaite calculer le nombre total des participants par
jour entre deux dates donnes.
Par exemple, si la table Formation contient :
Num
1
2
3

Titre
Initiation Windows 7
SQL SERVER 2008

Office 2012

Date_dbut

Date_fin

09/12/13
11/12/13
09/12/13

12/12/13
14/12/13
11/12/13

NbParticipants
8
6
5

Il souhaite obtenir le rsultat suivant :


Date
09/12/13
10/12/13
11/12/13
12/12/13

Nombre participants
13
13
19
14

Travail faire
Crer la table Formation
Saisir quelques enregistrements dans la table
Dclarer une variable de type table contenant deux colonnes la date et nombre
participants
Dclarer une variable @dateDebut et linitialiser avec la valeur 09/12/2013.
Dclarer une variable @dateFin et linitialiser avec la valeur 12/12/2013.
Dans le bloc dinstructions dune boucle While, calculer le nombre de participant pour
chaque jour, puis ajouter le rsultat obtenu dans la variable de table
Afficher le contenu de la variable table
Afficher les jours o le nombre total des participants dpasse 16 personnes

p. 19

Activit dapprentissage 9
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Surveiller et dpanner SQL Server

Code Activit

B001

Activit

Crer un journal de compteur du Moniteur systme


pour analyser le serveur SQL Server

Dure

25 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer un journal de compteur


Ajouter des compteurs un journal
Afficher les donnes du journal pour
l'activit de la base de donnes

.
..
............

p. 20

DESCRIPTION DE LACTIVIT
Crer un ensemble de collecteurs de donnes pour analyser le serveur Sql

1. Sous Windows, dmarrer lanalyseur de performances.


2. Dans la console Performances, dans le volet gauche, dveloppez Ensembles de
collecteurs de donnes.

3. Cliquez avec le bouton droit sur Dfinis par lutilisateur, puis cliquez sur
Nouveau Ensemble de collecteurs de donnes .
4. Dans la bote de dialogue Crer un nouvel ensemble de collecteurs de
donnes, dans la zone Nom, taper Collecteur1 , cocher la case Crer
manuellement (avanc), puis cliquer sur Suivant.
5. Dans la bote de dialogue Quel type de donnes inclure, cocher la case
Compteur de performance. puis cliquer sur Suivant.
6. Dans la bote de dialogue Quel compteurs de performance enregistrer dans
un journal ? dfinir lintervalle dchantillonnage 10 secondes puis cliquer
sur le bouton Ajouter
7. Dans la nouvelle bote de dialogue cocher la case Afficher la description (lire
la description du compteur slectionn) Ajouter dans le journal les
compteurs rpertoris dans le tableau ci-dessous :
Objet de performance
Mmoire
Mmoire
Processus
Processeur
SQLServer:Locks
SQLServer:Locks
SQLServer:Memory Manager

Compteur
Pages/s
Dfauts de page/s
% Temps processeur
% Temps processeur
Requtes de verrous/s
Temps dattente des verrous (ms)
Mmoire totale du serveur

Instance

sqlservr
_Total
_Total
_Total

8. Cliquer sur OK puis sur Suivant puis sur Terminer.


9. Dans lanalyseur de performances, dmarrer l'ensemble de collecteurs de
donnes Collecteur1
10. Dans Sql Server Management Studio, excuter des requtes Transact SQL pour
simuler une activit sur le serveur.
11. Dans lanalyseur de performances, arrter l'ensemble de collecteurs de
donnes Collecteur1
12. Dans la console Performances, dans le volet gauche, dveloppez Rapport,
Dfinis par lutilisateur puis Collecteur1; slectionner le rapport

p. 21

Activit dapprentissage 10
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Surveiller et dpanner SQL Server

Code Activit

B002

Activit

Identification des problmes d'accs concurrentiels

Dure

45 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une trace SQL Server Profiler pour


capturer un blocage.

.
..
............

p. 22

DESCRIPTION DE LACTIVIT
Dmarrer SQL Server Management Studio
Crer une base de donnes BDCommercial :
Crer la table suivante : Articles (Num, Designation, Prix)
Insrer deux lignes de donnes dans la table Articles
INSERT INTO Articles VALUES (1, 'Galaxy S5',5000)
INSERT INTO Articles VALUES (2, 'Xperia Z2',5500)
Dmarrer SQL Server Profiler, (menu Outils - SQL Server Profiler), et se
connecter linstance Sql Server
Indiquer un nom de trace, Dans la zone Nom de la trace
slectionner Vide Dans la liste Utiliser le modle.
Enregistrer les rsultats de la trace dans un fichier,
cliquer sur l'onglet Slection des vnements.
Activer la case cocher pour l'vnement Deadlock graph dans la catgorie
Locks,
Cliquer sur Excuter pour dmarrer la trace
Ouvrez deux fentres de requte et modifier le contexte de la base de donnes
BDCommercial .
Dans la premire fentre de requte, excuter le code suivant:
begin transaction
UPDATE Articles
SET
Prix = 6000
WHERE (Num = 1)
Dans la deuxime fentre de requte, excuter le code suivant:
begin transaction
UPDATE Articles
SET
Prix = 6000
WHERE (Num = 2)
select * from Articles
where Num = 1
Dans la premire fentre de requte, excuter le code suivant:
select * from Articles
where Num = 2
Observer les rsultats dans le SQL Server Profiler

p. 23

Activit dapprentissage 11
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Manipuler les jeux denregistrement

Code Activit

C001

Activit

Dfinition d'un curseur.


Dfinition des attributs de curseurs.

Dure

45 mn

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Dclarer un curseur
Ouvrir un curseur
Rcuprer les donnes dun enregistrement
Utiliser la boucle While avec un curseur.
Fermer un curseur

.
..
............

p. 24

DESCRIPTION DE LACTIVIT

Soit la table Personne (Id, nom, adresse, nombre)


On dsire reproduire les lignes de la table Personne plusieurs fois afin de faire des
tiquettes de publipostage.
Travail faire
crire un lot transact-sql permettant de fournir une liste (nom, adresse) dans laquelle
chaque ligne de la table PERSONNE est recopi autant de fois que spcifi par la valeur
de la colonne NOMBRE.
Dclarer une variable table contenant deux colonnes nom et adresse
Dclarer un curseur associ linstruction SELECT nom, adresse, nombre FROM
Personne
Parcourir laide dune boucle while, le rsultat de la requte SELECT
Pour chaque personne lue, insrer, dans la variable table, le nom et adresse autant de
fois que spcifi par la valeur NOMBRE.
Afficher le contenu de la variable table.
Dans un nouveau lot, on souhaite crer un Login pour chaque personne de la table
Dclarer un curseur associ linstruction SELECT nom FROM Personne
Parcourir laide dune boucle while, le rsultat de la requte SELECT
Pour chaque personne lue, construire par concatnation la requte suivante :
'create login ' + @nom +' with password= ''' + @nom + ''''
excuter la requte laide de linstruction EXEC (@requte)
vrifier la cration des connexions puis les supprimer

p. 25

Activit dapprentissage 12
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Manipuler les jeux denregistrement

Code Activit

C002

Activit

Manipulation du contenu dun curseur.

Dure

45 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Traiter des lignes sur le serveur avec un curseur


Rcuprer les donnes dun enregistrement
Utiliser la boucle While avec un curseur.

.
..
............

p. 26

DESCRIPTION DE LACTIVIT
Facture dlectricit
La facture dlectricit est calcule selon un barme tranche.
La consommation mensuelle dlectricit est rpartie en tranches, les
informations concernant les tranches (Numro, Quantit, Tarif) sont stockes
dans une table nomme Barme.
Crer la table Barme
Renseigner la table Barme
Numro

Quantit

Tarif kWh

100

0,8496

100

0,9227

300

1,0039

2 147 483 647

1,3717

(2 147 483 647 est la valeur maximale pour le type Int)

En utilisant un curseur, crire un lot transact-sql qui rpartie la consommation


dlectricit en tranche est renvoie une table suivant lexemple suivant :

Dclarer une variable @consommation et lui affecter la valeur 250.


Crer une table temporaire #tranches contenant les colonnes (Tranche, Quantit, Prix
unitaire, Montant)
Le montant est une colonne calcule = (Prix unitaire * Quantit)
Dclarer un curseur associ linstruction SELECT * FROM tranches ORDER BY Numro
Dans le bloc dune boucle while, calculer les donnes de chaque tranche et lajouter la
table temporaire
On ne traite que les tranches atteintes par la consommation (trois tranches dans cet
exemple)
Afficher le contenu de la table temporaire
Calculer le montant global de la consommation dlectricit.
R excuter le lot pour une consommation de 180 KWh, le rsultat doit contenir deux
lignes

p. 27

Activit dapprentissage 13
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Manipuler les jeux denregistrement

Code Activit

C003

Activit

Manipulation du contenu dun curseur.

Dure

30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Traiter des lignes sur le serveur avec un curseur


Rcuprer les donnes dun enregistrement
Utiliser la boucle While avec un curseur.
mettre jour des rsultats obtenus via un curseur.

.
..
............

p. 28

DESCRIPTION DE LACTIVIT
Classement des lves
On souhaite classer les lves selon leur moyenne.
Crer une table lve (Num, Nom, Moyenne)
Remplir la table avec les donnes de quelques lves
Ajouter la table lve une colonne Classement
laide dun curseur, calculer et mettre jour la colonne Classement
Dclarer un curseur associ la requte SELECT Moyenne FROM lve
ORDER BY 1 DESC
Dclarer une variable @classement et lui affecter la valeur 1
Parcourir le rsultat obtenu par le curseur, et mettre jour le champ classemnt de
lenregsitrement courant en xcutant linstruction suivante :
update lve set Classement = @Classement where CURRENT of nomcurseur
incrmenter le compteur
excuter le code et vrifier le classement des lves
modifier le code pour tenir compte des lves ex quo (ayant la mme moyenne
donc le mme classement)

p. 29

Activit dapprentissage 14
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D001

Activit

Cration et manipulation de procdures stockes

Dure

40 mn

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une procdure stocke. Utiliser


CREATE PROC
Excuter une procdure stocke. Utiliser
linstruction EXECUTE
Modifier une procdure stocke existante.
Utiliser linstruction ALTER PROC
Supprimer une procdure stocke. Utiliser
linstruction DROP PROC

.
..
............

p. 30

DESCRIPTION DE LACTIVIT
Exercice 1
Crer une procdure permettant de crer la table Semaine (jour date) et la rempli
avec les dates des 7 jours qui suivent la date systme.
Excuter la procdure
Afficher le contenu de la table Semaine
Modifier la procdure pour inclure le code qui permet de supprimer la table si
elle existe
if OBJECT_ID('Semaine') is not null vrifie lexistence de la table Semaine
R-excuter la procdure.
Supprimer la procdure.

p. 31

Activit dapprentissage 15
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D002

Activit

Passage des paramtres en entre une procdure


stocke.

Dure

2h

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Programmer des procdures stockes


paramtres.
Crer des paramtres en entre.
Excuter la procdure et passer des
paramtres en entre.
Crer des paramtres en entre optionnels.

.
..
............

p. 32

DESCRIPTION DE LACTIVIT
Club loisir
Pour grer les diffrentes activits dun club de loisirs, et partir de cet extrait
dune base de donnes relationnelle, raliser le travail demand
Adhrent (code, nom, prnom)
Activit (refActivit, intitul, NbMaxParticipant)
Inscription (code, refActivit, date)
1. Crer la base de donnes
2. Crer une procdure permettant dajouter un nouvel adhrent
3. Ajouter des adhrents la base de donnes en excutant la procdure
4. Crer une procdure permettant dajouter une nouvelle activit la base de
donnes
5. Crer des activits dans la base de donnes, en excutant la procdure
correspondante
6. Crer une procdure permettant dinscrire un adhrent dans une activit :
La date inscription est facultative, (elle est gale la date systme si omise).

7. En appelant cette procdure plusieurs fois, inscrire des adhrents dans


diffrents activits
8. Ecrire une procdure qui renvoie la liste des activits (refActivit, intitul,
NbMaxParticipant, Nombre dadhrents).
9. Crer une procdure permettant dinscrire un adhrent dans toutes les
activits (utiliser linstruction insert ... select ).
10. Crer une procdure permettant de supprimer un adhrent ainsi que ses
inscriptions aux diffrentes activits

p. 33

Activit dapprentissage 16
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D003

Activit

Passage des paramtres en entre une procdure


stocke.

Dure

2h30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Programmer des procdures stockes


paramtres.
Crer des paramtres en entre.
Excuter la procdure et passer des
paramtres en entre.
Crer des paramtres en entre optionnels.

.
..
............

p. 34

DESCRIPTION DE LACTIVIT
A partir de cet extrait dune base de donnes relationnelle, raliser le travail
demand
Fonctionnaire (matricule, nom, dateEmbauche, chelle_actuelle)
Historique_Echelle (DateEffet, Nouvelle_Echelle, matricule)
Grille_indiciaire (Echelle, Point_Indice, Dure minimale)

1.Crer la base de donnes, et renseigner la table Grille_indiciaire


2.Ecrire une procdure permettant dajouter un nouveau fonctionnaire, la
procdure doit aussi enregistrer la date deffet de lchelle ( = date
dembauche) attribue au nouveau fonctionnaire.
NouveauFonctionnaire (@matricule, @nom, @dateEmbauche,
@chelle_actuelle)
3.Crer une procdure renvoyant la liste de tous les fonctionnaires
(matricule, nom, dateEmbauche, chelle actuelle, DateEffet).
4.Ecrire une procdure qui renvoie la liste des fonctionnaires recruts entre
deux dates donnes
5.Crer une procdure qui modifie la dure minimale dune chelle donne.
La procdure renvoie un message derreur si lchelle nexiste pas.
6.Crer une procdure renvoyant la liste des fonctionnaires ayant bnfici
dun avancement dchelle dans deux annes donnes en paramtres
(matricule, nom, dateEmbauche, chelle actuelle).
par exemple EXEC ListeFonctionnaires 2005, 2011 renvoie la liste
des fonctionnaires ayant eu un avancement dchelle en 2005 puis en
2011.
7.On souhaite afficher la liste des fonctionnaires page par page, par exemple
si la page contient 20 fonctionnaires la 3me page renvoie 20 fonctionnaires
partir de la position 41.
(indication : utiliser la fonction ROW_NUMBER())
Crer une procdure renvoyant les fonctionnaires dune seule page
ListeParPage @numeroPage, @taillePage

8.Ecrire la procdure davancement dchelle dun fonctionnaire donn.


Avancer(@matricule, @dateeffet)
La procdure renvoie des erreurs si le matricule nexiste pas, si le fonctionnaire na pas pass
la dure minimale requise dans son chelle actuelle ou sil est lchelle 30.
En utilisant une transaction, La procdure met jour lchelle dans la table fonctionnaire et
enregistre la date deffet de la nouvelle chelle dans la table Historique_Echelle

9.Ecrire une procdure permettant de supprimer un fonctionnaire donn, ainsi


que son historique davancement.

p. 35

10.Ecrire une procdure qui renvoie lhistorique davancement dun


fonctionnaire donn. Selon le modle suivant :
Echelle
Date effet
Date avancement
8
1/1/2005
1/1/2008
9
1/1/2008
Null
Pour chaque chelle, renvoie la date deffet (date daccs cette chelle)
et la date davancement lchelle suivante.
(indication : utiliser un curseur )

p. 36

Activit dapprentissage 17
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D004

Activit

Passage des paramtres en sortie une procdure


stocke.

Dure

2 h 30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une procdure stocke.


Retourner les donnes en utilisant RETURN.
Excuter la procdure et rcuprer la
valeur retourne
Utiliser des paramtres OUTPUT pour
retourner des donnes.
Excuter la procdure et rcuprer les
valeurs des paramtres OUTPUT

.
..
............

p. 37

DESCRIPTION DE LACTIVIT
Soit la base de donnes suivante :
Adhrents (Num_Adh, Nom_Adh, Prnom_Adh, Date_Naissance)
Livres (Num_Li, Titre, Dure_Max_Emprunt, Emprunt)
Emprunts (Num_Emp, Num_Adh, Num_Li, Date_Emprunt, Date_Retour)
Archives (Nom_Prnom_Adh, Titre_livre, Date_Emprunt, Date_Retour)
Num_Adh, Num_Li et Num_Emp sont des champs identity
Travail faire :
Crer la base de donnes
1. Crer une procdure stocke AjoutLivre qui permet dajouter un
nouveau livre la base de donnes (le champ Emprunt a la valeur 0)
2. Ajouter des livres en excutant la procdure
3. Crer une procdure stocke LivresEmprunts qui renvoie la liste des
livres actuellement emprunts
4. Crer une procdure stocke AjouterAdhrent @Num OUTPUT,
@nom, @prnom, @dateNaissance qui permet denregistrer un nouvel
adhrent, utiliser un paramtre OUTPUT pour retourner le numro
attribu automatiquement (@@identity)
5. crire une procdure Emprunter qui enregistre un emprunt. Par
dfaut, la date demprunt est la date du jour. En cas derreur la procdure
retourne un numro de code selon le tableau suivant :
Code de retour Erreur
1
Le livre nexiste pas
2
ladhrent nexiste pas
3
le livre est dj emprunt
4
ladhrent emprunte dj 3 livres
6. En utilisant les procdures prcdemment cres, ajouter un nouvel
adhrent, rcuprer son numro dans une variable et lui faire emprunter le
livre Num 1, si le code retourn par la procdure Emprunter est
diffrent de 0, afficher le message derreur correspondant.
7. Crer une procdure stocke SuppAdhrent qui permet de supprimer
un adhrent ainsi que tous ses emprunts de la base de donnes
les emprunts doivent tre archiv avant leur suppression
la procdure doit lever une erreur si ladhrent na pas retourn des livres
utiliser une transaction pour garantir la cohrence des donnes
8. Excuter la procdure SuppAdhrent pour supprimer ladhrent cr dans
la question 6
9. Crer une procdure stocke RetournerLivre qui permet denregistrer
le retour dun livre
RetournerLivre @Num_Livre
en levant des erreurs si le livre nexiste pas ou il nest pas emprunt et en
imposant la date du jour comme date de retour.
Utiliser un paramtre OUTPUT pour renvoyer le nombre de jour de retard
si on a dpass la dure maximale demprunt.
10. Retourner le livre Num 1, en excutant la procdure RetournerLivre .
11. R-excuter la procdure SuppAdhrent pour supprimer ladhrent cr

p. 38

dans la question 6

p. 39

Activit dapprentissage 18
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D005

Activit

Passage des paramtres en sortie une procdure


stocke.

Dure

2 h 30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une procdure stocke.


Retourner les donnes en utilisant RETURN.
Excuter la procdure et rcuprer la
valeur retourne
Utiliser des paramtres OUTPUT pour
retourner des donnes.
Excuter la procdure et rcuprer les
valeurs des paramtres OUTPUT

.
..
............

p. 40

DESCRIPTION DE LACTIVIT
Pour le suivi des paiements raliss par ses patients, un dentiste utilise une base de
donnes SQL Server contenant les tales suivantes :

Patient (Code, Nom, Prnom, date_naissance, Total_d, Total_pay)


Acte (rfrence, libell, Prix)
RalisationActe (numro, Rfrence, CodePatient, Date, Pay (O/N))
Paiement (numro, CodePatient, datePaiement, Montant)
Total_d est le total des prix des actes subi par un patient mais non pay
Total_pay est le total des prix des actes subi par un patient et pay
Travail faire :
Crer la base de donnes et remplir la table Acte.
1.Ecrire une procdure permettant dajouter un nouveau patient, les champs
Total_d et Total_pay auront des valeurs nulles (0) par dfaut.
En utilisant la procdure, ajouter des patients la base de donnes
2.Ecrire une procdure permettant denregistrer la ralisation dun acte pour
un patient donn
La procdure doit :
renvoyer des messages derreurs si le patient nexiste pas ou lacte
nexiste pas
Si lacte ralis est pay enregistrer lopration dans la table paiement et
mettre jour le champ Total_pay.
Si lacte ralis nest pas pay mettre jour le champ Total_d.
utiliser un paramtre OUTPUT pour retourner le prix de lacte pay
En utilisant la procdure, enregistrer quelques actes raliss.
3.Ecrire une procdure qui renvoie dans un paramtre OUTPUT le montant
total des actes non pays par un patient donn
4.Ecrire une procdure qui permet un patient de payer le montant total quil
doit au dentiste
PayerTout @codePatient
La procdure marque tous les actes subi par le patient et qui ne sont pas pays
(Pay reoit 1), enregistre lopration dans la table paiement, met zro le total
d et actualise le champ total pay
Utiliser une transaction pour garantir la cohrence de la base de donnes.
Excuter la procdure et vrifier le rsultat dans la base de donnes.

p. 41

Activit dapprentissage 19
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D006

Activit

Passage des paramtres en sortie une procdure


stocke.

Dure

2 h 30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une procdure stocke.


Retourner les donnes en utilisant RETURN.
Excuter la procdure et rcuprer la
valeur retourne

.
..
............

p. 42

DESCRIPTION DE LACTIVIT
Scurit dun site Web.
Pour grer la scurit dun site Web, on utilise une base de donnes contenant les
tables suivantes:
CompteUtilisateur (Nom, PassWord, QuestionSecurite, ReponseSecurite,
DateCration , estBloqu, date_dernire_connexion, Nombre_Echec_Connexion,
Date_Dernier_Echec)
Rle (Id, Nom)
Appartenance (NomUtilisateur, IdRole)
Travail faire :
Crer la base de donnes :
Crer des procdures stockes permettant de :
1. ajouter un nouveau rle.
2. crer un nouvel utilisateur :
CreerUtilisateur @Nom, @PassWord, @Email, @QuestionSecurite,
@ReponseSecurite, @DateCration
le paramtre @DateCration est facultatif, (elle est gale la date systme si
omise).
3. Ajouter un utilisateur un rle
4. Retourner les rles dun utilisateur donn.
5. Supprimer un utilisateur ainsi que toutes ses appartenances aux diffrents
rles
6. Renvoyer tous les noms des utilisateurs.
7. Rinitialiser le mot de passe dun utilisateur
ReinitialiserPassword @Nom, @NouveauPassWord, @QuestionSecurite,
@ReponseSecurite
Le mot de passe est modifi si la question et la rponse de scurit sont correctes
la procdure doit renvoyer des messages derreurs si le nom utilisateur nexiste
pas ou si la question ou la rponse de scurit ne sont pas correctes
8. Vrifier si un nom de rle existe dans la base de donnes
Roleexiste @nomRole
La procdure retourne 1 si le rle existe et 0 sinon.

p. 43

9. Authentifier un utilisateur.
Seconnecter @NomUtilisateur, @Password, @resultat OUTPUT
La procdure vrifie le nom de l'utilisateur et son mot de passe par rapport aux
informations d'identification stockes dans la table CompteUtilisateur et
retourne comme resultat les valeurs suivantes :
0 si le nom de lutilisateur et le mot de passe sont valide (actualiser la date de
dernire connexion et initialiser le Nombre_Echec_Connexion 0)
1 - si le nom dutilisateur est incorrect.
2 si le mot de passe est incorrect (actualiser la Date_Dernier_Echec et
incrmenter de 1 le Nombre_Echec_Connexion aprs 3 checs dans un intervalle
de 30 mn la procdure doit bloquer le compte utilisateur)
10. Dbloquer le compte dun utilisateur.
Dbloquer @NomUtilisateur
La procdure retourne le code 1 si chec
Excuter chaque procdure cre et vrifier son rsultat.

p. 44

Activit dapprentissage 20
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D007

Activit

Cration et manipulation des fonctions scalaires

Dure

2 h 30

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une fonction scalaire. Utiliser CREATE


FUNCTION
Utiliser une fonction scalaire dfinie par
lutilisateur
Modifier une fonction scalaire existante.
Utiliser linstruction ALTER FUNCTION
Supprimer une fonction scalaire. Utiliser
linstruction DROP FUNCTION

.
..
............

p. 45

DESCRIPTION DE LACTIVIT

Soit la base de donnes suivante :


Employ (Id, Nom, Prnom, Salaire, DeptNo)
Dpartement (DeptNo, NomDept)
Crer la base de donnes et renseigner les deux tables
1) Ecrire une fonction qui renvoie le nombre demploys pour un dpartement.
donn
2) En utilisant la fonction, crire une requte qui renvoie la liste des
dpartements dont le nombre demploys est suprieur 5
3) Ecrire une fonction permettant de renvoyer le salaire moyen des employs
dun dpartement donn
4) En utilisant les fonctions prcdentes, crire une requte qui renvoie la liste
des dpartements (DeptNo, NomDept, Nombre employs, Salaire moyen)
5) Modifier la fonction de la question 3, pour quelle retourne la valeur du
(salaire max + salaire min)/2. R-excuter la requte de la question 4.
6) Crer une fonction qui permet de mettre la premire lettre du paramtre pass
la fonction en majuscule et le reste en minuscule
7) Utiliser la fonction pour remplacer dans la table Employ les prnoms par le
nouveau format (seule la 1re lettre en majuscule)
8) Crer une fonction DeptExiste(@nomDept) permettant de vrifier si un
dpartement existe dans la base de donnes
La fonction retourne 1 si le nom dpartement existe et 0 sinon.
crire une procdure permettant dajouter un nouveau dpartement
La procdure lve une erreur si le dpartement existe (utiliser la fonction
DeptExiste)

p. 46

Activit dapprentissage 21
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D008

Activit

Cration et manipulation des fonctions table incluses

Dure

1 h 30

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une fonction table incluse.


Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL

.
..
............

p. 47

DESCRIPTION DE LACTIVIT

Exercice 1
Soit la base de donnes suivante :
Utilisateur (Id, Pseudo, E-mail, Mot de passe, Date dinscription)
Salle (Id, Thme)
Message (IdUtilisateur, IdSalle, date_envoi, ,corps)
1.Crer la base de donnes.
2.Crer une fonction ListeUtilisateurs qui retourne la liste des utilisateurs
ayant particip une salle de discussion (ayant envoy au moins un
message).
3. Crer une fonction Participants qui renvoie trois utilisateurs ayant
envoy le plus grand nombre de messages une salle de discussion.
(Pseudo, E-mail, Nombre de message envoy)
4.L'oprateur APPLY permet d'appeler une fonction table pour chaque ligne
retourne par l'expression de table externe d'une requte.
crire la requte suivante pour afficher pour chaque salle les 3 utilisateurs
ayant envoy le plus grand nombre de message.
SELECT thme, Pseudo, FROM Salle cross apply
dbo.participants(Salle.Id)

p. 48

Activit dapprentissage 22
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D009

Activit

Cration et manipulation des fonctions table multiinstructions

Dure

2 heures 30

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une fonction table multi-instructions.


Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL

.
..
............

p. 49

DESCRIPTION DE LACTIVIT
Exercice 1
Soit une base de donnes contenant la table suivante :
Formations (Num, Titre, Date_dbut, Date_fin, NbParticipants)
Num est un champ auto-incrment.
Crer la table
Ajouter la table les formations suivantes :
Num
1
2
3

Titre
Initiation Windows 7
SQL SERVER 2008

Office 2012

Date_dbut

Date_fin

09/12/13
11/12/13
09/12/13

12/12/13
14/12/13
11/12/13

NbParticipants
8
6
5

Ecrire une fonction table qui renvoie le nombre total de participants par jour entre
deux dates donnes en paramtres.
Lexcution de la requte :
SELECT * FROM dbo.prsences_quotidiennes(09/12/13, 12/12/13)
Affiche le rsultat suivant
Date
09/12/13
10/12/13
11/12/13
12/12/13

Nombre participants
13
13
19
14

Exercice 2
Soit la table Personne (nom, adresse, dateNaissance)
Crer la table Personne
Saisir des enregistrements dans la table
Ecrire une fonction qui renvoie le nombre de personnes par tranches d'ge.
Lexcution de la requte : SELECT * FROM dbo.nbPersonneTranche(10)
Affiche le rsultat suivant
Age min
Age max
NOMBRE
0
9
6
10
19
4
20
29
15
Exercice 3

la base de donnes dune application de gestion du parc informatique dune


entreprise, contient la table suivante:

p. 50

Ordinateur (num_serie, marque, modle, Date_acquisition)


Crer la table
Saisir des enregistrements dans la table

Ecrire une fonction qui renvoie le nombre dordinateurs disponibles la fin


de chaque anne depuis une anne donne en paramtre
Par exemple, Lexcution de la requte : SELECT * FROM
dbo.nb_ordinateurs_anne(2009)
Affiche le rsultat suivant
Anne
2009
2010
2011
2012
2013

Nombre ordinateurs
50
56
72
74
98

p. 51

Activit dapprentissage 23
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des procdures et des fonctions


sur le SGBD

Code Activit

D010

Activit

Cration et manipulation des fonctions table multiinstructions

Dure

1 heure 30

Phase dapprentissage

Entrainement
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une fonction table multi-instructions.


Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL

.
..
............

p. 52

DESCRIPTION DE LACTIVIT
Exercice 1
A partir de cet extrait dune base de donnes relationnelle, raliser le travail
demand
Salles (Num, Nom, Capacit, Prix_journalier, Total_recettes)
Rservations (NumReservation, client, NumSalle, DateDebutRes, DateFinRes)
Crer la base de donnes
Renseigner les tables
Ecrire une fonction qui renvoie toutes les priodes ou une salle sera libre,
entre deux dates donnes en paramtre.
Priodeslibres(@NumSalle, @DateDebut, @DateFin)
La fonction retourne un rsultat ayant
Date dbut
Numro
1
13/12/2013
2
25/12/2013

la structure suivante :
Date fin
Nombre jours
17/12/2013
4
28/12/2013
3

DateDebutRes, DateFinRes
FROM Rservations WHERE NumSalle = @NumSalle ORDER BY DateDebut
Utiliser un curseur associ linstruction SELECT

Parcourir le rsultat du curseur, et ajouter la variable table de la fonction la


priode libre entre deux rservations successives si elle existe.
Il ya une priode libre entre deux rservations successives R1 et R2 si
DateFinRes de R1 < DateDebutRes de R2
En utilisant la fonction, trouver toutes les priodes dau moins 5 jours o la salle
Num 1 est libre pendant le mois de mars 2014

p. 53

Activit dapprentissage 24
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des dclencheurs.

Code Activit

F001

Activit

Programmer des dclencheurs AFTER

Dure

2 heures

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer des dclencheurs AFTER.


Tester un dclencheur
Activer / dsactiver des dclencheurs
Modifier et supprimer des dclencheurs

.
..
............

p. 54

DESCRIPTION DE LACTIVIT
Exercice 1
Soit une base de donnes contenant les tables suivantes:
Formations (Num, Titre, Date_dbut, Date_fin, NbParticipants)
Num est un champ auto-incrment.
Journal (DateOperation, Opration, Nbligneaffecte, Utilisateur)
Lopration est : ajout, modification ou suppression.
Crer la base de donnes.
CREATE TABLE Formations (Num INT primary key identity,
Titre varchar(150), Date_dbut date, Date_fin date,
NbParticipants int)
CREATE TABLE Journal (DateOperation datetime default getdate(),
Opration varchar(50), Nbligneaffecte int, utilisateur sysname
default system_user)

On souhaite journaliser toutes les oprations de mise jour de la table


Formations ds que l'on ajoute, modifie ou supprime une entre dans la table
formations.
Crer un trigger after INSERT permettant dajouter une entre dans la table
journal, ds quon enregistre une ou plusieurs nouvelles formations dans la
base de donnes. Le nombre de lignes ajoutes peut tre calcul avec la
requte select count(*) from INSERTED;
Pour tester le trigger cr, ajouter des formations la base de donnes et
consulter la table journal
Crer un trigger after UPDATE permettant dajouter une entre dans la table
journal, ds quon modifie une ou plusieurs formations dans la base de
donnes. Le nombre de lignes modifies peut tre calcul avec la requte
select count(*) from INSERTED;
Pour tester le trigger cr, modifier des formations dans la base de donnes et
consulter la table journal
Crer un trigger after DELETE permettant dajouter une entre dans la table
journal, ds quon supprime une ou plusieurs formations de la base de
donnes. Le nombre de lignes supprimes peut tre calcul avec la requte
select count(*) from DELETED;
Pour tester le trigger cr, supprimer des formations de la base de donnes et
consulter la table journal.

p. 55

Utiliser linstruction ALTER TABLE DISABLE TRIGGER pour


dsactiver les triggers prcdemment crs.
Ajouter une nouvelle formation la base de donnes
Consulter la table journal.
Ractiver les triggers en utilisant linstruction ALTER TABLE ENABLE
TRIGGER
Supprimer les triggers en utilisant linstruction DROP TRIGGER.
Crer un seul trigger "after INSERT, UPDATE, DELETE" permettant de
journaliser la mise jour de la table Formations
Table INSERTD
Non vide
Non vide
Vide

Table DELETED

Type opration

Vide

Ajout

Non vide
Non vide

modification
suppression

Pour tester le trigger cr, mettre jour la table des formations et consulter la
table journal.

p. 56

Activit dapprentissage 25
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des dclencheurs.

Code Activit

F002

Activit

Programmer des dclencheurs AFTER

Dure

2 heures 30

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer des dclencheurs AFTER.


Tester un dclencheur
Activer / dsactiver des dclencheurs
Modifier et supprimer des dclencheurs

.
..
............

p. 57

DESCRIPTION DE LACTIVIT
Exercice 1
A partir de cet extrait dune base de donnes relationnelle, raliser le travail
demand
Salles (Num, Nom, Capacit, Prix_journalier, Total_recettes)
Rservations (NumReservation, client, NumSalle, DateDebut, DateFin)
Travail faire :
Crer la base de donnes.
Remplir la table Salles
Une salle ne peut faire lobjet de deux rservations pour une mme journe; par
exemple si la salle 1 est rserve entre le 09/09/2013 et 13/09/2013, elle ne peut
tre rserve entre le 12/09/2013 et 14/09/2013. Implantez par un trigger cette
rgle.
Tester le trigger
A chaque mise jour de la table des rservations il faut mettre jour le montant
total des recettes des salles concernes. Crer un dclencheur after INSERT
permettant daugmenter le total des recettes dun montant gal au prix journalier
de la salle multipli par la dure de la rservation.
Pour tester le trigger, enregistrer une rservation et afficher le total des
recettes de la salle concerne.
Exercice 2
A partir de cet extrait dune base de donnes relationnelle, raliser le travail
demand
Patient (Code, Nom, Prnom, date_naissance, Total_d, Total_pay)
Acte (rfrence, libell, Prix)
RalisationActe (numro, Rfrence, CodePatient, Date, Pay (O/N))
Paiement (numro, CodePatient, datePaiement, Montant)
Total_d est le total des prix des actes subi par un patient mais non pay
Total_pay est le total des prix des actes subi par un patient et pay
1.Un patient ne doit subir plus que 5 actes non pays, crire un trigger
permettant dimplmenter cette rgle.
2.Ecrire un trigger qui maintient jour les champs Total_d et Total_pay
chaque fois quon met jour la table Paiement (INSERT, UPDATE et
DELETE)

Exercice 3

p. 58

Soit une base de donnes contenant les tables suivantes:


Vaccins (Code, Nom, AgeVaccination)
Age vaccination est donn en nombre de mois.
Naissance (Numro, nom, prnom, dateNaissance) le numro est autoincrment.
Vaccination (Num, NumroEnfant, codeVaccin, DatePrvue, DateEffective,
Remarque)
crire un dclencheur after qui permet la naissance dun enfant de planifier les
vaccinations quil doit effectuer.
Pour planifier la vaccination dun enfant dont le numro est @num et il est n le
@date on crit la requte suivante :
INSERT INTO Vaccination (NumroEnfant, codeVaccin, DatePrvue)
SELECT @num, code, DATEADD(month, AgeVaccination, @date) FROM
Vaccins

p. 59

Activit dapprentissage 26
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des dclencheurs.

Code Activit

F003

Activit

Programmer des dclencheurs INSTEADOF

Dure

1 heure

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer des dclencheurs INSTEAD-OF.


Tester un dclencheur

.
..
............

p. 60

DESCRIPTION DE LACTIVIT
Exercice 1

Soit une base de donnes contenant la table suivante :


Vaccins (Code, Nom, AgeVaccination)
Crer la table Vaccins :
Code

DCaT1

Vaccin(s)

ge (mois)

Vaccin DCaTPolio-Hib

Vaccin conjugu
contre le
pneumocoque

Vaccin DCaTPolio-Hib

Vaccin conjugu
contre le
pneumocoque

DCaT3

Vaccin DCaTPolio-Hib

Mnin1

Vaccin conjugu
contre le
mningocoque

12

RRO1

Vaccin RRO-Var

12

Pneum1

DCaT2

Pneum2

Crer une autre table NouveauxVaccins ayant la mme structure que la table
Vaccins
Code

ge (mois)

Vaccin(s)

Pneum3

12

Vaccin conjugu contre le pneumocoque

Mnin1

15

Vaccin conjugu contre le mningocoque

DCaT4

18

Vaccin DCaT-Polio-Hib

RRO2

18

Vaccin RRO

On veut importer dans la table Vaccins la liste des vaccins partir de la table
Nouveaux Vaccins ,
Excuter la requte :
INSERT INTO VACCINS
SELECT * FROM [Nouveaux Vaccins]
p. 61

Une erreur de Violation of PRIMARY KEY constraint se poduit car le vaccin


Mnin1 existe dj dans la table vaccins.
crire un dclencheur qui permet dinsrer les nouveaux vaccins dans la table
Vaccins et mettre jours les informations (nom et/ou ge) des vaccins qui
existent dj.
create trigger MAJ ON Vaccins
instead of INSERT
as
begin
set nocount on;
UPDATE
Vaccins
SET
nom = I.nom, age = I.age
FROM
INSERTED AS I INNER JOIN
Vaccins ON I.code = Vaccins.code
INSERT INTO Vaccins (code, nom, age)
SELECT
code, nom, age
FROM
INSERTED
where code not in (SELECT code FROM Vaccins)
end

Tester le dclencheur en r excutant la requte :


INSERT INTO VACCINS
SELECT * FROM [Nouveaux Vaccins]
Utiliser un trigger instead of DELETE pour annuler toute tentative de
suppression dans la table Vaccins
Tester le trigger en essayant de supprimer des vaccins

p. 62

Activit dapprentissage 27
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Programmer des dclencheurs.

Code Activit

F004

Activit

Programmer des dclencheurs INSTEADOF

Dure

1 h 30

Phase dapprentissage

BASE
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer des dclencheurs INSTEAD-OF sur des


vues.
Mettre jour des vues laide des dclencheurs
INSTEAD-OF

.
..
............

p. 63

DESCRIPTION DE LACTIVIT
Certaines vues peuvent tre lobjet de mise jour par les instructions insert,
update, delete, mais pour cela il faut que Sql Server soit capable de dduire les
modifications faire sur les tables et ce nest pas toujours possible.
A partir de cet extrait dune base de donnes relationnelle, raliser le travail
demand
Fonctionnaire (matricule, nom, dateEmbauche, chelle)
Historique_Echelle (DateEffet, Nouvelle_Echelle, matricule)
Crer la base de donnes
1.Crer une vue renvoyant la liste de tous les fonctionnaires (matricule, nom,
dateEmbauche, chelle actuelle, DateEffet).
2.La vue ainsi cre ne peut tre mise jour directement. Utiliser des
TRIGGER INSTEAD pour coder la mise jour des tables sous-jacentes.
A laide dun trigger INSTEAD OF INSERT programmer les
modifications faire sur les tables de la base de donnes lorsquon insre
un nouveau fonctionnaire en utilisant lordre INSERT sur la vue :
le trigger doit insrer les donnes (matricule, nom, dateEmbauche,
chelle) dans la table Fonctionnaire et DateEffet , chelle
actuelle,matricule dans la table Historique_Echelle
A laide dun trigger INSTEAD OF UPDATE programmer les
modifications faire sur les tables de la base de donnes lorsquon
MODIFIE lchelle du fonctionnaire en utilisant lordre UPDATE sur la
vue :
le trigger doit insrer les donnes DateEffet , chelle actuelle,matricule
dans la table Historique_Echelle
A laide dun trigger INSTEAD OF DELETE programmer les
modifications faire sur les tables de la base de donnes lorsquon
SUPPRIME un fonctionnaire en utilisant lordre DELETE sur la vue :
le trigger doit supprimer les donnes de la table Fonctionnaire et celles de
la table Historique_Echelle

p. 64

Activit dapprentissage 28
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Optimiser les performances SQL Server

Code Activit

G001

Activit

Mise en uvre du gouverneur de ressources.


Collecte des donnes de performances en utilisant des
vues de gestion dynamique (DMV).

Dure

1h30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Crer une fonction classifieur


Crer un pool de ressources
Crer un groupe de charges de travail
Affichage des rapports de paramtrage
Collecte des donnes de performances en
utilisant des vues de gestion dynamique
(DMV).

.
..
............

p. 65

DESCRIPTION DE LACTIVIT
1. Dmarrer SQL Server Management Studio.
2. Crer deux nouveaux pools de ressources en excutant le script suivant :
USE master
GO
CREATE RESOURCE POOL poolTDI2
WITH
(
MAX_CPU_PERCENT = 100,
MIN_CPU_PERCENT = 20
)
CREATE RESOURCE POOL poolTDI1
WITH
(
MAX_CPU_PERCENT = 20,
MIN_CPU_PERCENT = 0
)

3. Crer deux groupes de charges de travail. Affectez chaque groupe de


charge de travail au pool de ressources correspondant.
USE master
CREATE WORKLOAD GROUP groupTDI2
WITH
(
IMPORTANCE = MEDIUM
)
USING poolTDI2
CREATE WORKLOAD GROUP groupTDI1
WITH
(
IMPORTANCE = LOW
)
USING poolTDI1
GO

4. Crez la fonction classifieur suivante :


CREATE FUNCTION fnTDIClassifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
return (select case SUSER_SNAME()
when 'tdi1' then 'groupTDI1'
when 'tdi2' then 'groupTDI2'
else 'default'
end )
END

5. Inscrivez la fonction classifieur et mettez jour la configuration en


p. 66

mmoire.
ALTER RESOURCE GOVERNOR with (CLASSIFIER_FUNCTION =
dbo.fnTDIClassifier)
ALTER RESOURCE GOVERNOR RECONFIGURE

6. Pour obtenir la configuration des pools de ressources, excuter la requte


suivante :
SELECT * FROM sys.resource_governor_resource_pools

7. Pour obtenir la configuration des groupes de charges de travail, excuter


la requte suivante :
SELECT * FROM sys.resource_governor_workload_groups

8. Pour vrifiez que la fonction classifieur existe et qu'elle est active,


excuter la requte suivante :
SELECT object_name(classifier_function_id) AS Nom_fonction_classifier, *
FROM sys.resource_governor_configuration

9. Crer deux comptes sql server en excutant les requtes suivantes :


CREATE LOGIN tdi1 WITH PASSWORD='tdi1'
CREATE LOGIN tdi2 WITH PASSWORD='tdi2'

10. Activer lauthentification Sql Server,


11. Se connecter au serveur en utilisant le compte Sql Server tdi1 et dans une
nouvelle fentre de requte excuter :
WAITFOR DELAY '00:15';
select getdate()
Se connecter au serveur

en utilisant le compte Sql Server tdi2 et dans


une nouvelle fentre de requte excuter :
WAITFOR DELAY '00:15';
select getdate()

12. Excuter la requte suivante pour obtenir des informations sur l'tat et la
configuration actuels des pools de ressources, ainsi que sur leurs
statistiques.
SELECT * FROM sys.dm_resource_governor_resource_pools

13. Excuter la requte suivante pour obtenir les statistiques de groupe de


charges de travail et la configuration en mmoire actuelle du groupe de

p. 67

charges de travail.

Activit dapprentissage 29

SELECT * FROM sys.dm_resource_governor_workload_groups

Module
Prcision
Code Activit
Activit

TDI-18

Systme de Gestion de Bases de Donnes II

Optimiser les performances SQL Server

14. Excuter la requte suivante pour dterminer quelles sessions se trouvent


dans chaque de groupe.
SELECT s.group_id, CAST(g.name as nvarchar(20)) groupe, s.session_id,
s.login_time, CAST(s.host_name as nvarchar(20)) hote, CAST(s.program_name
G002 programme FROM sys.dm_exec_sessions s
AS nvarchar(20))
INNER JOIN sys.dm_resource_governor_workload_groups g
ON g.group_id = s.group_id
ORDERAssistant
BY g.name Paramtrage du moteur de base de
donnes.
GO

Dure

30 mn

15. Excuter la requte suivante pour dterminer quelles requtes se trouvent


Phase dapprentissage
dans ENTRAINEMENT
chaque groupe.
Cette activit dapprentissage doit vous permettre

SELECT r.group_id, g.name, r.status, r.session_id, r.request_id, r.start_time,


de r.sql_handle,
:
r.command,
t.text
FROM sys.dm_exec_requests

Lancementr de l'Assistant Paramtrage du


INNER JOIN sys.dm_resource_governor_workload_groups g
moteur
de base de donnes
Dtails sur les objectifs ON g.group_id
= r.group_id

Paramtrage
d'une charge
viss par lactivit
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)
AS tde travail
ORDER BY g.name

Affichage des recommandations pour le


GO
paramtrage

Matire duvre et/ou


outillage

Affichage des rapports de paramtrage

.
..
............

p. 68

DESCRIPTION DE LACTIVIT
1. Dmarrer SQL Server Management Studio.
Crer la base de donnes suivante Abonns :

Pour paramtrer le fichier de script Transact-SQL d'une charge de travail


remplir les deux tables en excutant le script suivant :
declare @i int=1
while (@i<=12)
begin
INSERT INTO Groupes
VALUES
(@i, 'Groupe ' + convert(nvarchar(2),@i))
set @i = @i+1;
end
set @i = @i;
while (@i<10000)
begin
INSERT INTO Abonns
VALUES (@i, 'Abonn ' + convert(nvarchar(4),@i), @i % 12 + 1)
set @i = @i+1;
end

2. Dans l'diteur de requte de SQL Server Management Studio, saisir


les requtes suivantes :
SELECT
FROM

NomGroupe, COUNT(Num) AS Nombre


Abonns INNER JOIN
Groupes ON Abonns.CodeGroupe = Groupes.Code
GROUP BY NomGroupe
Enregistrez le fichier sous le nom Script1.sql
3. Dmarrez l'Assistant Paramtrage du moteur de base de donnes.
Dans le menu Outils, cliquez sur Assistant Paramtrage du moteur de
base de donnes.
Dans la bote de dialogue Se connecter un serveur, vrifiez les
paramtres par dfaut, puis cliquez sur Se connecter
4. Dans le volet droit de l'interface de l'Assistant Paramtrage du moteur
de base de donnes, tapez SessionTp dans la zone Nom de session.
5. Slectionnez Fichier pour votre Charge de travail et cliquez sur
Rechercher un fichier de charge de travail pour localiser le fichier

p. 69

Script1.sql que vous avez enregistr l'tape 1.


6. Slectionnez Abonns dans la liste Base de donnes pour
l'analyse de la charge de travail, slectionnez Abonns dans la
grille Slectionnez les bases de donnes et tables analyser et
conservez la case cocher Enregistrer le journal de paramtrage
active.
7. Cliquez sur l'onglet Options de paramtrage. Cliquez sur Options
avances pour afficher des options de paramtrage supplmentaires.
Dfinir une quantit despace max. pour les recommandations 2MB.
8. Dans la barre d'outils, cliquez sur le bouton Dmarrer l'analyse.
Pendant que l'Assistant Paramtrage du moteur de base de donnes
analyse la charge de travail, vous pouvez contrler l'tat de l'analyse
sous l'onglet Progression. Lorsque le paramtrage est termin, l'onglet
Recommandations s'affiche.
9. Enregistrez votre recommandation sous la forme d'un script TransactSQL en cliquant sur Enregistrer les recommandations dans le menu
Actions. Dans la bote de dialogue Enregistrer sous, accdez au
rpertoire dans lequel vous souhaitez enregistrer le script de
recommandations et tapez le nom de fichier Recommendations1.

p. 70

Activit dapprentissage 30
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Mettre en uvre la haute disponibilit

Code Activit

H001

Activit

Mise en uvre de la mise en miroir de base de


donnes.

Dure

2 h 30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Configurer la mise en miroir de bases de


donnes
Crer des points de terminaison
Dfinir le serveur principal
Dfinir le serveur miroir
Basculer vers le serveur miroir

.
..
............

p. 71

DESCRIPTION DE LACTIVIT
Pour raliser ce Tp vous devez installer deux instances Sql Server sur votre
ordinateur. Par exemple linstance par dfaut et une instance nomme TDI.
A laide du Gestionnaire de configuration SQL Server, vrifier et dmarrer les
deux instances SQL Server

Configuration de la mise en miroir de bases de donnes


1.
2.
3.
4.

Dmarrer SQL Server Management Studio; et se connecter linstance par dfaut


Crer une base de donnes TestMiroring :
Crer la table suivante : Produits (Num, Designation, Prix)

Remplir la table en excutant le script suivant :

declare @i int=1
while (@i<100)
begin
INSERT INTO Produits
VALUES (@i, 'Produit ' + convert(nvarchar(2),@i), 100+@i)
set @i = @i+1;
end

5. Dans SQL Server Management Studio, sous linstance par dfaut.


Sauvegarder la base de donnes en excutant la requte suivante :
BACKUP DATABASE TestMiroring
TO DISK = 'C:\principal\TestMiroring.bak'

6. Se connecter linstance nomme TDI; Dans une fentre de nouvelle requte


sous linstance nomme TDI.
7. Restaurer la base de donnes en excutant la requte suivante :
RESTORE DATABASE TestMiroring
FROM DISK = N'C:\principal\TestMiroring.bak' WITH FILE = 1,
MOVE N'TestMiroring' TO N'C:\miroir\TestMiroring_data.mdf',
MOVE N'TestMiroring_log' TO N'C:\miroir\TestMiroring_log.ldf',
NORECOVERY

8. Crer un point de terminaison dans l'instance par dfaut :


CREATE ENDPOINT Endpoint_Miroir
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE=PARTNER)

9. Crer un point de terminaison dans l'instance nomme TDI :


CREATE ENDPOINT Endpoint_Miroir
STATE = STARTED
AS TCP (LISTENER_PORT = 5023)
FOR DATABASE_MIRRORING (ROLE=PARTNER)

10.
Dans l'instance nomme TDI (serveur miroir), dfinissez l'instance par
dfaut comme partenaire (ce qui en fait l'instance initiale du serveur principal).
ALTER DATABASE TestMiroring
SET PARTNER = 'TCP://NomHote:5022'
(NomHote est le nom de la machine hte)

11.
Dans l'instance par dfaut, dfinissez l'instance nomme TDI comme
partenaire (ce qui en fait l'instance initiale du serveur miroir).
ALTER DATABASE TestMiroring
SET PARTNER = 'TCP://NomHote:5023'

12.
Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier
Bases de donnes sous l'instance par dfaut, puis cliquez sur Actualiser.
Dveloppez le dossier Bases de donnes et vrifiez que l'tat de la base de
donnes TestMiroring est Principal, Synchronis.
p. 72

13.
Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier
Bases de donnes sous l'instance nomme, puis cliquez sur Actualiser.
Dveloppez le dossier Bases de donnes et vrifiez que l'tat de la base de
donnes TestMiroring est Miroir, Synchronis / Restauration.
Tester la mise en miroir.

14.
Dans le volet de requte connect l'instance SQL Server par dfaut
excuter les requtes suivantes :
USE TestMiroring
GO
SELECT * FROM Produits
GO
UPDATE Produits SET Prix = Prix * 1.1
GO
SELECT * FROM Produits
GO

15.
Basculer manuellement vers le serveur partenaire de mise en miroir de
bases de donnes, en excutant sous linstance par dfaut (serveur principal ) la
requte :
USE master;
ALTER DATABASE TestMiroring SET PARTNER FAILOVER;

16.
Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier
Bases de donnes sous l'instance nomme TDI, puis cliquez sur Actualiser.
Dans le dossier Bases de donnes, vrifiez que l'tat de la base de donnes
TestMiroring est Serveur principal, Dconnect.
17.
Retournez dans le volet de requte connect l'instance nomme SQL
Server excuter les requtes :
USE TestMiroring
GO
SELECT * FROM Produits
GO
GO
UPDATE Produits SET Prix = Prix * 1.1
GO
SELECT * FROM Produits
GO

18.
Basculer manuellement vers linstance par dfaut, et consulter la table
Produits

p. 73

Activit dapprentissage 31
Module

TDI-18

Systme de Gestion de Bases de Donnes II

Prcision

Mettre en uvre la haute disponibilit

Code Activit

H002

Activit

Implmentation de la rplication.

Dure

2 h 30 mn

Phase dapprentissage

ENTRAINEMENT
Cette activit dapprentissage doit vous permettre
de :

Dtails sur les objectifs


viss par lactivit

Matire duvre et/ou


outillage

Cration d'une publication


Cration d'un abonnement

.
..
............

p. 74

DESCRIPTION DE LACTIVIT
Pour raliser ce Tp vous devez installer deux instances Sql Server sur votre
ordinateur. Par exemple linstance par dfaut et une instance nomme TDI.
A laide du Gestionnaire de configuration SQL Server, vrifier et dmarrer les
deux instances SQL Server

Cration d'une publication


Dmarrer SQL Server Management Studio; et se connecter linstance par dfaut
Crer une base de donnes BDCommercial :
Crer la table suivante : Produits (Num, Designation, Prix)

Remplir la table en excutant le script suivant :


declare @i int=1
while (@i<100)
begin
INSERT INTO Produits
VALUES (@i, 'Produit ' + convert(nvarchar(2),@i), 100+@i)
set @i = @i+1;
end
Dmarrer SQL Server Agent
Crer une publication sur l'instance SQL Server par dfaut
Procdure

1. Dans l'Explorateur d'objets, dveloppez Rplication, cliquez avec le bouton


droit sur Publications locales, puis cliquez sur Nouvelle publication.
2. Dans la page Assistant Nouvelle publication, puis cliquez sur Suivant.
3. Dans la page Serveur de distribution, laissez la premire option slectionne
pour que linstance par dfaut joue le rle du serveur de distribution, puis
cliquez sur Suivant.
Crer un dossier DossierReplication sur votre Disque dur; et partager le sous le nom
\\<Nom-PC>\ DossierReplication
4. Dans la page Dossier de captures instantanes, tapez \\<Nom-PC>\
DossierReplication pour lutiliser comme dossier de captures instantanes,
puis cliquez sur Suivant.
5. Dans la page Base de donnes de publication, cliquez sur BDCommercial pour
choisir cette base de donnes comme base de donnes de publication, puis
cliquez sur Suivant.
6. Dans la page Type de publication, cliquez sur Publication de capture
instantane, puis cliquez sur Suivant.
7. Dans la page Articles, dveloppez Tables, dveloppez Produits(dbo),puis
slectionnez Num(int), Designation(nvarchar), Prix(money). Cliquez sur
Suivant.
8. Dans la page Filtrer les lignes de la table, cliquez sur Add pour ajouter un
filtre.
9. Dans la zone Instruction de filtrage, ajoutez le texte Prix >= 120 la requte
SELECT, cliquez sur OK puis sur Suivant
10. Dans la page Agent de capture instantane, activez les cases cocher Crer
une capture instantane immdiatement et garder cette dernire disponible
pour l'initialisation des abonnements et Planifier l'excution de l'Agent de
capture instantane aux heures suivantes, puis cliquez sur Change.
11. Dans la bote de dialogue Proprits de la planification du travail, modifiez la
Frquence quotidienne en spcifiant une valeur gale 10 secondes, puis
cliquez sur OK puis sur Suivant.
12. Dans la page Scurit de l'agent, cliquez sur Paramtres de scurit.
p. 75

13. Tapez le nom de votre compte Windows dans la zone de texte Compte de
processus et tapez votre mot de passe Windows dans les zones de texte Mot de
passe et Confirmer le mot de passe.
14. Laissez la case cocher En imitant le compte de processus active et cliquez
sur OK; puis sur Suivant.
15. Dans la page Actions de l'Assistant, activez la case cocher Crer la
publication, puis cliquez sur Suivant.
16. Dans la page Terminer l'Assistant, tapez BDCommercialProduits comme
Nom de la publication, puis cliquez sur Terminer.

Cration dun abonnement


Crer un abonnement la publication BDCommercialProduits sur l'instance TDI

Procdure
1. Dans une nouvelle fentre du SQL Server Management Studio; se connecter la 2me
instance nomme TDI.
2. Dans l'Explorateur d'objets, dveloppez Rplication, cliquez avec le bouton
droit sur Abonnements locaux, puis cliquez sur Nouveaux abonnements.
3. Dans la page Assistant Nouvel abonnement, cliquez sur Suivant.
4. Dans la page Publication, dans la liste Serveur de publication, cliquez sur
<Rechercher un serveur de publication SQL>. Dans la bote de dialogue Se
connecter au serveur, connectez-vous linstance par dfaut.
5. Dans la page Publication, cliquez sur la publication BDCommercialProduits,
puis cliquez sur Suivant.
6. Dans la page Emplacement de l'Agent de distribution, slectionnez Excuter
tous les agents sur le serveur de distribution, <Nom Serveur> (abonnements
par envoi de donnes (push)), puis cliquez sur Suivant.
7. Dans la page Abonns, dans la liste Base de donnes d'abonnement, cliquez
sur <Nouvelle base de donnes>.
8. Dans la bote de dialogue Nouvelle base de donnes, tapez BDCommercial2
dans la zone de texte Nom de la base de donnes, puis cliquez sur OK puis sur
Suivant.
9. Dans la page Scurit de l'Agent de distribution, cliquez sur le bouton de
slection ().
10. Dans la bote de dialogue Scurit de l'Agent de distribution, tapez le nom de
votre compte Windows dans la zone de texte Compte de processus et tapez
votre mot de passe Windows dans les zones de texte Mot de passe et
Confirmer le mot de passe, cliquez sur OK, puis sur Suivant.
11. Dans la page Planification de synchronisation, vrifiez que l'option Excuter
en continu est slectionne dans la liste droulante Planification de
l'agent,puis cliquez sur Suivant.
12. Dans la page Initialiser les abonnements, vrifiez que la zone de liste quel
moment a pour valeur Immdiatement, puis cliquez sur Suivant.
13. Dans la page Actions de l'Assistant, cochez loption Crer le ou les
abonnements, puis cliquez sur Suivant.
14. Dans la page Terminer l'Assistant, cliquez sur Terminer.
Vrifier que les donnes sont rpliques correctement

1. Sous linstance nomme TDI, excuter la requte


SELECT * FROM [BDCommercial2].[dbo].[ Produits]

puis vrifiez que les produits dont le prix >= 120 ont t rpliques.
1. Sous linstance par dfaut, excuter la requte :
UPDATE [BDCommercial2].[dbo].[Produits] SET Prix += 10
2.

Attendez 10 secondes pour que la rplication soit ralise. Puis r excuter sous
linstance nomme TDI, la requte
SELECT * FROM [BDCommercial2].[dbo].[Produits]

p. 76

Vous aimerez peut-être aussi