Microsoft SQL Server

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
SQL Server
Image illustrative de l'article Microsoft SQL Server
Logo

Développeur Microsoft
Dernière version 2014 (1er avril 2014)
Environnement Microsoft Windows
Type SGBD
Licence propriétaire
Site web www.microsoft.com/france/sql

Microsoft SQL Server est un système de gestion de base de données (abrégé en SGBD ou SGBDR pour « Système de gestion de base de données relationnelles ») développé et commercialisé par la société Microsoft.

Bien qu'il ait été initialement codéveloppé par Sybase et Microsoft, Ashton-Tate a également été associé à sa première version, sortie en 1989. Cette version est sortie sur les plates-formes Unix et OS/2. Depuis, Microsoft a porté ce système de base de données sous Windows et il est désormais uniquement pris en charge par ce système.

Lors de sa création, Sybase SQL Server hérite des principes du moteur Ingres développé à l'origine par l'université de Berkeley.

En 1994, le partenariat entre les deux sociétés ayant été rompu, Microsoft a sorti la version 6.0 puis 6.5 seul, sur la plate-forme Windows NT.

  • Microsoft a continué de commercialiser le moteur de base de données sous le nom de SQL Server
  • Tandis que Sybase, pour éviter toute confusion, a renommé Sybase SQL Server en Sybase Adaptive Server Enterprise.

Microsoft SQL Server fait désormais partie de la stratégie technique de Microsoft en matière de base de données. Le moteur MSDE, qui est la base de SQL Server, doit à terme remplacer le moteur Jet (celui qui gère les bases Access) dans les applications telles que Exchange et Active Directory.

La version 2005 de SQL Server est sortie le 3 novembre 2005 en même temps que Visual Studio 2005. La prise en charge de Windows Vista et de Windows Server 2008 n'a été ajoutée qu'à partir du Service Pack 2 (SP2). Actuellement le Service Pack 3 est disponible. L'optimiseur a été entièrement refait, tout comme le moteur relationnel.

La version 2008 de SQL Server (nom de code Katmaï) est disponible depuis août 2008. Elle est actuellement au niveau de service pack 3. Elle est disponible en 9 langues, dont le français.

La version 2012 de SQL Server est disponible depuis avril 2012.

Lors du développement de la version 2005, le projet était à l'époque l'un des plus grands projets informatiques du monde. Plus de 1 600 développeurs ont participé au codage du noyau et l'on estime que plus de 10 000 autres personnes y ont travaillé de près ou de loin (Interactions homme-machine, documentation, traduction...).

Particularités[modifier | modifier le code]

Par rapport à ses concurrents que sont Oracle, MySQL ou PostgreSQL, SQL Server se distingue par le fait que c'est un SGBDR originellement multibase (contrairement à Oracle) et multischéma (contrairement à MySQL). Il est possible de faire des requêtes nativement interbases. Par exemple la requête suivante lie deux tables de deux bases de données différentes :

 SELECT *
 FROM   BASE_A.dbo.TABLE1 AS T1
        INNER JOIN BASE_B.dbo.TABLE2 AS T2
              ON T1.ID = T2.ID;

Bien que PostGreSQL soit multibase et multischéma, cette possibilité d'interrogation simultanée n'est pas native et il faut passer par le truchement de "dblink" qui interdit les jointures et donc toute possibilité d'optimisation...

SQL Server est dotée d'une tare congénitale qui fait que les contraintes d'unicité prennent en compte le marqueur NULL comme étant une valeur et par ce fait interdit donc la présence de plusieurs NULLs dans les colonnes d'une telle contraintes. Ceci n'est pas conforme à la norme SQL puisque le NULL étant une absence de valeur, l'unicité ne se pose pas. Il existe cependant un moyen simple de contournement de ce problème qui consiste à créer un index unique filtré qui concernera les données valuées.

Exemple, soit la table :

 CREATE TABLE T_EMPLOYE_EMP
 (EMP_ID            INT PRIMARY KEY,
  EMP_NOM           VARCHAR(32) NOT NULL,
  EMP_MATRICULE     CHAR(8));

Comme le matricule doit être unique pour les valeurs connues, la création d'un index filtrés sur les valeurs exprimées de la colonne matricule, permet de résoudre le problème :

 CREATE INDEX X_EMP_MATRICULE
    ON T_EMPLOYE_EMP(EMP_MATRICULE)
    WHERE EMP_MATRICULE IS NOT NULL;

Fonctionnement[modifier | modifier le code]

Microsoft SQL Server propose plusieurs fonctionnements :

Langages[modifier | modifier le code]

Pour les requêtes, SQL Server utilise T-SQL (Transact-SQL), il s'agit d'une implémentation de SQL qui prend en charge les procédures stockées, les fonctions utilisateur ou UDF (User Defined Function) et les déclencheurs (trigger). Le T-SQL est incompatible avec le PL/SQL d'Oracle.

Pour les transferts de données, SQL Server utilise le format TDS (Tabular Data Stream) qui a été implémenté dans d'autres bases de données (en particulier dans son homologue Sybase) et dont les spécifications sont publiques. Une implémentation Open Source d'un client TDS est disponible et constitue la base du client SQL Server du projet Mono : FreeTDS.

SQL Server étant doté de deux moteurs de bases de données, l'un relationnel et l'autre décisionnel, il est possible de faire des requêtes en langage MDX ou DMX spécifique à l'analyse de données pour les bases décisionnelles.

Relations[modifier | modifier le code]

SQL Server est un SGBD relationnel. Il est possible de définir des liens entre les tables de façon à garantir fortement l'intégrité des données qui y sont stockées. Ces liens d'intégrité peuvent être utilisés pour modifier ou supprimer en chaîne des lignes liées.

Transactions[modifier | modifier le code]

SQL Server est un SGBD transactionnel. Il est capable de préparer des modifications sur les données d'une base et de les valider ou de les annuler de façon atomique, c'est-à-dire en "tout ou rien'. Cela garantit la cohérence et l'intégrité des informations stockées dans la base. Lors d'une transaction, les ensembles de données contenant les lignes de données en cours de modification par cette transaction sont verrouillés. Les autres utilisateurs doivent attendre la fin de la transaction pour pouvoir les modifier à nouveau.En revanche, les utilisateurs concurrent peuvent éventuellement lire les données, mêmes verrouillées en modification par une autre transaction, en fonction du niveau d'isolation choisit.

