14-Système de Gestion de Bases de Données2

96
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 ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail DIRECTION RECHERCHE ET INGENIERIE DE FORMATION

description

ystème de Gestion de Bases de Données2

Transcript of 14-Système de Gestion de Bases de Données2

Page 1: 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

Page 2: 14-Système de Gestion de Bases de Données2

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

Page 3: 14-Système de Gestion de Bases de Données2

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

Page 4: 14-Système de Gestion de Bases de Données2

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

Page 5: 14-Système de Gestion de Bases de Données2

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

Page 6: 14-Système de Gestion de Bases de Données2

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

Page 7: 14-Système de Gestion de Bases de Données2

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

Page 8: 14-Système de Gestion de Bases de Données2

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

Page 9: 14-Système de Gestion de Bases de Données2

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

Page 10: 14-Système de Gestion de Bases de Données2

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

Page 11: 14-Système de Gestion de Bases de Données2

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

Page 12: 14-Système de Gestion de Bases de Données2

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

Page 13: 14-Système de Gestion de Bases de Données2

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

Page 14: 14-Système de Gestion de Bases de Données2

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

Page 15: 14-Système de Gestion de Bases de Données2

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

Page 16: 14-Système de Gestion de Bases de Données2

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

Page 17: 14-Système de Gestion de Bases de Données2

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

Page 18: 14-Système de Gestion de Bases de Données2

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

Page 19: 14-Système de Gestion de Bases de Données2

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

Page 20: 14-Système de Gestion de Bases de Données2

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

Page 21: 14-Système de Gestion de Bases de Données2

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

Page 22: 14-Système de Gestion de Bases de Données2

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

Page 23: 14-Système de Gestion de Bases de Données2

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

Page 24: 14-Système de Gestion de Bases de Données2

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

Page 25: 14-Système de Gestion de Bases de Données2

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

Page 26: 14-Système de Gestion de Bases de Données2

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

Page 27: 14-Système de Gestion de Bases de Données2

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

Page 28: 14-Système de Gestion de Bases de Données2

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

Page 29: 14-Système de Gestion de Bases de Données2

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

Page 30: 14-Système de Gestion de Bases de Données2

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

Page 31: 14-Système de Gestion de Bases de Données2

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

Page 32: 14-Système de Gestion de Bases de Données2

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

Page 33: 14-Système de Gestion de Bases de Données2

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

Page 34: 14-Système de Gestion de Bases de Données2

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

Page 35: 14-Système de Gestion de Bases de Données2

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

Page 36: 14-Système de Gestion de Bases de Données2

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

Page 37: 14-Système de Gestion de Bases de Données2

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

Page 38: 14-Système de Gestion de Bases de Données2

p. 38

Page 39: 14-Système de Gestion de Bases de Données2

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

Page 40: 14-Système de Gestion de Bases de Données2

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

Page 41: 14-Système de Gestion de Bases de Données2

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

Page 42: 14-Système de Gestion de Bases de Données2

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

Page 43: 14-Système de Gestion de Bases de Données2

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

Page 44: 14-Système de Gestion de Bases de Données2

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

Page 45: 14-Système de Gestion de Bases de Données2

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

Page 46: 14-Système de Gestion de Bases de Données2

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

Page 47: 14-Système de Gestion de Bases de Données2

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

Page 48: 14-Système de Gestion de Bases de Données2

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

Page 49: 14-Système de Gestion de Bases de Données2

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

Page 50: 14-Système de Gestion de Bases de Données2

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

Page 51: 14-Système de Gestion de Bases de Données2

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

Page 52: 14-Système de Gestion de Bases de Données2

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

Page 53: 14-Système de Gestion de Bases de Données2

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

Page 54: 14-Système de Gestion de Bases de Données2

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

Page 55: 14-Système de Gestion de Bases de Données2

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

Page 56: 14-Système de Gestion de Bases de Données2

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

Page 57: 14-Système de Gestion de Bases de Données2

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

Page 58: 14-Système de Gestion de Bases de Données2

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

Page 59: 14-Système de Gestion de Bases de Données2

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

Page 60: 14-Système de Gestion de Bases de Données2

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

Page 61: 14-Système de Gestion de Bases de Données2

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

Page 62: 14-Système de Gestion de Bases de Données2

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

Page 63: 14-Système de Gestion de Bases de Données2

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

Page 64: 14-Système de Gestion de Bases de Données2

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

Page 65: 14-Système de Gestion de Bases de Données2

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

Page 66: 14-Système de Gestion de Bases de Données2

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

Page 67: 14-Système de Gestion de Bases de Données2

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

Page 68: 14-Système de Gestion de Bases de Données2

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

Page 69: 14-Système de Gestion de Bases de Données2

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

Page 70: 14-Système de Gestion de Bases de Données2

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

Page 71: 14-Système de Gestion de Bases de Données2

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

Page 72: 14-Système de Gestion de Bases de Données2

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

Page 73: 14-Système de Gestion de Bases de Données2

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

Page 74: 14-Système de Gestion de Bases de Données2

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

Page 75: 14-Système de Gestion de Bases de Données2

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

Page 76: 14-Système de Gestion de Bases de Données2

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