SQL - Server
Transcription
SQL - Server
SQL - Server Le Langage SQL Transact-Sql Michel Tuffery Notion de Base SQL 7 Logique Physique Nom Base Nom logique Fichier ‘ primaire ’ .mdf Nom logique Fichier ‘ secondaire ’ .mdf Nom logique Fichier ‘ journal ’ .ldf Michel Tuffery (SQL7) 2 Création d ’une Base de Données USE master GO à partir de la base ‘ master ’ et héritage de la base ‘ model ’ CREATE DATABASE bd1 ON ( NAME = bd1_dat, FILENAME = 'c:\mssql7\data\bd1.mdf', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) GO nom logique du fichier augmentation à chaque espace supplémentaire Fichier journal ‘ bd1_log ’/ ’bd1.ldf ’ de 1MO par défaut (model) Michel Tuffery (SQL7) 3 Création d ’une Base de Données CREATE DATABASE bd2 ON ( NAME = bd2_dat, FILENAME = 'c:\mssql7\data\bd2dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = ’bd2_log', FILENAME = 'c:\mssql7\data\bd2log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO Michel Tuffery (SQL7) fichier journal explicite 4 Création d ’une Base de Données CREATE DATABASE bd3 ON PRIMARY ( NAME = bd3dat1, FILENAME = 'c:\mssql7\data\bd3dat1.mdf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = bd3dat2, FILENAME = 'c:\mssql7\data\bd3dat2.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = bd3dat3, FILENAME = 'c:\mssql7\data\bd3dat3.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) LOG ON ( NAME = bd3log1, FILENAME = 'c:\mssql7\data\bd3log1.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = bd3log2, FILENAME = 'c:\mssql7\data\bd3log2.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) GO Michel Tuffery (SQL7) 5 Modification d ’une BD ALTER DATABASE bd1 ADD FILE (NAME = bd1dat2, FILENAME = 'c:\mssql7\data\bd1dat2.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 10% ) GO ALTER DATABASE bd1 MODIFY FILE (NAME = bd1dat2, SIZE = 20MB) GO ALTER DATABASE bd1 ADD LOG FILE ( NAME = bd1log2, FILENAME = 'c:\mssql7\data\bd1log2.ldf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB), ( NAME = bd1log3, FILENAME = 'c:\mssql7\data\bd1log3.ldf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB) GO Michel Tuffery (SQL7) 6 Suppression d ’une base • • • • sp_helpdb pour connaître les bases drop database nom-base Faire une sauvegarde de ‘ master ’ après Le propriétaire est compétent avec le ‘ sysadmin ’ • sp_spaceused : informations physiques Michel Tuffery (SQL7) 7 Les types de données Integer bit Nombre entier dont la valeur est 1 ou 0. int Nombre entier dont la valeur est comprise entre -231 (-2 147 483 648) et 231 - 1 (2 147 483 647). smallint Nombre entier dont la valeur est comprise entre -215 (-32 768) et 215 - 1 (32 767). tinyint Nombre entier dont la valeur est comprise entre 0 et 255. decimal et numeric decimal Données numériques fixes de précision et d'échelle comprises entre -1038 -1 et 1038 -1. numeric Synonyme de decimal. Michel Tuffery (SQL7) 8 Les types de données money et smallmoney money Valeurs de données monétaires comprises entre -263 (-922 337 203 685 477,580 8) et 263 - 1 (+922 337 203 685 477,580 7), avec une précision d'un dix-millième d'unité monétaire. smallmoney Valeurs de données monétaires comprises entre - 214 748,3648 et +214 748,3647, avec une précision d'un dix-millième d'unité monétaire. Données numériques approchées float Données numériques de précision en virgule flottante comprises entre -1.79E + 308 et 1.79E + 308. real Données numériques de précision en virgule flottante comprises entre -3.40E + 38 et 3.40E + 38. Michel Tuffery (SQL7) 9 Les types de données datetime et smalldatetime datetime Données de date et d'heure comprises entre le 1er janvier 1753 et le 31 décembre 9999, avec une précision de trois centièmes de seconde ou de 3,33 millisecondes. smalldatetime Données de date et d'heure comprise entre le 1er janvier 1900 et le 6 juin 2079, avec une précision d'une minute. Données numériques cursor Référence à un curseur. timestamp Nombre unique pour l'ensemble de la base de données. uniqueidentifier Identificateur global unique (GUID). Michel Tuffery (SQL7) 10 Les types de données Chaînes de caractères char Données non Unicode de longueur fixe d'un maximum de 8 000 caractères. varchar Données non Unicode de longueur variable d'un maximum de 8 000 caractères. text Données non Unicode de longueur variable ne pouvant pas dépasser 231 - 1 (2 147 483 647) caractères. Chaînes de caractères Unicode nchar Données Unicode de longueur fixe ne pouvant pas dépasser 4 000 caractères. nvarchar Données Unicode de longueur variable ne pouvant pas dépasser 4 000 caractères. sysname, synonyme de nvarchar(128), est un type de données défini par l'utilisateur fourni par le système et utilisé pour faire référence aux objets de base de données. ntext Données Unicode de longueur variable ne pouvant pas dépasser 230 - 1 (1 073 741 823) caractères. Michel Tuffery (SQL7) 11 Les types de données Chaînes binaires binary Données binaires de longueur fixe ne pouvant pas dépasser 8 000 octets. varbinary Données binaires de longueur variable ne pouvant pas dépasser 8 000 octets. image Données binaires de longueur variable ne pouvant pas dépasser 231 - 1 (2 147 483 647) octets. Michel Tuffery (SQL7) 12 Création d ’une table if exists (select table_name from information_schema.tables where table_name='employe') drop table employe GO if exists (select table_name from information_schema.tables where table_name= ’service') drop table service GO create table service (nservice tinyint, nom_service varchar(20), constraint pk_service primary key(nservice) ) GO Michel Tuffery (SQL7) 13 Création d ’une table create table employe (nume int identity(1,1), nome varchar(20), date_emb datetime default getdate(), salaire decimal(8,2), commission as (salaire*10)/100, nservice tinyint constraint nn_nser not null, constraint ck_salaire check (salaire > 5000), constraint fk_emp_ser foreign key(nservice) references service(nservice) ) GO Michel Tuffery (SQL7) 14 Modification de la structure d ’une table alter table employe add adresse varchar(50) GO Pas de modification alter table employe nocheck constraint fk_emp_ser GO attention alter table employe drop column adresse GO alter table employe check constraint fk_emp_ser GO alter table employe add constraint fk_emp_ser foreign key(nservice) references service(nservice) GO alter table employe drop constraint fk_emp_ser GO Michel Tuffery (SQL7) 15 Types Utilisateurs sp_addtype v50,'varchar(50)','NULL' select * from systypes create table …... (……. adresse v50, ……… ) sp_droptype v50 Michel Tuffery (SQL7) 16 Renseignements sur les Objets sp_help nom_objet Consultation du dictionnaire des données et affichage des renseignements complets Michel Tuffery (SQL7) 17 Langage de Manipulation des Données INSERT [INTO] {nom_table|nom_vue} [(liste cols)] VALUES {liste_valeurs|SELECT expression} DELETE [FROM] {nom_table|nom_vue} [WHERE clause] UPDATE {nom_table|nom_vue} SET col= {valeur|expression|SELECT expression|liste_cols [FROM {nom_table|nom_vue} [WHERE expression]] Michel Tuffery (SQL7) 18 Langage d ’Interrogation des Données Monotable SELECT {liste_cols|*|expression} FROM nom_table [WHERE expression1] [GROUP BY col1,…] [HAVING expression2] [ORDER BY col1 [ASC|DESC],…] Opérateurs : NOT, BETWEEN, LIKE,+,… Fonctions de groupage : AVG, COUNT, MAX, MIN, SUM Michel Tuffery (SQL7) 19 Langage d ’Interrogation des Données Multitable Opérateur ensembliste : UNION SELECT liste_cols FROM nom_table [WHERE expression] UNION SELECT liste-cols FROM nom_table [WHERE expression] Opérateurs ensemblistes : MINUS et INTERSECT N ’existent pas avec SQL7 : utiliser [NOT] EXISTS Michel Tuffery (SQL7) 20 Langage d ’Interrogation des Données Multitable Jointure en Forme Procédurale Déconnectée select nome,salaire from employe where nservice in (select nservice from service where upper(nom_service) like upper('%info%')) Opérateurs : in, not in, =, >, <, >=, <= , != Michel Tuffery (SQL7) 21 Langage d ’Interrogation des Données Multitable Jointure en Forme Procédurale Synchronisée select nome,salaire from employe e where exists (select * from service s where upper(nom_service) like upper('%info%') and e.nservice=s.nservice) Michel Tuffery (SQL7) 22 Langage d ’Interrogation des Données Multitable Jointure en Forme Procédurale Relationnelle select e.nome,e.salaire from employe e, service s where upper(nom_service) like upper('%info%') and e.nservice=s.nservice Michel Tuffery (SQL7) 23 Langage de Contrôle des Données : les Vues USE bdm IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'emp_info') DROP VIEW emp_info GO CREATE VIEW emp_info (ne,nom,sal,nser) AS SELECT nume, nome, salaire, nservice FROM employe WHERE nservice IN (SELECT nservice FROM service WHERE nom_service LIKE '%info%') AND salaire > 10000 WITH CHECK OPTION GO Michel Tuffery (SQL7) 24 Langage de Contrôle des Données : les Triggers SI Evènement ALORS Action FIN SI Update, Delete et Insert Transact SQL 2 tables logiques ‘ inserted ’ et ‘ deleted ’ de même structure que la table sur laquelle est posée le trigger permettent de retrouver les valeurs Michel Tuffery (SQL7) 25 Langage de Contrôle des Données : les Triggers IF EXISTS (SELECT name FROM sysobjects WHERE name='trigger33' AND type='TR') DROP TRIGGER trigger33 GO CREATE TRIGGER trigger33 Trigger de ON m.travailler FOR INSERT AS DECLARE @nb_jj int, @n_cher varchar (11) BEGIN SELECT @nb_jj = i.nb_jour_sem, @n_cher = i.n_chercheur FROM inserted i,travailler t where i.n_chercheur=t.n_chercheur and i.n_projet=t.n_projet UPDATE chercheur SET nb_jours=nb_jours+ @nb_jj ,nb_projets=nb_projets+1 WHERE n_chercheur= @n_cher END GO Michel Tuffery (SQL7) MAJ 26 Langage de Contrôle des Données : les Triggers CREATE TRIGGER trigger22 ON m.travailler FOR INSERT Trigger de contrainte AS DECLARE @nb_jj int, @n_cher varchar (11), @nb_tot int BEGIN SELECT @nb_jj = i.nb_jour_sem FROM inserted i,travailler t where i.n_chercheur=t.n_chercheur and i.n_projet=t.n_projet IF @nb_jj > 3 BEGIN RAISERROR ('Un chercheur ne peut travailler plus de 3 jours par semaine dans un projet',16,1) ROLLBACK TRANSACTION END Michel Tuffery (SQL7) 27 Langage de Contrôle des Données : les Triggers SELECT @n_cher = i.n_chercheur FROM inserted i,travailler t where i.n_chercheur=t.n_chercheur and i.n_projet=t.n_projet SELECT @nb_tot = SUM(nb_jour_sem) FROM travailler WHERE n_chercheur = @n_cher IF (@nb_tot + @nb_jj)>5 BEGIN RAISERROR ('Un chercheur ne peut travailler plus de 5 jours par semaine en tout',16,1) ROLLBACK TRANSACTION END END GO Michel Tuffery (SQL7) 28 Les Procédures Stockées Création de la Procédure IF EXISTS (SELECT name FROM sysobjects WHERE name='p1' AND type ='P') DROP PROCEDURE p1 GO CREATE PROCEDURE p1 @typeobjet VARCHAR(10) AS SELECT name,type FROM sysobjects WHERE type=@typeobjet GO Appel de la Procédure p1 TR Michel Tuffery (SQL7) 29 Les Procédures Stockées IF EXISTS (SELECT name FROM sysobjects WHERE name='ajout_projet' AND type ='P') DROP PROCEDURE ajout_projet GO create proc ajout_projet @n_projet_p varchar(8), @nom_projet_p varchar(20), @n_equipe_p varchar(8), @n_cher_resp_p varchar(11), @specialite_p varchar(10) as begin declare @n_chercheur_l varchar(11) declare @erreur int declare c1 cursor for select n_chercheur from chercheur where specialite=@specialite_p and n_equipe=@n_equipe_p BEGIN TRANSACTION Michel Tuffery (SQL7) 30 Les Procédures Stockées insert into projet values(@n_projet_p,@nom_projet_p,@n_equipe_p,@n_cher_resp_p) set @erreur=@@error if @erreur<>0 begin /*print 'Erreur numéro : '+STR(@erreur)*/ raiserror('Erreur numéro : %d',16,1,@erreur) deallocate c1 ROLLBACK TRANSACTION return (@erreur) end open c1 fetch c1 into @n_chercheur_l while @@fetch_status >= 0 begin insert into travailler values(@n_projet_p,@n_chercheur_l,null) fetch c1 into @n_chercheur_l end close c1 deallocate c1 COMMIT TRANSACTION end GO Michel Tuffery (SQL7) 31 Procédures stockées intéressantes • • • • • • • • • • • • sp_spaceused sp_spaceused table sp_lock sp_statistics table sp_tables sp_tempdbspace sp_columns table sp_databases sp_datatype_info sp_enumdsn sp_help_revdatabase sp_help_revdatabase bd taille occupée par la bd taille occupée par la table liste des verrous posés informations physiques sur les index tables accessibles par l ’utilisateur taille réservée et occupée de tempdb structure de la table tailles des bd tous les types disponibles liste des Data Source Name ODBC scripts de création des bases script de création de la base bd Michel Tuffery (SQL7) 32 Procédures stockées intéressantes • • • • • • • • • • • • • sp_helpcontraint table sp_helpdb sp_helpdevice sp_helpdistribution sp_helpextendedproc sp_helpgroup sp_helpindex table sp_helpjoins t1,t2 sp_helplog sp_helplogins sp_helpremotelogin sp_helpsql sp_helpuser contraintes de la table informations sur les bases informations et correspondances unités / fichiers informations sur la distribution correspondance procédure externe / dll informations sur les groupes informations sur les index de la table colonnes de jointures entre t1 et t2 ou est le journal informations sur les accès informations sur les accès distants ( approuvée) aides sur certaines rubriques informations sur le user Michel Tuffery (SQL7) 33 Administration SQL Server Fichiers, Unités et Bases de données Fichiers Unités de bd Bases master MASTER master.dat (25Mo ) (n° 0) model MSDBDATA msdbdata.dat (2Mo ) do MSDBLOG msdblog.dat (2Mo ) tempdb (n° 126 (n° 127) nn ée s jou r na l pubs msdb Michel Tuffery (SQL7) 35 Contenu des bases systèmes • Master – – – – – contrôle des bd utilisateurs suivi : comptes util., serveurs distants, processus et variables d ’environnement contrôle de l ’espace de stockage contient les tables et procédures systèmes à sauvegarder après toute modification système • Model – – – fournit un modèle pour les nouvelles bases (copie et extension) contient aussi des tables systèmes possibilité de modifier ‘ model ’ de base : ajout de types, contraintes, règles et défauts • Msdb – prend en charge SQL Exécutive • Tempdb – – tables temporaires aucune permission Michel Tuffery (SQL7) 36 Architecture de SQL-DMF Distributed Management Framework SQL Enterprise Manager Automation SQL Objets de gestion distribuée Transact SQL SQL-DMO SQL Exécutive Réplication Moteur SQL Server Gestion des taches Gestion d ’événements Gestion d ’avertissements Michel Tuffery (SQL7) 37 Unités de Bases de données • Création d ’une nouvelle unité – espace de stockage (fichier) – taille (>=1Mo) • Suppression d ’une unité – attention : tout est perdu – supprimer physiquement le fichier • Augmentation de l ’espace d ’une unité • Edition d ’une unité Michel Tuffery (SQL7) 38 Bases de données : contenu • • • • • • • Tables (structures physiques) Vues Index Valeurs par défaut (types de données) Règles de validation Procédures stockées Déclencheurs Michel Tuffery (SQL7) 39 Bases de données • Création – nom de l ’unité de données et taille données – nom de l ’unité journal et taille (25 % conseillé) • Modification de la taille – augmentation (<= unité) ou diminution • Suppression • Changement de nom Michel Tuffery (SQL7) 40 Accès et utilisateurs • 4 types d ’utilisateurs – – – – système : sa propriétaire d ’une base : dbo propriétaire d ’objet : dboo autres utilisateurs • Noms d ’accès (SQL Server) – nom pour accéder à SQL Server (avant d ’accéder à une base) – mis en correspondance avec un nom d ’utilisateur (souvent le même) – dans la table syslogins • Noms d ’utilisateurs (Base particulière) – pour se connecter à une base particulière – dans la table sysusers • Groupes d ’utilisateurs – groupe Public par défaut – regroupement d ’utilisateurs dans un groupe (sous public), 1 seul groupe Michel Tuffery (SQL7) 41 Administrateur système (sa) • Installation de SQL Server – installation du serveur avec paramétrages – installation des outils clients pour accéder • Création d ’espaces de stockage – création d ’unités – création de bases de données (avec DBO) • Accès utilisateur • Taches journalières – sauvegardes et restauration de bases et de journaux – optimisation de SQL Server – gestion des espaces, utilisateurs et objets Michel Tuffery (SQL7) 42 Propriétaire de base (dbo) • • • • • Crée la base de données Un seul dbo par base Conception et mise en œuvre de la base Création des objets données et programmes importation et exportation Michel Tuffery (SQL7) 43 Sécurité des connexions • Sécurité standard – accès classique en mode client-serveur – le serveur NT ne fait aucun contrôle – tout repose sur la sécurité SQL Server (connexion non approuvée) • Sécurité intégrée – accès en mode connecté (au serveur NT) – SQL Server ne demande rien : il prend le nom d ’utilisateur donné à NT (ops$ d ’Oracle) – -tout repose sur la sécurité de NT • Sécurité mixte – l ’utilisateur a le choix (au moins un nom d ’utilisateur donné) Michel Tuffery (SQL7) 44 Les Permissions par défaut • Permissions du sa – tous les droits (avec délégation) – instructions réservées : DISK, KILL, RECONFIGURE, SHUTDOWN, Ajout et suppression de proc. étendues • Permissions des dbo – tous les droits sur la base possédée (avec délégation) – droits intransmissibles : CHECPOINT, DBCC, DROP DATABASE, Permissions de GRANT et REVOKE, LOAD TRANSACTION et SETUSER • Permissions des dboo – tous les droits sur les objets crées – instructions réservées : ALTER DROP et TRUNCATE TABLE, CREATE et DROP INDEX, CREATE et DROP TRIGGER Michel Tuffery (SQL7) 45 Permissions accordées aux autres utilisateurs • Permissions d ’instruction – – – – – création d ’une bd (create database) création de règles et de valeurs par défaut pour une bd création de tables et de vues pour pour une bd création de procédures stockées sauvegarde de la bd (dump database et transaction) • Permissions d ’objet : droits sur des actions Objets table vue colonne proc. stoc. Actions select update insert delete references execute Michel Tuffery (SQL7) 46 Exportation et importation de données • Transfert synchrone entre deux serveurs par SQL Enterprise • Transfert asynchrone entre deux serveurs déconnectés par la commande BCP (Bulk Copy Program) • Importation de fichiers de données avec BCP Michel Tuffery (SQL7) 47 Création de scripts automatiques • Possibilité de générer automatiquement des scripts SQL • Script de création d ’une table existante avec les intégrités référentielles • Script de création d ’index • Permet de refaire l ’ensemble des scripts d ’une base ancienne Michel Tuffery (SQL7) 48 Sauvegarde et Restauration • Sauvegarde obligatoire en production • Sauvegarde : base, journal des transaction ou une table seule • Conseil : sauvegarde des bases toutes les semaines y compris Master, MSDB et Distribution si réplication • Exemple : – sauvegarde base complète le Lundi – sauvegarde des transactions chaque jour • Création obligatoire d ’une unité de sauvegarde Michel Tuffery (SQL7) 49 Sauvegarde et Restauration • Contrôle logique et physique de la base avant sauvegarde – DBCC CHECKDB – DBCC CHECKALLOC – DBCC CHECKCATALOG • Planification possible des taches de sauvegarde : calendrier Michel Tuffery (SQL7) 50 Sauvegarde et Restauration • Unités de sauvegarde : – disque ou bande – si sur disque : autre unité ou autre serveur • Restauration : si l ’unité de données est endommagée SQL Server déclare la base ‘ suspecte ’ --> il faut détruire la base et la recréer (mêmes paramètres) avant de restaurer Michel Tuffery (SQL7) 51 Procédures stockées intéressantes • • • • • • • • • • • • sp_spaceused sp_spaceused table sp_lock sp_statistics table sp_tables sp_tempdbspace sp_columns table sp_databases sp_datatype_info sp_enumdsn sp_help_revdatabase sp_help_revdatabase bd taille occupée par la bd taille occupée par la table liste des verrous posés informations physiques sur les index tables accessibles par l ’utilisateur taille réservée et occupée de tempdb structure de la table tailles des bd tous les types disponibles liste des Data Source Name ODBC scripts de création des bases script de création de la base bd Michel Tuffery (SQL7) 52 Procédures stockées intéressantes • • • • • • • • • • • • • sp_helpcontraint table sp_helpdb sp_helpdevice sp_helpdistribution sp_helpextendedproc sp_helpgroup sp_helpindex table sp_helpjoins t1,t2 sp_helplog sp_helplogins sp_helpremotelogin sp_helpsql sp_helpuser contraintes de la table informations sur les bases informations et correspondances unités / fichiers informations sur la distribution correspondance procédure externe / dll informations sur les groupes informations sur les index de la table colonnes de jointures entre t1 et t2 ou est le journal informations sur les accès informations sur les accès distants ( approuvée) aides sur certaines rubriques informations sur le user Michel Tuffery (SQL7) 53
Documents pareils
SQL - Server 7.0
Les Procédures Stockées
IF EXISTS (SELECT name FROM sysobjects WHERE name='ajout_projet'
AND type ='P')
DROP PROCEDURE ajout_projet
GO
create proc ajout_projet
@n_projet_p varchar(8),
@nom_projet_...