Découverte de MySQL, PostgreSQL et Oracle

Un livre de Wikilivres.

Résumé[modifier | modifier le wikicode]

Ce document explique aux administrateurs de bases de données les différents aspects à cerner lors de l'administration d'une base de données inconnue. Ce document est aussi utile aux administrateurs qui ne connaissent qu'un des logiciels présentés, afin de connaître les commandes équivalentes.

Sont présentés ici MySQL 5.1, PostgreSQL 8.1 et Oracle 10g installés sur une Debian Etch.

Introduction[modifier | modifier le wikicode]

On présentera ici trois systèmes différents de gestion de base de données :

  • MySQL 5.1, base de données libre très utilisée par les hébergeurs web pour ses bonnes performances et dont la version 5 comble les principaux manques (trigger, procédures stockées...). MySQL a la particularité de fournir plusieurs moteurs de bases de données (InnoDB, MyIsam, Berkeley DB...), qui ne fournissent pas les mêmes fonctionnalités ni les mêmes performances, afin de s'adapter au besoin. Par exemple, le moteur ARCHIVE est optimisé pour stocker et fournir des informations, mais il n'est pas possible de mettre à jour une ligne dans une table.
  • PostgreSQL 8.1 est la base de données qui offre le plus de fonctionnalités en logiciel libre.
  • Oracle 10g

Conseils préliminaires[modifier | modifier le wikicode]

Voici quelques conseils qui permettent de gagner du temps lors de la découverte et la maintenance d'une base de données :

  1. Demander s'il y a une fiche technique du serveur sur un partage de fichiers ou sur un wiki.
  2. Interroger les personnes qui travaillent sur ce serveur pour savoir s'il y a des recommandations en plus par rapport à la documentation au cas où elle ne serait pas à jour.
  3. Créer ou mettre à jour la documentation du serveur.
  4. Lire la documentation officielle de la base de données et regarder les commentaires :

Détermination du système d'exploitation[modifier | modifier le wikicode]

  • Unix : cat /etc/issue
    • Linux:
      • Debian: on trouve ce fichier /etc/debian_version qui contient la version de Debian.
      • Redhat: /etc/redhat_release

Pour la suite du document, on considère que la base de données fonctionne sur Debian, mais la quasi totalité des explications dans la suite fonctionne avec les autres distributions Linux. Il sera indiqué quand la commande est spécifique à Debian.

Détermination de l'environnement[modifier | modifier le wikicode]

Pour connaître le(s) processeur(s) :

# cat /proc/cpuinfo

Les partitions swap utilisées :

# cat /proc/swaps


La quantité de RAM disponible/utilisée :

# cat /proc/meminfo

La configuration réseau :

# ifconfig

Services en cours de fonctionnement[modifier | modifier le wikicode]

Toutes les commandes sont à exécuter en root.

Pour connaître la liste des processus qui fonctionnent :[modifier | modifier le wikicode]

# ps aux

Pour connaître la liste des démons au démarrage de l'ordinateur :[modifier | modifier le wikicode]

Regarder le nom du logiciel de démarrage dans la liste des processus, c'est celui dont le PID vaut 1.

  • Si vous obtenez init :
    • Regarder le chiffre entre [] derrière init, puis taper : # ls /etc/rc[chiffre].d/

Par exemple si le chiffre est 2 :

# ls /etc/rc2.d/

de manière générique :

# ls -la /etc/rc`runlevel |awk '{print $2}'`.d 
  • Si vous obtenez initng, il faut taper :
# ng-update show

pour obtenir la liste des démons démarrés.

Les logiciels installés | La façon dont ils sont installés[modifier | modifier le wikicode]

Il est possible d'installer de deux manières différentes un logiciel dans une distribution Linux. Soit avec un paquetage soit avec les sources. L'intérêt du paquetage, c'est qu'il est beaucoup plus facile à installer et à mettre à jour que les sources. Par contre, plus de personnalisations du logiciel sont possibles grâce à une installation à partir des sources.

Dans Debian, pour gérer les paquetages, on utilise le logiciel aptitude. Il permet d'installer, désinstaller et mettre à jour l'ensemble des logiciels présents sur le serveur. Dans le menu d'aptitude il est possible de rechercher un paquetage.

Si le paquetage de la base de données n'est pas installé, alors il est installé avec les sources. La plupart du temps, les logiciels installés à partir des sources se situent dans /usr/local/bin.

La façon dont est installé le logiciel détermine la procédure des mises à jour.

Pour visualiser l'état de fonctionnement de la base de données[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

# /etc/init.d/mysqld status

Exemple de résultat pour une base en cours de fonctionnement :

/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

PostgreSQL[modifier | modifier le wikicode]

