14-Système de Gestion de Bases de Données2
-
Upload
el-ghazouany-med -
Category
Documents
-
view
121 -
download
16
description
Transcript of 14-Système de Gestion de Bases de Données2
OFPPT
SECTEUR NTICFilière : TDINiveau Technicien spécialisé
Manuel de TPModule18 : Système de Gestion de Bases de Données II
p. 1
ROYAUME DU MAROC
Office de la Formation Professionnelle et de la Promotion du TravailDIRECTION RECHERCHE ET INGENIERIE DE FORMATION
SECTEUR NTIC
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.
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.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 fonctions sur le SGBD.
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.
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.
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. 2
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
Phase d’apprentissage
45 mn
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Déclarer des variables de différentes types Transact-Sql.
Initialiser des variables Utiliser des variables.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 3
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 int4. Affecter à cette variable le nombre total des membres du forum5. Afficher, si elles existent, les villes contenant plus que 20% du nombre total des
membres6. Déclarer une variable @DateDémarrage de type date7. 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 suivants11. Quel était le taux d’évolution du nombre d’inscription ?
taux d’évolution = (Nombre d’inscrits 2 - Nombre d’inscrits 1) / Nombre d’inscrits 112. Calculer dans une nouvelle variable l’âge moyen des membres13. Afficher les membres dont l’âge est supérieur à l’âge moyen calculé
précédemment.
p. 4
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
Phase d’apprentissage
30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Définir les conditions avec la structure IF... ELSE.
Implémenter la structure conditionnelle Création de blocs de code avec BEGIN...
END
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 5
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. 6
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- ELSE
Durée
Phase d’apprentissage
30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Définir les conditions avec la structure IF... ELSE.
Implémenter la structure conditionnelle Création de blocs de code avec BEGIN...
END
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 7
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 2Si le membre a déjà eu un bonus, augmenter donc ses points par la valeur de la variable @pointSinon ajouter une nouvelle entrée dans la table Bonus (@pseudo, @point).
p. 8
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
Phase d’apprentissage
1h30mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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...
END Contrôler l'exécution des instructions de la
boucle WHILE avec BREAK et CONTINUE.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 9
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 suivantesNom 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
Heure8 :008 :208 :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 dateAffecter à 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êteSELECT Heure FROM Heure_RDVEXCEPTSELECT HEURE_RDV FROM RDV WHERE DATE_rdv = @jour
DATEPART (weekday, @jour) retourne le numéro du jour dans la semaine
p. 10
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
Phase d’apprentissage
1 h 30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Intercepter et contrôler les erreurs à l'aide de la structure TRY/CATCH
Utiliser des gestionnaires d'erreur dans le code T-SQL
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 11
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éesLe nombre de chaises dans une salle doit être compris entre 20 et 30 chaises par salleImplémenter cette règle à l’aide d’une contrainte CHECK
Saisir les données suivantes :Numéro salle Etage Nombre de chaises
1 1 242 1 263 1 264 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 transferte. 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. 12
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
ActivitéDéclenchement d'une exception via RAISERROR
Durée
Phase d’apprentissage
1 heure
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une erreur personnalisée. Déclencher une exception avec RAISERROR Communiquer des problèmes au client
avec RAISERROR.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 13
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ées2. 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 Severity60000 Le livre n’existe pas 1660001 l’adhérent n’existe pas 1660002 le livre est déjà emprunté 1660003 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 livredé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. 14
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
Phase d’apprentissage
45 mn
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une table temporaire. Remplir une table temporaire. Utiliser et manipuler les données d’une
table temporaire
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 15
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 IntAge max IntNOMBRE Int
Déclarer une variable @palier et lui affecter la valeur 10Déclarer une variable @max et lui affecter l’âge de la personne la plus âgéeDans une boucle, calculer pour chaque tranche d’âge, le nombre de personnes et l’ajouter à la table temporaireAfficher le résultat obtenu
Exemple :
Age min Age max NOMBRE 0 9 610 19 420 29 15
p. 16
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
Phase d’apprentissage
45 mn
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Déclarer des variables de type table. stocker temporairement un ensemble de
lignes dans des variables de tables renvoyer le contenu d’une variable de
table.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 17
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 NbParticipants1 Initiation Windows 7 09/12/13 12/12/13 82 SQL SERVER 2008 11/12/13 14/12/13 63 Office 2012 09/12/13 11/12/13 5
Il souhaite obtenir le résultat suivant :
Date Nombre participants09/12/13 1310/12/13 1311/12/13 1912/12/13 14
Travail à faire
Créer la table FormationSaisir quelques enregistrements dans la table
Déclarer une variable de type table contenant deux colonnes la date et nombre participantsDé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 tableAfficher le contenu de la variable tableAfficher les jours où le nombre total des participants dépasse 16 personnes
p. 18
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
Phase d’apprentissage
25 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 19
Description de l’activité
Créer un ensemble de collecteurs de données pour analyser le serveur Sql1. 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 InstanceMémoire Pages/sMémoire Défauts de page/sProcessus % Temps processeur sqlservrProcesseur % Temps processeur _TotalSQLServer:Locks Requêtes de verrous/s _TotalSQLServer:Locks Temps d’attente des verrous (ms) _TotalSQLServer: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. 20
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
Phase d’apprentissage
45 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une trace SQL Server Profiler pour capturer un blocage.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 21
Description de l’activité
Démarrer SQL Server Management StudioCré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 tracesé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 traceOuvrez 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 ArticlesSET Prix = 6000WHERE (Num = 1)
Dans la deuxième fenêtre de requête, exécuter le code suivant:
begin transaction
UPDATE ArticlesSET Prix = 6000WHERE (Num = 2)select * from Articleswhere Num = 1
Dans la première fenêtre de requête, exécuter le code suivant:
select * from Articleswhere Num = 2
Observer les résultats dans le SQL Server Profiler
p. 22
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
Phase d’apprentissage
45 mn
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Déclarer un curseur Ouvrir un curseur 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. 23
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 adresseDé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 SELECTPour 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 SELECTPour 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. 24
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
Phase d’apprentissage
45 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 25
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 temporaireOn ne traite que les tranches atteintes par la consommation (trois tranches dans cet exemple)Afficher le contenu de la table temporaireCalculer 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. 26
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
Phase d’apprentissage
30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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.
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 27
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 1Parcourir 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 nomcurseurincré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. 28
Activité d’apprentissage 14
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D001
ActivitéCréation et manipulation de procédures stockées
Durée
Phase d’apprentissage
40 mn
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une procédure stockée. Utiliser CREATE PROC …
Exécuter une procédure stockée. Utiliser 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. 29
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 existeif 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. 30
Activité d’apprentissage 15
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer 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.
Durée
Phase d’apprentissage
2h
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Programmer des procédures stockées paramétrées.
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. 31
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. 32
Activité d’apprentissage 16
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer 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.
Durée
Phase d’apprentissage
2h30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Programmer des procédures stockées paramétrées.
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. 33
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. 34
10.Ecrire une procédure qui renvoie l’historique d’avancement d’un fonctionnaire donné. Selon le modèle suivant :Echelle Date effet Date avancement8 1/1/2005 1/1/20089 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. 35
Activité d’apprentissage 17
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer 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
Phase d’apprentissage
2 h 30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 36
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 identityTravail à 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édure3. 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 Erreur1 Le livre n’existe pas2 l’adhérent n’existe pas3 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éesles emprunts doivent être archivé avant leur suppressionla 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 livreRetournerLivre @Num_Livreen 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éé
dans la question 6
p. 37
p. 38
Activité d’apprentissage 18
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D005
Activité Passage des paramètres en sortie à une procédure stockée.
Durée
Phase d’apprentissage
2 h 30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 39
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 pasSi 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 @codePatientLa 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. 40
Activité d’apprentissage 19
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D006
Activité Passage des paramètres en sortie à une procédure stockée.
Durée
Phase d’apprentissage
2 h 30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 41
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, @ReponseSecuriteLe 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 @nomRoleLa procédure retourne 1 si le rôle existe et 0 sinon.
p. 42
9. Authentifier un utilisateur.
Seconnecter @NomUtilisateur, @Password, @resultat OUTPUTLa 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 @NomUtilisateurLa procédure retourne le code 1 si échec
Exécuter chaque procédure créée et vérifier son résultat.
p. 43
Activité d’apprentissage 20
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D007
ActivitéCréation et manipulation des fonctions scalaires
Durée
Phase d’apprentissage
2 h 30
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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 ALTER FUNCTION
Supprimer une fonction scalaire. Utiliser l’instruction DROP FUNCTION …
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 44
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épartementLa procédure lève une erreur si le département existe (utiliser la fonction DeptExiste)
p. 45
Activité d’apprentissage 21
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D008
ActivitéCréation et manipulation des fonctions table incluses
Durée
Phase d’apprentissage
1 h 30
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une fonction table incluse. Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 46
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. 47
Activité d’apprentissage 22
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D009
Activité Création et manipulation des fonctions table multi-instructions
Durée
Phase d’apprentissage
2 heures 30
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une fonction table multi-instructions. Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 48
Description de l’activité
Exercice 1Soit 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 NbParticipants1 Initiation Windows 7 09/12/13 12/12/13 82 SQL SERVER 2008 11/12/13 14/12/13 63 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 participants09/12/13 1310/12/13 1311/12/13 1912/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 610 19 420 29 15
Exercice 3
la base de données d’une application de gestion du parc informatique d’une entreprise, contient la table suivante:
Ordinateur (num_serie, marque, modèle, Date_acquisition)
p. 49
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 ordinateurs2009 502010 562011 722012 742013 98
p. 50
Activité d’apprentissage 23
Module TDI-18 Système de Gestion de Bases de Données II
Précision DProgrammer des procédures et des fonctions sur le SGBD
Code Activité D010
Activité Création et manipulation des fonctions table multi-instructions
Durée
Phase d’apprentissage
1 heure 30
Entrainement
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer une fonction table multi-instructions. Utiliser une fonction table dans la clause
FROM d'une instruction TRANSACT SQL
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 51
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 jours1 13/12/2013 17/12/2013 42 25/12/2013 28/12/2013 3
Utiliser un curseur associé à l’instruction SELECT DateDebutRes, DateFinRes 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. 52
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
Phase d’apprentissage
2 heures
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer des déclencheurs AFTER. Tester un déclencheur Activer / désactiver des déclencheurs Modifier et supprimer des déclencheurs
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 53
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. 54
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érationNon vide Vide Ajout
Non vide Non vide modificationVide Non vide suppression
Pour tester le trigger créé, mettre à jour la table des formations et consulter la table journal.
p. 55
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
Phase d’apprentissage
2 heures 30
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer des déclencheurs AFTER. Tester un déclencheur Activer / désactiver des déclencheurs Modifier et supprimer des déclencheurs
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 56
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. 57
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. 58
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
Phase d’apprentissage
1 heure
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer des déclencheurs INSTEAD-OF. Tester un déclencheur
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 59
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-Polio-Hib
2
Pneum1 Vaccin conjugué contre le pneumocoque
2
DCaT2 Vaccin DCaT-Polio-Hib
4
Pneum2 Vaccin conjugué contre le pneumocoque
4
DCaT3 Vaccin DCaT-Polio-Hib
6
Ménin1 Vaccin conjugué contre le méningocoque
12
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 VACCINSSELECT * FROM [Nouveaux Vaccins]
p. 60
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 beginset nocount on;UPDATE VaccinsSET nom = I.nom, age = I.ageFROM INSERTED AS I INNER JOIN Vaccins ON I.code = Vaccins.code
INSERT INTO Vaccins (code, nom, age)SELECT code, nom, ageFROM INSERTEDwhere code not in (SELECT code FROM Vaccins)end
Tester le déclencheur en ré exécutant la requête : INSERT INTO VACCINSSELECT * 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. 61
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
Phase d’apprentissage
1 h 30
BASE
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Créer des déclencheurs INSTEAD-OF sur des vues.
Mettre à jour des vues à l’aide des déclencheurs INSTEAD-OF
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 62
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. 63
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. Collecte des données de performances en utilisant des vues de gestion dynamique (DMV).
Durée
Phase d’apprentissage
1h30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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).
Matière d’œuvre et/ou outillage
………………………………………………………………………………….
…………………………………………………………………………………..
………………………………………………………………………............
p. 64
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 masterGOCREATE RESOURCE POOL poolTDI2WITH( MAX_CPU_PERCENT = 100, MIN_CPU_PERCENT = 20)CREATE RESOURCE POOL poolTDI1WITH( 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 masterCREATE WORKLOAD GROUP groupTDI2WITH( IMPORTANCE = MEDIUM)USING poolTDI2
CREATE WORKLOAD GROUP groupTDI1WITH( IMPORTANCE = LOW)USING poolTDI1GO
4. Créez la fonction classifieur suivante :
CREATE FUNCTION fnTDIClassifier()RETURNS sysnameWITH SCHEMABINDINGASBEGIN 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. 65
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. 66
charges de travail.
SELECT * FROM sys.dm_resource_governor_workload_groups
14. Exécuter la requête suivante pour déterminer quelles sessions se trouvent dans chaque de groupe.
SELECT s.group_id, CAST(g.name as nvarchar(20)) groupe, s.session_id, s.login_time, CAST(s.host_name as nvarchar(20)) hote, CAST(s.program_name AS nvarchar(20)) programme FROM sys.dm_exec_sessions s INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = s.group_idORDER BY g.nameGO
15. Exécuter la requête suivante pour déterminer quelles requêtes se trouvent dans chaque groupe.
SELECT r.group_id, g.name, r.status, r.session_id, r.request_id, r.start_time, r.command, r.sql_handle, t.text FROM sys.dm_exec_requests r INNER JOIN sys.dm_resource_governor_workload_groups g ON g.group_id = r.group_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS tORDER BY g.nameGO
Activité d’apprentissage 29
Module TDI-18 Système de Gestion de Bases de Données II
Précision G Optimiser les performances SQL Server
Code Activité G002
Activité Assistant Paramétrage du moteur de base de données.
Durée
Phase d’apprentissage
30 mn
ENTRAINEMENT
p. 67
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Lancement de l'Assistant Paramétrage du moteur de base de données
Paramétrage d'une charge de travail Affichage des recommandations pour le
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 travailremplir les deux tables en exécutant le script suivant :declare @i int=1while (@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 NombreFROM Abonnés INNER JOIN Groupes ON Abonnés.CodeGroupe = Groupes.CodeGROUP 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
Phase d’apprentissage
2 h 30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
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
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 ServerConfiguration de la mise en miroir de bases de données
1. Démarrer SQL Server Management Studio; et se connecter à l’instance par défaut2. 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=1while (@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_MiroirSTATE = STARTEDAS 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_MiroirSTATE = STARTEDAS 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 TestMiroringSET 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 TestMiroringSET 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é.
13. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur le dossier Bases de
p. 72
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 TestMiroringGOSELECT * FROM ProduitsGOUPDATE Produits SET Prix = Prix * 1.1GOSELECT * FROM ProduitsGO
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 TestMiroringGOSELECT * FROM ProduitsGOGOUPDATE Produits SET Prix = Prix * 1.1GOSELECT * FROM ProduitsGO
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
Phase d’apprentissage
2 h 30 mn
ENTRAINEMENT
Détails sur les objectifs visés par l’activité
Cette activité d’apprentissage doit vous permettre de :
Création d'une publication Création d'un abonnement
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 ServerCréation d'une publicationDémarrer SQL Server Management Studio; et se connecter à l’instance par défautCré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=1while (@i<100)begin
INSERT INTO Produits VALUES (@i, 'Produit ' + convert(nvarchar(2),@i), 100+@i)set @i = @i+1;
endDémarrer SQL Server Agent
Créer une publication sur l'instance SQL Server par défautProcé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 commeNom de la publication, puis cliquez sur Terminer.
Création d’un abonnementCréer un abonnement à la publication BDCommercialProduits sur l'instance TDIProcé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 += 102. 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