Les verrouillages s'effectuent au niveau des lignes, pages, extensions, tables ou base de données. SQL Server ne verrouille que les ressources dont il a besoin (par défaut les lignes) et en fonction des besoins peut verrouiller à un niveau plus élevé (pages ou table). Cela évite aux utilisateurs d'attendre la fin d'une transaction pour mettre à jour des lignes de données qui n'ont pas été touchées par une modification et permet de diminuer la quantité de ressources consommées. Le verrouillage peut être pessimiste - les utilisateurs concurrents ne pourront accéder aux lignes de cette transaction - ou optimiste - dans ce cas les utilisateurs concurrent pourront accéder à la dernière version des lignes. Pour assurer ce fonctionnement, SQL Server permet de piloter le niveau d'isolation de six manières différentes : les 4 niveaux prévus par la norme SQL (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ et SERIALIZABLE) qui repose sur le verrouillage pessimiste et deux niveaux "optimistes" (SNAPSHOT et READ COMMITTED SNAPSHOT). Le niveau d'isolation étant dynamique, il peut donc changer au cours d'une même transaction.

Les transactions sont enregistrées dans le journal de transaction, les modifications des données sont immédiatement disponibles en mémoire et seront écrites dans les fichiers de données lors de points de contrôle (check point) lancés de manière périodique et asynchrone. Il est cependant possible de forcer un point de contrôle grâce à l'instruction CHECKPOINT.

Le journal des transactions enregistre différemment les données et cela de trois manières différentes :

  • Mode complet : toutes les modifications sont enregistrées dans le journal. Les transactions terminées dont les données sont écrites sur le disque seront supprimées du journal de transaction lors des sauvegardes transactionnelles.
  • Mode journalisé en bloc (BULK LOGGED) : journalise de façon minimale les opérations reproductibles (par exemple insertion de données de fichiers, construction d'index...). Ce mode permet d'accélérer le fonctionnement du journal. Mais comme dans le mode complet, le journal devra être purgé par une sauvegarde transactionnelle.
  • Mode simple : mode similaire au mode journalisé en bloc, à l'exception du fait que le journal est auto purgé à chaque point de contrôle.

Dans les modes complet et journalisé en bloc, il faut sauvegarder le journal de transaction périodiquement, sous peine de le voir grossir indéfiniment. Et grâce à la sauvegarde transactionnelle il est possible de restaurer la base telle qu'elle était à n'importe quel point du temps à la seconde près ou à la transaction près (avec cependant quelques limites pour le mode journalisé en bloc).

Fichiers[modifier | modifier le code]

Les bases de données sont contenues physiquement dans des fichiers. Les fichiers portent généralement les extensions :

  • MDF (Main Database File) pour le premier fichier de données
  • NDF (Next Database File) pour les autres fichiers de données
  • LDF (Log Database File) pour les fichiers du journal de transaction

Les fichiers sont divisés en blocs de 8196 octets appelés pages et organisées par ensembles de 8 pages consécutives appelées extensions. Jusqu'à la version 2000, les lignes étaient limitées à une taille maximale de 8060 octets (les colonnes de type LOBs (image, text, ntext) n'étant pas comptabilisées dans cette limite). Depuis la version 2005 il est possible de dépasser largement cette limite et d'aller jusqu'à 2 milliards d'octets. En revanche la taille utile de la page est de 8096 octets.

Les bases de données ne peuvent fonctionner que lorsque tous les fichiers sont présents.

Les fichiers de données sont regroupés logiquement dans la base de données dans des groupes de fichiers qui constitue la destination des objets de la base (table, index...). Ces fichiers et groupes de fichiers peuvent être sauvegardés de façon indépendante même s'il existe une interdépendance logique entre les objets d'un fichier et d'un autre (intégrité référentielle en particulier).

Sécurité[modifier | modifier le code]

Du fait de son aspect multibase, SQL Server dispose d'une sécurité à deux niveaux : niveau serveur, par le biais des comptes de connexion et niveau base, par le biais des utilisateurs SQL.

À partir de la version 2005, de profondes modifications de sécurité ont eu lieu dans la stratégie de SQL Server. Les efforts considérables ont payés, puisque différents experts ont reconnus la supériorité de SQL Server par rapport à son principal concurrent qu'est Oracle : moins de bugs, une correction plus rapide, moins de pannes, une plus grand fiabilité...

Exemple de requête Google (au 27/03/2014) :

NIST CVE "Oracle"     : 56 600 résultats
NIST CVE "MySQL"      : 33 900 résultats
NIST CVE "sql server" : 22 500 résultats

En sus, la stratégie de sécurité porte aussi sur les fonctionnalités du serveur. Ainsi toute fonctionnalité présentant une vulnérabilité potentielle est désactivée par défaut. Par exemple, la procédure stockée xp_cmdshell permettant de lancer des commandes systèmes est désactivée, et seul le DBA peut la réactiver.

De même, dès ouverture du serveur, tous les fichiers de toutes les bases sont verrouillés en lecture comme en écriture afin d'empêcher tout accès indésirable.

Comptes de service[modifier | modifier le code]

Les services exécutant chaque instance de SQL Server utilisent un compte de service. Ce dernier doit être choisi avec soin pour éviter d'éventuelles failles de sécurités sur le serveur. Celui-ci peut être : Service Système, Service Local (à partir de Windows 2003), Service Réseau (à partir de Windows 2003), compte utilisateur Windows local, compte utilisateur du domaine. L'ordonnanceur ou le planificateur de tâche de SQL Server, l'Agent SQL s'exécute lui aussi sous forme de service, il faut donc lui affecter un compte de service. Celui-ci est généralement différent de celui de l'instance. Pour renforcer la sécurité d'exploitation, les versions les plus récentes de SQL Server créent des comptes de service spécifique à chaque élément de SQL Server.

Comptes de connexion[modifier | modifier le code]

Le compte de connexion permet de se connecter à une instance de SQL Server. À ces comptes, il convient de définir les privilèges qui s'appliquent au niveau serveur. Le privilège minimum étant le privilège "CONNECT". Un exemple de privilège de niveau serveur est la possibilité de créer toute base de données. Dans ce cas c'est le privilège CREATE ANY DATABASE. SQL Server s'appuie par défaut sur le système d'authentification de Windows (Kerberos ou Natif) de qui permet d'accéder à une instance SQL Server par le biais d'un groupe Windows ou d'un utilisateur Windows. Lors de la connexion à la base de données, l'utilisateur est identifié grâce à son login Windows. Il n'a donc pas besoin de donner son mot de passe lors de la phase d''authentification au serveur.

