IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Comment faire ?
        Comment 'pomper' les données d'une base vers une autre ?
        Pourquoi lire nécessite des privilèges d'écriture sur la base de données ?
        Quel est le meilleur moyen de savoir si le serveur Firebird est actif ?
        Comment écrire des UDFs avec Delphi ?
        Comment sélectionner une ligne au hasard dans une table ?
        Comment déplacer une base de données multi-fichiers ?
        Comment migrer des fichiers Paradox, dBase ou FoxPro vers Firebird ?
        Comment empêcher le fichier firebird.log de remplir la partition du disque ?
        Comment exporter les données d'une base de données et les importer dans une autre?
        Comment extraire les métadonnées d'une base de données?
        Comment changer le dialecte d'une base de données?
        Est-il possible d'obtenir l'adresse IP du client ?
        Comment utiliser les évènements avec ZeBeDee, SSH ou stunnel?
        Comment indiquer à Firebird de n'accepter que les connexions d'un hôte XYZ ou d'un réseau ?
        Comment ouvrir une base en mode exclusif ?
        Comment obtenir une liste des tables, vues et colonnes d'une base de données Firebird ?
        Existe t-il un exemple de configuration de la valeur UdfAccess du fichier firebird.conf ?
        Y a t-il moyen d'automatiser l'exécution de SQL à partir d'une ligne de commande, d'un fichier de commandes, ou d'un script shell ?
        Existe t-il un exemple de configuration de la valeur ExternalFileAccess du fichier firebird.conf?
        Comment ré-ordonner les colonnes (champs) d'une table ?



Comment 'pomper' les données d'une base vers une autre ?
auteur : SergioMaster
Beaucoup recommandent IB Pump ou IB Data Pump, le problème est quand vous avez des relations complexes entre tables.
Dans de tel cas, il est préférable d'utiliser un outil comme FBCopy qui tri les tables selon leurs dépendances (clés étrangères, contraintes d'intégrité)
http://www.firebirdfaq.org/fbcopy.php

Comme autre alternative, vous pouvez désactiver les contraintes durant l'import puis les remettre plus tard.

Si vous voulez importer des données à partir de sources non-Firebird, alors IB DataPump est probablement la meilleure option gratuite disponible.
Il est même capable de récréer la structure d'une base de données Firebird abimée, donc vous pouvez l'utiliser comme outil de migration pour migrer à partir d'autres systèmes DBMS.

Il existe d'autres outils génériques (non spécifique à Firebird) pour pomper les données, faites au moins un essai avec
http://scriptella.javaforge.com

Si vous connaissez d'autres outils gratuits et utiles pour copier les données faites le nous savoir, merci.
traduction réalisée depuis http://www.firebirdfaq.org/faq20/


Pourquoi lire nécessite des privilèges d'écriture sur la base de données ?
auteur : SergioMaster
Pour exécuter une instruction SELECT, il est quand même nécessaire de démarrer une transaction.

Si vous voulez une base en lecture seule pour la mettre sur un média en lecture seule comme un CD ou DVD ROM, vous pouvez le faire avec :


gfix -mode read_only database.fdb
... ou avec votre outil d'administration favori.
C'est également possible via les API Services, de façon à ce que vous puissiez le faire à partir de votre application.
Prenez note que vous ne pouvez faire ce changement qu'au cours de la préparation de la base de données, car l'indicateur de lecture seule doit être écrit dans le fichier base de données.

Quand la base de données est en lecture seule, la seule chose modifiable est l'indicateur lecture seule lui-même (pour remettre la base en lecture/écriture).
Traduction réalisée depuis http://www.firebirdfaq.org/faq164/