# /etc/init.d/postgresql-8.1 status

Exemple de résultat pour une base en cours de fonctionnement :

Version Cluster   Port Status Owner    Data directory                     Log file
8.1     main      5432 online postgres /var/lib/postgresql/8.1/main       /var/log/postgresql/postgresql-8.1-main.log

Oracle[modifier | modifier le wikicode]

# /etc/init.d/oracle status

On identifie la liste des instances Oracle en cours de fonctionnement avec la commande:

  1. ps -ef | grep pmon

(Le processus PMON, Process Monitor, étant unique à chaque instance, et identifiant le SID de la base concernée)

Comment démarrer/arrêter/redémarrer une base de données[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

  • Dans le cas d'une base de données classique :
# /etc/init.d/mysql (start|stop|restart|reload|force-reload)
  • Dans le cas d'un nœud de cluster :
# /etc/init.d/mysql-ndb (start|stop|restart|reload|force-reload)
  • Dans le cas d'un médiateur de cluster :
# /etc/init.d/mysql-ndb-mgm (start|stop|restart|reload|force-reload)
# ngc --(start|stop|restart) mysql

PostgreSQL[modifier | modifier le wikicode]

Dans le cas d'une base de données :

# /etc/init.d/postgresql-8.1 (start|stop|restart|reload|force-reload|status|autovac-start|autovac-stop|autovac-restart)
# ngc --(start|stop|restart) postgresql

Oracle[modifier | modifier le wikicode]

Dans le cas d'une base de données :

# /etc/init.d/oracle (start|stop|restart)
# ngc --(start|stop|restart) oracle

Les fichiers de configuration[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

Tous les fichiers se trouvent dans le dossier /etc/mysql :

  • debian.cnf : fichier de configuration généré automatiquement par Debian, contient le login de l'utilisateur système Debian dans MySQL ainsi que son mot de passe. Cet utilisateur permet à Debian de faire la maintenance des bases de MySQL.

Exemple :

Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = XXXXXXXXXXXXXXXX
socket   = /var/run/mysqld/mysqld.sock


  • debian-log-rotate.conf : Définit la quantité de fichiers de logs à stocker.

Exemple :

KEEP_BINARY_LOGS=2


  • debian-start : Script qui contient la liste des opérations de maintenance à effectuer lors du démarrage de MySQL.

Exemple :

#!/bin/bash
#
# This script is executed by "/etc/init.d/mysql" on every (re)start.
#
# Changes to this file will be preserved when updating the Debian package.
#

source /usr/share/mysql/debian-start.inc.sh

MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf"
MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
MYCHECK_PARAMS="--all-databases --fast --silent"

# Put commands in the background if they should not block the server start.
(
  mycheck;
) &

exit 0


  • my.cnf : Tous les paramètres de configuration de MySQL comme les ports/sockets d'écoute, les interfaces réseaux autorisées, le tuning de la base, l'emplacement des logs et des fichiers de base de données... Enfin, ce fichier définit si le serveur MySQL est un nœud de cluster ou un le maître du cluster. Les commentaires dans ce fichier sont assez détaillés.

Exemple :

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "/var/lib/mysql/my.cnf" to set server-specific options or
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
#
# * Basic Settings
#
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
skip-external-locking
#
# For compatibility to other Debian packages that still use
# libmysqlclient10 and libmysqlclient12.
old_passwords	= 1
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 127.0.0.1
#
# * Fine Tuning
#
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 128K
#
# * Query Cache Configuration
#
query_cache_limit	= 1048576
query_cache_size        = 16777216
query_cache_type        = 1
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log		= /var/log/mysql.log
#log		= /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration
#log-slow-queries	= /var/log/mysql/mysql-slow.log
#
# The following can be used as easy to replay backup logs or for replication.
#server-id		= 1
log-bin			= /var/log/mysql/mysql-bin.log
# See /etc/mysql/debian-log-rotate.conf for the number of files kept.
max_binlog_size         = 104857600
#binlog-do-db		= include_database_name
#binlog-ignore-db	= include_database_name
#
# * BerkeleyDB
#
# According to an MySQL employee the use of BerkeleyDB is now discouraged
# and support for it will probably cease in the next versions.
skip-bdb
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# If you want to enable SSL support (recommended) read the manual or my
# HOWTO in /usr/share/doc/mysql-server/SSL-MINI-HOWTO.txt.gz
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[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[modifier | modifier le wikicode]

Les fichiers de configuration se trouvent dans /usr/local/pgsql/data ou /etc/postgresql/8.1/main/. PostegreSQL possède 3 fichiers de configuration:


  • pg_hba.conf : fichier de configuration pour l'authentification des utilisateurs. Ce fichier est une suite d'enregistrements.

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]


  • pg_ident.conf: fichier de configuration utilisé si l'on veut effectuer une authentification automatique avec le login utilisé lors du lancement de l'OS.

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


  • postgresql.conf : principal fichier de configuration. Toutes les informations propres au SGBD sont stockées dans ce fichier.

Oracle[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  1. Déterminer la localisation dans l'arborescence système des bases de données à partir du fichier de configuration. Par exemple pour MySQL, il se situe dans /var/lib/mysql
  2. Taper :
# 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)
  • Si le fichier du périphérique commence par /dev/md, alors il s'agit d'une partition en RAID software. Pour connaître la localisation physique des fichiers, il faut regarder le fichier : /etc/mdadm/mdadm.conf

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é.

  1. La commande :
# 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[modifier | modifier le wikicode]

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.

Web[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

  • PhpMyAdmin est l'interface web la plus utilisée pour gérer une base de données MySQL.

PostgreSQL[modifier | modifier le wikicode]

Oracle[modifier | modifier le wikicode]

  • isql*plus
  • sql*Plus
  • SQLPlus Worksheet

Applications graphique[modifier | modifier le wikicode]

Pour tous les serveurs de base de données[modifier | modifier le wikicode]

  • Kexi - Outil KDE
  • OpenOffice.org Base - Intégré à la suite bureautique OpenOffice.org 2 et ultérieur. Permet de générer des schémas de la base de données.
  • LibreOffice Base - Intégré à la suite bureautique LibreOffice. Permet de générer des schémas de la base de données.

MySQL[modifier | modifier le wikicode]

PostgreSQL[modifier | modifier le wikicode]

Oracle[modifier | modifier le wikicode]

Ligne de commande[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

# mysql

PostgreSQL[modifier | modifier le wikicode]

# psql

Oracle[modifier | modifier le wikicode]

# sqlplus

Analyse interne de la base de données[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

Pour auditer un serveur MySQL, la commande SHOW permet d'afficher la plupart des informations utiles. (Documentation détaillée)

Utilisateurs - rôles - droits[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

(Documentation détaillée)

  • Liste des utilisateurs
USE mysql
SELECT * FROM `user`
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
DROP USER user;

PostgreSQL[modifier | modifier le wikicode]

L'authentification dans PostgreSQL se fait via les rôles ou via les utilisateurs.

  • Liste des rôles:
SELECT rolname FROM pg_roles;
CREATE ROLE name [ [ WITH ] option [ ... ] ]
DROP ROLE name;
  • liste des utilisateurs
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 
  • Effacer un utilisateur
  DROP USER
  • modifier un utilisateur
  ALTER USER

Oracle[modifier | modifier le wikicode]

  • Les Utilisateurs
    • Afficher les utilisateurs
SELECT * FROM DBA_USERS
  • Créer un utilisateur
CREATE USER nom
IDENTIFIED BY mot_de_passe
DEFAULT TABLESPACE tablespace_par_defaut
TEMPORARY TABLESPACE tablespace_temporaire
QUOTA quota ON tablespace
  • Supprimer un utilisateur
DROP USER utilisateur [CASCADE]
  • Modifier un utilisateur
ALTER USER utilisateur
  • Les rôles et les privilèges
    • Afficher les rôles
SELECT * FROM DBA_ROLES
  • Créer un rôle
CREATE ROLE
  • Attribuer un privilège/un rôle
GRANT privilège/rôle TO rôle/utilisateur
  • Supprimer un rôle
DROP ROLE role

Les bases de données[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

  • Liste des bases de données :
SHOW DATABASES;

PostgreSQL[modifier | modifier le wikicode]

SELECT datname FROM pg_database;
en général on utilise la métacommande \l

Oracle[modifier | modifier le wikicode]

SELECT name FROM V$DATABASE

Tables[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

  • Liste des tables
SHOW TABLES;

PostgreSQL[modifier | modifier le wikicode]

SELECT tablename FROM pg_tables;
ou la métacommande \dt

Oracle[modifier | modifier le wikicode]

  • liste des tables:
SELECT owner,table_name FROM all_tables;

Schéma des relations entre les tables[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Attention, il faut utiliser le moteur InnoDB pour pouvoir ajouter des clés étrangères.

  • Lister les clés étrangères
SELECT * FROM information_schema.KEY_COLUMN_USAGE T;

PostgreSQL[modifier | modifier le wikicode]

  • Liste des clefs étrangères:
SELECT classid, refclassid FROM pg_depend; (Plus d'infos)

Oracle[modifier | modifier le wikicode]

  • Liste des clés étrangères de l'utilisateur connecté
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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  • MySQLAR est un logiciel qui génère des courbes à partir de l'activité du serveur MySQL, très utile pour auditer des engorgements dans le temps. (Site officiel | Démonstration)
  • Cette commande :
# /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

PostgreSQL[modifier | modifier le wikicode]

Oracle[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Pour afficher les différents triggers définis dans la base de données :

MySQL[modifier | modifier le wikicode]

SHOW TRIGGERS;

PostgreSQL[modifier | modifier le wikicode]

SELECT tgname FROM pg_trigger

Oracle[modifier | modifier le wikicode]

SELECT trigger_name FROM user_triggers;

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

Permet d'afficher la liste des procédures stockées.

MySQL[modifier | modifier le wikicode]

USE mysql
SELECT * FROM `func`;

(Documentation sur les procédures stockées)

PostgreSQL[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  • /var/log/mysql.log contient toutes les erreurs autour du serveur MySQL. C'est le premier fichier à regarder quand le serveur MySQL ne démarre pas.

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. (Détails sur les types de logs)

PostgreSQL[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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

  • Pour avoir des fichiers "redo log" actifs, la base doit être en mode ARCHIVELOG. Pour connaître le mode d'archivage:
SELECT name, log_mode FROM V$DATABASE
Pour activer le mode ARCHIVELOG, il faut arrêter la base
shutdown immediate
puis modifier le fichier init<SID>.ora
log_archive_start = TRUE
  • Les fichiers de log sont également écrits dans le fichier init<SID>.ora

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 :

  • bdump: processus systèmes
  • udump: processus "user": client
  • cdump: fautes de segmentations (bugs)

Suivi de sécurité[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

  • à chaud :

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. (Documentation détaillée)

  • à froid :
Sauvegarder le dossier où MySQL stocke ses bases de données. (Généralement /var/lib/mysql)

PostgreSQL[modifier | modifier le wikicode]

Les sauvegardes peuvent se faire de trois manières :

  • SQL DUMP:

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


  • Une sauvegarde au niveau du système de fichier:

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


  • Une sauvegarde à chaud:

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[modifier | modifier le wikicode]

Il existe plusieurs façons d'effectuer la sauvegarde d'une base de données.

  • Sauvegarde à froid

Il s'agit de faire une sauvegarde de la base dans un état donné.

  • Formatage de texte sous SQL*Plus
Set feedback off 
Set Linesize 200
Set Heading off 
Set Pagesize 0
Set Trimspool off 
Set Verify off
  • Écrire les données dans un script sql
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 
  • Arrêter la base
shutdown immediate
  • Effectuer la sauvegarde à proprement parler
@~/backup.sql
  • Redémarrer la base
startup
  • Sauvegarde à chaud

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é.

  • Il faut tout d'abord identifier le tablespace qui va être sauvegardé.
  • Ensuite il faut mettre le tablespace hors ligne

Exemple :

ALTER TABLESPACE exple_tablespace OFFLINE NORMAL;
  • Sauvegarder le fichier concerné (un simple copier/coller)
  • Enfin, remettre le tablespace en ligne

Exemple :

ALTER TABLESPACE exple_tablespace ONLINE NORMAL;

Restauration[modifier | modifier le wikicode]

MySQL[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

La restauration s'effectue de différente manière, suivante le type de sauvegarde utilisée.

  • SQL DUMP

Pour récupérer la base de données, il faut utiliser la commande suivante :

psql dbname < infile


  • Sauvegarde au niveau du système de fichier

Il suffit de lancer la commande:

tar -xvf backup.tar /usr/local/pgsql/data


  • point-in-time recovery (PITR), restauration d'une sauvegarde à chaud

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[modifier | modifier le wikicode]

  • Si la sauvegarde a été effectuée à chaud, utiliser la commande 'recover' après avoir éventuellement remis des fichiers sauvegardés
RECOVER [AUTOMATIC] [FROM location]
  {[STANDBY] DATABASE [UNTIL options] [USING BACKUP CONTROLFILE]
   |TABLESPACE {tablespace [, tablespace ...]}
   |DATAFILE {datafilename [,datafilename ...]}
   |STANDBY {TABLESPACE tablespace [,tablespace ...]
      |DATAFILE datafilename [,datafilename ...]} UNTIL CONTROLFILE
   |LOGFILE filename
   |CONTINUE [DEFAULT]
   |CANCEL}
  [PARALLEL clause]
  • Si la sauvegarde a été effectuée à froid, recopier tous les fichiers de la sauvegarde dans la base après l'avoir au préalable arrêtée.

Mise à jour[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

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[modifier | modifier le wikicode]

Le gestionnaire de bugs de MySQL.

PostgreSQL[modifier | modifier le wikicode]

  • Rapporter les bugs :

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[modifier | modifier le wikicode]

On utilise le site du support Oracle: http://metalink.oracle.com