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
Filière : TDI
Niveau Technicien spécialisé

Manuel de TP
Module18 : Système de Gestion de Bases de Données II

p. 1
MODULE 18 : SYSTÈME DE GESTION DE BASES DE DONNÉES II
Code : TDI-18 Durée : 75 h

PRECISIONS SUR LE COMPORTEMENT CRITERES PARTICULIERS DE


ATTENDU PERFORMANCE
A. Écrire des scripts dans le langage  Présentation des instructions du langage de
procédural du SGBD. programmation :
 les variables et les types de données ;
 les variables élémentaires et complexes ;
 les structures de contrôle ;
 les conditions ;
 Les EXCEPTIONS : prédéfinies et utilisateur.
B. Surveiller et dépanner SQL Server  Identification des problèmes de la fonction de SQL
Server.
 Identification des problèmes d'accès concurrentiels.
 Identification des problèmes de l'exécution du travail
de l'Agent SQL.
 Recherche des informations sur l'erreur.
C. Manipuler les jeux d’enregistrement.  Définition d'un curseur : implicite, explicite.
 Définition des attributs de curseurs.
 Manipulation du contenu d’un curseur.
D. Programmer des procédures et des  Description du formalisme à respecter.
fonctions sur le SGBD.  Programmation des procédures stockées sur le
SGBD.
 Appel des fonctions à partir de requêtes SQL.
 Test du programme et correction des erreurs.
E. Créer des packages sur le SGBD.  Description du formalisme à respecter.
 Présentation des packages standard.
 Programmation des packages.
F. Programmer des déclencheurs.  Événements qui déclenchent les triggers.
 Formalisme à respecter.
 Programmation des Triggers.
 Test du trigger et correction des erreurs.
G. Optimiser les performances SQL Server  Mise en œuvre du gouverneur de ressources.
 Assistant Paramétrage du moteur de base de
données.
 Collecte des données de trace à l'aide du générateur
de profils SQL Server.
 Collecte des données de performances en utilisant
des vues de gestion dynamique (DMV).
 Collecte des données de performance à l'aide du
moniteur système.
 UTI Performance Studio.

p. 2
H. Mettre en œuvre la haute disponibilité  Mise en œuvre de la mise en miroir de base de
données.
 Mise en place d’une instance en cluster de SQL
Server.
 Mise en œuvre de l’envoi de journaux.
 Implémentation de la réplication.

p. 3
Activité d’apprentissage 1
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A001

Activité
Déclarer et manipuler des variables

Durée 45 mn

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Déclarer des variables de différentes types
Détails sur les objectifs Transact-Sql.
visés par l’activité  Initialiser des variables
 Utiliser des variables.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 4
DESCRIPTION DE L’ACTIVITÉ

Pour gérer les membres d’un forum de programmation, on dispose de la table suivante :
Membre (Pseudo, E-mail, Mot de passe, Date de naissance, Date d’inscription, Ville)

Travail à faire :

Créer la table Membre.


Enregistrer quelques membres dans la table.

1. Déclarer une variable @ville et l’initialiser avec le nom de votre ville.


2. En utilisant la variable @ville dans une requête SELECT, renvoyer la liste des
membres originaire de votre ville.
3. Déclarer une variable @nbMembre de type int
4. Affecter à cette variable le nombre total des membres du forum
5. Afficher, si elles existent, les villes contenant plus que 20% du nombre total des
membres
6. Déclarer une variable @DateDémarrage de type date
7. Affecter à cette variable la date d’inscription du premier membre (la date
d’inscription la plus ancienne)
8. Affecter à une autre variable la date du dixième jour après l’inscription du
premier membre, (utiliser DATEADD (day , 10, @DateDémarrage))
9. En utilisant les deux variables, calculer le nombre des membres inscrits,
pendant les 10 premiers jours.
10. De la même manière, calculer le nombre des inscrits les 10 jours suivants
11. Quel était le taux d’évolution du nombre d’inscription ?
taux d’évolution = (Nombre d’inscrits 2 - Nombre d’inscrits 1) / Nombre d’inscrits 1
12. Calculer dans une nouvelle variable l’âge moyen des membres
13. Afficher les membres dont l’âge est supérieur à l’âge moyen calculé
précédemment.

p. 5
Activité d’apprentissage 2
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A002

Activité
Implémenter l’instruction de contrôle : IF- ELSE

Durée 30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Définir les conditions avec la structure IF...
Détails sur les objectifs ELSE.
visés par l’activité  Implémenter la structure conditionnelle
 Création de blocs de code avec BEGIN...
END

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 6
DESCRIPTION DE L’ACTIVITÉ

Facture d’eau

La facture d’eau est calculée selon un barème à tranche.


La consommation mensuelle d’eau est répartie en tranches, les informations
concernant les tranches sont données 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
donnée.
Déclarer une variable @consommation et lui affecter la valeur 26.
En utilisant la structure if … else calculer et afficher le montant de la consommation.
Exécuter le lot

Calculer le montant de la facture pour les consommations suivantes : 6 m3, 15 m3 et 40


m3

p. 7
Activité d’apprentissage 3
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A003

Activité
Implémenter l’instruction de contrôle : IF- ELSE

Durée 30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Définir les conditions avec la structure IF...
Détails sur les objectifs ELSE.
visés par l’activité  Implémenter la structure conditionnelle
 Création de blocs de code avec BEGIN...
END

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 8
DESCRIPTION DE L’ACTIVITÉ

Pour encourager l’entraide des membres du forum, un système de bonus à point a été
instauré.

Un extrait de la base de données est le suivant :


Membre (Pseudo, E-mail, Mot de passe, Date de naissance, Date d’inscription, Ville)
Bonus (PseudoMembre, NbPoint)

Travail à faire :

Créer la table Membre

Ajouter quelques membres à la table

Écrire un lot Transact-sql qui permet d’ajouter à la base de données la table Bonus si
elle n’existe pas et/ou créer la contrainte FOREIGN KEY si elle n’existe pas.

Pour tester l’existence d’un objet dans la base de données, 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 :
Déclarer une variable @pseudo et lui affecter la valeur ‘TDI2’
Déclarer une variable @point et lui affecter la valeur 2
Si le membre a déjà eu un bonus, augmenter donc ses points par la valeur de la variable
@point
Sinon ajouter une nouvelle entrée dans la table Bonus (@pseudo, @point).

p. 9
Activité d’apprentissage 4
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A004

Activité
Implémenter l’instruction de contrôle : WHILE

Durée 1h30mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Implémenter la structure répétitive
Détails sur les objectifs  Définir la condition d’arrêt de la boucle
visés par l’activité While
 Création de blocs de code avec BEGIN...
END
 Contrôler l'exécution des instructions de la
boucle WHILE avec BREAK et CONTINUE.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 10
DESCRIPTION DE L’ACTIVITÉ

Pour la gestion des rendez-vous d’un cabinet médical, un extrait de la base de données
vous est fourni :
RDV (NUM_RDV, DATE_RDV, HEURE_RDV, PATIENT)
Heure_RDV (Heure)
le champ Heure est de type time

Déclarer les variables suivantes


Nom variable Type Valeur initiale
@HeureDebut Time 8 :00
@HeureFin Time 14:00
@durée Int 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 l’heure les plus proches :
Déclarer une variable @jour de type date
Affecter à cette variable la date système.

Dans le bloc d’une boucle While, en incrémentant la variable @jour, chercher si elle
existe une heure libre (non affectée à un rendez-vous)
le code ne doit pas proposer des rendez-vous le week-end.

Les heures libres peuvent être obtenues par la requête


SELECT Heure FROM Heure_RDV
EXCEPT
SELECT HEURE_RDV FROM RDV WHERE DATE_rdv = @jour

DATEPART (weekday, @jour) retourne le numéro du jour dans la


semaine

p. 11
Activité d’apprentissage 5
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A005

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

Durée 1 h 30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Intercepter et contrôler les erreurs à l'aide de
Détails sur les objectifs la structure TRY/CATCH
visés par l’activité  Utiliser des gestionnaires d'erreur dans le
code T-SQL

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 12
DESCRIPTION DE L’ACTIVITÉ

Soit une base de données SQL Server contenant les tables suivantes :
Salle (NumSalle, Etage, NombreChaises)
Transfert (NumSalleOrigine, NumSalleDestination, NbChaisesTransférées,
DateTransfert)

Créer la base de données


Le nombre de chaises dans une salle doit être compris entre 20 et 30 chaises par salle
Implémenter cette règle à l’aide d’une contrainte CHECK

Saisir les données suivantes :


Numéro salle Etage Nombre de chaises
1 1 24
2 1 26
3 1 26
4 2 28