Quel est le meilleur moyen de savoir si le serveur Firebird est actif ?
auteur : SergioMaster
Si vous voulez le faire à partir d'une application, un simple essai de connexion devrait suffire. Autrement vous avez différentes options:

  • Vérifiez que le serveur Firebird est dans la liste des programmes en cours d'exécution (utilisez le gestionnaire de tâches de Windows, ou la commande 'ps ax' sous Linux). Notez que le mode Classic ne s'exécutera pas sans une connexion établie.
  • Vérifiez que le port 3050 est ouvert sur la machine. Premièrement, vous pouvez le vérifier avec la commande netstat, et, s'il est ouvert, vous pouvez vérifier qu'il accepte des connexions via telnet-ing vers le port. tapez : telnet [hostname|IPaddress] 3050 Exemple: telnet localhost 3050 Si vous utilisez Linux, vous pouvez également vérifier l'ouverture du port avec la commande 'lsof'. Comme cette commande sort beaucoup d'informations, vous la diminuerez en utilisant 'grep' sur les chaines '3050' ou 'gds_db' : # lsof | grep gds_db # lsof | grep 3050
  • Si tout ceci échoue, peut-être devriez vous vérifier que le serveur distant est joignable pour tous. Utilisez la commande 'ping' : ping [hostname|IPaddress] Exemple: ping 192.168.0.22 Prenez note que ping peut quand même vous fournir un message 'Hôte non joignable' même s'il l'est en réalité. Cela peut être dû au pare-feu qui refuse les paquets ICMP (ping) (ceci pour empêcher certains virus de se répandre ou un scan du réseau).
Traduction réalisée depuis http://www.firebirdfaq.org/faq123/


Comment écrire des UDFs avec Delphi ?
auteur : SergioMaster
C'est relativement simple, la seule chose dont vous devez vous rappeler est que vous devez toujours utiliser ib_util_malloc() pour allouer de la mémoire si votre UDF doit renvoyer une valeur Chaîne.
L'UDF doit être alors déclarée comme FREE_IT, de façon à ce que Firebird libère la mémoire après avoir lu la chaîne.

Pour utiliser ib_util_malloc(), vous devez importer celle-ci depuis ib_util.dll dans votre programme - et vous assurez que vous l'utilisez en lieu et place des fonctions normales d'allocation mémoire.
Voici un exemple simple d'UDF Delphi :

function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

function ChangeMyString(const p: PChar): PChar; cdecl;
var
s: string;
begin
s := DoSomething(string(p));
Result := ib_util_malloc(Length(s) + 1);
StrPCopy(Result, s);
end;
Déclaration dans Firebird:

DECLARE EXTERNAL FUNCTION ChangeMyString
CString(255)
RETURNS CString(255) FREE_IT
ENTRY_POINT 'ChangeMyString' MODULE_NAME '......'
Traduction réalisée depuis http://www.firebirdfaq.org/faq83/


Comment sélectionner une ligne au hasard dans une table ?
auteur : SergioMaster
Il n'existe pas de telle implémentation dans Firebird, mais vous pouvez utiliser quelques astuces.
L'exemple suivant requière une colonne unique de type entier (en général une clé primaire):