Comme il existe des cas où l'utilisateur ne peut pas être identifié par son login Windows (utilisation de Linux, d'une page Web...) une méthode d'identification directe à SQL Server peut être mise en place. Elle doit l'être explicitement par l'administrateur de l'instance. Ceci suppose la création d'un nom de compte SQL et d'un mot de passe, et pour ce dernier on peut calquer la politique de conformation du mot de passe sur celle de Windows.

Lors de l'accès à une ressource extérieure, le processus SQL Server agit de 3 manières différentes : par emprunt d'identité lorsque la couche Windows est correctement configurée, l'utilisateur ne peut accéder par l'intermédiaire de SQL Server qu'aux ressources auxquelles il aurait droit s'il y accédait directement ; par le compte de service de l'instance, lorsque l'utilisateur est sysadmin et pour certaines tâches ; il ne permet pas l'accès, dans tous les autres cas. Dans le cas des comptes de connexion SQL, et pour l'accès à une ressource extérieure (par exemple l'envoi d'un fax dans une procédure stockée) SQL Server ajoute la possibilité de créer des credentials qui sont des comptes Windows enregistrés à cet effet. Les utilisateurs SQL peuvent donc être associés à ces comptes Windows pour l'accès aux ressources externes.

Utilisateur SQL[modifier | modifier le code]

Un compte de connexion peut être mappé à un utilisateur SQL soit dans une base particulière, soit dans plusieurs voire toutes. Le nom de compte de connexion et le nom d'utilisateur peuvent être différentes (et il vaut mieux qu'il le soit). Un utilisateur SQL dans une base peut être doté de privilèges qui l'autorisent à lancer différentes commandes sur divers objets. Les privilèges peuvent être établis directement sur un objet de la base ou bien sur un "conteneur" comme le schéma SQL ou la base toute entière.

Exemple d'attribution de différents privilèges de niveau schéma SQL à un utilisateur nomme USR_BANQUE :

 GRANT SELECT, INSERT, UPDATE, EXECUTE 
    ON SCHEMA::FINANCE 
    TO USR_BANQUE;

Rôles[modifier | modifier le code]

SQL Server dispose de rôles pré établis au niveau serveur comme au niveau base. Il est même possible de créer ses propres rôles (nouveau pour le niveau serveur depuis 2012). Un rôle étant une collection de privilèges attribuable à un compte de connexion au niveau serveur ou à un utilisateur SQL quand ce rôle a été créé pour une base spécifique.

Schéma SQL[modifier | modifier le code]

Un schéma étant un conteneur d'objet dans une base, SQL Server permet de définir autant de schéma SQL qu'on le souhaite, ceci afin d'organiser les différentes objets dans la base et surtout de gérer la sécurité au niveau de schéma de manière pro active. Ainsi la création de nouveau objets, si ces objets sont placés dans les bons schémas, automatise la mise en place de la sécurité par héritage. Il n'y a donc aucune commande d'aucune sorte à passer d'un point de vue gestion de privilèges, pour que la sécurité soir immédiatement appliquée.

Enfin, et contrairement à certains SGBDR (Oracle par exemple) il n'y a pas d'intimité ni de confusion entre un schéma SQL et son propriétaire (l'utilisateur qui l'a créé) ce qui par exemple facilite grandement la migration d'un objet d'un schéma à l'autre et garantit une meilleure sécurité.

Exemple de migration d'une table d'un schéma SQL à l'autre :

ALTER SCHEMA BANQUE TRANSFER dbo.T_CLIENT;

Chiffrement[modifier | modifier le code]

SQL Server permet de chiffrer les données des tables par différentes algorithmes intégrés à SQL Server. Les clefs de chiffrement et les certificats peuvent être importés depuis un fichier externe ou directement créés dans la base, SQL Server étant sa propre autorité de certification. Il existe cependant une troisième possibilité qui consiste à utiliser un boitier électronique de génération et conservation des clefs appelé HSM (Hardware Security Module), destiné à garantir l’inviolabilité des clefs. Ces équipements électroniques se placent sur le réseau et s’auto détruisent en cas de tentative d’accès illégal que ce soit physique ou logique.

Une sauvegarde de la base incorpore toutes les clefs et certificats pour assurer chiffrement et décryptage. Mais la restauration d’une base sur un autre serveur que celui d’origine impose un décryptage suivi d’un recryptage. Les éléments composant l’architecture de chiffrement étant interdépendants les uns des autres depuis une clef secrète détenue au niveau de l’instance. Il est cependant nécessaire, pour procéder au cryptage ou déchiffrement d’ouvrir la clef soit en possédant un certificat, soit en donnant le mot de passe.

SQL Server permet de crypter les données des tables ou de chiffrer le code des routines. Pour les données des tables, SQL Server procède à un auto salage du cryptage qui empêche toute tentative de cassage du chiffre par une analyse fréquentielle, ce que ne permet ni MySQL ni PostGreSQL (extension pgcrypto).

Enfin, SQL Server permet de crypter le stockage des données et non plus les données par le biais de TDE (Transparent Data Encryption). Le principe est simple : les fichiers (journaux de transaction et données des tables et index) sont chiffrés au moment de l’écriture physique sur les disques et déchiffrés au moment de la lecture physique des disques vers le mémoire. Ainsi les données figurent en clair en mémoire, ce qui permet de conserver d’excellentes performances tout en cryptant l’intégralité de la base.

Objets de la base de données[modifier | modifier le code]

Tables[modifier | modifier le code]

Publicité pour Microsoft SQL Server 2005 sur écran vidéo géant sur un bateau-mouche à Shanghai

Les tables sont les objets qui contiennent effectivement les données dans la base. Elles sont de deux types :

  1. Les tables systèmes contiennent les informations permettant le bon fonctionnement de la base de données. Par défaut sous SQL Server 2000 elles ne sont pas modifiables. Sous SQL Server 2005 de nouvelles tables systèmes apparaissent mais elles ne sont pas accessibles aux utilisateurs. Pour pouvoir toujours accéder à ces informations l'équipe de développement a ajouté un grand nombre de vues systèmes. Celles-ci remplacent les anciennes tables systèmes et certaines commandes du DBCC. Un grand nombre de nouvelles vues systèmes a aussi été ajouté. Sous SQL Server tous les objets systèmes font partie du schéma sys et sont stockés dans une base de données appelée SystemResource.
  2. Les tables utilisateurs contiennent les données des utilisateurs.