À l’aide d’une transaction, écrire le code qui permet de déplacer un nombre de chaise
d’une salle à une autre.

Démarche :

Déclarer les variables suivantes :


Variable type Valeur
@SalleOrigine int 2
@SalleDest int 3
@NbChaises int 4
@dateTransfert Date Getdate()

Dans un bloc BEGIN TRY … END TRY, écrire le code qui permet de :
a. débuter une transaction (BEGIN TRANSACTIN)
b. modifier le nombre de chaises de la salle dont le numéro = @SalleOrigine
(NombreChaises = NombreChaises - @NbChaises)
c. modifier le nombre de chaises de la salle dont le numéro = @SalleDest
(NombreChaises = NombreChaises + @NbChaises)
d. enregistrer l’opération 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 d’erreur « Impossible d’effectuer le transfert des chaises »

exécuter le code puis consulter les tables salle et transfert, le transfert doit être effectué
parce que la contrainte CHECK est vérifiée pour les deux salles

en essayant de ré-exécuter le code une deuxième fois, le message d’erreur sera affiché

p. 13
Activité d’apprentissage 6
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A006


Déclenchement d'une exception via
Activité RAISERROR

Durée 1 heure

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une erreur personnalisée.
Détails sur les objectifs  Déclencher une exception avec RAISERROR
visés par l’activité  Communiquer des problèmes au client avec
RAISERROR.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 14
DESCRIPTION DE L’ACTIVITÉ

Soit la base de données suivante :


Adhérents (Num_Adh, Nom_Adh, Prénom_Adh, Date_Naissance)
Livres (Num_Li, Titre, Durée_Max_Emprunt, Emprunté)
Emprunts (Num_Emp, Num_Adh, Num_Li, Date_Emprunt, Date_Retour)

Travail à faire (à modifier pas de ps)


1. Créer la base de données
2. Remplir la table Adhérents et la table Livres.

A l'aide de sp_addmessage, définir les messages d’erreur suivants :

Id message Message Severity


60000 Le livre n’existe pas 16
60001 l’adhérent n’existe pas 16
60002 le livre est déjà emprunté 16
60003 l’adhérent emprunte déjà 3 livres 16
3. Écrire un lot transact-sql qui enregistre une opération d’emprunt en tenant
compte des indications suivantes :

Déclarer deux variables @Num_Adh et @Num_Li et leur affecter des


valeurs de votre choix.

Déclencher l’erreur numéro 60000, si le livre n’existe pas (utiliser


l’instruction RAISERROR)

Déclencher l’erreur numéro 60001, si l’adhérent n’existe pas.

Déclencher l’erreur numéro 60002, si le livre est déjà emprunté.

Déclencher l’erreur numéro 60003, si l’adhérent a trois 3 livres non


retournés.

Enregistrer l’opération d’emprunt (la date d’emprunt est la date système).

4. On souhaite enregistrer l’opération de retour d’un livre


déclarer une variable @Num_Livre

Enregistrer le retour du livre en levant des erreurs si le livre n’existe pas


ou s’il n’est pas emprunté

La date de retour est la date système.


Afficher le nombre de jour de retard s’il on a dépassé la durée max
d’emprunt.

p. 15
Activité d’apprentissage 7
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A007

Activité Création et utilisation de tables temporaires

Durée 45 mn

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer une table temporaire.
Détails sur les objectifs  Remplir une table temporaire.
visés par l’activité  Utiliser et manipuler les données d’une
table temporaire

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 16
DESCRIPTION DE L’ACTIVITÉ

A partir d’une liste de personnes, on souhaite calculer et renvoyer le nombre de


personnes par tranches d'âge.

Créer une base de données contenant la table suivante : Personne (nom, adresse,
dateNaissance)
Remplir la table avec quelques enregistrements.

Créer une table temporaire dont la structure est la suivante :

Age min Int


Age max Int
NOMBRE Int

Déclarer une variable @palier et lui affecter la valeur 10


Déclarer une variable @max et lui affecter l’âge de la personne la plus âgée
Dans une boucle, calculer pour chaque tranche d’âge, le nombre de personnes et
l’ajouter à la table temporaire
Afficher le résultat obtenu

Exemple :

Age min Age max NOMBRE


0 9 6
10 19 4
20 29 15

p. 17
Activité d’apprentissage 8
Module TDI-18 Système de Gestion de Bases de Données II

Écrire des scripts dans le langage procédural


Précision A
du SGBD

Code Activité A008

Activité
Utilisation de variables de type table

Durée 45 mn

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Déclarer des variables de type table.
Détails sur les objectifs  stocker temporairement un ensemble de
visés par l’activité lignes dans des variables de tables
 renvoyer le contenu d’une variable de
table.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 18
DESCRIPTION DE L’ACTIVITÉ

La base de données d’un centre de formation contient la table suivante :


Formation (Num, Titre, Date_début, Date_fin, NbParticipants)

Le responsable du centre souhaite calculer le nombre total des participants par


jour entre deux dates données.
Par exemple, si la table Formation contient :

Num Titre Date_début Date_fin NbParticipants


1 Initiation Windows 7 09/12/13 12/12/13 8
2 SQL SERVER 2008 11/12/13 14/12/13 6
3 Office 2012 09/12/13 11/12/13 5

Il souhaite obtenir le résultat suivant :


Date Nombre participants
09/12/13 13
10/12/13 13
11/12/13 19
12/12/13 14

Travail à faire
Créer la table Formation
Saisir quelques enregistrements dans la table

Déclarer une variable de type table contenant deux colonnes la date et nombre
participants
Déclarer une variable @dateDebut et l’initialiser avec la valeur 09/12/2013.
Déclarer une variable @dateFin et l’initialiser avec la valeur 12/12/2013.

Dans le bloc d’instructions d’une boucle While, calculer le nombre de participant pour
chaque jour, puis ajouter le résultat obtenu dans la variable de table
Afficher le contenu de la variable table
Afficher les jours où le nombre total des participants dépasse 16 personnes

p. 19
Activité d’apprentissage 9
Module TDI-18 Système de Gestion de Bases de Données II

Précision B Surveiller et dépanner SQL Server

Code Activité B001

Activité Créer un journal de compteur du Moniteur système


pour analyser le serveur SQL Server
Durée 25 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer un journal de compteur
Détails sur les objectifs  Ajouter des compteurs à un journal
visés par l’activité  Afficher les données du journal pour
l'activité de la base de données

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 20
DESCRIPTION DE L’ACTIVITÉ

Créer un ensemble de collecteurs de données pour analyser le serveur Sql


1. Sous Windows, démarrer l’analyseur de performances.
2. Dans la console Performances, dans le volet gauche, développez Ensembles de
collecteurs de données.

3. Cliquez avec le bouton droit sur Définis par l’utilisateur, puis cliquez sur
Nouveau …Ensemble de collecteurs de données .
4. Dans la boîte de dialogue Créer un nouvel ensemble de collecteurs de
données, dans la zone Nom, taper « Collecteur1 », cocher la case Créer
manuellement (avancé), puis cliquer sur Suivant.
5. Dans la boîte de dialogue Quel type de données inclure, cocher la case
Compteur de performance. puis cliquer sur Suivant.
6. Dans la boîte de dialogue Quel compteurs de performance enregistrer dans
un journal ? définir l’intervalle d’échantillonnage à 10 secondes puis cliquer
sur le bouton Ajouter…
7. Dans la nouvelle boîte de dialogue cocher la case Afficher la description (lire
la description du compteur sélectionné) Ajouter dans le journal les
compteurs répertoriés dans le tableau ci-dessous :
Objet de performance Compteur Instance
Mémoire Pages/s
Mémoire Défauts de page/s
Processus % Temps processeur sqlservr
Processeur % Temps processeur _Total
SQLServer:Locks Requêtes de verrous/s _Total
SQLServer:Locks Temps d’attente des verrous (ms) _Total
SQLServer:Memory Manager Mémoire totale du serveur
8. Cliquer sur OK puis sur Suivant puis sur Terminer.
9. Dans l’analyseur de performances, démarrer l'ensemble de collecteurs de
données Collecteur1
10. Dans Sql Server Management Studio, exécuter des requêtes Transact SQL pour
simuler une activité sur le serveur.
11. Dans l’analyseur de performances, arrêter l'ensemble de collecteurs de
données Collecteur1
12. Dans la console Performances, dans le volet gauche, développez Rapport,
Définis par l’utilisateur puis Collecteur1; sélectionner le rapport

p. 21
Activité d’apprentissage 10
Module TDI-18 Système de Gestion de Bases de Données II

Précision B Surveiller et dépanner SQL Server

Code Activité B002

Activité
Identification des problèmes d'accès concurrentiels