SELECT ...liste des champs ...
FROM table t1
WHERE conditions
ORDER BY (t1.int_col + seed)*4294967291-((t1.int_col + seed)*4294967291/49157)*49157;
Si vous n'avez besoin que d'une ligne, limitez le résultat en utilisant les clauses FIRST ou ROWS.
Cette requête vous donnera toujours le même résultat pour la même valeur de la variable seed, pour un résultat différent vous devrez changer sa valeur.
Vous pourriez par exemple utiliser la valeur de int_col de la dernière exécution, ou récupérer une nouvelle valeur d'un générateur etc...
(assurez vous simplement de bien modifier la valeur de seed dans les deux endroits de l'expression).
Traduction réalisée depuis http://www.firebirdfaq.org/faq326/


Comment déplacer une base de données multi-fichiers ?
auteur : SergioMaster
Vous avez probablement l'habitude d'utiliser une base de données mono-fichier que vous pouvez déplacer comme bon vous semble.
Mais, si votre base de données est devenue trop grosse vous pourriez avoir besoin d'en faire une multi-fichiers.
Les chemins vers les fichiers secondaires sont absolus et stockés dans la page d'entête du premier fichier de la base.
Si vous avez besoin de déplacer ces fichiers, il est recommandé de faire un backup de la base suivi d'un restaure au nouvel endroit.
Cependant, si vous avez vraiment, vraiment besoin de les copier ailleurs, vous pouvez utiliser l'outil freeware GLink d'Ivan Prenosil:
http://www.volny.cz/iprenosil/interbase/ip_ib_download.htm

Traduction réalisée depuis http://www.firebirdfaq.org/faq179/


Comment migrer des fichiers Paradox, dBase ou FoxPro vers Firebird ?
auteur : SergioMaster
Le meilleur moyen est de télécharger le freeware IBDataPump de CleverComponents.
Il extraira les méta-données des bases Paradox/dBase/FoxPro, créera toutes les tables dans une base de données Firebird puis copiera toutes les données.
Vous aurez probablement une base Firebird opérationnelle en moins d'une heure.
http://www.clevercomponents.com/products/datapump/ibdatapump.asp

Traduction réalisée depuis http://www.firebirdfaq.org/faq156/


Comment empêcher le fichier firebird.log de remplir la partition du disque ?
auteur : SergioMaster
Quelques astuces :


  • Créez une tache planifiée (ou [B]cron[/B]) qui coupera ou fera tourner le fichier log. Par exemple, nous voulons traiter les fichiers de telle manière que nous ayons toujours un certain nombre de fichiers traces disponibles :

delete firebird.log.5
rename firebird.log.4 firebird.log.5
rename firebird.log.3 firebird.log.4
rename firebird.log.2 firebird.log.3
rename firebird.log.1 firebird.log.2
rename firebird.log firebird.log.1
De cette manière nous aurons toujours les 5 derniers fichiers traces, et ceux trop vieux auront été effacés.
Vous pouvez aussi utiliser zip, rar, bzip2 ou autre mode de compression pour compacter les vieux fichiers. Comme ce n'est que du texte, ils se compressent très bien.


  • Redirigez les traces vers le vide. Par exemple, sous Linux, vous pouvez le faire en créant un lien symbolique vers /dev/null au lieu du fichier normal de log :

# cd /opt/firebird<br/>
# rm -f firebird.log<br/>
# ln -s /dev/null firebird.log<br/>
Prenez note que si vous faites cela , vous n'aurez plus aucune information pour établir un diagnostic.
Il est toujours préférable d'essayer de trouver quelles sont les erreurs, ce qui les cause et de régler le problème à la source.
Traduction réalisée depuis http://www.firebirdfaq.org/faq126/


Comment exporter les données d'une base de données et les importer dans une autre?
auteur : Cl@udius
Si vos bases de données sont 'en-ligne', c'est-à-dire accessibles par le réseau, alors vous pouvez utiliser un outil gratuit tel que IB Pump ou un des outils commerciaux qui intègrent cette fonctionnalité. Sous Linux vous pouvez utiliser l'outil Open Source FBCopy:

http://www.firebirdfaq.org/fbcopy.php

Dans le cas contraire, vous devrez exporter puis réimporter vos données. La plupart des outils d'administration permettent d'exporter au format CSV, XML ou sous forme d'instructions INSERT. Vous pouvez également utiliser l'outil Open Source FBExport (disponible sous Windows et Linux) qui gèrent parfaitement les champs BLOB notamment.

http://www.firebirdfaq.org/fbexport.php

Traduction réalisée depuis http://www.firebirdfaq.org/faq86/


Comment extraire les métadonnées d'une base de données?
auteur : Cl@udius
C'est relativement simple, utiliser isql avec l'option -x ou -a. Cependant soyez prudent et effectuez tout d'abord quelques tests. Certains outils commerciaux tiers aiment bien jouer directement avec les tables systèmes, et isql n'est pas toujours capable de comprendre ce type de manipulations.

Vous pouvez également extraire les DDL avec FlameRobin. Ouvrez la page des propriétés de la base de données et sélectionnez l'option DDL en haut de la page.

Traduction réalisée depuis http://www.firebirdfaq.org/faq73/


Comment changer le dialecte d'une base de données?
auteur : Cl@udius
Bien qu'il soit possible de changer cet indicateur dans la base de données, ce n'est pas recommandé car cela ne se résume pas uniquement à cette simple opération. Les dialectes opèrent de manières différentes sur les données numériques et dates, ce qui affecte tous les objets compilés (BLR) soit les procédures stockées, déclencheurs, champs calculés, etc.
Modifier toutes ces informations à la volée est une méthode délicate, il est donc recommandé de créer une nouvelle base et d'y recopier les données. Vous pouvez facilement extraire la structure de la base de données en utilisant isql puis y ajouter les données en utilisant l'un des outils listés par ailleurs dans la FAQ.

Il n'est pas possible de modifier le dialecte en effectuant un backup/restore de la base de données.

Traduction réalisée depuis http://www.firebirdfaq.org/faq186/

lien : faq Comment extraire les métadonnées d'une base de données?
lien : faq Comment exporter les données d'une base de données et les importer dans une autre?

Est-il possible d'obtenir l'adresse IP du client ?
auteur : SergioMaster
Pour l'obtenir avec SQL, vous devrez utiliser Firebird 2.0 (propre adresse), ou Firebird 2.1 (adresse de n'importe qui):

