[mysqldump]
 quick
 quote-names
 max_allowed_packet = 16M
 [mysql]
 #no-auto-rehash # faster start of mysql but no tab completition
 [isamchk]
 key_buffer = 16M
 #
 # * NDB Cluster
 # See /usr/share/doc/mysql-server-*/README.Debian for more information.
 # The following configuration is read by the ndbd storage daemons,
 # not from the ndb_mgmd management daemon.
 # [MYSQL_CLUSTER]
 # ndb-connectstring=127.0.0.1
PostgreSQL.
Les fichiers de configuration se trouvent dans /usr/local/pgsql/data ou /etc/postgresql/8.1/main/.
PostegreSQL possède 3 fichiers de configuration:
Les lignes vides sont ignorées. Chaque ligne est structurée d'une des manières suivantes:
 local database user auth-method [auth-option]
 host database user CIDR-address auth-method [auth-option]
 hostssl database user CIDR-address auth-method [auth-option]
 hostnossl database user CIDR-address auth-method [auth-option]
 host database user IP-address IP-mask auth-method [auth-option]
 hostssl database user IP-address IP-mask auth-method [auth-option]
 hostnossl database user IP-address IP-mask auth-method [auth-option]
Exemple :
 # MAPNAME IDENT-USERNAME PG-USERNAME
 omicron bryanh bryanh
 omicron ann ann
 # bob has user name robert on these machines
 omicron robert bob
 # bryanh can also connect as guest1
 omicron bryanh guest1
Oracle.
Par défaut, le fichier de configuration se trouve dans ${ORACLE_HOME}/dbs/et se nomme en général init%ORACLE_SID%.ora
"%ORACLE_SID% est le nom de l'instance d'oracle utilisée"
Il contient en général tous les paramètres dont a besoin la base.
Exemple
 db_name=isima
 db_files=1020
 control_files=/home/oracle/admin/isima/isima.ora
 db_file_multiblock_read_count = 8
 db_block_buffers=200
 shared_pool_size=6500000
 log_checkpoint_interval=8000
 processes=50
 dml_locks=100
 log_buffers=8192
 sequence_cache_entries=10
 sequence_cache_hash_buckets=10
 #audit_trail=true
 #timed_statistics=true
 background_dump_dest=/home/oracle/rdbms80/trace
 user_dump_dest=/home/oracle/rdbms80/trace
 db_block_size=2048
 compatible=8.0.4.0.0
= Localisation physique des données =
 # mount
pour connaître le point de montage des partitions.
Exemple :
 /dev/md0 on / type reiserfs (rw,notail)
 /dev/sda6 on /home type ext3 (rw)
Exemple :
 DEVICE partitions
 ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8402604e:5b65bb45:f6c894f0:906c8b43
 devices=/dev/hda1,/dev/hdd1
 MAILADDR example@example.com
Dans cet exemple, on peut voir que /dev/md0 est un RAID réparti entre deux partitions, hda1 et hdd1. L'adresse de l'administrateur à avertir en cas de défaillance d'une des deux partitions est également indiqué.
 # df -h
affiche l'espace disponible pour chaque partition
Exemple :
 Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur
 /dev/md0 186G 163G 23G 88% /
 /dev/sda6 9,2G 1,7G 7,1G 20% /home
Cette commande :
 # du -hs /var/lib/mysql/*
affiche des informations précises sur la taille de chaque fichier.
= Interfaces de connexion à la base de données =
Il est possible de gérer une base de données par différents moyens : Web, interface graphique, et ligne de commande. Il faut donc identifier les différentes méthodes possibles pour gérer la base de données.
Ligne de commande.
MySQL.
 # mysql
PostgreSQL.
 # psql
Oracle.
 # sqlplus
= Analyse interne de la base de données =
On va maintenant déterminer les composantes internes de la base de données. Pour cela, on dispose d'une liste de commandes, très souvent en SQL. Voilà également quelques commandes utiles pour un administrateur de base de données.
Généralités.
MySQL.
Pour auditer un serveur MySQL, la commande SHOW permet d'afficher la plupart des informations utiles. (Documentation détaillée)
Utilisateurs - rôles - droits.
MySQL.
 USE mysql
 SELECT * FROM `user`
 CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
 DROP USER user;