Une table peut contenir jusqu'à 30 000 colonnes dont la somme des tailles n'excède pas 2 milliards d'octets. Les colonnes de types BLOBs (VARCHAR(max), NVARCHAR(max), VARBINARY(max)) étant stockées en dehors de la ligne.

Les tables peuvent être dotées d'une clé primaire. La clé primaire est toujours indexée. D'autres contraintes sont également disponibles au niveau des tables telles que : les contraintes uniques (automatiquement indexées), les valeurs par défaut, les contraintes de vérification (check), les clés étrangères.

Vues[modifier | modifier le code]

Une vue est une requête nommée de la base de données. Elle est interrogée de la même façon qu'une table.

Les données renvoyées par la vue sont reconstituées à partir des données contenues dans les tables à chaque appel de la vue (sauf pour les vues indexées qui stockent les résultats). SQL Server remplace le nom des vues dans la requête qui va être exécutée par leurs définitions, puis la requête ainsi obtenue est compilée, optimisée et exécutée par le moteur. Le plan compilé de la requête ainsi obtenue est ensuite stocké pour permettre la réutilisation lors d'un prochain appel. Comme SQL Server dispose d'une optimisation sémantique en plus de l'optimisation statistique, les branches des jointures inutiles à l'exploitation d'une vue sont systématiquement coupées pour optimisation, lorsque cela est possible.

Dans certaines conditions, il est possible de mettre à jour les valeurs dans une vue. Voici des exemples de ces conditions:

  1. Une vue sur plusieurs tables ne peut modifier qu'une seule de ces tables.
  2. Si la vue contient des fonctions, utilise "DISTINCT" ou "GROUP BY", la modification ne fonctionnera pas.
  3. Il ne doit pas y avoir transformation des données de colonnes (opération, appel de fonction...)
  4. La vue possède un déclencheur de type INSTEAD OF (dans ce dernier cas, la logique de modification est celle figurant dans le code du déclencheur).

SQL Server implémente des types particuliers de vues qui sont les vues partitionnées et les vues indexées (équivalent des vues matérialisées synchrones d'Oracle).

Index[modifier | modifier le code]

L'indexation dans SQL est assurée de quatre manières : l'indexation relationnelle, l'indexation verticale, l'indexation textuelle et l'indexation spécifique à certain type d'objets.

Indexation relationnelle[modifier | modifier le code]

Elle porte sur le contenu intégral des colonnes. Le mécanisme interne de ces index repose sur la notion d'arbre équilibré (B-Tree ou Balanced Tree en anglais).

Il existe 2 types d'index :

  1. Les index clusterisés (CLUSTERED INDEX)
  2. Les index non-clusterisés (NONCLUSTERED INDEX)

Il ne peut y avoir qu'un seul index clusterisé par table puisque ce type d'index est en fait un "tri" de la table. Les lignes de la table sont donc logiquement triées dans l'ordre de l'index clusterisé, ce qui explique qu'il n'y ne peut y en avoir qu'un seul. Autrement dit, l'index clusterisé étant un arbre-b, les feuilles de l'index sont directement les lignes dans la table.

Un index non clusterisé ne reflète pas l'ordre physique des lignes de la table.

Les deux types d'index sont construits à partir d'une clé, composée d'un certain nombre de colonnes. Ils permettent de retrouver rapidement une donnée à partir de tout ou partie des colonne de cette clé.

Ainsi, si nous considérons une clé (A, B, C), on peut faire des recherches sur les champs (A), (A, B) et (A, B, C). Les champs sont considérés dans l'ordre de la clé ; il n'est donc pas possible de faire une recherche sur, par exemple (B, C) ou (C) avec cet index. En revanche une recherche sur (A, C) profitera aisément de l'indexation de la colonne A.

Une table peut contenir 999 index. Chaque index peut contenir 16 colonnes dont la somme des tailles n'excède pas 900 octets. Les index contiennent en plus des données des colonnes de l'index un signet (bookmark) vers les données de la table. Celui-ci peut être soit un pointeur vers une ligne, soit une des clefs de l'index clusterisé (en anglais : index clusterised).

L'optimisateur de SQL Serveur choisit quel index utiliser. Il est possible qu'il n'utilise pas l'index que vous avez créé car le coût de la recherche via cet index peut être plus grand que de lire la table au complet. Pour faire ces choix, l'optimisateur utilise entre autres les statistiques de la table et la présence ou non de contraintes. Il est possible par contre de forcer l'optimisateur à utiliser un index avec la clause WITH(nom_index), cette pratique n'est toutefois pas recommandée.

L'index est organisé en arbre-b. Ceci permet de classer plus rapidement les informations que s'il fallait les insérer dans une table séquentielle. Cette disposition étant très gourmande en ressources de stockage, la version 2005 de SQL Server permet de séparer les données de recherche et des données de traitement intégrées à l'index.

SQL Server permet de créer des colonnes calculées, qui, si elles sont persistantes (PERSISTED), peuvent être indexées.

Il n'y a pas d'autre structure d'index que l'arbre-b. Par exemple, on ne trouve pas d'index bitmap, qui permettraient de faciliter les recherches sur des champs aux contenus peu variés, mais il suffit de créer une table de référence pour simuler un index bitmap. De la même manière il n'y a pas d'index en hachage. Mais il suffit de créer une colonne calculée de hachage (fonction CHECKSUM) et de l'indexer pour obtenir un effet similaire. Enfin, il n'est pas possible de créer un index sur expression, mais il suffit de créer une colonne calculée comportant une telle expression et de l'indexer pour obtenir le même effet.

Indexation verticale[modifier | modifier le code]

SQL Server permet de créer des index dit "verticaux" (columnstore index) sur un ensemble de colonnes permettant d’accéder à toutes les colonnes indexées sur le même plan. En effet, dans un index relationnel multicolonne, l'ordre de chaque colonne dans la clé de l'index n'autorise que certaines combinaison de recherches. Ce n'est pas le cas avec l'indexation verticale, qui permet toutes combinaisons de recherches. Par exemple, avec la clef (A, B, C), il est possible de faire des recharches aussi bien sur (A), (B) ou (C), mais aussi sur toutes combinaisons de deux ou trois colonnes (A, B), (B, A), (A, C), (C, A), (B, C), (C, B), (A, B, C), (A, C, B), (B, A, C), (B, C, A), (C, A, B), (C, B, A).

Dans la version 2012, ces index sont en lecture seule et donc essentiellement destinés aux bases de données de type DataWarehouse pour le décisionnel. Dans la version 2014, ces index sont modifiables.

Indexation textuelle et sémantique[modifier | modifier le code]

L'indexation textuel (en fait un catalogue d'indexation) permet de faire des recherches plain texte ("full text", conforme à la norme SQL avec le prédicat CONTAINS) ou à la manière de Google à l'aide du prédicat FREETEXT. Il est permis de rechercher différents mots dans un même document (texte des colonnes d'une table ou document électronique stocké dans une table) par égalité, début, proximité, mais aussi par forme fléchie (conjugaison, pluriels, féminin, etc.), synonymisation, extension (notamment pour les sigles)... ainsi qu'avec des poids relatifs (fonction table CONTAINSTABLE et FREETEXTTABLE). L'indexation textuelle peut porter sur des colonnes de type chaine de caractères ou XML, mais aussi sur des fichiers électroniques qu'il soient stockées directement en table (dans un BLOB) ou à titre de fichier par le biais du FILESTREAM ou dans un FILETABLE. SQL Server reconnais plus de 50 format de fichier nativement et permet de rajouter de nombreux autres types de fichiers électroniques à l'aide des "ifilter".

