Créer une instance et une base Oracle manuellement (*)

Pourquoi cette étrange idée aujourd’hui qui consiste à créer une instance puis une base de données manuellement ? Plus personne (quoique…) ne le fait plus et pourtant il peut être important de savoir comment faire pour plusieurs raisons :

  • d’abord pour comprendre ce que font les assistants,
  • ensuite pour pouvoir prendre le relai en cas de problème,
  • encore pour bien comprendre la signification des différents paramètres que positionnent les outils,
  • enfin parce que créer une instance est primordial pour faire une restauration et qu’il faut être toujours prêt.

(*) Ces notes ont été effectuées avec une version Oracle 10.2 sous Linux. On suppose que le logiciel Oracle 10.2 est correctement installé selon le standard OFA et les paramétrages associés (compte oracle, variable $ORACLE_HOME…) sont corrects. Ce qui suit est susceptible de contenir des erreurs
Pour toutes les informations, reportez-vous au manuel de référence Oracle disponible sur http://otn.oracle.com :

Oracle® Database Administrator’s Guide
10g Release 2 (10.2)
Part Number B14231-01
Chapter 2 – Creating an Oracle Database

Les étapes clés de la création d’une base de données sont décrites ci-dessous, pour cela :

  • Positionnez les variables d’environnement
  • Créez le fichier de mots de passe
  • Créez l’arborescence OFA d’administration et de données
  • Créez un fichier d’initialisation et démarrez l’instance en mode NOMOUNT
  • Créez un fichier spfile et redémarrez l’instance en mode NOMOUNT
  • Créez la base de données
  • Changez les mots de passe
  • Mettez à jour le fichier des bases de données /etc/oratab
  • Configurez le réseau Oracle Net
  • Lancez les scripts pour créer le catalogue
  • Sauvegardez *très important*

