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
ATTENDU

CRITERES PARTICULIERS DE
PERFORMANCE

A. Écrire des scripts dans le langage
procédural du SGBD.

B. Surveiller et dépanner SQL Server

C. Manipuler les jeux d’enregistrement.
D. Programmer des procédures et des
fonctions sur le SGBD.

E. Créer des packages sur le SGBD.
F. Programmer des déclencheurs.

G. Optimiser les performances SQL Server

 Présentation des instructions du langage de
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.
 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.
 Définition d'un curseur : implicite, explicite.
 Définition des attributs de curseurs.
 Manipulation du contenu d’un curseur.
 Description du formalisme à respecter.
 Programmation des procédures stockées sur le
SGBD.
 Appel des fonctions à partir de requêtes SQL.
 Test du programme et correction des erreurs.
 Description du formalisme à respecter.
 Présentation des packages standard.
 Programmation des packages.
 Événements qui déclenchent les triggers.
 Formalisme à respecter.
 Programmation des Triggers.
 Test du trigger et correction des erreurs.
 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

.... p. …………………………………………………………………………………. …………………………………………………………………………………. Initialiser des variables Utiliser des variables.. ……………………………………………………………………….Activité d’apprentissage 1 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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étails sur les objectifs visés par l’activité    Matière d’œuvre et/ou outillage Déclarer des variables de différentes types Transact-Sql..... 4 ....

5 . on dispose de la table suivante : Membre (Pseudo. 11. (utiliser DATEADD (day . renvoyer la liste des membres originaire de votre ville. Enregistrer quelques membres dans la table. 4. pendant les 10 premiers jours. Ville) Travail à faire : Créer la table Membre. p. En utilisant la variable @ville dans une requête SELECT. Date d’inscription. 13. 9. E-mail. 10. 1. Mot de passe. calculer le nombre des membres inscrits. 2. calculer le nombre des inscrits les 10 jours suivants Quel était le taux d’évolution du nombre d’inscription ? taux d’évolution = (Nombre d’inscrits 2 . 6.DESCRIPTION DE L’ACTIVITÉ Pour gérer les membres d’un forum de programmation. Date de naissance. 10. De la même manière. @DateDémarrage)) En utilisant les deux variables. si elles existent. Déclarer une variable @nbMembre de type int Affecter à cette variable le nombre total des membres du forum Afficher. 7. 8. 5. Déclarer une variable @ville et l’initialiser avec le nom de votre ville. 3.Nombre d’inscrits 1) / Nombre d’inscrits 1 Calculer dans une nouvelle variable l’âge moyen des membres Afficher les membres dont l’âge est supérieur à l’âge moyen calculé précédemment. les villes contenant plus que 20% du nombre total des membres Déclarer une variable @DateDémarrage de type date Affecter à cette variable la date d’inscription du premier membre (la date d’inscription la plus ancienne) Affecter à une autre variable la date du dixième jour après l’inscription du premier membre. 12.

. 6 ....... p.Activité d’apprentissage 2 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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étails sur les objectifs visés par l’activité   Matière d’œuvre et/ou outillage Définir les conditions avec la structure IF. END ………………………………………………………………………………….... Implémenter la structure conditionnelle Création de blocs de code avec BEGIN. ELSE. ……………………………………………………………………….. …………………………………………………………………………………..

7 . En utilisant la structure if … else calculer et afficher le montant de la consommation. 15 m3 et 40 m3 p.DESCRIPTION DE L’ACTIVITÉ Facture d’eau La facture d’eau est calculée selon un barème à tranche.29 Entre 20 et 36 6. Exécuter le lot Calculer le montant de la facture pour les consommations suivantes : 6 m3.29 Entre 9 et 20 4. Déclarer une variable @consommation et lui affecter la valeur 26.37 écrire un lot transact-sql qui calcule le montant à payer pour une consommation donnée. les informations concernant les tranches sont données dans le tableau suivant : Quantité m3 Prix unitaire Dh/ m3 <=8 1.59 > 36 10. La consommation mensuelle d’eau est répartie en tranches.

Activité d’apprentissage 3 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural du SGBD Code Activité A003 Activité Implémenter l’instruction de contrôle : IF. p.. ………………………………………………………………………………….ELSE Durée 30 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de :  Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Définir les conditions avec la structure IF.... END …………………………………………………………………………………. ………………………………………………………………………...... Implémenter la structure conditionnelle Création de blocs de code avec BEGIN...... ELSE... 8 .