SQL Server supporte la plupart des langues et permet des recherches combinées multilinguales. Pour cela des listes de "mots noirs" peuvent être établies pour chacune des langues indexées. De plus SQL Server index tous les mots sans exception y compris les mots noirs, là ou certains SGBDR se limites à des mots ayant une longueur minimale (MySQL par exemple) ou excluent les mots noirs (PostGreSQL par exemple). Enfin, si la casse n'a pas d'importance pour l'indexation textuelle, l'utilisateur peut choisir s'il veut une indexation textuelle prenant en compte ou pas les caractères diacritiques, tels que les accents ou les ligatures. L'indexation textuelle permet aussi la recherche de méta données dans les fichiers électronique. Par exemple l'auteur d'un fichier Word.

Avec la version 2012, SQL Server a rajouté l'indexation sémantique qui permet, comme son nom l'indique de faire des recherches sémantiques. Cette fonctionnalité nécessite l'ajout d'une base de données de traitement sémantique destiné à établir des statistiques sur les textes indexés. la recherche sémantique porte sur la signification du document. Ceci permet l'extraction automatique de balises, la découverte de contenu connexe et la navigation hiérarchique à travers des documents ayant un contenu similaire à un texte de référence. Un exemple pratique consiste à interroger l'index de ressemblance de document pour identifier dans un lot de curriculum vitae, ceux qui correspondent le mieux à une description de poste.

Indexation des objets[modifier | modifier le code]

SQL Server permet l'indexation de certains types de données objet, comme le XML (4 types d'index), ou le spatial (types geometry et geography). Comme il est possible de rajouter votre propre objets, à condition de les décrire sous forme .net, il est aussi possible de les indexer, à condition pour que vous vous arrangiez qu'ils soient "bit ordered" dans leur organisation.

Procédures stockées[modifier | modifier le code]

Il est possible de définir des procédures stockées codées en Transact SQL comme en .net (SQL CLR). Une procédure stockée est une suite d'instructions qui peut modifier les données de la base et encapsuler des transactions et qui renvoient une ou plusieurs valeurs.

Les procédures stockées sous SQL Server peuvent prendre en paramètre et/ou retourner des entiers, des chaînes de caractère, des dates, des curseurs, des tables, des tables virtuelles et tout autre type défini dans SQL Server par défaut ou par les utilisateurs.

