5 - InterBase 5.0
Transactions distribuées et validation automatique en deux phases |
Documentation InterBase 6.0 |
InterBase est un système de gestion de bases de données relationnelles complet, implémenté sous forme d'une architecture client/serveur à deux niveaux : une application client et une technologie serveur offrant un support transparent au travers de réseaux hétérogènes. Cette architecture flexible permet d'intégrer le moteur de base de données InterBase à une application verticale.
Les fonctionnalités de serveur actif d'InterBase se prêtent elles-mêmes aux opérations automatiques, de sorte que nous n'avons pas besoin d'administrateur dédié à la base de données. InterBase est de loin le serveur SGBDR le plus simple d'emploi.
L'intégration d'InterBase aux meilleurs outils de développement client/serveur et son implémentation des standards de l'industrie en font le choix idéal pour le développeur d'applications intégrées et orientées données.
InterBase a été le pionnier du concept de serveur actif, qui permet à la base de données elle-même de contenir les règles de gestion et de fonctionner comme gestionnaire central d'accès simultanés pour de nombreux clients. Voici les fonctionnalités d'InterBase qui supportent le concept de serveur actif :
• L'analyseur SQL est sur le serveur.
• Des déclencheurs côté serveur automatisent les règles de gestion.
• Des procédures stockées SQL implémentent sur le serveur des opérations de bases de données partagées, modulaires et respectant la sécurité.
• Des fonctions définies par l'utilisateur (UDF) élargissent le langage SQL.
• Des alerteurs d'événements informent les clients des modifications de la base de données.
• Le serveur maintient l'intégrité des données selon des règles d'intégrité référentielle déclarative avec des opérations en cascade.
• Les domaines et les contraintes enrichissent les types SQL.
• La validation (commit) en deux phases stabilise les transactions multibases de données distribuées.
InterBase implémente son interface de développement et sa technologie via une variété de configurations de plates-formes, assurant des fonctionnalités identiques. Cela garantit l'interopérabilité transparente des plates-formes hétérogènes et une migration en douceur lorsque les bases de données sont portées de la station de travail vers le serveur d'un groupe de travail ou d'un département. Les plates-formes supportées par InterBase 5.0 sont :
En outre, les plates-formes suivantes sont supportées par InterBase 4.0 et peuvent l'être en passant aux versions 5.x d'InterBase :
InterBase occupe un très faible encombrement, ce qui permet au logiciel de fonctionner aussi bien sur de modestes plates-formes que sur des serveurs milieu de gamme. L'installation minimale requiert moins de 3 méga-octets d'espace disque, alors que l'installation complète, avec tous les exemples et la documentation en ligne, nécessite moins de 20 méga-octets. Le serveur InterBase gère sans problème jusqu'à 150 clients simultanés.
InterBase 5.0 comprend une installation client/serveur pour une des plates-formes ci-dessus et une bibliothèque client Windows 32 bits. Le client et le serveur peuvent communiquer par le biais des protocoles réseau suivants :
· TCP/IP (tous les serveurs)
· IPX/SPX (serveur Novell NetWare seulement)
· NetBEUI/Named pipes (serveur Windows NT seulement)
Une plate-forme client quelconque peut communiquer de façon transparente avec n'importe quelle plate-forme serveur.
La bibliothèque client fournit une API pour que les applications client puissent soumettre des requêtes à InterBase et récupérer des données lorsqu'InterBase fonctionne sur un serveur NT, UNIX ou NetWare. La bibliothèque client implémente un protocole spécial, optimisé pour le réseau, pour communiquer avec le service InterBase distant. Les outils Inprise fournissent un accès transparent à la bibliothèque client InterBase via le BDE (Borland Database Engine).
InterBase pour Windows peut également être exécuté comme un moteur de bases de données locale, autonome, incorporé dans une application Windows. Cette configuration est appelée serveur InterBase local. Elle ne fait appel à aucun protocole réseau ; à la place, la bibliothèque client communique avec InterBase local par le biais d'une communication locale interprocessus.
InterBase implémente le niveau de base du standard SQL-92, ainsi que de nombreuses fonctionnalités issues du niveau intermédiaire et des fonctionnalités sélectionnées dans le niveau complet. InterBase possède le statut de membre votant dans le comité des standards ANSI SQL, H4. Les fonctionnalités SQL notables sont :
· Intégrité référentielle déclarative avec des règles d'opérations en cascade
· Rôles SQL pour offrir des privilèges de sécurité à des groupes d'utilisateurs
· Syntaxe SQL-92 pour les clauses JOIN internes et externes
· Vues sur les tables et les jointures
Des fonctionnalités d'InterBase avancées, comme les procédure stockées, ont servi de modèle au standard SQL-3 pour les objets de base de données. Les extensions notables à SQL implémentées dans InterBase sont :
Fonctionnalité |
Description |
Procédures stockées |
Modularise les opérations de bases de données complexes |
Procédures select |
Renvoie les ensembles de résultats des requêtes |
Définitions de domaines |
Etend les types SQL de base |
Déclencheurs |
Automatise les règles de gestion |
Générateurs |
Implémente l'incrémentation automatique des valeurs entières |
Toutes les opérations de bases de données dans InterBase surviennent dans le contexte d'une transaction, comme dans tous les SGBDR complets. La transaction fournit un mécanisme pour isoler les modifications faites par une ou plusieurs opérations jusqu'à ce que l'application client valide (commit) la transaction. Cela se traduit également par la possibilité d'annuler (rollback) la transaction, ce qui annule toutes les modifications faites par les opérations qui sont dans le contexte de cette transaction.
Une application client peut supporter un nombre quelconque de transactions simultanées actives avec une base de données. Chacune a son propre contexte et sa propre opportunité de validation ou d'annulation. Cette possibilité de plusieurs transactions simultanées pour chaque client est caractéristique d'InterBase.
Non seulement une base de données peut avoir plusieurs transactions d'un seul client, mais InterBase permet à un client d'avoir une seule transaction qui opère sur plusieurs bases de données, pouvant même résider sur des serveurs distincts. La bibliothèque client InterBase gère de façon transparente toute cette "comptabilité". Si l'application client est connectée à plusieurs bases de données, lorsqu'elle lance une transaction, celle-ci est automatiquement définie en tant que transaction distribuée. D'une certaine façon, c'est une transaction virtuelle, correspondant à une vrai transaction pour chacune des bases de données. Le client InterBase garde la trace de tout cela, ce qui permet au développeur de l'application de maintenir une vue identique à celle d'une transaction distribuée. Aucune programmation particulière n'est requise.
Lorsque vous validez ou annulez une transaction distribuée, la bibliothèque client doit s'assurer que toutes les transactions sont résolues de la même façon. Le but d'une transaction est de maintenir un contexte atomique pour les opérations de bases de données, et il serait fatal pour cette intégrité de permettre à une transaction distribuée d'être validée dans une base de données pendant que la validation échoue dans une autre. InterBase réalise cela en utilisant un processus de validation en deux phases. Pour chaque base de données, la transaction est préparée pour la validation (ou éventuellement pour l'annulation). Une fois que toutes les transactions sont marquées préparées, une deuxième phase les fait passer de préparées en validées (ou annulées). Ce mécanisme est encore une fois transparent pour le développeur de l'application ; aucun code particulier n'est requis.
L'architecture MGA (Multi-Generational Architecture) unique d'InterBase, appelée aussi versioning, autorise de nombreux accès client simultanés à un serveur InterBase et de gros débits. De plus, la façon dont InterBase stocke plusieurs versions d'un enregistrement de données signifie que chaque client a une vision cohérente de la base de données. Un client peut mettre à jour les données sans interférer avec la vue des données qu'ont les autres clients. Ces fonctionnalités aboutissent à une technologie de SGBD convenant parfaitement à la gestion des transaction courtes, fréquentes dans le modèle OLTP, ainsi que des transactions de longue durée de type OLAP.
Le serveur implémente de vrais verrous de bas niveau, en utilisant la stratégie du verrouillage optimiste. Un nombre quelconque de clients peuvent partager l'accès simultané en lecture à un enregistrement ; le conflit se produit seulement quand deux clients tentent de mettre à jour le même enregistrement. Dans ce cas, le client qui avait lancé l'opération de mise à jour le premier a la possibilité de la valider et le serveur renvoie une erreur à l'autre ou aux autres clients.
La combinaison du versioning et du verrouillage de bas niveau donne à InterBase des capacités de simultanéité et de débit exceptionnelles, comparées aux implémentations de SGBD utilisant les verrous au niveau de la page ou les verrous exclusifs en lecture. Les accès en lecture ne bloquent jamais les accès en écriture, et les accès en écriture ne bloquent jamais les accès en lecture.
InterBase gère à la fois le versioning et le verrouillage de façon transparente et automatique pour l'application. Cela libère le développeur du contrôle manuel du verrouillage obligatoire dans d'autres SGBDR. De nombreux paramètres facultatifs pour les transactions permettent aux développeurs d'adopter une autre politique de verrouillage.
InterBase a inventé l'implémentation d'un type de données à taille et contenu variables, le type Blob. Les blobs peuvent occuper plusieurs giga-octets. Les applications peuvent manipuler les blobs volumineux segment par segment afin d'éviter la surcharge des ressources du client sur le réseau. Nous pouvons assigner aux colonnes des blobs des sous-types définis par l'utilisateur, pour identifier et différencier des types particulier de données structurées et les stocker dans les blobs non structurés.
Les types de tableaux d'InterBase sont liés aux blobs. Nous pouvons concevoir dans la base de données une colonne contenant un tableau multi-dimensionnel de type SQL standard, et utiliser des instructions SQL pour interroger le contenu des tableaux. Un tableau InterBase est implémenté comme un blob structuré, ce qui lui permet d'avoir une taille quasi illimitée.
Nous pouvons augmenter les fonctionnalités du serveur InterBase en ajoutant nos propres modules compilés et en utilisant des fonctions dans les requêtes et dans les procédures stockées. Le code compilé écrit en C, C++ ou Delphi, dans une bibliothèque partagée (UNIX) ou dans une DLL (Windows), place la bibliothèque sur le serveur de bases de données et définit le point d'entrée de la fonction dans la définition de la base de donnée. Nous pouvons alors appeler les fonctions de la bibliothèque par SQL. InterBase nous permet d'ajouter un nombre quelconque de bibliothèques de UDF sur un serveur (nombre limité seulement par le système d'exploitation) et de les utiliser simultanément.
Les filtres Blob sont également une extension compilée du serveur. La fonction des filtres Blob est de convertir un sous-type Blob en un autre. Pour chaque combinaison de deux sous-types Blob, nous pouvons définir une fonction dans une bibliothèque compilée, conçue pour convertir les données d'un format structuré en un autre. Par exemple, nous pouvons définir un sous-type Blob pour qu'il contienne une image au format GIF et un autre sous-type pour un fichier JPEG. Nous pouvons programmer un filtre Blob convertissant les données d'un format dans un autre, et quand nous copions le contenu d'une colonne du Blob dans celle d'une autre base de données, le serveur appelle automatiquement le filtre Blob pour effectuer la conversion.
InterBase comprend un optimiseur de requêtes SQL sophistiqué côté serveur. En se basant sur un algorithme d'analyse des coûts, le serveur InterBase essaie de faire le meilleur usage des index définis dans des tables de bases de données, pour effectuer les recherches et les tris des clauses SQL JOIN, DISTINCT, ORDER BY et GROUP BY, et pour exécuter la requête de la façon la plus efficace possible.
Le serveur actif peut fournir des applications client avec la notification des événements de bases de données définis par l'utilisateur. Les applications client indiquent l'intérêt pour un événement en mémorisant son nom. L'événement est envoyé par l'instruction POST dans le code d'un déclencheur ou d'une procédure stockée. Tout client qui a déclaré un intérêt pour cet événement est immédiatement prévenu par le serveur. Il existe des mécanismes pour que les clients attendent l'événement (notification synchrone), ou bien poursuivent le traitement et soient prévenus par une fonction de rappel (notification asynchrone).
InterBase autorise les accès pour effectuer des opérations sur les données en accordant des privilèges SQL standard aux noms d'utilisateur. Ces noms d'utilisateur sont définis par serveur et stockés dans une base de données InterBase spéciale. InterBase supporte également les Rôles SQL, un mécanisme pour constituer des groupes d'utilisateurs auxquels on peut accorder des privilèges.
Sur les serveurs UNIX, InterBase s'intègre au système d'exploitation en permettant d'accorder des privilèges SQL aux noms d'utilisateur et aux noms de groupe UNIX, en plus des utilisateurs définis spécifiquement pour InterBase.
InterBase stocke désormais de nombreux jeux de caractères internationaux et utilise leur ordre de tri respectif, ainsi que le standard UNICODE-FSS. Cela confère à InterBase une capacité remarquable à supporter les applications de bases de données internationales. Des jeux de caractères et des ordres de tri peuvent être définis au niveau de la base de données toute entière ou au niveau d'une table. En outre, l'ordre de tri peut être spécifié pour une requête, au moment voulu. Le serveur envoie les données au client, et c'est l'application client qui se charge de les afficher de la façon appropriée.
Le moteur de bases de données Inprise (BDE) intègre InterBase à Delphi, C++Builder, IntraBuilder et Visual dBase, qui sont les meilleurs outils de développement visuel pour Windows. Les contrôles orientés données, qui font partie de la technologie RAD d’Inprise, sont directement intégrés au méthodes d'accès aux bases de données du BDE.
InterBase est livré avec les versions Professionnelle et Client/Serveur des outils Inprise. Cela permet d'offrir une solution complète aux développeurs de logiciels client/serveur qui utilisent les outils Inprise.
InterBase 5.0 pour Windows comprend un pilote ODBC 32 bits personnalisé de Visigenic Software, Inc. Ainsi, toute application de gestion qui utilise des sources de données ODBC peut accéder à une base de données InterBase. Ce pilote est conforme au standard ODBC 2.5.
InterBase version 6.0
Vous abordez InterBase parce que
Historique
Que ce soit pour l'une ou l'autre de ces raisons, vous serez intéressé d'apprendre qu'InterBase est né des travaux d'un développeur de Rdb de DEC, Jim Starkey. Souhaitant plus de liberté dans l'évolution de son produit, il créa et dirigea InterBase Inc. Ashton-Tate acheta la société. Et quand Borland racheta cette dernière, elle devint propriétaire d'InterBase. Plus récemment Borland/Inprise fit d'InterBase une entité autonome et décide l'été 2000 de mettre InterBase en Open Source.
Aujourd'hui, InterBase est donc soutenue d'une part au sein de Source Forge® ou d' IBPoenix, d'autre part par Inprise. Bien que le produit soit devenu libre de droit d'usage et de diffusion, Borland/Inprise continuera de certifier et de vendre InterBase. C'est une garantie pour ceux qui ne veulent ou ne peuvent prendre le temps de valider les innovations proposées par l'Open Source. Tandis que pour ceux qui adoptent la version Open Source, la présence de Borland/Inprise est une garantie de convergence et d'intégration du produit. Début Octobre 2000, la version vendue est la 5.5, la version en Open Source la 6.01 . La présence simultanée d'un groupe d'initiatives Open Source et d'un acteur commercial est le meilleur modèle de développement d'un progiciel. Loin de s'opposer, ils s'appuient l'un sur l'autre et se renforcent. (C'est d'ailleurs le modèle que Linux est en train d'adopter).
Ce qu'il vous faut
Dans le cadre de cet article, nous allons explorer la version Open Source. Pour la mettre en œuvre avec les outils de base que sont InterBase Express et IBConsole, vous devez avoir Delphi 5 Pro ou Entreprise, auquel vous aurez appliqué la mise à jour (dans le cas ou vous en seriez restés à la version d'origine car la mise à jour est indispensable pour utiliser la dernière version d'InterBase Express).
Evidemment, il vous faut aussi InterBase 6.01 que vous pouvez télécharger à partir du site de Borland.
Installation
Pour installer InterBase sur votre poste de travail, exécutez le fichier IBWin32.exe :
En fin d'installation, vous devez rebooter.
Vous apercevrez alors InterBase Guardian en bas à droite de la barre des tâches.
Installez ensuite les dernières versions des composants InterBase Express et IBConsole.
Ouvrez IBConsole (à partir de Démarrer/Programmes/Interbase 6.0/IBConsole),
et enregistrez le serveur local par le menu Server/Register
Le mot de passe est masterkey (en minuscules).
Cliquez sur Ok. L'icône Local Server doit apparaître maintenant dans le volet gauche de l'explorer.
Création d'une database
Toutes les tables, index et autres éléments sont rassemblés en un seul fichier database. L'extension usuelle est .gdb Vous pouvez créer autant de database que vous le souhaitez. Généralement un programme accèdera à une database dans laquelle se trouvent les tables et les index liés. Cliquez sur Local Server. Par menu Server/Login, ouvrez une connexion avec le serveur. (le mot de passe est bien entendu masterkey).
La connexion étant ouverte, vous voyez apparaître Databases dans le volet gauche. Par menu Database/CreateDatabase, ouvrez le panneau de création de la database.
Indiquez le nom d'alias, ainsi que le nom du fichier (avec l'extension .gdb)
Cliquez sur Ok. Votre database est créée.
Par la suite, lorsque vous réouvrirez IBConsole, vous double-cliquez directement Local Server, puis MyInitialDatabase.
Par menu Database/Properties, puis onglet General, mettez l'option Forced Writes à Enabled.
Cliquez sur Ok.
De retour dans l'explorer d'IBConsole, vous voyez les différentes composantes d'une database :
Intéressons-nous à la principale de ces composantes : la table.
Création d'une table
Vous pouvez créer votre première table directement
à partir d'IBConsole.
Par menu Tools/Interactive SQL, saisissez la commande suivante :
CREATE TABLE MaTable
(
Pk_Numero INTEGER NOT NULL,
Nom VARCHAR(30),
Telephone CHAR(16),
DateAppel TIMESTAMP,
Rappeler CHAR(1),
Montant NUMERIC(18,4),
CONSTRAINT Pk_Numero PRIMARY KEY (Pk_Numero)
)
puis exécutez la par Query/Execute. Votre
première table est crée.
Fermez le panneau Interactive SQL. Pour ne voir que votre table dans la liste,
décochez View/System Data.
Double-cliquez sur MATABLE. Vous voyez la structure de votre table. L'onglet
Metadata vous montre l'ordre SQL régénéré automatiquement par IBConsole à partir
de la structure de la table. Enfin, l'onglet Data vous permet de saisir des
données.
Vous êtes devant une DBGrid. Voyons maintenant comment intégrer une table dans un programme Delphi.
Programme Delphi
Créez un projet Delphi. Ajoutez un Module de données (DataModule). A partir de l'onglet InterBase Express de la palette de composants,
déposez les composants IBX suivants et un composant TDataSource à partir de l'onglet AccèsBD.
.
Modifiez les propriétés suivantes :
Composant |
Propriétés |
Valeur |
IBDatabase1 |
DatabaseName |
C:\Program Files\Borland\Delphi5\Projects\Data\Initial.gdb |
IBDatabase1 |
DefaultTransaction |
IBTransaction1 |
IBDatabase1 |
SQLDialect |
3 |
IBTransaction1 |
DefaultDatabase |
IBDatabase1 |
IBQuery1 |
Database |
IBDatabase1 |
IBQuery1 |
SQL |
SELECT * FROM MATABLE |
DataSource1 |
DataSet |
IBQuery1 |
Sur la Form1, placez à partir de l'onglet
ContrôleDB, un composant DBNavigator et un composant DBGrid.
Faites F12 pour afficher le code de la Form1. Dans la liste des uses, ajoutez Unit2.
Puis F12 pour revenir sur la Form. Mettez les propriétés suivantes :
Composant |
Propriétés |
Valeur |
DBNavigator |
Align |
alBottom |
DBNavigator |
DataSource |
DataModule1.DataSource1 |
DBGrid |
Align |
alClient |
DBGrid |
DataSource |
DataModule1.DataSource1 |
Dans DataModule1, mettez la propriété Active à True successivement pour IBDatabase, IBTransaction et IBQuery.
Vous devez voir les données saisies précédemment. Compilez, éxécutez.
Votre premier programme d'accès à une database InterBase est prêt!
Pour que votre programme puisse ajouter, modifier ou supprimer des données, nous allons transformer la requête statique ci-dessus en une requête dynamique : déposez sur le Module de données (DataModule), à partir de l'onglet InterBase Express le composant
Modifiez les propriétés suivantes :
Composant |
Propriétés |
Valeur |
IBQuery1 |
UpdateObject |
IBUpdateSQL1 |
IBUpdateSQL1 (1) |
DeleteSQL |
delete from MATABLE |
IBUpdateSQL1 |
InsertSQL |
insert into MATABLE |
IBUpdateSQL1 |
ModifySQL |
update MATABLE |
IBUpdateSQL1 |
RefreshSQL |
Select |
DataSource1 |
DataSet |
IBQuery1 |
(1) Dans la version Delphi 5 Entreprise, les ordres SQL de IBUpdate peuvent être générés automatiquement :
► Mettez la propriété Active de IBDatabase1
à True. Faites de même avec IBTransaction1 et IBQuery1.
► Cliquez droit sur IBUpdateSQL1 et activez l'Editeur IBUpdateSQL.
► Cliquez sur Sélectionner les clés primaires, puis sur Générer le SQL. Tous
les ordres SQL d' IBUpdateSQL1 sont alors automatiquement générés.
Compilez, Exécutez :
Votre première application InterBase fonctionne.
Pour aller plus loin
Quelques compléments à l’ IBCONSOLE un des outils d’administration d’ Interbase : voici quelques autres logiciels
Nouvelle version d'IB Expert, un outils d'administration pour
InterBase : Voir aussi IBaccess (Gratuit), IBAdmin,
IBConsole, DeZign
, Universal DBA