PostgreSQL.
L'authentification dans PostgreSQL se fait via les rôles ou via les utilisateurs.
 SELECT rolname FROM pg_roles;
 CREATE ROLE name [ [ WITH ] option [ ... ] ]
 DROP ROLE name;
 SELECT usename FROM pg_user;
 ou en général on utilise la métacommande \du
 CREATE USER nom [ [ WITH ]
 SUPERUSER | NOSUPERUSER
 | CREATEDB | NOCREATEDB
 | CREATEROLE | NOCREATEROLE
 | CREATEUSER | NOCREATEUSER
 | INHERIT | NOINHERIT
 | LOGIN | NOLOGIN
 | CONNECTION LIMIT limite_connexion
 | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'motdepasse'
 | VALID UNTIL 'dateheure' 
 | IN ROLE nomrole [, ...]
 | IN GROUP nomrole [, ...]
 | ROLE nomrole [, ...]
 | ADMIN nomrole [, ...]
 | USER nomrole [, ...]
 | SYSID uid 
 DROP USER
 ALTER USER
Oracle.
 SELECT * FROM DBA_USERS
 CREATE USER "nom"
 IDENTIFIED BY "mot_de_passe"
 DEFAULT TABLESPACE "tablespace_par_defaut"
 TEMPORARY TABLESPACE "tablespace_temporaire"
 QUOTA "quota" ON "tablespace"
 DROP USER "utilisateur" [CASCADE]
 ALTER USER "utilisateur"
 SELECT * FROM DBA_ROLES
 CREATE ROLE
 GRANT "privilège/rôle" TO "rôle/utilisateur"
 DROP ROLE "role"
Les bases de données.
MySQL.
 SHOW DATABASES;
PostgreSQL.
 SELECT datname FROM pg_database;
 en général on utilise la métacommande \l
Oracle.
 SELECT name FROM V$DATABASE
Tables.
MySQL.
 SHOW TABLES;
PostgreSQL.
 SELECT tablename FROM pg_tables;
 ou la métacommande \dt
Oracle.
 SELECT owner,table_name FROM all_tables;
Schéma des relations entre les tables.
Il est possible de générer un schéma des relations entre les différentes tables grâce à OpenOffice Base ou LibreOffice Base.
MySQL.
Attention, il faut utiliser le moteur InnoDB pour pouvoir ajouter des clés étrangères.
 SELECT * FROM information_schema.KEY_COLUMN_USAGE T;
PostgreSQL.
 SELECT classid, refclassid FROM pg_depend; (Plus d'infos)
Oracle.
 SELECT table_name, constraint_name, r_owner, r_constraint_name
 FROM user_constraints
 WHERE constraint_type = 'R'
 ORDER BY table_name, constraint_name;
Charge de la base de données.
Connaître la charge moyenne d'une base de données permet d'anticiper la montée en charge et la migration de la base de données vers un nouveau serveur ou un cluster de serveurs.
Le logiciel Nagios fournit une interface web afin d'afficher un état détaillé du serveur. Il permet également d'envoyer une alerte mail ou SMS à l'administrateur système en cas de panne ou de saturation du serveur.
MySQL.
 # /usr/bin/mysqladmin status
permet de connaitre la charge du serveur MySQL.
Exemple de résultat :
 /usr/bin/mysqladmin Ver 8.41 Distrib 5.0.18, for pc-linux-gnu on i486
 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
 This software comes with ABSOLUTELY NO WARRANTY. This is free software,
 and you are welcome to modify and redistribute it under the GPL license 
 Server version 5.0.18-Debian_7-log
 Protocol version 10
 Connection Localhost via UNIX socket
 UNIX socket /var/run/mysqld/mysqld.sock
 Uptime: 4 min 47 sec
 Threads: 1 Questions: 157 Slow queries: 0 Opens: 0 Flush tables: 1 Open tables: 64 Queries per second avg: 0.547
Oracle.
En version 10g, via la DBConsole.
Sinon, interroger la vue V$SESSION_WAIT, qui renseigne en temps réel des sessions en attentes.
Event: correspond à l'evénement
P1, P2, et P3 correspondent aux spécifications de l'event (exemple: db file sequential read: P1: file #, P2: block #)
Néanmoins le suivi de l'activité d'une instance Oracle est complexe, et requiert l'utilisation d'outil type PERFSTAT pour avoir des informations concrétes.
Triggers.
Pour afficher les différents triggers définis dans la base de données :
MySQL.
 SHOW TRIGGERS;
PostgreSQL.
 SELECT tgname FROM pg_trigger
Oracle.
 SELECT trigger_name FROM user_triggers;
Procédures stockées.
Permet d'afficher la liste des procédures stockées.
MySQL.
 USE mysql
 SELECT * FROM `func`;
PostgreSQL.
Ou utilise la métacommande \df, si on connait le schéma on peut faire \df schema.*, par exemple \df public.* donne toutes les fonctions crée dans ce schéma, qui est celui affecté par défaut à utilisateur. On pourrait tout aussi bien faire \df public.ab* pour avoir toutes les fonctions commençant par ab. Avec \df+ on obtient aussi les commentaires (CREATE COMMENT) sur la fonction
Oracle.
Pour selectionner la liste des procédures stockées:
 SELECT object_name 
 FROM user_objects 
 WHERE object_type='PROCEDURE';
Pour afficher le contenu d'une procédure stockée:
 SELECT text
 FROM user_source 
 WHERE NAME = 'NOM DE LA PROCEDURE'
 AND TYPE = 'PROCEDURE';
"On peut aussi utiliser les vues dba_objects et dba_source"
Logs.
Les logs sont des fichiers textes qui contiennent tout ce qui se passe dans le logiciel. Ces fichiers sont importants pour détecter et localiser une panne.
Les logs des distributions linux sont dans le dossier : /var/log
Le fichier de log le plus important est : /var/log/syslog
MySQL.
Il est possible d'activer des logs pour sauvegarder toutes les requêtes, les modifications dans les tables ou pour identifier les requêtes les plus lentes.
PostgreSQL.
Lors de la création d'une base , elle est configuré avec un archivage minimum (un certain nombre de fichiers de taille fixe sont utilisés pour l'archivage)
Cet archivage n'est pas suffisant pour pouvoir restaurer des sauvegardes à chaud, il faut un archivage de type WAL, qui n'écrase pas les log les plus anciens.
Pour configurer un archivage WAL: Dans le fichier postgresql.conf, recherchez le paramètre archive_command et donnez lui la valeur suivante:
 archive_command = 'cp -i %p /mnt/server/archivedir/%f </dev/null'
 (%p correspond au path du fichier à archiver, alors que %f corespond seulement au nom du fichier)
Sous certaines plateformes, la commande cp -i écrase les fichiers déjà existants, ce qui est contraire à la logique d'un archivage WAL. Si vous rencontrez des problèmes, il faut rajouter un test dans la commande:
 archive_command = 'test ! -f .../%f && cp %p .../%f'
Oracle.
On distingue deux types de "logs" avec Oracle: 
- les fichiers "redo logs", qui assurent l'intégrité de la base
- les fichiers textes statuant de l'état de la base
 SELECT name, log_mode FROM V$DATABASE
 shutdown immediate
 log_archive_start = TRUE
Exemple :
 log_archive_dest_1 = "location=/home/oracle/oradata/isima/archive"
 log_archive_dest_2 = "location=/home/oracle/temp"
On trouvera les fichiers de "log" texte en cherchant les paramètres :
 SQL> show parameter dump
 SQL>
 NAME TYPE VALUE
 background_core_dump string partial
 background_dump_dest string /u01/oracle/admin/V102/bdump
 core_dump_dest string /u01/oracle/admin/V102/cdump
 max_dump_file_size string UNLIMITED
 shadow_core_dump string partial
 user_dump_dest string /u01/oracle/admin/V102/udump
Sachant que :
= Suivi de sécurité =
Il est primordial de suivre les alertes à propos de failles de sécurité qui peuvent être détectés dans l'ensemble des logiciels présents sur le serveur.
Heureusement, avec la plupart des distributions linux, dont Debian, le suivi de sécurité est réalisé pour tous les logiciels contenus dans la distribution.
Il suffit de s'abonner à la liste de diffusion debian-security-announce.
à chaque alerte de sécurité, un mail est envoyé à tous les abonnés pour signaler le problème.
Si l'alerte de sécurité concerne un logiciel présent sur le serveur, il faut le mettre à jour grâce aux commandes :
 # apt-get update
 # apt-get upgrade
Bien entendu, il faut que les logiciels installés soient des paquetages debian officiels, sinon cette politique de sécurité est défaillante.
Oracle.
Debian n'effectue pas de suivi de sécurité pour Oracle, car c'est un logiciel propriétaire.
Il faut donc mettre en place une procédure de sécurité spécifique pour Oracle.
Il est impératif, pour un système en production, d'avoir un support valide auprès d'Oracle.
Le site WEB de la base de connaissances est http://metalink.oracle.com
= Sauvegardes =
Un serveur de base de données doit être obligatoirement sauvegardé car un serveur sera obligatoirement en panne un jour. Il est donc important de mettre en place une politique de sauvegardes et de les effectuer régulièrement.
Une multitude de méthodes sont possibles pour sauvegarder un serveur.
La plus courante est de posséder un serveur de sauvegardes qui automatise et centralise toutes les sauvegardes de l'entreprise, puis de stocker sur bande magnétique ou DVD-R.
BackupPC est un logiciel très utilisé pour sauvegarder un ensemble d'ordinateurs, car il possède une interface web afin de lancer des sauvegardes ou de restaurer des fichiers.
MySQL.
La procédure recommandée pour sauvegarder est :
 # mysqldump --tab=/emplacement/du/fichier.sql --opt nom_bdd
Ceci génère un fichier SQL de la base de données qui est facile à compresser et à sauvegarder.
PostgreSQL.
Les sauvegardes peuvent se faire de trois manières :
Faire un SQL DUMP signifie créer un fichier texte contenant une suite de requetes SQL permettant de pouvoir reconstruire toute la base de données.
Dans PostgreSQL, nous disposons de la commande pg_dump qui s'utilise de la manière suivante.
 pg_dump dbname > outfile
Cette sauvegarde se fait elle aussi a froid, et elle consiste simplement en un archivage de toutes les données de la base à sauvegarder. On peut utiliser une commande comme celle ci:
 tar -cf backup.tar /usr/local/pgsql/data
Les sauvegardes à chaud se font alors que la base est en exploitation. Pour pouvoir faire des restaurations correctes, il est nécessaire que la base dispose d'un système d'archivage WAL.
Cela permet de faire du point-in-time recovery (PITR): On peut récupérer l'état de la base à n'importe quel instant, du moment qu'il y ait eu un backup de fait
Créer la sauvegarde de la base :
Apres s'être assuré que l'archivage WAL fonctionne, loggez vous en administrateur, et lancez la commande :
 SELECT pg_start_backup('label');
 (label corespond au nom que vous voulez donner a cette sauvegarde)
Ensuite, effectuez une sauvegarde avec la commande cpio ou tar, comme dans la sauvergarde au niveau du système de fichier.
Et après cette derniere effectuée, reloggez vous en administarteur et lancer la requete : 
 SELECT pg_stop_backup();
Oracle.
Il existe plusieurs façons d'effectuer la sauvegarde d'une base de données.
Il s'agit de faire une sauvegarde de la base dans un état donné.
 Set feedback off 
 Set Linesize 200
 Set Heading off 
 Set Pagesize 0
 Set Trimspool off 
 Set Verify off
 spool ~/backup.sql
 select 'host cp ' || name || ' ~/backup ' from v$datafile;
 select 'host cp ' || member || ' ~/backup ' from v$logfile;
 select 'host cp ' || name || ' ~/backup ' from v$controlfile;
 select 'host cp ' || name || ' ~/backup ' from v$tempfile;
 spool off 
 shutdown immediate
 @~/backup.sql
 startup
Il s'agit de sauvegarder des données alors que la base est en marche. Il est nécessaire que le mode ARCHIVELOG soit activé.
Exemple :
 ALTER TABLESPACE "exple_tablespace" OFFLINE NORMAL;
Exemple :
 ALTER TABLESPACE "exple_tablespace" ONLINE NORMAL;
= Restauration =
MySQL.
Si la sauvegarde a été effectuée à chaud :
 # mysql < nom_du_fichier.sql
Sinon :
Arrêter le serveur, et copier la sauvegarde dans le dossier de travail MySQL, puis démarrer le serveur.
PostgreSQL.
La restauration s'effectue de différente manière, suivante le type de sauvegarde utilisée.
Pour récupérer la base de données, il faut utiliser la commande suivante :
 psql dbname < infile
Il suffit de lancer la commande:
 tar -xvf backup.tar /usr/local/pgsql/data
Après avoir fermé la base de données et restauré le fichier de sauvegarde comme pour une sauvegarde à froid, créez un fichier de configuration pour la restauration dans le répertoire data. Appelez ce fichier "recovery.conf" et dans ce fichier insérez la commande suivante : 
 restore_command = 'cp /mnt/archivedir/%f %p'
Oracle.
 RECOVER [AUTOMATIC] [FROM location]
 {[STANDBY] DATABASE [UNTIL options] [USING BACKUP CONTROLFILE]
 |STANDBY {TABLESPACE tablespace [,tablespace ...]
 |DATAFILE datafilename [,datafilename ...]} UNTIL CONTROLFILE
 |LOGFILE filename
 |CONTINUE [DEFAULT]
 [PARALLEL clause]
Mise à jour.
Pour mettre à jour le serveur de base de données, s'il est installé en paquetage, il suffit de faire :
 # apt-get update
 # apt-get upgrade
Sinon, bon courage :-)
Suivi des bugs.
Quand on rencontre un problème inexplicable avec un logiciel, le bon réflexe est de faire un tour sur le rapporteur de bugs du projet.
Il ne faut pas hésiter à rapporter un bug lorsque on en trouve un, car sinon il a moins de chance d'être corrigé.
MySQL.
Le gestionnaire de bugs de MySQL.
PostgreSQL.
Lorsque vous rencontrez un bug dans PostgreSQL, vous pouvez le rapporter à l'organisme qui s'occupe des mises à jour de PostgreSQL.
Pour cela, il vous suffit d'envoyer un rapport sur le bug à l'adresse suivante : <pgsql-bugs@postgresql.org>
Il est demandé de faire un bref descriptif du bug en tant que sujet du mail.
Oracle.
On utilise le site du support Oracle: http://metalink.oracle.com