Durée 45 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une trace SQL Server Profiler pour
Détails sur les objectifs capturer un blocage.
visés par l’activité

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 22
DESCRIPTION DE L’ACTIVITÉ

Démarrer SQL Server Management Studio


Créer une base de données « BDCommercial » :
Créer la table suivante : Articles (Num, Designation, Prix)
Insérer deux lignes de données dans la table Articles
INSERT INTO Articles VALUES (1, 'Galaxy S5',5000)
INSERT INTO Articles VALUES (2, 'Xperia Z2',5500)
Démarrer SQL Server Profiler, (menu Outils - SQL Server Profiler), et se
connecter à l’instance Sql Server

Indiquer un nom de trace, Dans la zone Nom de la trace


sélectionner Vide Dans la liste Utiliser le modèle.
Enregistrer les résultats de la trace dans un fichier,
cliquer sur l'onglet Sélection des événements.
Activer la case à cocher pour l'événement Deadlock graph dans la catégorie
Locks,
Cliquer sur Exécuter pour démarrer la trace
Ouvrez deux fenêtres de requête et modifier le contexte de la base de données
BDCommercial .
Dans la première fenêtre de requête, exécuter le code suivant:
begin transaction

UPDATE Articles
SET Prix = 6000
WHERE (Num = 1)

Dans la deuxième fenêtre de requête, exécuter le code suivant:


begin transaction

UPDATE Articles
SET Prix = 6000
WHERE (Num = 2)
select * from Articles
where Num = 1
Dans la première fenêtre de requête, exécuter le code suivant:
select * from Articles
where Num = 2
Observer les résultats dans le SQL Server Profiler

p. 23
Activité d’apprentissage 11
Module TDI-18 Système de Gestion de Bases de Données II

Précision C Manipuler les jeux d’enregistrement

Code Activité C001

Activité Définition d'un curseur.


Définition des attributs de curseurs.
Durée 45 mn

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Déclarer un curseur
Détails sur les objectifs  Ouvrir un curseur
visés par l’activité  Récupérer les données d’un enregistrement
 Utiliser la boucle While avec un curseur.
 Fermer un curseur

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 24
DESCRIPTION DE L’ACTIVITÉ

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


On désire 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 spécifié par la valeur
de la colonne NOMBRE.

Déclarer une variable table contenant deux colonnes nom et adresse


Déclarer un curseur associé à l’instruction « SELECT nom, adresse, nombre FROM
Personne »
Parcourir à l’aide d’une boucle while, le résultat de la requête SELECT
Pour chaque personne lue, insérer, dans la variable table, le nom et adresse autant de
fois que spécifié par la valeur NOMBRE.
Afficher le contenu de la variable table.

Dans un nouveau lot, on souhaite créer un Login pour chaque personne de la table

Déclarer un curseur associé à l’instruction « SELECT nom FROM Personne »