Positionnez les variables d’environnement
Les variables d’environnement à définir sont :

  • ORACLE_BASE est le chemin d’origine d’une base de données OFA (Oracle Flexible Architecture) et permet par conséquent de fixer l’ensemble des chemins par défaut. Par exemple, les fichiers trace sont dans $ORACLE_BASE/admin//bdump,
  • ORACLE_SID est le nom de l’instance de la base de données, c’est à dire qu’il sert d’identifiant pour , par exemple, les noms des process et de la mémoire partagée. Sous UNIX et Linux, ce nom est au maximum de 8 caractères et est « case-sensitive ».
  • ORACLE_HOME pointe vers la version installée du logiciel Oracle. Cette variable fait parti de l’installation du logiciel et vous ne devez normalement que vérifier son positionnement.
  • *à vérifier* PATH inclut $ORACLE_HOME/bin (théoriquement, on peut travailler sans cette variable mais pour simplifier

Pour les besoins de ce test, les variables ont les valeurs qui suivent :
$ export ORACLE_BASE=/u01
$ export ORACLE_SID=blue
$ echo $ORACLE_HOME
/u01/oracle/product/10.2.0/db_1
$ echo $PATH
/u01/oracle/product/10.2.0/db_1/bin:/usr/local/bin/:/bin:/usr/X11R6/bin
Remarque : vous pouvez positionner ces variables dans les scripts de démarrage de votre session Unix/Linux ou via un script fournit par Oracle comme « oraenv ».
Créez le fichier de mots de passe
Dans le répertoire $ORACLE_HOME/dbs, créez un fichier de mot de passe pour assurer la connexion en temps que SYSDBA ou SYSOPER à distance via le listener, même si la base de données est fermée. Pour cela, tapez sous oracle et dans le-dit répertoire
$ orapwd file=orapwd password=change_on_install entries=10

  • est le nom de votre instance (ORACLE_SID)
  • password peut contenir change_on_install à condition de modifier le mot de passe SYS dès la fin de la création de votre base de données
  • entries est le nombre maximum de comptes SYSDBA

Créez l’arborescence OFA d’administration et des données
Si les répertoires ci-dessous n’existent pas, créez les avec les commandes ci-dessous (Question : est-ce dbname ou ORACLE_SID qui est égal à blue ? En OFA, pour les fichiers de base de données et *à vérifier* ORACLE_SID pour les fichiers d’administration) :
$ mkdir -p /u01/admin/blue/pfile
$ mkdir -p /u01/admin/blue/adump
$ mkdir -p /u01/admin/blue/bdump
$ mkdir -p /u01/admin/blue/cdump
$ mkdir -p /u01/admin/blue/dpdump
$ mkdir -p /u01/admin/blue/udump
$ mkdir -p /u01/admin/blue/scripts
$ mkdir -p /u01/oradata/blue
Créez un fichier d’initialisation et démarrez l’instance en mode NOMOUNT
Pour des besoins de simplicité, créez le fichier init.ora dans le répertoire $ORACLE_BASE/admin//pfile qui contient les valeurs qui suivent :

control_files=(/u01/oradata/blue/control01.ctl,
/u01/oradata/blue/control02.ctl,
/u01/oradata/blue/control03.ctl)
db_name=blue
db_block_size=8192
pga_aggregate_target=25M
sga_target=200M
processes=200
open_cursors=1000
undo_management=auto
undo_tablespace=UNDOTBS1
compatible=10.2.0
remote_login_passwordfile=exclusive
nls_language=AMERICAN
nls_territory=AMERICA

Quelques indications quand à ces paramètres dont tous ne sont pas obligatoires. Ils me semblent un bon ensemble pour bien commencer :

  • control_files contient les emplacement des fichiers de controls (toutes les copies). C’est ce paramètre qui permet de passer du mode NOMOUNT au mode MOUNT quand la base est créée. Il est utilisé pour créer la base de données
  • db_name est le paramètre qui précise le nom de la base de données que l’instance va gérer
  • les paramètres de dimensionnement de l’instance sont les suivants :
    • db_block_size définit la taille des blocs de base de données dans l’instance et la taille par défaut dans la base de données. Utilisez 8192 (soit 8Ko) par exemple
    • pga_aggregate_target définit la taille mémoire globale utilisée par la somme des PGA (les processus serveur)
    • sga_target définit la taille mémoire globale utilisée par la SGA (les espaces mémoires partagés par l’instance Oracle). Si sga_max_size n’est pas défini, sga_max_size est positionné à la même valeur que sga_target.
    • processes définit le nombre maximum de processus utilisables par l’instance
    • open_cursors définit le nombre maximum de cursor utilisables simultanément par l’instance
  • undo_management et undo_tablespace permettent de définit une stratégie automatique d’allocation des images avant ainsi que le nom du tablespace dédié spécifiquement à cet effet
  • compatible fixe les fonctionnalités utilisées par l’instance et a un impact
  • remote_login_passwordfile permet d’indiquer que la sécurité pour accéder à l’instance à distance sous SYSDBA ou SYSOPER s’appuie sur un fichier de mot de passe
  • nls_language et nls_territory permettent de fixer les paramètres de langue et de territoire de l’instance.

Pour démarrer l’instance en mode NOMOUNT, il suffit ensuite d’effectuer les opérations qui suivent :
$sqlplus / as sysdba
SQL>startup nomount pfile=’/u01/admin/blue/pfile/init.ora’
Créez un fichier spfile et redémarrez l’instance en mode NOMOUNT
Pour créez le spfile, il suffit de tapez la commande qui suit dans SQLPLUS sous l’utilisateur SYS :
SQL>create spfile from pfile=’/u01/admin/blue/pfile/init.ora’;
Pour démarrer l’instance en mode NOMOUNT sur le spfile, il suffit ensuite d’effectuer les opérations qui suivent sous SQLPLUS connecté sous SYS :
SQL>shutdown
SQL>startup nomount

Créez la base de données
Voici un exemple d’ordre SQL qui permet de créer la base de données lorsque vous êtes connecté sous l’utilisateur SYS :
SQL>CREATE DATABASE blue
USER SYS IDENTIFIED BY change_on_install
USER SYSTEM IDENTIFIED BY manager
LOGFILE GROUP 1 (‘/u01/oradata/blue/redo01.log’) SIZE 150M,
GROUP 2 (‘/u01/oradata/blue/redo02.log’) SIZE 150M,
GROUP 3 (‘/u01/oradata/blue/redo03.log’) SIZE 150M
MAXLOGFILES 20
MAXLOGMEMBERS 5
MAXLOGHISTORY 10
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
DATAFILE ‘/u01/oradata/blue/system01.dbf’ SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE ‘/u01/oradata/blue/sysaux01.dbf’ SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE ‘/u01/oradata/blue/undotbs01.dbf’
DATAFILE ‘/u01/oradata/blue/users01.dbf’
SIZE 20M EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE ‘/u01/oradata/blue/temp01.dbf’
SIZE 20M REUSE
UNDO TABLESPACE undotbs1
DATAFILE ‘/u01/oradata/blue/undotbs01.dbf’
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
Changez les mots de passe
connect / as sysdba
SQL> alter user sys identified by ;
SQL> alter user system identified by ;
Remarque : pour changer le mot de passe d’un utilisateur, vous pouvez tout simplement utiliser la commande « password user » sous SQL*Plus.

Mettez à jour le fichier des bases de données /etc/oratab

Ajoutez la ligne qui suit dans le fichier /etc/oratab. Cette opération permet à l’agent OEM de trouver l’ORACLE_HOME et l’instance ORACLE_SID. Cela permet également d’utiliser les scripts livrés avec la base de données comme « oraenv » ou « dbstart ».

Configurez le réseau Oracle Net
Si vous avez l’intention d’utiliser un LISTENER sur un port autre que le 1521, il faut créer un alias (disons par exemple LOCAL_LSNR) qui pointe vers le listener en ajoutant une ligne comme celle ci dans le fichier tnsnames.ora :
LOCAL_LSNR=
(DESCRIPTION=
(ADRESS=(PROTOCOL=tcp)(HOST=<host_of_install>)(PORT= <port_lsnt_listen_on>))
)
Il faut ensuite modifier le paramètre « local_listener » de l’instance pour que l’instance enregistre
SQL>alter system set local_listener=LOCAL_LSNR scope=both;
Il faut que le listener soit démarré, s’il ne l’est pas encore :
$ lsnrctl status
$ lsnrctl start #*optionnel* démarre le listener si ce n’est pas déjà effectué
Vous pouvez ensuite forcer l’enregistrement de l’instance dans le listener grâce à la commande (sinon, il s’enregistra dans quelques secondes) :
SQL> alter system register;
Il est possible de confirmer que l’instance est enregistrée dans le listener avec la commande :
$ lsnrctl service
Remarque : dans ce cas la déclaration de l’instance est dynamique et vous ne pourrez pas vous connecter à distance pour démarrer une instance. Pour que ce soit le cas, il faut déclarer l’instance de manière statique dans le fichier listener.ora. L’utilisation d’un agent 10.2 permet d’adresser ce point.
Lancez les scripts pour créer le catalogue
Pour terminer la création de la base de données, il suffit de lancer les scripts ci-dessous
$ sqlplus / as sysdba
SQL>@?/rdbms/admin/catalog
SQL> @?/rdbms/admin/catproc
SQL> @?/rdbms/admin/utlrp –cette étape est conseillée ; elle recompile l’ensemble des packages/vues… pour éviter de laisser des packages en erreur
Sauvegardez *très important*
Cette étape fait l’objet d’un autre sujet. Elle est primordiale.
GarK!
,

4 réflexions sur “Créer une instance et une base Oracle manuellement (*)”

  1. 1. Je ne travaille que très rarement avec Windows. Je n’ai pas de « tuto » mais la procédure est très proche ; il faut simplement créer un service avec « oradim » et le nom du password file est différent.

    2. Selon moi, le meilleur moyen pour créer une base de données est d’utiliser dbca. Pour le scripter, dbca possède un mode silencieux accessible depuis la console Windows ou un terminal; tapez « dbca -help »

  2. bonjour!! j’ai bien aimé les détails sur votre tuto, cependant j’aimerais savoir si vous en avez un mais pour la création manuelle de base de données sous oracle 10g, avec systeme d’exploitation windows?
    Merci de votre aide!!

  3. Désolé de t’avoir donné des sueurs et merci du commentaire. J’ai corrigé en prenant soin de laisser la coquille visible

  4. Stéphane Galliano

    Excellent tuto.
    il y a quand meme une petite erreur qui m’a bien fait transpirer: dans le CREATE DATABASE, le datafile du TS USERS est le meme que le TS UNDO (‘undotbs01.dbf’), et la seule erreur remontée par Oracle est « ORACLE DISCONNECTED ».

Les commentaires sont fermés.