Le moteur de base de données Access (également appelé Office Access Connectivity Engine ou ACE et anciennement Microsoft Jet Database Engine , Microsoft JET Engine ou simplement Jet ) est un moteur de base de données sur lequel plusieurs produits Microsoft ont été construits. La première version de Jet a été développée en 1992, composée de trois modules qui pouvaient être utilisés pour manipuler une base de données.
JET signifie Joint Engine Technology . Microsoft Access et Visual Basic utilisent ou ont utilisé Jet comme moteur de base de données sous-jacent. Cependant, il a été remplacé pour une utilisation générale, d'abord par Microsoft Desktop Engine (MSDE), puis plus tard par SQL Server Express . Pour des besoins de base de données plus importants, les bases de données Jet peuvent être mises à niveau (ou, dans le jargon de Microsoft, « agrandies ») vers le produit phare de base de données SQL Server de Microsoft.
Architecture
Jet, faisant partie d'un système de gestion de base de données relationnelle (SGBDR), permet la manipulation de bases de données relationnelles . Il offre une interface unique que d'autres logiciels peuvent utiliser pour accéder aux bases de données Microsoft et fournit un support pour la sécurité, l'intégrité référentielle , le traitement des transactions , l'indexation , le verrouillage des enregistrements et des pages et la réplication des données. Dans les versions ultérieures, le moteur a été étendu pour exécuter des requêtes SQL , stocker des données de caractères au format Unicode , créer des vues de base de données et permettre la réplication bidirectionnelle avec Microsoft SQL Server.