Les principaux avantages de l'utilisation des procédures stockées sont :

  • la transaction de traitements complexes (plusieurs transactions peuvent s'enchainer ou s'imbriquer)
  • la sécurité accrue (le code d'une procédure peut être dépersonnalisé)
  • une meilleure réutilisation des plans compilés
  • la possibilité de gérer les dépendances entre le code SQL et les objets du moteur.

Déclencheurs (trigger)[modifier | modifier le code]

Le déclencheur constitue du code stocké qui s'exécute après (AFTER) ou à la place (INSTEAD OF) d'une action particulière (insertion, modification, suppression) sur une table ou vue. Il est possible de coder autant de déclencheurs AFTER qu'on le souhaite sur une même action (INSERT, UPDATE ou DELETE) d'une même table ou vue. En cas de pluralité de déclencheurs sur une même action d'une même table, l'ordre des déclencheurs est arbitraire, sauf pour les 3 premiers que l'on peut imposer. Les déclencheurs INSTEAD OF doivent être unique par événement/table.

Deux tables virtuelles sont créées pour manipuler les données insérées, modifiées ou supprimées : inserted (pour l'insertion et la modification) et deleted (pour la suppression et la modification). Il est impossible de modifier le contenu de ces tables virtuelles. En revanche, SQL Server permet de modifier la table cible du déclencheur, contrairement à la plupart des SGBDR, qui, comme Oracle, considère comme une erreur de modifier une table en cours de modification (table dite "mutante" dans Oracle). De même SQL Server permet d'annuler la transaction implicite qui a déclenchée le trigger directement par annulation de la transaction (ROLLBACK).

Le déclencheur particulier INSTEAD OF est utilisable lorsque l'on souhaite intercepter l'événement, ne pas le laisser se dérouler, mais coder une autre action. Ce type de déclencheur est utilisable par exemple dans le cadre d'un mapping relationnel/objet où l'on manipule des vues composées de multiples jointures où l'on souhaite que l'utilisateur puisse faire des mises à jour (INSERT, UPDATE, DELETE) directement sur ces vues. Dans ce cas, les données INSERT, UPDATE ou DELETE sont découpées pour chacune des tables en jeu et une série d'ordre spécifique à chaque table à mettre à voir est lancée au travers une transaction.

Depuis SQL Server 2005, la possibilité de créer des triggers DDL a été ajoutée. Ces déclencheurs DDL agissent après apparition des événements de type CREATE, ALTER ou DROP, et ces événements peuvent être interceptés au niveau du serveur (par exemple un CREATE DATABASE) ou au niveau de la base (par exemple un DROP TABLE). Pour obtenir des détails sur l'événement intercepté, un paquet de données XML (que l'on obtient par la fonction EVENTDATA()) donne de multiples précisions sur l'origine et la nature de l'événement. On y trouve même la requête SQL qui l'a déclenché.

Un type particulier de déclencheur permet d'intercepter les connexions au serveur (trigger FOR LOGON).

Fonctions (UDF : User Defined Function)[modifier | modifier le code]

Depuis SQL Server 2000, il est possible de créer des fonctions en Transact SQL et depuis 2005 en .net (SQL CLR).

Ces fonctions sont de 3 types :

  • Scalaire : Plusieurs instructions renvoient alors une valeur de type simple
  • Table à instructions multiples : plusieurs instructions renvoient alors une table
  • Table en-ligne (vue paramétrée) : une instruction de type SELECT renvoie une table

Il existe cependant des restrictions quant aux fonctionnalités utilisables dans le corps d'une fonction. Il n'est pas possible d'utiliser de fonctions non déterministes et la fonction ne doit pas modifier des données ou des paramètres système de manière permanente ou durable. Ce qui interdit par exemple l'utilisation d'un INSERT sur une table ou l'utilisation de la fonction GETDATE().

SQL Server 2005 a rajouté :

  • la possibilité de créer des fonctions d'agrégation (calcul statistique) par l'intermédiaire de CLR, c'est-à-dire d'un codage à l'aide d'un langage de la plate-forme .net;
  • des fonctions particulières liées au partitionnement des données (PARTITION FUNCTION).

À la différence d'une procédure stockée, une fonction ne peut pas contenir :

  • d'ordre déterminant les frontières d'une transaction (BEGIN TRANSACTION, COMMIT, ROLLBACK)
  • d'ordre de mise à jour des données (INSERT, UPDATE, DELETE, SELECT), sauf pour les fonctions table multi-instructions et ce uniquement pour la table de retour.
  • de code non déterministe (barrière partiellement levée avec SQL Server 2005, les fonctions telles que GETDATE étant autorisées, mais RAND est toujours interdite)
  • de SQL dynamique
  • de curseur
  • d'un appel de procédure stockée

C'est logique, car le but d'une fonction est avant tout d'être utilisée au sein d'une requête.

Aspects objet[modifier | modifier le code]

Depuis la version 2005, SQL Server incorpore des aspects objets parmi lesquels on trouve :

  • la possibilité de réaliser des types complexes structurés via un langage externe de type .net et de les utiliser aussi bien en tant que colonne de table qu'en tant que type d'une variable dans une routine (procédure, déclencheur ou fonction).
  • le type XML interrogeable via XQuery/XPath et indexable. SQL server intégrant un parseur XML et des procédures de manipulation de flux XML.
  • la possibilité de générer un flux XML à partir du résultat d'une requête SELECT à la place d'un "dataset".
  • le type hierarchyId (apparu en version 2008) facilitant la structuration des données hierarchique (arbres).
  • un véritable SIG (Système d'Information Géographique - apparu en version 2008) avec l'arrivée des types GEOMETRY et GEOGRAPHY au standard OGC avec l'interfaçage sous forme WKT (Well known text) ou WKB (Well Known Binary), et dotés de nombreuses méthodes de manipulation.
  • l'implantation de services Web que l'on peut créer directement dans le SGBDR;
  • le stockage de fichiers sous la responsabilité exclusive ou partielle du SGBDR (FILESTREAM) et leur manipulation transactionnelle permettant une sauvegarde cohérente des données relationnelles et non relationnelles (très utile pour une GED par exemple) - @À partir de 2008.
  • la représentation transparente sous forme de tables (FILETABLE) des arborescences de stockage des fichiers de l'OS Windows (répertoires et fichiers) et leur manipulation par des requêtes SQL - à partir de 2012.

Outils[modifier | modifier le code]

SQL Server Management Studio (SSMS)[modifier | modifier le code]

Cet outil est fourni avec les versions payantes de SQL Server 2005. Il permet de se connecter et d'administrer les différents moteurs SQL Server 2005 (SSRS, SSIS, SSAS et le moteur relationnel). Il permet pour le moteur relationnel de développer des scripts TSQL, avec la possibilité de regrouper l'ensemble de ceux-ci au sein d'une solution (comme sous Visual Studio). On peut aussi enregistrer ceux-ci grâce à Visual SourceSafe ou Team Foundation Server.


SQL Server Management Studio Express Edition (SSMSE)[modifier | modifier le code]

Cet outil est téléchargeable gratuitement pour la gestion du moteur relationnel SQL Server 2005 Express Edition. Il permet de se connecter et d'administrer uniquement le moteur relationnel SQL Server 2005. Il permet pour le moteur relationnel de développer des scripts TSQL.

SQL Server Business Intelligence Development Studio[modifier | modifier le code]

Tout comme SSMS, cet outil est fourni avec les versions payantes de SQL Server 2005. Il s'agit de l'outil de développement Microsoft Visual Studio 2005 adapté pour la création de projets Analysis Services, Integration Services ou Reporting Services. Tous ces projets se retrouvent dans le groupe "Projets Business Intelligence".

Entreprise manager[modifier | modifier le code]

Jusqu'à la version 2000, cet outil sert à gérer la base de données de façon entièrement graphique. Il permet en outre d'accéder et de configurer tous les outils annexes de SQL Server. À partir de la version 2005, il est remplacé par SQL Server Management Studio.

Query Analyzer (Analyseur de requête)[modifier | modifier le code]

Il s'agit d'un outil (fourni jusqu'à la version 2000) permettant d'exécuter des requêtes sur un serveur SQL. Il permet aussi d'analyser le fonctionnement des requêtes pour optimiser la requête elle-même ou la base de données qu'elle interroge. À partir de la version 2005, les fonctionnalités de cet outil sont intégrées à SQL Server Management Studio.

Profiler (générateur de profil)[modifier | modifier le code]

Cet outil permet de capturer l'activité d'une base de données. Il permet aux administrateurs de vérifier les éléments et les requêtes qui prennent du temps sur la base de données. Éventuellement, il est possible de rejouer la capture sur un serveur de test.

Services et moteurs[modifier | modifier le code]

SQL Server[modifier | modifier le code]

Il s'agit du moteur de bases de données. À chaque instance de SQL Server correspond un service Windows Sql Server. Ce service peut être repéré dans les services Windows sous les noms MSSQL$Nom_instance pour les instances nommées et MSSQLServer pour l'instance par défaut.

Chaque instance créée possède au départ 4 à 6 bases de données systèmes. Le moteur SQL Server s'appuie sur la base de données système master qui contient la définition des autres bases de données.

Les autres bases systèmes sont :

  • msdb : utilisée par l'agent SQL Server, la réplication, Data Transformation Services, Integration Services...
  • model : utilisée comme modèle pour créer de nouvelles bases de données. Toute nouvelle base de données est une copie de celle-ci.
  • tempdb : Base de données temporaire, elle sert à stocker les données temporaires créées par des utilisateurs ou générées par des curseurs, des créations d'index, lors d'un tri volumineux. Sous SQL Server 2005, elle contient aussi les versions d'enregistrement générées par les niveaux d'isolation SNAPSHOT, le contenu des pseudo tables inserted et deleted utilisées dans les triggers et celles générées par les opérations d'index en ligne. Cette base de données système est systématiquement vidée au démarrage du service SQL Server.
  • distribution : N'est présente que dans le cadre d'une réplication si votre serveur joue le rôle du distributeur.
  • mssqlsystemresource : Présente uniquement à partir de SQL Server 2005. Elle n'est pas accessible directement, et elle contient tous les objets systèmes (hors tables).

SQL Server Agent[modifier | modifier le code]

Il s'agit de l'agent de maintenance de l'instance de SQL Server. À chaque instance de SQL Server correspond un service Windows Sql Server Agent. Ce service peut être repéré dans les services Windows sous les noms SQLAgent$Nom_instance pour les instances nommées et SQLAgent pour l'instance par défaut. Le moteur SQL Server Agent s'appuie sur la base msdb. Ce moteur permet de gérer les sauvegardes, les plans de maintenance, les travaux planifiés, la surveillance de la base, les alertes administratives...

L'Agent a aussi comme rôle la surveillance du service de SQL Server et le déclenchement automatique du redémarrage de celui-ci en cas d'arrêt inattendu.

Full Text Search[modifier | modifier le code]

Moteur d'index / recherche de texte intégral.

Distributed Transaction Coordinator[modifier | modifier le code]

Connu aussi sous le nom de MS DTC, sert a gérer les transactions distribuées. C’est-à-dire les transactions entre plusieurs serveurs de transactions SQL Server, entre un serveur SQL Server et des serveurs de base de données autres, entre plusieurs sources de données différentes, qu'ils soient des moteurs de base de données ou de simples composants.

Notification Services[modifier | modifier le code]

Service apparu sous SQL Server 2000 permet de requêter régulièrement la base de données et en fonction de ces requêtes de notifier des groupes abonnés à ces évènements. Ce service n'est plus fourni en Standard depuis SQL Server 2008. SQL Server nom de code Denali, apporte néanmoins une fonctionnalités similaire dans SQL Server Reporting Services et SHarepoint 2010, connu sous le nom d'Alerting.

Décisionnel[modifier | modifier le code]

La plate-forme décisionnelle SQL Server se compose d'un ETL, apparu avec SQL 7, d'un moteur multidimensionnel, également apparu sous SQL 7 et d'un moteur de rapports, ajouté en 2004 sous SQL 2000. Avec la version SQL Server 2005, un studio de développement destiné au métier du décisionnel a été intégré dans Visual Studio 2005 : BI development Studio.

Cartographie[modifier | modifier le code]

SQL Server 2008 supporte de nouveau type de données primitives : le type géographique où intervient une projection (latitudes et les longitudes) et le type géométrique sans projection pour manipuler les données relatives aux points, aux lignes et aux polygones. Le premier logiciel compatible SQL Server a été le logiciel Manifold System puis Mapinfo, Geomédia.

Data Transformation Services[modifier | modifier le code]

Il s'agit d'un outil à part entière qui n'est commercialisé qu'avec SQL Server. Il s'agit d'un outil d'ETL complet. Il permet de transférer des données depuis et vers n'importe quelle base de données pour laquelle des drivers OLE-DB ou ODBC ont été installés sur la machine qui héberge le programme.

Il peut s'appuyer sur msdb, mais il est possible de générer avec l'aide de Visual Basic des programmes indépendants qui tourneront sur un ordinateur ne disposant pas de SQL Server. Il possède également son propre mode de stockage structuré.

Au départ certaines sociétés n'ont fait l'acquisition de SQL Server que pour pouvoir utiliser cet outil. Disposant de licences SQL Server elles s'en sont servies pour faire fonctionner leurs bases de données. Ceci a permis à SQL Server de se créer un marché et de concurrencer Oracle

Integration Services[modifier | modifier le code]

Service apparu sous SQL Server 2005, il est le remplaçant de Data Transformation Services. L'ETL a été complètement reconstruit, et se positionne en concurrence des autres outils ETL professionnels du marché. L'objectif est l'intégration de l'entreprise par ses données. Microsoft SQL Server 2005 Integration Services (SSIS) est une plate-forme complète d'intégration de données. Il est important de comprendre que Microsoft SQL Server 2005 Integration Services n’est pas simplement un outil d’extraction, de transformation et de chargement (ETL). C’est une plate-forme complète d’intégration de données, offrant un certain nombre d’outils graphiques de développement et de gestion, de services, d’objets programmables et d’interfaces API (Application Programming Interfaces). SSIS contient un moteur de workflow prenant en charge une logique complexe et peut être utilisé pour un large éventail d’opérations de maintenance de base de données et d’opérations sophistiquées de transfert de données. L’architecture SSIS est essentiellement composée de deux parties : le moteur d’exécution de transformation de données, qui gère le flux de contrôle d’un package, et le moteur de flux de données ou moteur de pipeline de transformation de données, qui gère le flux des données à partir des sources de données, via les transformations et jusqu’aux cibles de destination.

Analysis Services[modifier | modifier le code]

SQL Server Analysis Services (SSAS)[1],[2] est un service apparu sous SQL Server 7, connu à cette époque sous le nom de OLAP Services. Il permet de générer des cubes OLAP, données agrégées et multidimensionnelles. Il permet également d'implémenter des algorithmes de Data Mining.

Reporting Services[modifier | modifier le code]

Ce service[3] apparu sous SQL Server 2000 est un moteur de génération d'états. Deux services web le composent, l'un permettant son administration, l'autre la génération, l'abonnement, le rendu des rapports. Les rendus se font sous Excel, PDF, HTML, et Word (à partir de la version 2008).

Editions[modifier | modifier le code]

Datacenter Edition[modifier | modifier le code]

Apparue avec SQL Server 2008 R2, elle supportera jusqu'à 256 processeurs logiques, ainsi que la virtualisation illimitée et une quantité de mémoire illimitée.

Enterprise Edition[modifier | modifier le code]

Elle supporte un nombre de processeurs et une taille de mémoire vive illimités (limités par le système d'exploitation). Il existe une version 32 bits (x86) et 2 versions 64 bits (ia64 et x64, x64 uniquement pour SQL Server 2005) et n'a pas de limite quant à la taille des bases de données. Elle ne peut s'installer que sur un Windows version serveur. Inclut toutes des fonctionnalités du moteur, dont les fonctions de haute disponibilité. Les fonctionnalités pour le décisionnel sont toutes incluses de la génération d'états avec Reporting Services à l'utilisation de cubes OLAP avec Analysis Services en passant par le transfert de données avec Integration Services (SQL Server 2005) ou Data Transformation Services (SQL Server 7 & 2000). Elle peut en outre fonctionner en cluster jusqu'à 8 nœuds.

Developer Edition[modifier | modifier le code]

Il s'agit d'une édition pour les développeurs qui dispose des mêmes fonctionnalités que l'édition Entreprise. Cependant la licence contient des restrictions quant à son utilisation. La licence interdit une exploitation en production. Elle est exclusivement destinée à une utilisation en Test. Cependant il n'y a aucune restriction sur les produits disponibles.

Standard Edition[modifier | modifier le code]

Elle supporte jusqu'à 4 processeurs et une taille de mémoire vive illimitée (limitée par le système d'exploitation). Il existe une version 32 bits (x86) et 2 versions 64 bits (ia64 et x64, les deux uniquement pour SQL Server 2005) et n'a pas de limite quant à la taille des bases de données. Elle ne peut s'installer que sur un Windows version serveur. Cependant SQL Server 2005 permet son installation sur Windows de bureau. Inclus toutes des fonctionnalités du moteur, sauf certaines fonctions de haute disponibilité. Les fonctionnalités pour le décisionnel sont toutes incluses de la génération d'états avec Reporting Services (pour SQL Server 2000, ce composant est à charger séparément) à l'utilisation de cubes OLAP avec Analysis Services en passant par le transfert de données avec Integration Services (SQL Server 2005) ou Data Transformation Services (SQL Server 7 & 2000). Elle peut en outre fonctionner en cluster jusqu'à 2 nœuds depuis sa version 2005.

Workgroup Edition[modifier | modifier le code]

Nouvelle édition apparue avec SQL Server 2005. Elle supporte jusqu'à 2 processeurs et 3 Go de mémoire vive. Pour le moment, elle n'existe qu'en version 32 bits et n'a pas de limite quant à la taille des bases de données. Inclus la majeure partie des fonctionnalités du moteur, dont la possibilité de participer à une réplication en tant qu'éditeur. Les fonctionnalités pour le décisionnel incluses se limitent à la génération d'états avec Reporting Services. Cette édition disparaît avec la version 2012 de SQL Server[4].

Web Edition[modifier | modifier le code]

Nouvelle édition apparue sous SQL Server 2008. Proche de l'édition Standard en termes de fonctionnalité, elle ne supporte cependant ni la mise en miroir, ni les composant décisionnel de SQL Server. Sa licence ne permet son utilisation que comme serveur de base de données pour un site ou service Web. Elle est disponible en abonnement mensuel spécialement pour les herbergeurs en plus d'être disponible plus classiquement à l'achat.

Personal Edition[modifier | modifier le code]

Édition existant avec SQL Server 7 et SQL Server 2000. Elle supporte jusqu'à deux processeurs et 2 Go de mémoire vive. N'existe qu'en version 32 bits et n'a pas de limite quant à la taille des bases de données. Inclut la majeure partie des fonctionnalités du moteur, dont la possibilité de participer à une réplication en tant qu'abonné. Elle n'a pas de fonctionnalités pour le décisionnel. En termes de licence, le fait de posséder une licence d'accès client (CAL) SQL Server suffit à utiliser cette édition.

Windows Internal Database / SQL Server Embedded[modifier | modifier le code]

Similaire à SQL Server edition Express, avec cependant les limites de mémoire, de nombre de processeurs et de taille de base de données supprimés, elle est cependant utilisable que localement et ne peut héberger que des bases de données d'application Microsoft. Des produits tels que Sharepoint ou certaines fonctionnalités Active Directory de Windows s'en servent.

MSDE / Express Edition[modifier | modifier le code]

Article détaillé : MSDE.

Microsoft a édité une édition gratuite composée uniquement du moteur de base de données relationnel, bridé à 4 Go d'espace disque (10 Go dans la version 2008 R2). Elle permet, néanmoins de créer jusqu'à 32760 bases différentes soit plus de 320 To de données à partir de la version 2008 R2.

Compact Edition[modifier | modifier le code]

Appelée auparavant : Pocket PC / Mobile / Everywhere Edition. Il s'agit d'une édition légère adaptée à l'utilisation sur des PDA ou smartphones munis de Windows Mobile. La version Compact (version 3.5), qui succède aux éditions Mobile s'ouvre elle aux postes de travail classiques à base de Windows. Cette édition peut participer à une réplication en tant qu'abonné.

Licences[modifier | modifier le code]

SQL Server supporte 4 systèmes de licences :

  • Licence par utilisateur : SQL Server peut utiliser tous les processeurs du serveur (jusqu'à la version 2008 R2, maximum 16 (édition Standard) ou 20 (édition Entreprise) Cores dans la version 2012) mais est limité au nombre d'utilisateurs spécifié. Chaque personne physique se servant d'une application utilisant SQL Server est considéré comme un utilisateur de la base de données
  • Licence par périphérique (depuis SQL Server 2005) : SQL Server peut utiliser tous les processeurs du serveur (jusqu'à la version 2008 R2, maximum 16 (édition Standard) ou 20 (édition Entreprise) Cores dans la version 2012) mais est limité au nombre de périphériques spécifié. Chaque périphérique physique accedant directement ou indirectement à SQL Server est considéré comme un utilisateur de la base de données
  • Licence par processeur : SQL Server utilise le nombre de processeurs spécifiés dans la licence et peut accepter un nombre indéfini d'utilisateurs. Ce mode de licence est valable jusqu'à l'édition 2008 R2 et disparaît après.
  • Licence par cœur : Il faut acheter autant de licences "Core" qu'il n'y a de cœur dans le serveur ou dans la machine virtuelle. Le nombre d'utilisateurs est illimité. Ce mode de licence n'est valable qu'à partir de l'édition 2012[4].

Le seul type de licence envisageable pour une utilisation de SQL Server derrière un frontal Web est la licence Processeur / Cœur.

Voir aussi[modifier | modifier le code]

Article connexe[modifier | modifier le code]

Références[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Sur les autres projets Wikimedia :