vous pouvez utiliser IF NOT EXISTS (SELECT * FROM dbo. Un extrait de la base de données est le suivant : Membre (Pseudo. Date de naissance. augmenter donc ses points par la valeur de la variable @point Sinon ajouter une nouvelle entrée dans la table Bonus (@pseudo.DESCRIPTION DE L’ACTIVITÉ Pour encourager l’entraide des membres du forum. 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. un système de bonus à point a été instauré. Date d’inscription. Ville) Bonus (PseudoMembre.sysobjects WHERE id = OBJECT_ID('Nom objet')) Dans un nouveau lot Transact-sql. 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. 9 . @point). E-mail. Mot de passe. Pour tester l’existence d’un objet dans la base de données. p.

. …………………………………………………………………………………... ………………………………………………………………………………….... END Contrôler l'exécution des instructions de la boucle WHILE avec BREAK et CONTINUE. p....Activité d’apprentissage 4 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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 : Détails sur les objectifs visés par l’activité     Matière d’œuvre et/ou outillage Implémenter la structure répétitive Définir la condition d’arrêt de la boucle While Création de blocs de code avec BEGIN... ………………………………………………………………………... 10 ..

Dans le bloc d’une boucle 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. 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. DATE_RDV. @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. PATIENT) Heure_RDV (Heure) le champ Heure est de type time Déclarer les variables suivantes Nom variable Type @HeureDebut Time @HeureFin Time @durée 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. un extrait de la base de données vous est fourni : RDV (NUM_RDV. @n. 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.DESCRIPTION DE L’ACTIVITÉ Pour la gestion des rendez-vous d’un cabinet médical. on écrit : SET @heure = dateadd(minute. en incrémentant la variable @jour. @jour) retourne le numéro du jour dans la semaine p. 11 . HEURE_RDV.

....... ……………………………………………………………………….. 12 . p..... ………………………………………………………………………………….Activité d’apprentissage 5 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Intercepter et contrôler les erreurs à l'aide de la structure TRY/CATCH Utiliser des gestionnaires d'erreur dans le code T-SQL ………………………………………………………………………………….

NumSalleDestination. le message d’erreur sera affiché p. débuter une transaction (BEGIN TRANSACTIN) b. Etage. Démarche : Déclarer 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. modifier le nombre de chaises de la salle dont le numéro = @SalleOrigine (NombreChaises = NombreChaises . .@NbChaises) c. 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. NombreChaises) Transfert (NumSalleOrigine. é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. valider la transaction (COMMIT TRANSACTION) dans le bloc BEGIN CATCH .DESCRIPTION DE L’ACTIVITÉ Soit une base de données SQL Server contenant les tables suivantes : Salle (NumSalle. écrire le code qui permet de : a. 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 1 2 3 4 Etage 1 1 1 2 Nombre de chaises 24 26 26 28 À l’aide d’une transaction. écrire le code qui permet de déplacer un nombre de chaise d’une salle à une autre. END CATCH.. modifier le nombre de chaises de la salle dont le numéro = @SalleDest (NombreChaises = NombreChaises + @NbChaises) d. 13 . enregistrer l’opération dans la table transfert e.

.. p. Déclencher une exception avec RAISERROR Communiquer des problèmes au client avec RAISERROR.. ………………………………………………………………………………….... 14 . ………………………………………………………………………………….Activité d’apprentissage 6 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural du SGBD Code Activité A006 Déclenchement d'une exception via RAISERROR Activité Durée 1 heure Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage    Créer une erreur personnalisée....... ……………………………………………………………………….

si l’adhérent a trois 3 livres non retournés. 4. Prénom_Adh. Durée_Max_Emprunt. 15 . Enregistrer l’opération d’emprunt (la date d’emprunt est la date système). Date_Naissance) Livres (Num_Li. Créer la base de données 2. Afficher le nombre de jour de retard s’il on a dépassé la durée max d’emprunt. É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.DESCRIPTION DE L’ACTIVITÉ Soit la base de données suivante : Adhérents (Num_Adh. si l’adhérent n’existe pas. Date_Retour) Travail à faire (à modifier pas de ps) 1. Déclencher l’erreur numéro 60003. p. 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. Num_Li. A l'aide de sp_addmessage. 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. Déclencher l’erreur numéro 60002. Titre. Num_Adh. Remplir la table Adhérents et la table Livres. Déclencher l’erreur numéro 60000. Date_Emprunt. Emprunté) Emprunts (Num_Emp. si le livre est déjà emprunté. si le livre n’existe pas (utiliser l’instruction RAISERROR) Déclencher l’erreur numéro 60001. Nom_Adh.

Utiliser et manipuler les données d’une table temporaire …………………………………………………………………………………. p. Remplir une table temporaire... ………………………………………………………………………..Activité d’apprentissage 7 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage    Créer une table temporaire. …………………………………………………………………………………......... 16 ..

on souhaite calculer et renvoyer le nombre de personnes par tranches d'âge.DESCRIPTION DE L’ACTIVITÉ A partir d’une liste de personnes. adresse. Créer une table temporaire dont la structure est la suivante : Age min Age max NOMBRE Int Int 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. Créer une base de données contenant la table suivante : Personne (nom. 17 Age max 9 19 29 NOMBRE 6 4 15 . le nombre de personnes et l’ajouter à la table temporaire Afficher le résultat obtenu Exemple : Age min 0 10 20 p. calculer pour chaque tranche d’âge. dateNaissance) Remplir la table avec quelques enregistrements.

..Activité d’apprentissage 8 Module TDI-18 Système de Gestion de Bases de Données II Précision A Écrire des scripts dans le langage procédural 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étails sur les objectifs visés par l’activité    Matière d’œuvre et/ou outillage Déclarer des variables de type table.. 18 .. p... …………………………………………………………………………………...... ………………………………………………………………………………….. ………………………………………………………………………. stocker temporairement un ensemble de lignes dans des variables de tables renvoyer le contenu d’une variable de table.

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. calculer le nombre de participant pour chaque jour. NbParticipants) Le responsable du centre souhaite calculer le nombre total des participants par jour entre deux dates données. Date_fin. si la table Formation contient : Num 1 2 3 Titre Initiation Windows 7 SQL SERVER 2008 Office 2012 Date_début 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 résultat suivant : Date 09/12/13 10/12/13 11/12/13 12/12/13 Nombre participants 13 13 19 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. Par exemple. Déclarer une variable @dateFin et l’initialiser avec la valeur 12/12/2013.DESCRIPTION DE L’ACTIVITÉ La base de données d’un centre de formation contient la table suivante : Formation (Num. 19 . Date_début. Titre. Dans le bloc d’instructions d’une boucle While.

…………………………………………………………………………………......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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage    Créer un journal de compteur Ajouter des compteurs à un journal Afficher les données du journal pour l'activité de la base de données …………………………………………………………………………………... p... ………………………………………………………………………... 20 ..

Dans la boîte de dialogue Créer un nouvel ensemble de collecteurs de données. taper « Collecteur1 ». Dans Sql Server Management Studio. 2. dans le volet gauche. dans le volet gauche. 9. 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 Mémoire Mémoire Processus Processeur SQLServer:Locks SQLServer:Locks SQLServer:Memory Manager Compteur Pages/s Défauts de page/s % Temps processeur % Temps processeur Requêtes de verrous/s Temps d’attente des verrous (ms) Mémoire totale du serveur Instance sqlservr _Total _Total _Total 8. Sous Windows. 6. Dans la console Performances. 21 . Dans l’analyseur de performances. Dans la console Performances. développez Ensembles de collecteurs de données. Cliquez avec le bouton droit sur Définis par l’utilisateur. Dans la boîte de dialogue Quel type de données inclure. puis cliquez sur Nouveau …Ensemble de collecteurs de données .DESCRIPTION DE L’ACTIVITÉ Créer un ensemble de collecteurs de données pour analyser le serveur Sql 1. arrêter l'ensemble de collecteurs de données Collecteur1 12. 4. cocher la case Créer manuellement (avancé). sélectionner le rapport p. 11. dans la zone Nom. Cliquer sur OK puis sur Suivant puis sur Terminer. exécuter des requêtes Transact SQL pour simuler une activité sur le serveur. démarrer l'ensemble de collecteurs de données Collecteur1 10. Définis par l’utilisateur puis Collecteur1. puis cliquer sur Suivant. 5. cocher la case Compteur de performance. 3. 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. démarrer l’analyseur de performances. puis cliquer sur Suivant. Dans l’analyseur de performances. développez Rapport.

.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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage  Créer une trace SQL Server Profiler pour capturer un blocage. 22 .... ………………………………………………………………………………….... ……………………………………………………………………….. ………………………………………………………………………………….. p....

Prix) Insérer deux lignes de données dans la table Articles INSERT INTO Articles VALUES (1. exécuter le code suivant: select * from Articles where Num = 2 Observer les résultats dans le SQL Server Profiler p. 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. Enregistrer les résultats de la trace dans un fichier. (menu Outils .5000) INSERT INTO Articles VALUES (2. 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 . cliquer sur l'onglet Sélection des événements.SQL Server Profiler). et se connecter à l’instance Sql Server Indiquer un nom de trace.5500) Démarrer SQL Server Profiler. Activer la case à cocher pour l'événement Deadlock graph dans la catégorie Locks.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. 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. Dans la zone Nom de la trace sélectionner Vide Dans la liste Utiliser le modèle. Designation. 'Xperia Z2'. 'Galaxy S5'. 23 .

24 ..... Fermer un curseur …………………………………………………………………………………. ………………………………………………………………………………….. Durée 45 mn Phase d’apprentissage BASE Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage      Déclarer un curseur Ouvrir un curseur Récupérer les données d’un enregistrement Utiliser la boucle While avec un curseur.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.. ………………………………………………………………………..... p. Définition des attributs de curseurs...

Travail à faire Écrire un lot transact-sql permettant de fournir une liste (nom. nom. adresse. adresse. nombre) On désire reproduire les lignes de la table Personne plusieurs fois afin de faire des étiquettes de publipostage. Dans un nouveau lot. 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. 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.DESCRIPTION DE L’ACTIVITÉ Soit la table Personne (Id. dans la variable table. nombre FROM Personne » Parcourir à l’aide d’une boucle while. 25 . 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. Afficher le contenu de la variable table. le nom et adresse autant de fois que spécifié par la valeur NOMBRE. le résultat de la requête SELECT Pour chaque personne lue. le résultat de la requête SELECT Pour chaque personne lue. insérer.

p. Durée 45 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage    Traiter des lignes sur le serveur avec un curseur Récupérer les données d’un enregistrement Utiliser la boucle While avec un curseur....... …………………………………………………………………………………. ………………………………………………………………………. ………………………………………………………………………………….... 26 ..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...

Créer une table temporaire #tranches contenant les colonnes (Tranche. les informations concernant les tranches (Numéro. Quantité. 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é. 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. Créer la table Barème Renseigner la table Barème Numéro Quantité Tarif kWh 1 100 0.8496 2 100 0. Prix unitaire.DESCRIPTION DE L’ACTIVITÉ Facture d’électricité La facture d’électricité est calculée selon un barème à tranche. é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. Tarif) sont stockées dans une table nommée Barème.9227 3 300 1.3717 (2 147 483 647 est la valeur maximale pour le type Int) En utilisant un curseur. Ré exécuter le lot pour une consommation de 180 KWh. Quantité. 27 . le résultat doit contenir deux lignes p.0039 4 2 147 483 647 1. La consommation mensuelle d’électricité est répartie en tranches.

... Durée 30 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage     Traiter des lignes sur le serveur avec un curseur Récupérer les données d’un enregistrement Utiliser la boucle While avec un curseur. mettre à jour des résultats obtenus via un curseur. ……………………………………………………………………….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. ………………………………………………………………………………….. p....... 28 . …………………………………………………………………………………...

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. Nom.DESCRIPTION DE L’ACTIVITÉ Classement des élèves On souhaite classer les élèves selon leur moyenne. 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. 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. 29 . Créer une table élève (Num.

. p..... ………………………………………………………………………………….. Utiliser CREATE PROC … Exécuter une procédure stockée. Utiliser l’instruction DROP PROC … …………………………………………………………………………………. ………………………………………………………………………... 30 .... Utiliser l’instruction EXECUTE Modifier une procédure stockée existante.Activité d’apprentissage 14 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions 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 :  Détails sur les objectifs visés par l’activité    Matière d’œuvre et/ou outillage Créer une procédure stockée.. Utiliser l’instruction ALTER PROC Supprimer une procédure stockée.

p. 31 .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. Supprimer la procédure. 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.

...... ………………………………………………………………………………….. Créer des paramètres en entrée optionnels.. …………………………………………………………………………………. Créer des paramètres en entrée...Activité d’apprentissage 15 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D002 Activité Passage des paramètres en entrée à une procédure stockée... Exécuter la procédure et passer des paramètres en entrée. p. ………………………………………………………………………. 32 . Durée 2h Phase d’apprentissage BASE Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité     Matière d’œuvre et/ou outillage Programmer des procédures stockées paramétrées.

7. Nombre d’adhérents). Ajouter des adhérents à la base de données en exécutant la procédure 4. NbMaxParticipant.DESCRIPTION DE L’ACTIVITÉ Club loisir Pour gérer les différentes activités d’un club de loisirs. Créer une procédure permettant d’inscrire un adhérent dans toutes les activités (utiliser l’instruction insert . nom.. intitulé. inscrire des adhérents dans différents activités 8. intitulé. Créer une procédure permettant de supprimer un adhérent ainsi que ses inscriptions aux différentes activités p. et à partir de cet extrait d’une base de données relationnelle. prénom) Activité (refActivité. réaliser le travail demandé Adhérent (code. date) 1. En appelant cette procédure plusieurs fois. Créer une procédure permettant d’inscrire un adhérent dans une activité : La date inscription est facultative. Créer une procédure permettant d’ajouter une nouvelle activité à la base de données 5.. 10. Ecrire une procédure qui renvoie la liste des activités (refActivité. 33 . refActivité. 9. Créer une procédure permettant d’ajouter un nouvel adhérent 3. en exécutant la procédure correspondante 6. (elle est égale à la date système si omise). NbMaxParticipant) Inscription (code. Créer des activités dans la base de données. Créer la base de données 2. select ).

. Durée 2h30 Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité     Matière d’œuvre et/ou outillage Programmer des procédures stockées paramétrées... Créer des paramètres en entrée optionnels.. ………………………………………………………………………………….. Créer des paramètres en entrée. Exécuter la procédure et passer des paramètres en entrée. 34 .... …………………………………………………………………………………....Activité d’apprentissage 16 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D003 Activité Passage des paramètres en entrée à une procédure stockée. p.. ……………………………………………………………………….

DateEffet). nom. dateEmbauche. (indication : utiliser la fonction ROW_NUMBER()) Créer une procédure renvoyant les fonctionnaires d’une seule page ListeParPage @numeroPage. ainsi que son historique d’avancement. @dateEmbauche. @nom. @taillePage 8. 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. échelle actuelle. réaliser le travail demandé Fonctionnaire (matricule. échelle_actuelle) Historique_Echelle (DateEffet. nom.Ecrire une procédure qui renvoie la liste des fonctionnaires recrutés entre deux dates données 5. @échelle_actuelle) 3. La procédure renvoie un message d’erreur si l’échelle n’existe pas.On souhaite afficher la liste des fonctionnaires page par page. 7. 4. par exemple « EXEC ListeFonctionnaires 2005. Durée minimale) 1.Ecrire une procédure permettant de supprimer un fonctionnaire donné.Ecrire la procédure d’avancement d’échelle d’un fonctionnaire donné. 2011 » renvoie la liste des fonctionnaires ayant eu un avancement d’échelle en 2005 puis en 2011. dateEmbauche. matricule) Grille_indiciaire (Echelle. p. la procédure doit aussi enregistrer la date d’effet de l’échelle ( = date d’embauche) attribuée au nouveau fonctionnaire. @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. 6. Avancer(@matricule.DESCRIPTION DE L’ACTIVITÉ A partir de cet extrait d’une base de données relationnelle. par exemple si la page contient 20 fonctionnaires la 3ème page renvoie 20 fonctionnaires à partir de la position 41.Créer la base de données. Nouvelle_Echelle. Point_Indice. et renseigner la table « Grille_indiciaire » 2. 35 . échelle actuelle). dateEmbauche.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. NouveauFonctionnaire (@matricule.Ecrire une procédure permettant d’ajouter un nouveau fonctionnaire. En utilisant une transaction.Créer une procédure renvoyant la liste de tous les fonctionnaires (matricule. nom.Créer une procédure qui modifie la durée minimale d’une échelle donnée.

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. (indication : utiliser un curseur ) p. 36 . renvoie la date d’effet (date d’accès à cette échelle) et la date d’avancement à l’échelle suivante.

Activité d’apprentissage 17
Module

TDI-18

Système de Gestion de Bases de Données II

Précision

D

Programmer des procédures et des fonctions
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 :


Détails sur les objectifs
visés par l’activité



Matière d’œuvre et/ou
outillage

Créer une procédure stockée.
Retourner les données en utilisant RETURN.
Exécuter la procédure et récupérer la
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

………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............

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

p. 40 ... Durée 2 h 30 Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité      Matière d’œuvre et/ou outillage Créer une procédure stockée.... …………………………………………………………………………………..Activité d’apprentissage 18 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D005 Activité Passage des paramètres en sortie à une procédure stockée. ……………………………………………………………………….. Retourner les données en utilisant RETURN.. Exécuter la procédure et récupérer les valeurs des paramètres OUTPUT …………………………………………………………………………………. Exécuter la procédure et récupérer la valeur retournée Utiliser des paramètres OUTPUT pour retourner des données.....

Prénom. Payé (O/N)) Paiement (numéro. 3. utiliser un paramètre OUTPUT pour retourner le prix de l’acte payé En utilisant la procédure. Total_payé) Acte (référence. date_naissance. ajouter des patients à la base de données 2. libellé. Si l’acte réalisé n’est pas payé mettre à jour le champ Total_dû.Ecrire une procédure permettant d’ajouter un nouveau patient. 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.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). les champs Total_dû et Total_payé auront des valeurs nulles (0) par défaut.Ecrire une procédure qui renvoie dans un paramètre OUTPUT le montant total des actes non payés par un patient donné 4. enregistre l’opération dans la table paiement. CodePatient.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é. CodePatient. 1. enregistrer quelques actes réalisés. 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. p. Nom. datePaiement. Référence. En utilisant la procédure. Exécuter la procédure et vérifier le résultat dans la base de données. Prix) RéalisationActe (numéro. Total_dû. un dentiste utilise une base de données SQL Server contenant les tales suivantes : Patient (Code. 41 . Date.DESCRIPTION DE L’ACTIVITÉ Pour le suivi des paiements réalisés par ses patients.

…………………………………………………………………………………... Durée 2 h 30 Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage    Créer une procédure stockée.... ………………………………………………………………………. p. 42 . Exécuter la procédure et récupérer la valeur retournée …………………………………………………………………………………... Retourner les données en utilisant RETURN....Activité d’apprentissage 19 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D006 Activité Passage des paramètres en sortie à une procédure stockée...

créer un nouvel utilisateur : CreerUtilisateur @Nom. (elle est égale à la date système si omise). QuestionSecurite. Nombre_Echec_Connexion. 3. ReponseSecurite. @DateCréation le paramètre @DateCréation est facultatif. Retourner les rôles d’un utilisateur donné. Supprimer un utilisateur ainsi que toutes ses appartenances aux différents rôles 6. @PassWord. DateCréation . IdRole) Travail à faire : Créer la base de données : Créer des procédures stockées permettant de : 1. 43 . @QuestionSecurite. 2. @Email. @QuestionSecurite. Ajouter un utilisateur à un rôle 4. ajouter un nouveau rôle. @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. p. 7. estBloqué. Pour gérer la sécurité d’un site Web. on utilise une base de données contenant les tables suivantes: CompteUtilisateur (Nom. @ReponseSecurite. Renvoyer tous les noms des utilisateurs. 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.DESCRIPTION DE L’ACTIVITÉ Sécurité d’un site Web. 5. Réinitialiser le mot de passe d’un utilisateur ReinitialiserPassword @Nom. PassWord. @NouveauPassWord. date_dernière_connexion. Date_Dernier_Echec) Rôle (Id. Nom) Appartenance (NomUtilisateur.

@Password.si le nom d’utilisateur est incorrect. p. @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 . Débloquer le compte d’un utilisateur. 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.9. Authentifier 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. 44 . Seconnecter @NomUtilisateur.

45 .... ……………………………………………………………………….. p.... ………………………………………………………………………………….... Utiliser l’instruction ALTER FUNCTION Supprimer une fonction scalaire..Activité d’apprentissage 20 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions 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 :  Détails sur les objectifs visés par l’activité    Matière d’œuvre et/ou outillage Créer une fonction scalaire. Utiliser CREATE FUNCTION … Utiliser une fonction scalaire définie par l’utilisateur Modifier une fonction scalaire existante. Utiliser l’instruction DROP FUNCTION … …………………………………………………………………………………..

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. donné 2) En utilisant la fonction. NomDept. Prénom. DeptNo) Département (DeptNo. Salaire moyen) 5) Modifier la fonction de la question 3. é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. É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 . Ré-exécuter la requête de la question 4. pour qu’elle retourne la valeur du (salaire max + salaire min)/2.DESCRIPTION DE L’ACTIVITÉ Soit la base de données suivante : Employé (Id. Salaire. Nombre employés. 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. Nom.

. Utiliser une fonction table dans la clause FROM d'une instruction TRANSACT SQL …………………………………………………………………………………... 47 .... ………………………………………………………………………. …………………………………………………………………………………......Activité d’apprentissage 21 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Créer une fonction table incluse. p..

IdSalle. 48 . . (Pseudo. SELECT thème. Nombre de message envoyé) 4.Id) p. E-mail. Pseudo.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. 2. date_envoi.Créer une fonction ListeUtilisateurs qui retourne la liste des utilisateurs ayant participé à une salle de discussion (ayant envoyé au moins un message). Thème) Message (IdUtilisateur. écrire la requête suivante pour afficher pour chaque salle les 3 utilisateurs ayant envoyé le plus grand nombre de message. E-mail.corps) 1. Pseudo. Mot de passe. Créer une fonction « Participants » qui renvoie trois utilisateurs ayant envoyé le plus grand nombre de messages à une salle de discussion.Créer la base de données. FROM Salle cross apply dbo. Date d’inscription) Salle (Id. 3.participants(Salle.DESCRIPTION DE L’ACTIVITÉ Exercice 1 Soit la base de données suivante : Utilisateur (Id.

Activité d’apprentissage 22 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D009 Activité Création et manipulation des fonctions table multiinstructions Durée 2 heures 30 Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Créer une fonction table multi-instructions..... …………………………………………………………………………………... Utiliser une fonction table dans la clause FROM d'une instruction TRANSACT SQL …………………………………………………………………………………... p.... ………………………………………………………………………. 49 ..

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. ‘12/12/13’) Affiche le résultat 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. 50 . Date_fin. NbParticipants) Num est un champ auto-incrémenté. adresse. Créer la table Ajouter à la table les formations suivantes : Num 1 2 3 Titre Initiation Windows 7 SQL SERVER 2008 Office 2012 Date_début 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 données en paramètres. contient la table suivante: p.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. L’exécution de la requête : SELECT * FROM dbo. Titre.DESCRIPTION DE L’ACTIVITÉ Exercice 1 Soit une base de données contenant la table suivante : Formations (Num. L’exécution de la requête : SELECT * FROM dbo. Date_début.présences_quotidiennes(‘09/12/13’.

nb_ordinateurs_année(2009) Affiche le résultat suivant Année 2009 2010 2011 2012 2013 Nombre ordinateurs 50 56 72 74 98 p. 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. marque. 51 .Ordinateur (num_serie. modèle.

.. Utiliser une fonction table dans la clause FROM d'une instruction TRANSACT SQL ………………………………………………………………………………….Activité d’apprentissage 23 Module TDI-18 Système de Gestion de Bases de Données II Précision D Programmer des procédures et des fonctions sur le SGBD Code Activité D010 Activité Création et manipulation des fonctions table multiinstructions Durée 1 heure 30 Phase d’apprentissage Entrainement Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Créer une fonction table multi-instructions... ………………………………………………………………………………….... p. ………………………………………………………………………..... 52 ..

Capacité. NumSalle. @DateDebut. Nom. 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. entre deux dates données en paramètre. client. 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. Total_recettes) Réservations (NumReservation. DateFinRes FROM Réservations WHERE NumSalle = @NumSalle ORDER BY DateDebut Utiliser un curseur associé à l’instruction SELECT Parcourir le résultat du curseur. @DateFin) La fonction retourne un résultat ayant Date début Numéro 1 13/12/2013 2 25/12/2013 la structure suivante : Date fin Nombre jours 17/12/2013 4 28/12/2013 3 DateDebutRes. Prix_journalier. Périodeslibres(@NumSalle. réaliser le travail demandé Salles (Num.DESCRIPTION DE L’ACTIVITÉ Exercice 1 A partir de cet extrait d’une base de données relationnelle. 53 . trouver toutes les périodes d’au moins 5 jours où la salle Num 1 est libre pendant le mois de mars 2014 p. DateDebutRes. et ajouter à la variable table de la fonction la période libre entre deux réservations successives si elle existe.

. Tester un déclencheur Activer / désactiver des déclencheurs Modifier et supprimer des déclencheurs …………………………………………………………………………………. 54 .. p... …………………………………………………………………………………... ………………………………………………………………………....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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage     Créer des déclencheurs AFTER...

Le nombre de lignes ajoutées peut être calculé avec la requête select count(*) from INSERTED. dès qu’on supprime une ou plusieurs formations de la base de données. Créer un trigger after INSERT permettant d’ajouter une entrée dans la table journal. Journal (DateOperation. Le nombre de lignes supprimées peut être calculé avec la requête select count(*) from DELETED. modification ou suppression. Pour tester le trigger créé. CREATE TABLE Formations (Num INT primary key identity. NbParticipants) Num est un champ auto-incrémenté. 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. Date_fin date. Opération. Date_fin. p. Date_début date. Titre. Créer la base de données. dès qu’on enregistre une ou plusieurs nouvelles formations dans la base de données. Pour tester le trigger créé. Pour tester le trigger créé. Nbligneaffectée. Utilisateur) L’opération est : ajout. NbParticipants int) CREATE TABLE Journal (DateOperation datetime default getdate(). Le nombre de lignes modifiées peut être calculé avec la requête select count(*) from INSERTED. Date_début. 55 . 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.DESCRIPTION DE L’ACTIVITÉ Exercice 1 Soit une base de données contenant les tables suivantes: Formations (Num. dès qu’on modifie une ou plusieurs formations dans la base de données. Opération varchar(50). modifie ou supprime une entrée dans la table formations. Nbligneaffectée int. Titre varchar(150). supprimer des formations de la base de données et consulter la table journal. 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.

Réactiver les triggers en utilisant l’instruction ALTER TABLE … ENABLE TRIGGER Supprimer les triggers en utilisant l’instruction DROP TRIGGER. p. Créer un seul trigger "after INSERT. mettre à jour la table des formations et consulter la table journal.Utiliser l’instruction ALTER TABLE … DISABLE TRIGGER pour désactiver les triggers précédemment créés. UPDATE. DELETE" permettant de journaliser la mise à jour de la table Formations Table INSERTD Non vide Non vide Vide Table DELETED Type opération Vide Ajout Non vide Non vide modification suppression Pour tester le trigger créé. 56 . Ajouter une nouvelle formation à la base de données Consulter la table journal.

p.Activité d’apprentissage 25 Module TDI-18 Système de Gestion de Bases de Données II Précision F Programmer des déclencheurs.. …………………………………………………………………………………. Tester un déclencheur Activer / désactiver des déclencheurs Modifier et supprimer des déclencheurs ………………………………………………………………………………….. 57 .. ………………………………………………………………………......... 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage     Créer des déclencheurs AFTER..

Ecrire un trigger qui maintient à jour les champs Total_dû et Total_payé chaque fois qu’on met à jour la table «Paiement» (INSERT. 2. CodePatient. NumSalle. 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. écrire un trigger permettant d’implémenter cette règle.DESCRIPTION DE L’ACTIVITÉ Exercice 1 A partir de cet extrait d’une base de données relationnelle. 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. client. Implantez par un trigger cette règle. Prix) RéalisationActe (numéro. Remplir la table Salles Une salle ne peut faire l’objet de deux réservations pour une même journée. Payé (O/N)) Paiement (numéro. enregistrer une réservation et afficher le total des recettes de la salle concernée. Prénom. DateFin) Travail à faire : Créer la base de données. Exercice 2 A partir de cet extrait d’une base de données relationnelle. libellé. Pour tester le trigger. Capacité. Total_recettes) Réservations (NumReservation. Total_dû. DateDebut. Prix_journalier.Un patient ne doit subir plus que 5 actes non payés. Date. datePaiement. date_naissance. Nom. réaliser le travail demandé Patient (Code. elle ne peut être réservée entre le 12/09/2013 et 14/09/2013. Nom. Total_payé) Acte (référence. par exemple si la salle 1 est réservée entre le 09/09/2013 et 13/09/2013. CodePatient. réaliser le travail demandé Salles (Num. 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. Référence. UPDATE et DELETE) Exercice 3 p. 58 .

59 . 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. prénom. AgeVaccination) Age vaccination est donné en nombre de mois. dateNaissance) le numéro est autoincrémenté. codeVaccin. Vaccination (Num. Naissance (Numéro. NuméroEnfant. @date) FROM Vaccins p. codeVaccin. Nom. code. DATEADD(month. DatePrévue. nom. DateEffective. AgeVaccination. Remarque) Écrire un déclencheur after qui permet à la naissance d’un enfant de planifier les vaccinations qu’il doit effectuer.Soit une base de données contenant les tables suivantes: Vaccins (Code. DatePrévue) SELECT @num.

. p... Tester un déclencheur …………………………………………………………………………………..... 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Créer des déclencheurs INSTEAD-OF..Activité d’apprentissage 26 Module TDI-18 Système de Gestion de Bases de Données II Précision F Programmer des déclencheurs.. ………………………………………………………………………. …………………………………………………………………………………. 60 ....

AgeVaccination) Créer la table Vaccins : Code DCaT1 Vaccin(s) Âge (mois) Vaccin DCaTPolio-Hib 2 Vaccin conjugué contre le pneumocoque 2 Vaccin DCaTPolio-Hib 4 Vaccin conjugué contre le pneumocoque 4 DCaT3 Vaccin DCaTPolio-Hib 6 Ménin1 Vaccin conjugué contre le méningocoque 12 RRO1 Vaccin RRO-Var 12 Pneum1 DCaT2 Pneum2 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 ».DESCRIPTION DE L’ACTIVITÉ Exercice 1 Soit une base de données contenant la table suivante : Vaccins (Code. 61 . Nom. Exécuter la requête : INSERT INTO VACCINS SELECT * FROM [Nouveaux Vaccins] p.

code = Vaccins. 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.nom. nom. age = I. 62 . UPDATE Vaccins SET nom = I. create trigger MAJ ON Vaccins instead of INSERT as begin set nocount on. é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à.age FROM INSERTED AS I INNER JOIN Vaccins ON I.Une erreur de « Violation of PRIMARY KEY constraint » se poduit car le vaccin Ménin1 existe déjà dans la table vaccins.code INSERT INTO Vaccins (code. age) SELECT code. nom.

.Activité d’apprentissage 27 Module TDI-18 Système de Gestion de Bases de Données II Précision F Programmer des déclencheurs... ………………………………………………………………………………….... ……………………………………………………………………….. 63 . Mettre à jour des vues à l’aide des déclencheurs INSTEAD-OF ………………………………………………………………………………….. p... 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 : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Créer des déclencheurs INSTEAD-OF sur des vues...

dateEmbauche.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 . dateEmbauche. 64 . Utiliser des TRIGGER INSTEAD pour coder la mise à jour des tables sous-jacentes.Créer une vue renvoyant la liste de tous les fonctionnaires (matricule. Nouvelle_Echelle. échelle actuelle.La vue ainsi créée ne peut être mise à jour directement. nom. update. échelle) Historique_Echelle (DateEffet. 2. nom. réaliser le travail demandé Fonctionnaire (matricule. nom.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. A partir de cet extrait d’une base de données relationnelle. matricule) Créer la base de données 1. 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. delete. dateEmbauche. échelle) dans la table Fonctionnaire et DateEffet . DateEffet).DESCRIPTION DE L’ACTIVITÉ Certaines vues peuvent être l’objet de mise à jour par les instructions insert. échelle actuelle. échelle actuelle. 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.

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 Activité Mise en œuvre du gouverneur de ressources. …………………………………………………………………………………. …………………………………………………………………………………....... Durée 1h30 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de :  Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage     Créer une fonction classifieur Créer un pool de ressources Créer un groupe de charges de travail Affichage des rapports de paramétrage Collecte des données de performances en utilisant des vues de gestion dynamique (DMV).. Collecte des données de performances en utilisant des vues de gestion dynamique (DMV)... p. 65 .... ……………………………………………………………………….

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. 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. 66 . USE master CREATE WORKLOAD GROUP groupTDI2 WITH ( IMPORTANCE = MEDIUM ) USING poolTDI2 CREATE WORKLOAD GROUP groupTDI1 WITH ( IMPORTANCE = LOW ) USING poolTDI1 GO 4. Affectez chaque groupe de charge de travail au pool de ressources correspondant. Créer deux groupes de charges de travail. Inscrivez la fonction classifieur et mettez à jour la configuration en p. MIN_CPU_PERCENT = 20 ) CREATE RESOURCE POOL poolTDI1 WITH ( MAX_CPU_PERCENT = 20.DESCRIPTION DE L’ACTIVITÉ 1. MIN_CPU_PERCENT = 0 ) 3. Démarrer SQL Server Management Studio. 2.

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. 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. ALTER RESOURCE GOVERNOR with (CLASSIFIER_FUNCTION = dbo. * FROM sys.resource_governor_workload_groups 8. Pour obtenir la configuration des pools de ressources.resource_governor_configuration 9. select getdate() 12.dm_resource_governor_resource_pools 13. 67 . exécuter la requête suivante : SELECT * FROM sys. SELECT * FROM sys. ainsi que sur leurs statistiques. exécuter la requête suivante : SELECT object_name(classifier_function_id) AS Nom_fonction_classifier. exécuter la requête suivante : SELECT * FROM sys. 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'. Activer l’authentification Sql Server. 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'. 11.resource_governor_resource_pools 7. Pour obtenir la configuration des groupes de charges de travail.mémoire. Pour vérifiez que la fonction classifieur existe et qu'elle est activée.fnTDIClassifier) ALTER RESOURCE GOVERNOR RECONFIGURE 6. Exécuter la requête suivante pour obtenir des informations sur l'état et la configuration actuels des pools de ressources.

text FROM sys. r.group_id.status. Exécuter la requête suivante pour déterminer quelles sessions se trouvent dans chaque de groupe. ………………………………………………………………………. de r. s.name  Affichage des recommandations pour le GO paramétrage  Matière d’œuvre et/ou outillage Affichage des rapports de paramétrage …………………………………………………………………………………. Activité d’apprentissage 29 SELECT * FROM sys.host_name as nvarchar(20)) hote.sql_handle) AS tde travail ORDER BY g. CAST(s.dm_exec_sessions s AS nvarchar(20)) INNER JOIN sys. g. CAST(s.command.session_id.. p. GO Durée 30 mn 15.dm_exec_requests  Lancementr de l'Assistant Paramétrage du INNER JOIN sys.group_id.. Cette activité d’apprentissage doit vous permettre SELECT r.name as nvarchar(20)) groupe.. SELECT s.request_id. ………………………………………………………………………………….name.dm_resource_governor_workload_groups Module Précision Code Activité Activité TDI-18 Système de Gestion de Bases de Données II G Optimiser les performances SQL Server 14.group_id ORDERAssistant BY g.charges de travail.start_time..name Paramétrage du moteur de base de données....dm_exec_sql_text(r. : r..session_id. r.sql_handle.group_id = r.program_name G002 programme FROM sys. t.. 68 ..login_time. CAST(g.group_id  Paramétrage d'une charge visés par l’activité CROSS APPLY sys.dm_resource_governor_workload_groups g moteur de base de données Détails sur les objectifs ON g.group_id = s. Exécuter la requête suivante pour déterminer quelles requêtes se trouvent Phase d’apprentissage dans ENTRAINEMENT chaque groupe.. r. s. r..dm_resource_governor_workload_groups g ON g.

cliquez sur Assistant Paramétrage du moteur de base de données. Sélectionnez Fichier pour votre Charge de travail et cliquez sur Rechercher un fichier de charge de travail pour localiser le fichier p.DESCRIPTION DE L’ACTIVITÉ 1. 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). puis cliquez sur Se connecter 4. 'Abonné ' + convert(nvarchar(4).CodeGroupe = Groupes. vérifiez les paramètres par défaut. while (@i<10000) begin INSERT INTO Abonnés VALUES (@i. end 2.Code GROUP BY NomGroupe Enregistrez le fichier sous le nom Script1. Démarrer SQL Server Management Studio. Dans le volet droit de l'interface de l'Assistant Paramétrage du moteur de base de données. Dans l'Éditeur de requête de SQL Server Management Studio. end set @i = @i.@i)) set @i = @i+1. Dans le menu Outils. Démarrez l'Assistant Paramétrage du moteur de base de données.sql 3. 5. @i % 12 + 1) set @i = @i+1. tapez SessionTp dans la zone Nom de session.@i). COUNT(Num) AS Nombre Abonnés INNER JOIN Groupes ON Abonnés. 69 . Dans la boîte de dialogue Se connecter à un serveur. saisir les requêtes suivantes : SELECT FROM NomGroupe.

Cliquez sur l'onglet Options de paramétrage. Cliquez sur Options avancées pour afficher des options de paramétrage supplémentaires.Script1. 6. 9. cliquez sur le bouton Démarrer l'analyse. pour les recommandations à 2MB. 70 . accédez au répertoire dans lequel vous souhaitez enregistrer le script de recommandations et tapez le nom de fichier Recommendations1. Enregistrez votre recommandation sous la forme d'un script TransactSQL en cliquant sur Enregistrer les recommandations dans le menu Actions. Définir une quantité d’espace max. p. 7.sql que vous avez enregistré à l'étape 1. Dans la barre d'outils. Dans la boîte de dialogue Enregistrer sous. Pendant que l'Assistant Paramétrage du moteur de base de données analyse la charge de travail. 8. Sélectionnez « Abonnés » dans la liste Base de données pour l'analyse de la charge de travail. vous pouvez contrôler l'état de l'analyse sous l'onglet Progression. 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. l'onglet Recommandations s'affiche. Lorsque le paramétrage est terminé.

.... p..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. ………………………………………………………………………………….... ……………………………………………………………………….... 71 . Durée 2 h 30 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de :  Détails sur les objectifs visés par l’activité     Matière d’œuvre et/ou outillage Configurer la mise en miroir de bases de données Créer des points de terminaison Définir le serveur principal Définir le serveur miroir Basculer vers le serveur miroir …………………………………………………………………………………..

Dans une fenêtre de nouvelle requête sous l’instance nommée TDI. Démarrer SQL Server Management Studio. Dans l'instance par défaut. MOVE N'TestMiroring' TO N'C:\miroir\TestMiroring_data.mdf'.bak' 6. ALTER DATABASE TestMiroring SET PARTNER = 'TCP://NomHote:5022' (NomHote est le nom de la machine hôte) 11. end 5. Par exemple l’instance par défaut et une instance nommée TDI. définissez l'instance par défaut comme partenaire (ce qui en fait l'instance initiale du serveur principal). définissez l'instance nommée TDI comme partenaire (ce qui en fait l'instance initiale du serveur miroir). MOVE N'TestMiroring_log' TO N'C:\miroir\TestMiroring_log.bak' WITH FILE = 1. 7. cliquez avec le bouton droit sur le dossier Bases de données sous l'instance par défaut. et se connecter à l’instance par défaut Créer une base de données « TestMiroring » : Créer la table suivante : Produits (Num. puis cliquez sur Actualiser. 3.@i). Dans SQL Server Management Studio. p. Se connecter à l’instance nommée TDI. Designation. Synchronisé. 2. Dans l'Explorateur d'objets. 'Produit ' + convert(nvarchar(2). vérifier et démarrer les deux instances SQL Server Configuration de la mise en miroir de bases de données 1.ldf'. 72 . Restaurer la base de données en exécutant la requête suivante : RESTORE DATABASE TestMiroring FROM DISK = N'C:\principal\TestMiroring. Développez le dossier Bases de données et vérifiez que l'état de la base de données TestMiroring est Principal. Sauvegarder la base de données en exécutant la requête suivante : BACKUP DATABASE TestMiroring TO DISK = 'C:\principal\TestMiroring. 100+@i) set @i = @i+1.DESCRIPTION DE L’ACTIVITÉ Pour réaliser ce Tp vous devez installer deux instances Sql Server sur votre ordinateur. 4. 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). A l’aide du Gestionnaire de configuration SQL Server. sous l’instance par défaut. NORECOVERY 8. Prix) Remplir la table en exécutant le script suivant : declare @i int=1 while (@i<100) begin INSERT INTO Produits VALUES (@i. ALTER DATABASE TestMiroring SET PARTNER = 'TCP://NomHote:5023' 12. 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.

et consulter la table « Produits » p. puis cliquez sur Actualiser. puis cliquez sur Actualiser. 17. en exécutant sous l’instance par défaut (serveur principal ) la requête : USE master.1 GO SELECT * FROM Produits GO 15.13. 73 . Tester la mise en miroir. Basculer manuellement vers le serveur partenaire de mise en miroir de bases de données. Dans l'Explorateur d'objets. 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. cliquez avec le bouton droit sur le dossier Bases de données sous l'instance nommée. cliquez avec le bouton droit sur le dossier Bases de données sous l'instance nommée TDI. 16. vérifiez que l'état de la base de données TestMiroring est Serveur principal. Déconnecté. Dans l'Explorateur d'objets. Dans le dossier Bases de données. 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. Basculer manuellement vers l’instance par défaut.1 GO SELECT * FROM Produits GO 18. ALTER DATABASE TestMiroring SET PARTNER FAILOVER. Synchronisé / Restauration. 14. Développez le dossier Bases de données et vérifiez que l'état de la base de données TestMiroring est Miroir.

…………………………………………………………………………………....... Durée 2 h 30 mn Phase d’apprentissage ENTRAINEMENT Cette activité d’apprentissage doit vous permettre de : Détails sur les objectifs visés par l’activité Matière d’œuvre et/ou outillage   Création d'une publication Création d'un abonnement …………………………………………………………………………………......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. ………………………………………………………………………. p. 74 ..

cliquez sur Add pour ajouter un filtre. Dans la page Assistant Nouvelle publication. 2. Dans la page Sécurité de l'agent.@i). cliquez sur BDCommercial pour choisir cette base de données comme base de données de publication. 12. Dans la page Dossier de captures instantanées. Dans la page Type de publication. Prix) Remplir la table en exécutant le script suivant : declare @i int=1 while (@i<100) begin INSERT INTO Produits VALUES (@i. modifiez la Fréquence quotidienne en spécifiant une valeur égale à 10 secondes. 7. puis cliquez sur Change. Prix(money). Dans la page Agent de capture instantanée. vérifier et démarrer les deux instances SQL Server Création d'une publication Démarrer SQL Server Management Studio. Créer un dossier « DossierReplication »sur votre Disque dur.DESCRIPTION DE L’ACTIVITÉ Pour réaliser ce Tp vous devez installer deux instances Sql Server sur votre ordinateur. p. 'Produit ' + convert(nvarchar(2). Cliquez sur Suivant. 3. puis cliquez sur Suivant. 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. développez Tables. cliquez sur Publication de capture instantanée. Dans la page Filtrer les lignes de la table. Dans la page Serveur de distribution. puis cliquez sur Suivant. Designation(nvarchar). cliquez sur Paramètres de sécurité. Dans l'Explorateur d'objets. puis cliquez sur Suivant. cliquez sur OK puis sur Suivant 10. 8. 100+@i) set @i = @i+1. 5. puis cliquez sur Nouvelle publication. ajoutez le texte Prix >= 120 à la requête SELECT. 11. tapez « \\<Nom-PC>\ DossierReplication » pour l’utiliser comme dossier de captures instantanées. 9. Designation. développez Produits(dbo). Dans la zone Instruction de filtrage. développez Réplication. Par exemple l’instance par défaut et une instance nommée TDI. A l’aide du Gestionnaire de configuration SQL Server. Dans la boîte de dialogue Propriétés de la planification du travail. cliquez avec le bouton droit sur Publications locales. laissez la première option sélectionnée pour que l’instance par défaut joue le rôle du serveur de distribution. 75 . et partager le sous le nom « \\<Nom-PC>\ DossierReplication » 4. puis cliquez sur OK puis sur Suivant. puis cliquez sur Suivant. et se connecter à l’instance par défaut Créer une base de données « BDCommercial » : Créer la table suivante : Produits (Num. end Démarrer SQL Server Agent Créer une publication sur l'instance SQL Server par défaut Procédure 1. Dans la page Articles. 6. Dans la page Base de données de publication. puis cliquez sur Suivant.puis sélectionnez Num(int).

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