Jet est composé de trois modules : le premier est le pilote ISAM natif de Jet , une bibliothèque de liens dynamiques (DLL) qui peut manipuler directement les fichiers de base de données Microsoft Access (MDB) à l'aide d'une API de système de fichiers (accès aléatoire). Un autre module contient les pilotes ISAM , des DLL qui permettent d'accéder à une variété de bases de données ISAM indexées , parmi lesquelles xBase , Paradox , Btrieve et FoxPro , selon la version de Jet. Le dernier module est la DLL Data Access Objects (DAO). DAO fournit une API qui permet aux programmeurs d'accéder aux bases de données JET à l'aide de n'importe quel langage de programmation.
Verrouillage
Jet permet à plusieurs utilisateurs d'accéder simultanément à la base de données. Pour éviter que ces données ne soient corrompues ou invalidées lorsque plusieurs utilisateurs tentent de modifier le même enregistrement ou la même page de la base de données, Jet utilise une politique de verrouillage. Un utilisateur unique ne peut modifier que les enregistrements de la base de données (c'est-à-dire les éléments de la base de données) auxquels il a appliqué un verrou , ce qui donne un accès exclusif à l'enregistrement jusqu'à ce que le verrou soit libéré. Dans les versions de Jet antérieures à la version 4, un modèle de verrouillage de page est utilisé, et dans Jet 4, un modèle de verrouillage d'enregistrement est utilisé. Les bases de données Microsoft sont organisées en « pages » de données, qui sont des structures de données de longueur fixe (2 Ko avant Jet 4, 4 Ko dans Jet 4). Les données sont stockées dans des « enregistrements » de longueur variable qui peuvent occuper moins ou plus d'une page. Le modèle de verrouillage de page fonctionne en verrouillant les pages, au lieu des enregistrements individuels, ce qui, bien que moins gourmand en ressources, signifie également que lorsqu'un utilisateur verrouille un enregistrement, tous les autres enregistrements de la même page sont verrouillés de manière collatérale. Par conséquent, aucun autre utilisateur ne peut accéder aux enregistrements verrouillés de manière collatérale, même si aucun utilisateur n'y accède et qu'il n'est pas nécessaire de les verrouiller. Dans Jet 4, le modèle de verrouillage des enregistrements élimine les verrous collatéraux, de sorte que chaque enregistrement qui n'est pas utilisé est disponible.
Microsoft utilise deux mécanismes de verrouillage : le verrouillage pessimiste et le verrouillage optimiste . Avec le verrouillage pessimiste, l'enregistrement ou la page est verrouillé immédiatement lorsque le verrouillage est demandé, tandis qu'avec le verrouillage optimiste, le verrouillage est retardé jusqu'à ce que l'enregistrement modifié soit enregistré. Les conflits sont moins susceptibles de se produire avec le verrouillage optimiste, car l'enregistrement n'est verrouillé que pendant une courte période. Cependant, avec le verrouillage optimiste, on ne peut pas être certain que la mise à jour réussira, car un autre utilisateur pourrait verrouiller l'enregistrement en premier. Avec le verrouillage pessimiste, la mise à jour est garantie de réussir une fois le verrou obtenu. Les autres utilisateurs doivent attendre que le verrou soit libéré pour effectuer leurs modifications. Les conflits de verrouillage, qui obligent l'utilisateur à attendre ou provoquent l'échec de la demande (généralement après un délai d'attente), sont plus courants avec le verrouillage pessimiste.
Traitement des transactions
Jet prend en charge le traitement des transactions pour les systèmes de base de données qui ont cette capacité ( les systèmes ODBC ont un traitement des transactions à un niveau, tandis que plusieurs systèmes ISAM comme Paradox ne prennent pas en charge le traitement des transactions). Une transaction est une série d'opérations effectuées sur une base de données qui doivent être effectuées ensemble - c'est ce qu'on appelle l'atomicité et c'est l'un des concepts ACID (atomicité, cohérence, isolation et durabilité), considérés comme les fonctionnalités clés du traitement des transactions d'un système de gestion de base de données . Pour que le traitement des transactions fonctionne (jusqu'à Jet 3.0), le programmeur devait commencer la transaction manuellement, effectuer les opérations nécessaires à la transaction, puis valider (enregistrer) la transaction. Jusqu'à ce que la transaction soit validée, les modifications sont effectuées uniquement en mémoire et ne sont pas réellement écrites sur le disque. [1] Les transactions présentent un certain nombre d'avantages par rapport aux mises à jour indépendantes de la base de données. L'un des principaux avantages est que les transactions peuvent être abandonnées si un problème survient pendant la transaction. Cela s'appelle l'annulation de la transaction, ou simplement l'annulation, et cela restaure l'état des enregistrements de la base de données exactement à l'état avant le début de la transaction. Les transactions permettent également de conserver l'état de la base de données de manière cohérente si une défaillance du système survient au milieu d'une séquence de mises à jour qui doivent être atomiques. Il n'y a aucune chance que seules certaines des mises à jour soient écrites dans la base de données ; soit elles réussiront toutes, soit les modifications seront annulées au redémarrage du système de base de données. Avec la politique en mémoire d'ODBC, les transactions permettent également à de nombreuses mises à jour d'un enregistrement de se produire entièrement en mémoire, avec une seule écriture coûteuse sur disque à la fin.
Les transactions implicites étaient prises en charge dans Jet 3.0. Il s'agit de transactions qui sont démarrées automatiquement après la validation de la dernière transaction dans la base de données. Les transactions implicites dans Jet se produisaient lorsqu'une instruction SQL DML était émise. Cependant, il a été constaté que cela avait un impact négatif sur les performances dans Windows 32 bits (Windows 95, Windows 98), c'est pourquoi dans Jet 3.5, Microsoft a supprimé les transactions implicites lorsque des instructions SQL DML étaient effectuées.
Intégrité des données
Jet renforce l'intégrité des entités et l'intégrité référentielle . Par défaut, Jet empêche toute modification d'un enregistrement qui brise l'intégrité référentielle, mais les bases de données Jet peuvent à la place utiliser des contraintes de propagation (mises à jour en cascade et suppressions en cascade) pour maintenir l'intégrité référentielle.
Jet prend également en charge les « règles métier » (également appelées « contraintes »), ou des règles qui s'appliquent à n'importe quelle colonne pour contrôler les données qui peuvent être placées dans la table ou la colonne . Par exemple, une règle peut être appliquée qui n'autorise pas la saisie d'une date dans une colonne date_logged antérieure à la date et à l'heure actuelles, ou une règle peut être appliquée qui oblige les utilisateurs à saisir une valeur positive dans un champ uniquement numérique.
Sécurité
L'accès aux bases de données Jet se fait au niveau de chaque utilisateur. Les informations utilisateur sont conservées dans une base de données système distincte et l'accès est contrôlé sur chaque objet du système (par exemple par table ou par requête). Dans Jet 4, Microsoft a implémenté une fonctionnalité qui permet aux administrateurs de bases de données de définir la sécurité via les commandes SQL CREATE, ADD, ALTER, DROP USER et DROP GROUP. Ces commandes sont un sous-ensemble de la norme ANSI SQL 92 et s'appliquent également aux commandes GRANT/REVOKE. Lorsque Jet 2 a été publié, la sécurité pouvait également être définie par programmation via DAO .
Requêtes
Les requêtes sont les mécanismes utilisés par Jet pour récupérer des données de la base de données. Elles peuvent être définies dans Microsoft QBE (Query By Example), via la fenêtre SQL de Microsoft Access ou via le langage Data Access Objects (DAO) d'Access Basic. Elles sont ensuite converties en instruction SQL SELECT . La requête est ensuite compilée, ce qui implique l'analyse de la requête (implique la vérification de la syntaxe et la détermination des colonnes à interroger dans la table de base de données), puis la conversion en un format d'objet de requête Jet interne, qui est ensuite tokenisé et organisé en une structure arborescente. À partir de Jet 3.0, ces requêtes sont ensuite optimisées à l'aide de la technologie d'optimisation des requêtes Microsoft Rushmore. La requête est ensuite exécutée et les résultats sont renvoyés à l'application ou à l'utilisateur qui a demandé les données.
Jet transmet les données récupérées pour la requête dans un dynaset . Il s'agit d'un ensemble de données lié de manière dynamique à la base de données. Au lieu de stocker le résultat de la requête dans une table temporaire, où les données ne peuvent pas être mises à jour directement par l'utilisateur, le dynaset permet à l'utilisateur de visualiser et de mettre à jour les données contenues dans le dynaset. Ainsi, si un professeur d'université interroge tous les étudiants qui ont reçu une distinction dans leur travail et trouve une erreur dans le dossier de cet étudiant, l'utilisateur n'aura qu'à mettre à jour les données dans le dynaset, ce qui mettra automatiquement à jour l'enregistrement de la base de données de l'étudiant sans que l'utilisateur ait besoin d'envoyer une requête de mise à jour spécifique après avoir stocké les résultats de la requête dans une table temporaire.
Histoire
Jet a été lancé en 1992 en tant que technologie d'accès aux données sous-jacente issue d'un projet de développement de produit de base de données interne de Microsoft, nom de code Cirrus. Cirrus a été développé à partir d'une version préliminaire du code Visual Basic et a été utilisé comme moteur de base de données de Microsoft Access . Tony Goodhew, qui travaillait pour Microsoft à l'époque, déclare
« Il serait raisonnable de dire que jusqu'à ce stade, Jet était davantage le nom de l'équipe chargée de travailler sur les modules du moteur de base de données d'Access plutôt qu'une équipe de composants. Pour VB [Visual Basic] 3.0, ils ont dû l'extraire d'Access et le greffer sur VB. C'est pourquoi ils ont eu tous ces problèmes Jet/ODBC dans VB 3.0. »
Jet est devenu plus compartimenté lors de la sortie d'Access 2.0 car les développeurs Access ODBC ont utilisé des parties du code Jet pour produire le pilote ODBC. Une mise à niveau a été fournie qui a permis aux utilisateurs de Visual Basic 3.0 d'utiliser la version mise à jour de Jet publiée dans Access 2.0.
Jet 2.0 a été publié sous la forme de plusieurs bibliothèques de liens dynamiques (DLL) qui ont été utilisées par des logiciels d'application , tels que la base de données Access de Microsoft. Les DLL de Windows sont des « bibliothèques » de code commun qui peuvent être utilisées par plusieurs applications. En conservant le code utilisé par plusieurs applications dans une bibliothèque commune que chacune de ces applications peut utiliser indépendamment, la maintenance du code est réduite et les fonctionnalités des applications augmentent, avec moins d'efforts de développement. Jet 2.0 comprenait trois DLL : la DLL Jet, la DLL Data Access Objects (DAO) et plusieurs DLL ISAM externes. La DLL Jet déterminait à quel type de base de données elle accédait et comment exécuter ce qui lui était demandé. Si la source de données était un fichier MDB (un format Microsoft Access), elle lisait et écrivait directement les données dans le fichier. Si la source de données était externe, elle faisait appel au pilote ODBC approprié pour exécuter sa demande. La DLL DAO était un composant que les programmeurs pouvaient utiliser pour s'interfacer avec le moteur Jet, et était principalement utilisée par les programmeurs Visual Basic et Access Basic. Les DLL ISAM étaient un ensemble de modules qui permettaient à Jet d'accéder à trois bases de données basées sur ISAM : xBase, Paradox et Btrieve. [2] Jet 2.0 a été remplacé par Jet 2.1, qui utilisait la même structure de base de données mais des stratégies de verrouillage différentes, le rendant incompatible avec Jet 2.0.
Jet 3.0 comprenait de nombreuses améliorations, notamment une nouvelle structure d'index qui réduisait la taille de stockage et le temps nécessaire à la création d'index hautement dupliqués, la suppression des verrous de lecture sur les pages d'index, un nouveau mécanisme de réutilisation des pages, une nouvelle méthode de compactage pour laquelle le compactage de la base de données entraînait le stockage des index dans un format d'index groupé, un nouveau mécanisme d'allocation de pages pour améliorer les capacités de lecture anticipée de Jet, des opérations de suppression améliorées qui accéléraient le traitement, le multithreading (trois threads étaient utilisés pour effectuer la lecture anticipée, l'écriture différée et la maintenance du cache), les transactions implicites (les utilisateurs n'avaient pas besoin de demander au moteur de démarrer manuellement et de valider les transactions dans la base de données), un nouveau moteur de tri, les valeurs longues (telles que les mémos ou les types de données binaires) étaient stockées dans des tables séparées et la mise en mémoire tampon dynamique (par laquelle le cache de Jet était alloué dynamiquement au démarrage et n'avait aucune limite et qui passait d'une politique de remplacement de tampon premier entré, premier sorti (FIFO) à une politique de remplacement de tampon le moins récemment utilisé (LRU)). Jet 3.0 permettait également la réplication de bases de données. Jet 3.0 a été remplacé par Jet 3.5, qui utilise la même structure de base de données, mais des stratégies de verrouillage différentes, le rendant incompatible avec Jet 3.0.
Jet 4.0 a acquis de nombreuses fonctionnalités et améliorations supplémentaires.
- Prise en charge du stockage de caractères Unicode , ainsi qu'une méthode de tri NT également implémentée dans la version Windows 95 ;
- Modifications apportées aux types de données pour qu'ils ressemblent davantage à ceux de SQL Server (LongText ou Memo ; Binary ; LongBinary ; Date/Time ; Real ; Float4 ; IEEESingle ; Double ; Byte ou Tinyint ; Integer ou synonymes d'Integer Smallint, Integer2 et Short ; LongInteger ou synonymes de LongInteger Int, Integer et Counter ; Currency ou Money ; Boolean et GUID) ; un nouveau type de données décimal
- Les champs de mémo peuvent désormais être indexés
- Types de données compressibles
- Améliorations SQL pour rendre Jet plus conforme à la norme ANSI SQL-92
- Sécurité plus fine ; prise en charge des vues ; prise en charge des procédures
- Invocation et terminaison (validation ou annulation) des transactions
- Création et modification de table améliorées
- Prise en charge de l'intégrité référentielle
- Contrôle de connexion (les utilisateurs connectés restent connectés, mais une fois déconnectés, ils ne peuvent pas se reconnecter et de nouvelles connexions ne peuvent pas être établies. Ceci est utile pour les administrateurs de base de données pour prendre le contrôle de la base de données)
- Une liste d'utilisateurs, qui permet aux administrateurs de déterminer qui est connecté à la base de données
- Verrouillage au niveau de l'enregistrement (les versions précédentes ne prenaient en charge que le verrouillage des pages)
- Réplication bidirectionnelle avec MS SQL Server.
Les versions de Microsoft Access d'Access 2000 à Access 2010 incluaient un « Assistant de mise à niveau » qui pouvait « mettre à niveau » une base de données Jet vers « une base de données équivalente sur SQL Server avec la même structure de table, les mêmes données et de nombreux autres attributs de la base de données d'origine ». Les rapports, les requêtes, les macros et la sécurité n'étaient pas gérés par cet outil, ce qui signifie que certaines modifications manuelles auraient pu être nécessaires si l'application dépendait fortement de ces fonctionnalités Jet.
Une version autonome du moteur de base de données Jet 4 était un composant de Microsoft Data Access Components (MDAC) et était incluse dans toutes les versions de Windows à partir de Windows 2000. Le moteur de base de données Jet n'était que 32 bits et ne fonctionnait pas nativement sous les versions 64 bits de Windows. Cela signifiait que les applications 64 bits natives (telles que les versions 64 bits de SQL Server) ne pouvaient pas accéder aux données stockées dans les fichiers MDB via ODBC, OLE DB ou tout autre moyen, sauf via un logiciel 32 bits intermédiaire (exécuté dans WoW64 ) qui agissait comme un proxy pour le client 64 bits.
À partir de la version 2007, Access inclut une version spécifique à Office de Jet, initialement appelée Office Access Connectivity Engine (ACE), mais qui s'appelle désormais Access Database Engine (cependant, les consultants MS-Access et les développeurs VBA spécialisés dans MS-Access sont plus susceptibles de l'appeler « le moteur de base de données ACE »). Ce moteur était rétrocompatible avec les versions précédentes du moteur Jet, il pouvait donc lire et écrire des fichiers (.mdb) à partir de versions antérieures d'Access. Il a introduit un nouveau format de fichier par défaut, (.accdb), qui a apporté plusieurs améliorations à Access, notamment des types de données complexes tels que les champs à valeurs multiples, le type de données de pièce jointe et le suivi de l'historique dans les champs de mémo. Il a également apporté des modifications de sécurité et des améliorations de cryptage et a permis l'intégration avec Microsoft Windows SharePoint Services 3.0 et Microsoft Office Outlook 2007. Il peut être obtenu séparément.
Le moteur de Microsoft Access 2010 ne prend plus en charge les fichiers Access 1.0, Access 2.0, Lotus 1-2-3 et Paradox. Une version 64 bits d'Access 2010 et son pilote/fournisseur ACE ont été introduits, ce qui fournit essentiellement une version 64 bits de Jet. Le pilote ne fait pas partie du système d'exploitation Windows, mais est disponible sous forme de redistribuable.
Le moteur de Microsoft Access 2013 a cessé de prendre en charge les fichiers Access 95, Access 97 et xBase, ainsi que la réplication.
La version 1608 de Microsoft Access 2016 a rétabli la prise en charge des fichiers xBase, et la version 1703 a introduit un type de données Grand nombre.
Du point de vue de la technologie d'accès aux données, Jet est considéré comme une technologie obsolète par Microsoft, mais Microsoft continue de prendre en charge ACE dans le cadre de Microsoft Access.
Compatibilité
Microsoft fournit les pilotes JET uniquement pour Microsoft Windows et la prise en charge des logiciels tiers pour les bases de données JET se trouve presque exclusivement sous Windows. Cependant, il existe des projets open source qui permettent de travailler avec des bases de données JET sur d'autres plates-formes, notamment Linux . Notamment, MDB Tools et son port Java très étendu nommé Jackcess ainsi que UCanAccess.