Parcourir à l’aide d’une boucle while, le résultat de la requête SELECT
Pour chaque personne lue, construire par concaténation la requête suivante :
'create login ' + @nom +' with password= ''' + @nom + ''''

exécuter la requête à l’aide de l’instruction EXEC (@requête)

vérifier la création des connexions puis les supprimer

p. 25
Activité d’apprentissage 12
Module TDI-18 Système de Gestion de Bases de Données II

Précision C Manipuler les jeux d’enregistrement

Code Activité C002

Activité
Manipulation du contenu d’un curseur.

Durée 45 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Traiter des lignes sur le serveur avec un curseur
Détails sur les objectifs  Récupérer les données d’un enregistrement
visés par l’activité  Utiliser la boucle While avec un curseur.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 26
DESCRIPTION DE L’ACTIVITÉ

Facture d’électricité
La facture d’électricité est calculée selon un barème à tranche.
La consommation mensuelle d’électricité est répartie en tranches, les
informations concernant les tranches (Numéro, Quantité, Tarif) sont stockées
dans une table nommée Barème.
Créer la table Barème
Renseigner la table Barème

Numéro Quantité Tarif kWh


1 100 0,8496
2 100 0,9227
3 300 1,0039
4 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 répartie la consommation


d’électricité en tranche est renvoie une table suivant l’exemple suivant :

Déclarer une variable @consommation et lui affecter la valeur 250.


Créer une table temporaire #tranches contenant les colonnes (Tranche, Quantité, Prix
unitaire, Montant)
Le montant est une colonne calculée = (Prix unitaire * Quantité)
Déclarer un curseur associé à l’instruction « SELECT * FROM tranches ORDER BY Numéro »
Dans le bloc d’une boucle while, calculer les données de chaque tranche et l’ajouter à 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 d’électricité.

Ré exécuter le lot pour une consommation de 180 KWh, le résultat doit contenir deux
lignes

p. 27
Activité d’apprentissage 13
Module TDI-18 Système de Gestion de Bases de Données II

Précision C Manipuler les jeux d’enregistrement

Code Activité C003

Activité
Manipulation du contenu d’un curseur.

Durée 30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Traiter des lignes sur le serveur avec un curseur
Détails sur les objectifs  Récupérer les données d’un enregistrement
visés par l’activité  Utiliser la boucle While avec un curseur.
 mettre à jour des résultats obtenus via un curseur.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 28
DESCRIPTION DE L’ACTIVITÉ

Classement des élèves

On souhaite classer les élèves selon leur moyenne.

Créer une table élève (Num, Nom, Moyenne)

Remplir la table avec les données de quelques élèves

Ajouter à la table élève une colonne Classement

À l’aide d’un curseur, calculer et mettre à jour la colonne Classement

Déclarer un curseur associé à la requête “SELECT Moyenne FROM élève


ORDER BY 1 DESC”

Déclarer une variable @classement et lui affecter la valeur 1


Parcourir le résultat obtenu par le curseur, et mettre à jour le champ classemnt de
l’enregsitrement courant en éxécutant l’instruction suivante :
update élève set Classement = @Classement where CURRENT of nomcurseur
incrémenter le compteur

exécuter le code et vérifier le classement des élèves

modifier le code pour tenir compte des élèves ex æquo (ayant la même moyenne
donc le même classement)

p. 29
Activité d’apprentissage 14
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D001

Activité
Création et manipulation de procédures stockées

Durée 40 mn

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer une procédure stockée. Utiliser
CREATE PROC …
Détails sur les objectifs  Exécuter une procédure stockée. Utiliser
visés par l’activité
l’instruction EXECUTE
 Modifier une procédure stockée existante.
Utiliser l’instruction ALTER PROC
 Supprimer une procédure stockée. Utiliser
l’instruction DROP PROC …

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 30
DESCRIPTION DE L’ACTIVITÉ

Exercice 1
Créer une procédure permettant de créer la table Semaine (jour date) et la rempli
avec les dates des 7 jours qui suivent la date système.

Exécuter la procédure

Afficher le contenu de la table Semaine

Modifier la procédure pour inclure le code qui permet de supprimer la table si


elle existe
if OBJECT_ID('Semaine') is not null vérifie l’existence de la table Semaine

Ré-exécuter la procédure.

Supprimer la procédure.

p. 31
Activité d’apprentissage 15
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D002

Activité Passage des paramètres en entrée à une procédure


stockée.
Durée 2h

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Programmer des procédures stockées
Détails sur les objectifs paramétrées.
visés par l’activité  Créer des paramètres en entrée.
 Exécuter la procédure et passer des
paramètres en entrée.
 Créer des paramètres en entrée optionnels.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 32
DESCRIPTION DE L’ACTIVITÉ

Club loisir

Pour gérer les différentes activités d’un club de loisirs, et à partir de cet extrait
d’une base de données relationnelle, réaliser le travail demandé

Adhérent (code, nom, prénom)


Activité (refActivité, intitulé, NbMaxParticipant)
Inscription (code, refActivité, date)

1. Créer la base de données

2. Créer une procédure permettant d’ajouter un nouvel adhérent

3. Ajouter des adhérents à la base de données en exécutant la procédure

4. Créer une procédure permettant d’ajouter une nouvelle activité à la base de


données

5. Créer des activités dans la base de données, en exécutant la procédure


correspondante

6. Créer une procédure permettant d’inscrire un adhérent dans une activité :


La date inscription est facultative, (elle est égale à la date système si omise).

7. En appelant cette procédure plusieurs fois, inscrire des adhérents dans


différents activités

8. Ecrire une procédure qui renvoie la liste des activités (refActivité, intitulé,
NbMaxParticipant, Nombre d’adhérents).

9. Créer une procédure permettant d’inscrire un adhérent dans toutes les


activités (utiliser l’instruction insert ... select ).

10. Créer une procédure permettant de supprimer un adhérent ainsi que ses
inscriptions aux différentes activités

p. 33
Activité d’apprentissage 16
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D003

Activité Passage des paramètres en entrée à une procédure


stockée.
Durée 2h30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Programmer des procédures stockées
Détails sur les objectifs paramétrées.
visés par l’activité  Créer des paramètres en entrée.
 Exécuter la procédure et passer des
paramètres en entrée.
 Créer des paramètres en entrée optionnels.

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 34
DESCRIPTION DE L’ACTIVITÉ

A partir de cet extrait d’une base de données relationnelle, réaliser le travail


demandé
Fonctionnaire (matricule, nom, dateEmbauche, échelle_actuelle)
Historique_Echelle (DateEffet, Nouvelle_Echelle, matricule)
Grille_indiciaire (Echelle, Point_Indice, Durée minimale)

1.Créer la base de données, et renseigner la table « Grille_indiciaire »


2.Ecrire une procédure permettant d’ajouter un nouveau fonctionnaire, la
procédure doit aussi enregistrer la date d’effet de l’échelle ( = date
d’embauche) attribuée au nouveau fonctionnaire.
NouveauFonctionnaire (@matricule, @nom, @dateEmbauche,
@échelle_actuelle)
3.Créer une procédure renvoyant la liste de tous les fonctionnaires
(matricule, nom, dateEmbauche, échelle actuelle, DateEffet).
4.Ecrire une procédure qui renvoie la liste des fonctionnaires recrutés entre
deux dates données
5.Créer une procédure qui modifie la durée minimale d’une échelle donnée.
La procédure renvoie un message d’erreur si l’échelle n’existe pas.
6.Créer une procédure renvoyant la liste des fonctionnaires ayant bénéficié
d’un avancement d’échelle dans deux années données en paramètres
(matricule, nom, dateEmbauche, échelle actuelle).
par exemple « EXEC ListeFonctionnaires 2005, 2011 » renvoie la liste
des fonctionnaires ayant eu un avancement d’échelle 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 3ème page renvoie 20 fonctionnaires
à partir de la position 41.
(indication : utiliser la fonction ROW_NUMBER())
Créer une procédure renvoyant les fonctionnaires d’une seule page
ListeParPage @numeroPage, @taillePage

8.Ecrire la procédure d’avancement d’échelle d’un fonctionnaire donné.


Avancer(@matricule, @dateeffet)
La procédure renvoie des erreurs si le matricule n’existe pas, si le fonctionnaire n’a pas passé
la durée minimale requise dans son échelle actuelle ou s’il est à l’échelle 30.
En utilisant une transaction, La procédure met à jour l’échelle dans la table fonctionnaire et
enregistre la date d’effet de la nouvelle échelle dans la table Historique_Echelle
9.Ecrire une procédure permettant de supprimer un fonctionnaire donné, ainsi
que son historique d’avancement.

p. 35
10.Ecrire une procédure qui renvoie l’historique d’avancement d’un
fonctionnaire donné. Selon le modèle suivant :
Echelle Date effet Date avancement
8 1/1/2005 1/1/2008
9 1/1/2008 Null
Pour chaque échelle, renvoie la date d’effet (date d’accès à cette échelle)
et la date d’avancement à l’échelle suivante.
(indication : utiliser un curseur )

p. 36
Activité d’apprentissage 17
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D004

Activité Passage des paramètres en sortie à une procédure


stockée.
Durée 2 h 30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une procédure stockée.
 Retourner les données en utilisant RETURN.
Détails sur les objectifs  Exécuter la procédure et récupérer la
visés par l’activité valeur retournée
 Utiliser des paramètres OUTPUT pour
retourner des données.
 Exécuter la procédure et récupérer les
valeurs des paramètres OUTPUT

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 37
DESCRIPTION DE L’ACTIVITÉ

Soit la base de données suivante :


Adhérents (Num_Adh, Nom_Adh, Prénom_Adh, Date_Naissance)
Livres (Num_Li, Titre, Durée_Max_Emprunt, Emprunté)
Emprunts (Num_Emp, Num_Adh, Num_Li, Date_Emprunt, Date_Retour)
Archives (Nom_Prénom_Adh, Titre_livre, Date_Emprunt, Date_Retour)
Num_Adh, Num_Li et Num_Emp sont des champs identity
Travail à faire :
Créer la base de données
1. Créer une procédure stockée « AjoutLivre » qui permet d’ajouter un
nouveau livre à la base de données (le champ Emprunté a la valeur 0)
2. Ajouter des livres en exécutant la procédure
3. Créer une procédure stockée « LivresEmpruntés » qui renvoie la liste des
livres actuellement empruntés
4. Créer une procédure stockée « AjouterAdhérent @Num OUTPUT,
@nom, @prénom, @dateNaissance» qui permet d’enregistrer un nouvel
adhérent, utiliser un paramètre OUTPUT pour retourner le numéro
attribué automatiquement (@@identity)
5. Écrire une procédure « Emprunter » qui enregistre un emprunt. Par
défaut, la date d’emprunt est la date du jour. En cas d’erreur la procédure
retourne un numéro de code selon le tableau suivant :
Code de retour Erreur
1 Le livre n’existe pas
2 l’adhérent n’existe pas
3 le livre est déjà emprunté
4 l’adhérent emprunte déjà 3 livres
6. En utilisant les procédures précédemment créées, ajouter un nouvel
adhérent, récupérer son numéro dans une variable et lui faire emprunter le
livre Num 1, si le code retourné par la procédure « Emprunter » est
différent de 0, afficher le message d’erreur correspondant.
7. Créer une procédure stockée « SuppAdhérent » qui permet de supprimer
un adhérent ainsi que tous ses emprunts de la base de données
les emprunts doivent être archivé avant leur suppression
la procédure doit lever une erreur si l’adhérent n’a pas retourné des livres
utiliser une transaction pour garantir la cohérence des données
8. Exécuter la procédure SuppAdhérent pour supprimer l’adhérent créé dans
la question 6
9. Créer une procédure stockée « RetournerLivre » qui permet d’enregistrer
le retour d’un livre
RetournerLivre @Num_Livre
en levant des erreurs si le livre n’existe pas ou il n’est pas emprunté et en
imposant la date du jour comme date de retour.
Utiliser un paramètre OUTPUT pour renvoyer le nombre de jour de retard
si on a dépassé la durée maximale d’emprunt.
10. Retourner le livre Num 1, en exécutant la procédure « RetournerLivre ».
11. Ré-exécuter la procédure SuppAdhérent pour supprimer l’adhérent créé

p. 38
dans la question 6

p. 39
Activité d’apprentissage 18
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D005

Activité Passage des paramètres en sortie à une procédure


stockée.
Durée 2 h 30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une procédure stockée.
 Retourner les données en utilisant RETURN.
Détails sur les objectifs  Exécuter la procédure et récupérer la
visés par l’activité valeur retournée
 Utiliser des paramètres OUTPUT pour
retourner des données.
 Exécuter la procédure et récupérer les
valeurs des paramètres OUTPUT

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 40
DESCRIPTION DE L’ACTIVITÉ

Pour le suivi des paiements réalisés par ses patients, un dentiste utilise une base de
données SQL Server contenant les tales suivantes :

Patient (Code, Nom, Prénom, date_naissance, Total_dû, Total_payé)


Acte (référence, libellé, Prix)
RéalisationActe (numéro, Référence, CodePatient, Date, Payé (O/N))
Paiement (numéro, 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 :
Créer la base de données et remplir la table Acte.

1.Ecrire une procédure permettant d’ajouter un nouveau patient, les champs


Total_dû et Total_payé auront des valeurs nulles (0) par défaut.
En utilisant la procédure, ajouter des patients à la base de données
2.Ecrire une procédure permettant d’enregistrer la réalisation d’un acte pour
un patient donné
La procédure doit :
renvoyer des messages d’erreurs si le patient n’existe pas ou l’acte
n’existe pas
Si l’acte réalisé est payé enregistrer l’opération dans la table paiement et
mettre à jour le champ Total_payé.
Si l’acte réalisé n’est pas payé mettre à jour le champ Total_dû.
utiliser un paramètre OUTPUT pour retourner le prix de l’acte payé

En utilisant la procédure, enregistrer quelques actes réalisés.

3.Ecrire une procédure qui renvoie dans un paramètre OUTPUT le montant


total des actes non payés par un patient donné
4.Ecrire une procédure qui permet à un patient de payer le montant total qu’il
doit au dentiste
PayerTout @codePatient
La procédure marque tous les actes subi par le patient et qui ne sont pas payés
(Payé reçoit 1), enregistre l’opération dans la table paiement, met à zéro le total
dû et actualise le champ total payé
Utiliser une transaction pour garantir la cohérence de la base de données.

Exécuter la procédure et vérifier le résultat dans la base de données.

p. 41
Activité d’apprentissage 19
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D006

Activité Passage des paramètres en sortie à une procédure


stockée.
Durée 2 h 30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une procédure stockée.
Détails sur les objectifs  Retourner les données en utilisant RETURN.
visés par l’activité  Exécuter la procédure et récupérer la
valeur retournée

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 42
DESCRIPTION DE L’ACTIVITÉ

Sécurité d’un site Web.

Pour gérer la sécurité d’un site Web, on utilise une base de données contenant les
tables suivantes:
CompteUtilisateur (Nom, PassWord, QuestionSecurite, ReponseSecurite,
DateCréation , estBloqué, date_dernière_connexion, Nombre_Echec_Connexion,
Date_Dernier_Echec)
Rôle (Id, Nom)
Appartenance (NomUtilisateur, IdRole)

Travail à faire :

Créer la base de données :

Créer des procédures stockées permettant de :

1. ajouter un nouveau rôle.

2. créer un nouvel utilisateur :

CreerUtilisateur @Nom, @PassWord, @Email, @QuestionSecurite,


@ReponseSecurite, @DateCréation
le paramètre @DateCréation est facultatif, (elle est égale à la date système si
omise).

3. Ajouter un utilisateur à un rôle

4. Retourner les rôles d’un utilisateur donné.

5. Supprimer un utilisateur ainsi que toutes ses appartenances aux différents


rôles

6. Renvoyer tous les noms des utilisateurs.

7. Réinitialiser le mot de passe d’un utilisateur

ReinitialiserPassword @Nom, @NouveauPassWord, @QuestionSecurite,


@ReponseSecurite
Le mot de passe est modifié si la question et la réponse de sécurité sont correctes
la procédure doit renvoyer des messages d’erreurs si le nom utilisateur n’existe
pas ou si la question ou la réponse de sécurité ne sont pas correctes

8. Vérifier si un nom de rôle existe dans la base de données

Roleexiste @nomRole
La procédure retourne 1 si le rôle existe et 0 sinon.

p. 43
9. Authentifier un utilisateur.

Seconnecter @NomUtilisateur, @Password, @resultat OUTPUT


La procédure vérifie le nom de l'utilisateur et son mot de passe par rapport aux
informations d'identification stockées dans la table « CompteUtilisateur » et
retourne comme resultat les valeurs suivantes :
0 – si le nom de l’utilisateur et le mot de passe sont valide (actualiser la date de
dernière connexion et initialiser le Nombre_Echec_Connexion à 0)
1 - si le nom d’utilisateur est incorrect.
2 – si le mot de passe est incorrect (actualiser la Date_Dernier_Echec et
incrémenter de 1 le Nombre_Echec_Connexion après 3 échecs dans un intervalle
de 30 mn la procédure doit bloquer le compte utilisateur)

10. Débloquer le compte d’un utilisateur.

Débloquer @NomUtilisateur
La procédure retourne le code 1 si échec

Exécuter chaque procédure créée et vérifier son résultat.

p. 44
Activité d’apprentissage 20
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D007

Activité
Création et manipulation des fonctions scalaires

Durée 2 h 30

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer une fonction scalaire. Utiliser CREATE
FUNCTION …
Détails sur les objectifs  Utiliser une fonction scalaire définie par
visés par l’activité l’utilisateur
 Modifier une fonction scalaire existante.
Utiliser l’instruction ALTER FUNCTION
 Supprimer une fonction scalaire. Utiliser
l’instruction DROP FUNCTION …

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 45
DESCRIPTION DE L’ACTIVITÉ

Soit la base de données suivante :


Employé (Id, Nom, Prénom, Salaire, DeptNo)
Département (DeptNo, NomDept)

Créer la base de données et renseigner les deux tables

1) Ecrire une fonction qui renvoie le nombre d’employés pour un département.


donné

2) En utilisant la fonction, écrire une requête qui renvoie la liste des


départements dont le nombre d’employés est supérieur à 5

3) Ecrire une fonction permettant de renvoyer le salaire moyen des employés


d’un département donné

4) En utilisant les fonctions précédentes, écrire une requête qui renvoie la liste
des départements (DeptNo, NomDept, Nombre employés, Salaire moyen)

5) Modifier la fonction de la question 3, pour qu’elle retourne la valeur du


(salaire max + salaire min)/2. Ré-exécuter la requête de la question 4.

6) Créer une fonction qui permet de mettre la première lettre du paramètre passé
à la fonction en majuscule et le reste en minuscule

7) Utiliser la fonction pour remplacer dans la table Employé les prénoms par le
nouveau format (seule la 1ère lettre en majuscule)

8) Créer une fonction DeptExiste(@nomDept) permettant de vérifier si un


département existe dans la base de données

La fonction retourne 1 si le nom département existe et 0 sinon.

Écrire une procédure permettant d’ajouter un nouveau département


La procédure lève une erreur si le département existe (utiliser la fonction
DeptExiste)

p. 46
Activité d’apprentissage 21
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D008

Activité
Création et manipulation des fonctions table incluses

Durée 1 h 30

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer une fonction table incluse.
Détails sur les objectifs  Utiliser une fonction table dans la clause
visés par l’activité FROM d'une instruction TRANSACT SQL

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 47
DESCRIPTION DE L’ACTIVITÉ

Exercice 1

Soit la base de données suivante :


Utilisateur (Id, Pseudo, E-mail, Mot de passe, Date d’inscription)
Salle (Id, Thème)
Message (IdUtilisateur, IdSalle, date_envoi, ,corps)

1.Créer la base de données.


2.Créer une fonction ListeUtilisateurs qui retourne la liste des utilisateurs
ayant participé à une salle de discussion (ayant envoyé au moins un
message).
3. Créer 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'opérateur APPLY permet d'appeler une fonction table pour chaque ligne
retournée par l'expression de table externe d'une requête.
écrire la requête suivante pour afficher pour chaque salle les 3 utilisateurs
ayant envoyé le plus grand nombre de message.
SELECT thème, Pseudo, FROM Salle cross apply
dbo.participants(Salle.Id)

p. 48
Activité d’apprentissage 22
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D009

Activité Création et manipulation des fonctions table multi-


instructions
Durée 2 heures 30

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une fonction table multi-instructions.
Détails sur les objectifs  Utiliser une fonction table dans la clause
visés par l’activité FROM d'une instruction TRANSACT SQL

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 49
DESCRIPTION DE L’ACTIVITÉ

Exercice 1
Soit une base de données contenant la table suivante :
Formations (Num, Titre, Date_début, Date_fin, NbParticipants)
Num est un champ auto-incrémenté.

Créer la table

Ajouter à la table les formations suivantes :

Num Titre Date_début Date_fin NbParticipants


1 Initiation Windows 7 09/12/13 12/12/13 8
2 SQL SERVER 2008 11/12/13 14/12/13 6
3 Office 2012 09/12/13 11/12/13 5

Ecrire une fonction table qui renvoie le nombre total de participants par jour entre
deux dates données en paramètres.

L’exécution de la requête :
SELECT * FROM dbo.présences_quotidiennes(‘09/12/13’, ‘12/12/13’)

Affiche le résultat suivant

Date Nombre participants


09/12/13 13
10/12/13 13
11/12/13 19
12/12/13 14

Exercice 2
Soit la table Personne (nom, adresse, dateNaissance)

Créer la table Personne

Saisir des enregistrements dans la table

Ecrire une fonction qui renvoie le nombre de personnes par tranches d'âge.
L’exécution de la requête : SELECT * FROM dbo.nbPersonneTranche(10)
Affiche le résultat suivant
Age min Age max NOMBRE
0 9 6
10 19 4
20 29 15

Exercice 3

la base de données d’une application de gestion du parc informatique d’une


entreprise, contient la table suivante:

p. 50
Ordinateur (num_serie, marque, modèle, Date_acquisition)
Créer la table

Saisir des enregistrements dans la table

Ecrire une fonction qui renvoie le nombre d’ordinateurs disponibles à la fin


de chaque année depuis une année donnée en paramètre

Par exemple, L’exécution de la requête : SELECT * FROM


dbo.nb_ordinateurs_année(2009)

Affiche le résultat suivant

Année Nombre ordinateurs


2009 50
2010 56
2011 72
2012 74
2013 98

p. 51
Activité d’apprentissage 23
Module TDI-18 Système de Gestion de Bases de Données II

Programmer des procédures et des fonctions


Précision D
sur le SGBD

Code Activité D010

Activité Création et manipulation des fonctions table multi-


instructions
Durée 1 heure 30

Phase d’apprentissage Entrainement

Cette activité d’apprentissage doit vous permettre


de :
 Créer une fonction table multi-instructions.
Détails sur les objectifs  Utiliser une fonction table dans la clause
visés par l’activité FROM d'une instruction TRANSACT SQL

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 52
DESCRIPTION DE L’ACTIVITÉ

Exercice 1

A partir de cet extrait d’une base de données relationnelle, réaliser le travail


demandé

Salles (Num, Nom, Capacité, Prix_journalier, Total_recettes)


Réservations (NumReservation, client, NumSalle, DateDebutRes, DateFinRes)

Créer la base de données

Renseigner les tables

Ecrire une fonction qui renvoie toutes les périodes ou une salle sera libre,
entre deux dates données en paramètre.
Périodeslibres(@NumSalle, @DateDebut, @DateFin)

La fonction retourne un résultat ayant la structure suivante :


Numéro Date début Date fin Nombre jours
1 13/12/2013 17/12/2013 4
2 25/12/2013 28/12/2013 3

DateDebutRes, DateFinRes
Utiliser un curseur associé à l’instruction SELECT
FROM Réservations WHERE NumSalle = @NumSalle ORDER BY DateDebut

Parcourir le résultat du curseur, et ajouter à la variable table de la fonction la


période libre entre deux réservations successives si elle existe.
Il y’a une période libre entre deux réservations successives R1 et R2 si
DateFinRes de R1 < DateDebutRes de R2

En utilisant la fonction, trouver toutes les périodes d’au moins 5 jours où la salle
Num 1 est libre pendant le mois de mars 2014

p. 53
Activité d’apprentissage 24
Module TDI-18 Système de Gestion de Bases de Données II

Précision F Programmer des déclencheurs.

Code Activité F001

Activité
Programmer des déclencheurs AFTER

Durée 2 heures

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer des déclencheurs AFTER.
Détails sur les objectifs  Tester un déclencheur
visés par l’activité  Activer / désactiver des déclencheurs
 Modifier et supprimer des déclencheurs

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 54
DESCRIPTION DE L’ACTIVITÉ

Exercice 1

Soit une base de données contenant les tables suivantes:


Formations (Num, Titre, Date_début, Date_fin, NbParticipants)
Num est un champ auto-incrémenté.
Journal (DateOperation, Opération, Nbligneaffectée, Utilisateur)
L’opération est : ajout, modification ou suppression.

Créer la base de données.

CREATE TABLE Formations (Num INT primary key identity,


Titre varchar(150), Date_début date, Date_fin date,
NbParticipants int)

CREATE TABLE Journal (DateOperation datetime default getdate(),


Opération varchar(50), Nbligneaffectée int, utilisateur sysname
default system_user)

On souhaite journaliser toutes les opérations de mise à jour de la table


Formations dès que l'on ajoute, modifie ou supprime une entrée dans la table
formations.

Créer un trigger after INSERT permettant d’ajouter une entrée dans la table
journal, dès qu’on enregistre une ou plusieurs nouvelles formations dans la
base de données. Le nombre de lignes ajoutées peut être calculé avec la
requête select count(*) from INSERTED;

Pour tester le trigger créé, ajouter des formations à la base de données et


consulter la table journal

Créer un trigger after UPDATE permettant d’ajouter une entrée dans la table
journal, dès qu’on modifie une ou plusieurs formations dans la base de
données. Le nombre de lignes modifiées peut être calculé avec la requête
select count(*) from INSERTED;

Pour tester le trigger créé, modifier des formations dans la base de données et
consulter la table journal

Créer un trigger after DELETE permettant d’ajouter une entrée dans la table
journal, dès qu’on supprime une ou plusieurs formations de la base de
données. Le nombre de lignes supprimées peut être calculé avec la requête
select count(*) from DELETED;

Pour tester le trigger créé, supprimer des formations de la base de données et


consulter la table journal.

p. 55
Utiliser l’instruction ALTER TABLE … DISABLE TRIGGER pour
désactiver les triggers précédemment créés.

Ajouter une nouvelle formation à la base de données

Consulter la table journal.

Réactiver les triggers en utilisant l’instruction ALTER TABLE … ENABLE


TRIGGER

Supprimer les triggers en utilisant l’instruction DROP TRIGGER.

Créer un seul trigger "after INSERT, UPDATE, DELETE" permettant de


journaliser la mise à jour de la table Formations

Table INSERTD Table DELETED Type opération


Non vide Vide Ajout
Non vide Non vide modification
Vide Non vide suppression

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

p. 56
Activité d’apprentissage 25
Module TDI-18 Système de Gestion de Bases de Données II

Précision F Programmer des déclencheurs.

Code Activité F002

Activité
Programmer des déclencheurs AFTER

Durée 2 heures 30

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer des déclencheurs AFTER.
Détails sur les objectifs  Tester un déclencheur
visés par l’activité  Activer / désactiver des déclencheurs
 Modifier et supprimer des déclencheurs

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 57
DESCRIPTION DE L’ACTIVITÉ
Exercice 1

A partir de cet extrait d’une base de données relationnelle, réaliser le travail


demandé

Salles (Num, Nom, Capacité, Prix_journalier, Total_recettes)


Réservations (NumReservation, client, NumSalle, DateDebut, DateFin)
Travail à faire :
Créer la base de données.

Remplir la table Salles

Une salle ne peut faire l’objet de deux réservations pour une même journée; par
exemple si la salle 1 est réservée entre le 09/09/2013 et 13/09/2013, elle ne peut
être réservée entre le 12/09/2013 et 14/09/2013. Implantez par un trigger cette
règle.

Tester le trigger

A chaque mise à jour de la table des réservations il faut mettre à jour le montant
total des recettes des salles concernées. Créer un déclencheur after INSERT
permettant d’augmenter le total des recettes d’un montant égal au prix journalier
de la salle multiplié par la durée de la réservation.

Pour tester le trigger, enregistrer une réservation et afficher le total des


recettes de la salle concernée.

Exercice 2

A partir de cet extrait d’une base de données relationnelle, réaliser le travail


demandé
Patient (Code, Nom, Prénom, date_naissance, Total_dû, Total_payé)
Acte (référence, libellé, Prix)
RéalisationActe (numéro, Référence, CodePatient, Date, Payé (O/N))
Paiement (numéro, 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 payés, écrire un trigger
permettant d’implémenter cette règle.
2.Ecrire un trigger qui maintient à jour les champs Total_dû et Total_payé
chaque fois qu’on met à jour la table «Paiement» (INSERT, UPDATE et
DELETE)

Exercice 3

p. 58
Soit une base de données contenant les tables suivantes:

Vaccins (Code, Nom, AgeVaccination)


Age vaccination est donné en nombre de mois.
Naissance (Numéro, nom, prénom, dateNaissance) le numéro est auto-
incrémenté.
Vaccination (Num, NuméroEnfant, codeVaccin, DatePrévue, DateEffective,
Remarque)

Écrire un déclencheur after qui permet à la naissance d’un enfant de planifier les
vaccinations qu’il doit effectuer.

Pour planifier la vaccination d’un enfant dont le nuémro est @num et il est né le
@date on écrit la requête suivante :

INSERT INTO Vaccination (NuméroEnfant, codeVaccin, DatePrévue)


SELECT @num, code, DATEADD(month, AgeVaccination, @date) FROM
Vaccins

p. 59
Activité d’apprentissage 26
Module TDI-18 Système de Gestion de Bases de Données II

Précision F Programmer des déclencheurs.

Code Activité F003

Activité
Programmer des déclencheurs INSTEADOF

Durée 1 heure

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer des déclencheurs INSTEAD-OF.
Détails sur les objectifs  Tester un déclencheur
visés par l’activité

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 60
DESCRIPTION DE L’ACTIVITÉ
Exercice 1

Soit une base de données contenant la table suivante :

Vaccins (Code, Nom, AgeVaccination)

Créer la table Vaccins :


Code Vaccin(s) Âge (mois)

DCaT1 Vaccin DCaT- 2


Polio-Hib

Pneum1 Vaccin conjugué 2


contre le
pneumocoque

DCaT2 Vaccin DCaT- 4


Polio-Hib

Pneum2 Vaccin conjugué 4


contre le
pneumocoque

DCaT3 Vaccin DCaT- 6


Polio-Hib

Ménin1 Vaccin conjugué 12


contre le
méningocoque

RRO1 Vaccin RRO-Var 12

Créer une autre table « NouveauxVaccins » ayant la même structure que la table
Vaccins
Code Âge (mois) Vaccin(s)

Pneum3 12 Vaccin conjugué contre le pneumocoque

Ménin1 15 Vaccin conjugué contre le méningocoque

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 »,
Exécuter la requête :
INSERT INTO VACCINS
SELECT * FROM [Nouveaux Vaccins]

p. 61
Une erreur de « Violation of PRIMARY KEY constraint » se poduit car le vaccin
Ménin1 existe déjà dans la table vaccins.
écrire un déclencheur qui permet d’insérer les nouveaux vaccins dans la table
Vaccins et mettre à jours les informations (nom et/ou âge) des vaccins qui
existent déjà.
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 déclencheur en ré exécutant la requête :


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é d’apprentissage 27
Module TDI-18 Système de Gestion de Bases de Données II

Précision F Programmer des déclencheurs.

Code Activité F004

Activité
Programmer des déclencheurs INSTEADOF

Durée 1 h 30

Phase d’apprentissage BASE

Cette activité d’apprentissage doit vous permettre


de :
 Créer des déclencheurs INSTEAD-OF sur des
Détails sur les objectifs vues.
visés par l’activité  Mettre à jour des vues à l’aide des déclencheurs
INSTEAD-OF

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 63
DESCRIPTION DE L’ACTIVITÉ

Certaines vues peuvent être l’objet de mise à jour par les instructions insert,
update, delete, mais pour cela il faut que Sql Server soit capable de déduire les
modifications à faire sur les tables et ce n’est pas toujours possible.

A partir de cet extrait d’une base de données relationnelle, réaliser le travail


demandé
Fonctionnaire (matricule, nom, dateEmbauche, échelle)
Historique_Echelle (DateEffet, Nouvelle_Echelle, matricule)
Créer la base de données
1.Créer une vue renvoyant la liste de tous les fonctionnaires (matricule, nom,
dateEmbauche, échelle actuelle, DateEffet).
2.La vue ainsi créée ne peut être mise à jour directement. Utiliser des
TRIGGER INSTEAD pour coder la mise à jour des tables sous-jacentes.

A l’aide d’un trigger INSTEAD OF INSERT programmer les


modifications à faire sur les tables de la base de données lorsqu’on insère
un nouveau fonctionnaire en utilisant l’ordre INSERT sur la vue :
le trigger doit insérer les données (matricule, nom, dateEmbauche,
échelle) dans la table Fonctionnaire et DateEffet , échelle
actuelle,matricule dans la table Historique_Echelle

A l’aide d’un trigger INSTEAD OF UPDATE programmer les


modifications à faire sur les tables de la base de données lorsqu’on
MODIFIE l’échelle du fonctionnaire en utilisant l’ordre UPDATE sur la
vue :
le trigger doit insérer les données DateEffet , échelle actuelle,matricule
dans la table Historique_Echelle

A l’aide d’un trigger INSTEAD OF DELETE programmer les


modifications à faire sur les tables de la base de données lorsqu’on
SUPPRIME un fonctionnaire en utilisant l’ordre DELETE sur la vue :
le trigger doit supprimer les données de la table Fonctionnaire et celles de
la table Historique_Echelle

p. 64
Activité d’apprentissage 28
Module TDI-18 Système de Gestion de Bases de Données II

Précision G Optimiser les performances SQL Server

Code Activité G001

Mise en œuvre du gouverneur de ressources.


Activité
Collecte des données de performances en utilisant des
vues de gestion dynamique (DMV).
Durée 1h30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Créer une fonction classifieur
 Créer un pool de ressources
Détails sur les objectifs
 Créer un groupe de charges de travail
visés par l’activité
 Affichage des rapports de paramétrage
 Collecte des données de performances en
utilisant des vues de gestion dynamique
(DMV).

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 65
DESCRIPTION DE L’ACTIVITÉ

1. Démarrer SQL Server Management Studio.


2. Créer deux nouveaux pools de ressources en exécutant 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. Créer 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. Créez 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
mémoire.

ALTER RESOURCE GOVERNOR with (CLASSIFIER_FUNCTION =


dbo.fnTDIClassifier)
ALTER RESOURCE GOVERNOR RECONFIGURE

6. Pour obtenir la configuration des pools de ressources, exécuter la requête


suivante :

SELECT * FROM sys.resource_governor_resource_pools

7. Pour obtenir la configuration des groupes de charges de travail, exécuter


la requête suivante :

SELECT * FROM sys.resource_governor_workload_groups

8. Pour vérifiez que la fonction classifieur existe et qu'elle est activée,


exécuter la requête suivante :

SELECT object_name(classifier_function_id) AS Nom_fonction_classifier, *


FROM sys.resource_governor_configuration

9. Créer deux comptes sql server en exécutant les requêtes suivantes :

CREATE LOGIN tdi1 WITH PASSWORD='tdi1'


CREATE LOGIN tdi2 WITH PASSWORD='tdi2'

10. Activer l’authentification Sql Server,


11. Se connecter au serveur en utilisant le compte Sql Server tdi1 et dans une
nouvelle fenêtre de requête exécuter :

WAITFOR DELAY '00:15';


select getdate()
Se connecter au serveur en utilisant le compte Sql Server tdi2 et dans
une nouvelle fenêtre de requête exécuter :
WAITFOR DELAY '00:15';
select getdate()

12. Exécuter la requête 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. Exécuter la requête suivante pour obtenir les statistiques de groupe de


charges de travail et la configuration en mémoire actuelle du groupe de

p. 67
charges de travail.
Activité d’apprentissage 29
SELECT * FROM sys.dm_resource_governor_workload_groups
Module TDI-18 Système de Gestion de Bases de Données II
14. Exécuter la requête suivante pour déterminer quelles sessions se trouvent
dans chaque de groupe.
Précision G Optimiser les performances SQL Server
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
Code Activité 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
Activité ORDERAssistant
BY g.name Paramétrage du moteur de base de
GO données.
Durée 30 mn
15. Exécuter la requête suivante pour déterminer quelles requêtes se trouvent
Phase d’apprentissagedans ENTRAINEMENT
chaque groupe.
Cette activité d’apprentissage 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 Paramétrage du
INNER JOIN sys.dm_resource_governor_workload_groups g
Détails sur les objectifs ON g.group_id moteur de base de données
= r.group_id
visés par l’activité  Paramétrage d'une charge
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS tde travail
ORDER BY g.name Affichage des recommandations pour le
GO paramétrage
 Affichage des rapports de paramétrage

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 68
DESCRIPTION DE L’ACTIVITÉ

1. Démarrer SQL Server Management Studio.

Créer la base de données suivante « Abonnés » :

Pour paramétrer le fichier de script Transact-SQL d'une charge de travail


remplir les deux tables en exécutant 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 Abonnés
VALUES (@i, 'Abonné ' + convert(nvarchar(4),@i), @i % 12 + 1)
set @i = @i+1;
end

2. Dans l'Éditeur de requête de SQL Server Management Studio, saisir


les requêtes suivantes :

SELECT NomGroupe, COUNT(Num) AS Nombre


FROM Abonnés INNER JOIN
Groupes ON Abonnés.CodeGroupe = Groupes.Code
GROUP BY NomGroupe

Enregistrez le fichier sous le nom Script1.sql

3. Démarrez l'Assistant Paramétrage du moteur de base de données.


Dans le menu Outils, cliquez sur Assistant Paramétrage du moteur de
base de données.
Dans la boîte de dialogue Se connecter à un serveur, vérifiez les
paramètres par défaut, puis cliquez sur Se connecter
4. Dans le volet droit de l'interface de l'Assistant Paramétrage du moteur
de base de données, tapez SessionTp dans la zone Nom de session.

5. Sélectionnez 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. Sélectionnez « Abonnés » dans la liste Base de données pour


l'analyse de la charge de travail, sélectionnez « Abonnés » dans la
grille Sélectionnez les bases de données et tables à analyser et
conservez la case à cocher Enregistrer le journal de paramétrage
activée.

7. Cliquez sur l'onglet Options de paramétrage. Cliquez sur Options


avancées pour afficher des options de paramétrage supplémentaires.
Définir une quantité d’espace max. pour les recommandations à 2MB.

8. Dans la barre d'outils, cliquez sur le bouton Démarrer l'analyse.


Pendant que l'Assistant Paramétrage du moteur de base de données
analyse la charge de travail, vous pouvez contrôler l'état de l'analyse
sous l'onglet Progression. Lorsque le paramétrage est terminé, l'onglet
Recommandations s'affiche.

9. Enregistrez votre recommandation sous la forme d'un script Transact-


SQL en cliquant sur Enregistrer les recommandations dans le menu
Actions. Dans la boîte de dialogue Enregistrer sous, accédez au
répertoire dans lequel vous souhaitez enregistrer le script de
recommandations et tapez le nom de fichier Recommendations1.

p. 70
Activité d’apprentissage 30
Module TDI-18 Système de Gestion de Bases de Données II

Précision H Mettre en œuvre la haute disponibilité

Code Activité H001

Activité Mise en œuvre de la mise en miroir de base de


données.
Durée 2 h 30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Configurer la mise en miroir de bases de
Détails sur les objectifs données
visés par l’activité  Créer des points de terminaison
 Définir le serveur principal
 Définir le serveur miroir
 Basculer vers le serveur miroir

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 71
DESCRIPTION DE L’ACTIVITÉ

Pour réaliser ce Tp vous devez installer deux instances Sql Server sur votre
ordinateur. Par exemple l’instance par défaut et une instance nommée TDI.
A l’aide du Gestionnaire de configuration SQL Server, vérifier et démarrer les
deux instances SQL Server
Configuration de la mise en miroir de bases de données
1. Démarrer SQL Server Management Studio; et se connecter à l’instance par défaut
2. Créer une base de données « TestMiroring » :
3. Créer la table suivante : Produits (Num, Designation, Prix)
4. Remplir la table en exécutant 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 l’instance par défaut.


Sauvegarder la base de données en exécutant la requête suivante :
BACKUP DATABASE TestMiroring
TO DISK = 'C:\principal\TestMiroring.bak'
6. Se connecter à l’instance nommée TDI; Dans une fenêtre de nouvelle requête
sous l’instance nommée TDI.
7. Restaurer la base de données en exécutant la requête 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. Créer un point de terminaison dans l'instance par défaut :


CREATE ENDPOINT Endpoint_Miroir
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE=PARTNER)
9. Créer un point de terminaison dans l'instance nommée TDI :
CREATE ENDPOINT Endpoint_Miroir
STATE = STARTED
AS TCP (LISTENER_PORT = 5023)
FOR DATABASE_MIRRORING (ROLE=PARTNER)
10. Dans l'instance nommée TDI (serveur miroir), définissez l'instance par
défaut 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 hôte)
11. Dans l'instance par défaut, définissez l'instance nommée 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 données sous l'instance par défaut, puis cliquez sur Actualiser.
Développez le dossier Bases de données et vérifiez que l'état de la base de
données TestMiroring est Principal, Synchronisé.

p. 72
13. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier
Bases de données sous l'instance nommée, puis cliquez sur Actualiser.
Développez le dossier Bases de données et vérifiez que l'état de la base de
données TestMiroring est Miroir, Synchronisé / Restauration.

Tester la mise en miroir.


14. Dans le volet de requête connecté à l'instance SQL Server par défaut
exécuter les requêtes 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 données, en exécutant sous l’instance par défaut (serveur principal ) la
requête :
USE master;
ALTER DATABASE TestMiroring SET PARTNER FAILOVER;

16. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier
Bases de données sous l'instance nommée TDI, puis cliquez sur Actualiser.
Dans le dossier Bases de données, vérifiez que l'état de la base de données
TestMiroring est Serveur principal, Déconnecté.
17. Retournez dans le volet de requête connecté à l'instance nommée SQL
Server exécuter les requêtes :
USE TestMiroring
GO
SELECT * FROM Produits
GO
GO
UPDATE Produits SET Prix = Prix * 1.1
GO
SELECT * FROM Produits
GO

18. Basculer manuellement vers l’instance par défaut, et consulter la table


« Produits »

p. 73
Activité d’apprentissage 31
Module TDI-18 Système de Gestion de Bases de Données II

Précision H Mettre en œuvre la haute disponibilité

Code Activité H002

Activité
Implémentation de la réplication.

Durée 2 h 30 mn

Phase d’apprentissage ENTRAINEMENT

Cette activité d’apprentissage doit vous permettre


de :
 Création d'une publication
Détails sur les objectifs  Création d'un abonnement
visés par l’activité

………………………………………………………………………………….
Matière d’œuvre et/ou
outillage …………………………………………………………………………………..
………………………………………………………………………............

p. 74
DESCRIPTION DE L’ACTIVITÉ

Pour réaliser ce Tp vous devez installer deux instances Sql Server sur votre
ordinateur. Par exemple l’instance par défaut et une instance nommée TDI.
A l’aide du Gestionnaire de configuration SQL Server, vérifier et démarrer les
deux instances SQL Server
Création d'une publication
Démarrer SQL Server Management Studio; et se connecter à l’instance par défaut
Créer une base de données « BDCommercial » :
Créer la table suivante : Produits (Num, Designation, Prix)
Remplir la table en exécutant 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
Démarrer SQL Server Agent

Créer une publication sur l'instance SQL Server par défaut


Procédure
1. Dans l'Explorateur d'objets, développez Réplication, 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 première option sélectionnée
pour que l’instance par défaut joue le rôle du serveur de distribution, puis
cliquez sur Suivant.
Créer un dossier « DossierReplication »sur votre Disque dur; et partager le sous le nom
« \\<Nom-PC>\ DossierReplication »
4. Dans la page Dossier de captures instantanées, tapez « \\<Nom-PC>\
DossierReplication » pour l’utiliser comme dossier de captures instantanées,
puis cliquez sur Suivant.
5. Dans la page Base de données de publication, cliquez sur BDCommercial pour
choisir cette base de données comme base de données de publication, puis
cliquez sur Suivant.
6. Dans la page Type de publication, cliquez sur Publication de capture
instantanée, puis cliquez sur Suivant.
7. Dans la page Articles, développez Tables, développez Produits(dbo),puis
sélectionnez 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 requête
SELECT, cliquez sur OK puis sur Suivant
10. Dans la page Agent de capture instantanée, activez les cases à cocher Créer
une capture instantanée immédiatement et garder cette dernière disponible
pour l'initialisation des abonnements et Planifier l'exécution de l'Agent de
capture instantanée aux heures suivantes, puis cliquez sur Change.
11. Dans la boîte de dialogue Propriétés de la planification du travail, modifiez la
Fréquence quotidienne en spécifiant une valeur égale à 10 secondes, puis
cliquez sur OK puis sur Suivant.
12. Dans la page Sécurité de l'agent, cliquez sur Paramètres de sécurité.

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 activée et cliquez
sur OK; puis sur Suivant.
15. Dans la page Actions de l'Assistant, activez la case à cocher Créer la
publication, puis cliquez sur Suivant.
16. Dans la page Terminer l'Assistant, tapez BDCommercialProduits comme
Nom de la publication, puis cliquez sur Terminer.
Création d’un abonnement
Créer un abonnement à la publication BDCommercialProduits sur l'instance TDI
Procédure
1. Dans une nouvelle fenêtre du SQL Server Management Studio; se connecter à la 2ème
instance nommée TDI.
2. Dans l'Explorateur d'objets, développez Réplication, 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 boîte de dialogue Se
connecter au serveur, connectez-vous à l’instance par défaut.
5. Dans la page Publication, cliquez sur la publication BDCommercialProduits,
puis cliquez sur Suivant.
6. Dans la page Emplacement de l'Agent de distribution, sélectionnez Exécuter
tous les agents sur le serveur de distribution, <Nom Serveur> (abonnements
par envoi de données (push)), puis cliquez sur Suivant.
7. Dans la page Abonnés, dans la liste Base de données d'abonnement, cliquez
sur <Nouvelle base de données…>.
8. Dans la boîte de dialogue Nouvelle base de données, tapez BDCommercial2
dans la zone de texte Nom de la base de données, puis cliquez sur OK puis sur
Suivant.
9. Dans la page Sécurité de l'Agent de distribution, cliquez sur le bouton de
sélection (…).
10. Dans la boîte de dialogue Sécurité 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, vérifiez que l'option Exécuter
en continu est sélectionnée dans la liste déroulante Planification de
l'agent,puis cliquez sur Suivant.
12. Dans la page Initialiser les abonnements, vérifiez que la zone de liste À quel
moment a pour valeur Immédiatement, puis cliquez sur Suivant.
13. Dans la page Actions de l'Assistant, cochez l’option Créer le ou les
abonnements, puis cliquez sur Suivant.
14. Dans la page Terminer l'Assistant, cliquez sur Terminer.
Vérifier que les données sont répliquées correctement
1. Sous l’instance nommée TDI, exécuter la requête
SELECT * FROM [BDCommercial2].[dbo].[ Produits]
puis vérifiez que les produits dont le prix >= 120 ont été répliquées.
1. Sous l’instance par défaut, exécuter la requête :
UPDATE [BDCommercial2].[dbo].[Produits] SET Prix += 10
2. Attendez 10 secondes pour que la réplication soit réalisée. Puis ré exécuter sous
l’instance nommée TDI, la requête
SELECT * FROM [BDCommercial2].[dbo].[Produits]

p. 76

Vous aimerez peut-être aussi