Si vous utilisez Firebird 2.0 ou plus, sollicitez la fonction GET_RDB$CONTEXT avec les paramètres ('SYSTEM', 'CLIENT_ADDRESS').

A partir de Firebird 2.1 , vous pourrez obtenir les adresses des clients en les sélectionnant dans les tables de monitoring.

Avec Firebird 1.x vous pouvez essayer d'obtenir cette information de la pile TCP/IP, en utilisant les commandes netstat ou lsof à partir de l'invite de commande.
Recherchez le port de Firebird (3050 ou gds_db).

Traduction réalisée depuis http://www.firebirdfaq.org/faq101/


Comment utiliser les évènements avec ZeBeDee, SSH ou stunnel?
auteur : SergioMaster
Réponse courte : Vous devez pour cela utiliser le mode SuperServeur, renseignez la valeur RemoteAuxPort du fichier firebird.conf et créez deux tunnels (un pour les données, l'autre pour les évènements).

Pour des explications détaillées avec exemples, lisez ce document :
http://www.flamerobin.org/events_paper.pdf

Traduction réalisée depuis http://www.firebirdfaq.org/faq258/


Comment indiquer à Firebird de n'accepter que les connexions d'un hôte XYZ ou d'un réseau ?
auteur : SergioMaster
Ce n'est pas vraiment une chose à configurer dans Firebird.
Il existe une valeur RemoteBindAddress dans le fichier firebird.conf qui configure les interfaces/adresses que Firebird écoute, c'est tout.
Vous utiliserez plutôt le pare-feu de votre système pour mettre cela en place.

A coté du pare-feu, si vous utilisez la version Firebird mode Classic sous Linux, vous pourrez utiliser les fichiers de contrôle d'accès de xinetd ou inetd /etc/hosts.allow et /etc/hosts.deny.
Avec xinetd vous pouvez également modifier le fichier de configuration /etc/xinetd.d/firebird pour le service Firebird, et ajouter une ligne comme celle-ci :


only_from = 192.168.0.0/24

Traduction réalisée depuis http://www.firebirdfaq.org/faq148/


Comment ouvrir une base en mode exclusif ?
auteur : SergioMaster
Vous devez fermer la base (en utilisant gfix ou un autre outil).
Firebird 2.0 offre divers mode de fermeture (mono-utilisateur, connexion unique, connexion multiple, etc.).
Jetez un ?il au notes de versions de Firebird 2 pour les détails.
Traduction réalisée depuis http://www.firebirdfaq.org/faq131/


Comment obtenir une liste des tables, vues et colonnes d'une base de données Firebird ?
auteur : SergioMaster
Tables et vues sont stockées dans la table système RDB$RELATIONS.
les tables et vues systèmes ont un indicateur RDB$SYSTEM_FLAG, tandis que les tables utilisateur ont la valeur NULL ou 0.
Vous pouvez distinguer les vues des tables par la valeur du champ RDB$VIEW_BLR.
Prenez note qu'il y a aussi un champ RDB$VIEW_SOURCE qui stocke un source lisible de la vue pouvant être mis à NULL - la base de données continuera à être pleinement fonctionnelle car utilisant le BLR pré-compilé.
Voici une requête listant toutes les tables utilisateur :

SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$VIEW_BLR IS NULL
AND (RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0);
Une requête pour lister toutes les vues

SELECT RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$VIEW_BLR IS NOT NULL
AND (RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0);
Les colonnes des tables et vues sont stockées dans RDB$RELATION_FIELDS.
Cela stocke le nom, la valeur par défaut, le domaine et l'indicateur de nullité (nullifiable).
Pour obtenir le type de données vous devrez lires les informations de domaine contenues dans RDB$FIELDS.
Voici une requête qui liste toutes les tables utilisateurs avec leurs colonnes

SELECT f.RDB$RELATION_NAME, f.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS f
JOIN RDB$RELATIONS r ON f.RDB$RELATION_NAME = r.RDB$RELATION_NAME
AND r.RDB$VIEW_BLR IS NULL
AND (r.RDB$SYSTEM_FLAG IS NULL OR r.RDB$SYSTEM_FLAG = 0)
ORDER BY 1, f.RDB$FIELD_POSITION;
Traduction réalisée depuis http://www.firebirdfaq.org/faq174/


Existe t-il un exemple de configuration de la valeur UdfAccess du fichier firebird.conf ?
auteur : SergioMaster
Il en existe déjà un dans le fichier firebird.conf, mais peut-être n'est-il pas assez évident.
Voici les valeurs de base ,'None' pour interdire complètement les UDFs et 'Full' pour les permettre partout (ce que vous avez probablement compris de vous même) :

UdfAccess = None
UdfAccess = Full
Voici un moyen de réduire :

UdfAccess = Restrict C:\some\directory
Pour plusieurs répertoires , vous faites ainsi
UdfAccess = Restrict C:\some\directory;C:\some\other\directory
Pour les utilisateurs Linux
UdfAccess = Restrict /some/directory
La valeur par défaut est 'Restrict UDF', 'UDF' où UDF est le répertoire lié au répertoire principal de l'installation Firebird.
Traduction réalisée depuis http://www.firebirdfaq.org/faq203/


Y a t-il moyen d'automatiser l'exécution de SQL à partir d'une ligne de commande, d'un fichier de commandes, ou d'un script shell ?
auteur : SergioMaster
Oui. Vous pouvez utiliser ISQL pour cela. Il se trouve dans le répertoire 'bin' de votre installation Firebird.
Si vous voulez l'essayer de manière interactive (mode console) , exécuter isql, tapez :

isql localhost:my_database -user sysdba -pass ******
SQL> input my_script.sql;
SQL> commit;
SQL>
Pour l'exécuter dans un fichier de commandes (.bat) ou un script shell, utiliser l'option -i :

isql -i my_script.sql localhost:my_database -user sysdba -pass ******
Si vous avez des instructions DML dans votre script, n'oubliez pas la commande COMMIT à la fin du fichier.
Assurez vous également que le fichier se termine par le caractère nouvelle ligne (LF), car ISQL exécute la commande de la ligne après avoir lu ce caractère.

Traduction réalisée depuis http://www.firebirdfaq.org/faq124/


Existe t-il un exemple de configuration de la valeur ExternalFileAccess du fichier firebird.conf?
auteur : SergioMaster
Le fichier de configuration Firebird (firebird.conf) contient des descriptions qui expliquent tout, mais quelques fois elles sont confuses et il est difficile de comprendre que faire exactement si vous n'avez pas d'exemple.
L'une de ces valeurs c'est ExternalFileAccess. Beaucoup de personnes ont tenté de mettre 'Full' car plus facile que d'essayer de deviner le bon format.
Voici les valeurs de base ('None' pour interdire les tables externes et 'Full' pour les permettre partout) ce que vous avez probablement compris de vous même :

ExternalFileAccess = None
ExternalFileAccess = Full
Et voici ces valeurs 'astucieuses' :

ExternalFileAccess = Restrict C:\some\directory
Pour plusieurs répertoires, utilisez quelque chose comme :

ExternalFileAccess = Restrict C:\some\directory;C:\some\other\directory
Pour les utilisateurs Linux :

ExternalFileAccess = Restrict /some/directory
Traduction réalisée depuis http://www.firebirdfaq.org/faq195/


Comment ré-ordonner les colonnes (champs) d'une table ?
auteur : SergioMaster
Bien que l'ordre importe peu aux applications (vous pouvez toujours faire des requêtes explicites avec l'ordre souhaité), cela sera, peut-être, plus facile pour vous quand vous travaillerez sur les tables avec un outil d'administration de base de données.
Vous pouvez déplacer une colonne vers une position différente en utilisant l'instruction SQL suivante :

ALTER TABLE nom_table ALTER nom_champ POSITION nouvelle_position;
Les positions sont numérotées à partir de un. Si vous voulez permuter deux champs, assurez-vous de faire l'instruction pour les deux.
Un outil comme Flamerobin vous permet de faire cela facilement (option 'Reorder Fields' dans l'écran propriétés de table).

Traduction réalisée depuis http://www.firebirdfaq.org/faq185/



Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.