Aucun message portant le libellé PFILE. Afficher tous les messages
Aucun message portant le libellé PFILE. Afficher tous les messages

vendredi 28 octobre 2011

Renommer une base de données

Renommer une base de données n’est pas si compliqué. Oracle offre un utilitaire qui simplifie grandement les opérations qui sont à réalisées. Voici l’ensemble des étapes à suivre :

Note: Les étapes ci-dessous ont été réalisées sur une base de données Oracle 11gR2 EE sous Linux Red Hat 5.5 64bits. Le DB_NAME d'origine était "orcl" et, il est changé pour "lab11g".
  • Prendre une copie de sécurité de la base de données
  • Démarrer l’outil SQL*Plus en établissant une connexion avec le compte « SYS »

(oracle)$ sqlplus / as sysdba

  • Arrêter la base de données

SQL> SHUTDOWN IMMEDIATE

  • Démarrer la base de données en mode « mount »

SQL> STARTUP MOUNT

  • Extraire les paramètres de la base de données

SQL> create pfile='/tmp/pfile.ora' from spfile;

  • Éditer le fichier de paramètres (pfile)

Le fichier de paramètre contient un paramètre intitulé « DB_NAME » qui doit être réinitialisé à la nouvelle valeur. Veuillez suivre ces étapes :

SQL> create spfile from pfile='/tmp/pfile.ora';

  • Quitter l’outil SQL*Plus

SQL> exit

  • Démarrer l’utilitaire

L’utilitaire doit être démarré avec le compte « SYS » puis vous devez spécifier le nouveau nom de la base de données.

(oracle)$ nid TARGET=SYS DBNAME=[nom BD] SETNAME=YES

L’utilitaire vérifie les entêtes des fichiers de contrôle puis ensuite, il demande une confirmation de l’opération.

  • Créer le fichier de mot de passe

(oracle)$ orapwd FILE=orapw[SID] ENTRIES=30

  • Arrêter le programme d’écoute (listener)

(oracle)$ lsnrctl stop

  • Changer la variable d’environnement ORACLE_SID

Le changement doit s’effectuer dans tous les scripts utilisés ainsi que la variable d’environnement « ORACLE_SID »

(oracle)$ export ORACLE_SID=[SID]

  • Recréer le fichier système de paramètres

(oracle)$ sqlplus / as sysdba

SQL> create spfile from pfile='/tmp/pfile.ora';

SQL> exit

  • Démarrer le programme d’écoute (listener)

(oracle)$ lsnrctl start

  • Démarrer normalement la base de données

(oracle)$ sqlplus / as sysdba

SQL> startup

Suite à cette opération, assurez-vous que le fichier « listener.ora » ne fait pas de référence à l’ancien nom de la base de données. De plus, n’oubliez pas de modifier les chaînes de connexion contenues dans les fichiers de configuration, par exemple « tnsnames.ora », « dads.conf », etc.

mercredi 5 mai 2010

ORA-01078 au démarrage d'une instance Oracle 11g sous ASM

J'ai rencontré cette erreur lors d'un redémarrage de la base de données suite à des modifications de paramètres de bases de données qui sont stockés dans un SPFILE.

La base de données est de la version Oracle 11gR2 et elle est liée à un Grid Infrastructure qui utilise Oracle ASM et Oracle Restart.

Voici les étapes que j'ai suivi pour résoudre le problème :

--
oracle@romeo:/tmp> srvctl stop database -d F100
oracle@romeo:/tmp> srvctl start database -d F100
PRCR-1079 : Failed to start resource ora.f100.db
ORA-01078: failure in processing system parameters
CRS-2674: Start of 'ora.f100.db' on 'romeo' failed


--
-- Tentative de démarrage avec SQL*Plus
--
oracle@romeo:/tmp> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mer. Mai 5 12:07:49 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup nomount;
ORA-01078: failure in processing system parameters
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 1577058304 cannot be set to more than MEMORY_TARGET 1358954496.

--
-- Tentative de correction de la valeur du paramètre en erreur
--
SQL> alter system set SGA_MAX_SIZE=100 scope=spfile;
alter system set SGA_MAX_SIZE=100 scope=spfile
*
ERROR at line 1:
ORA-01034: ORACLE not available
ID de processus : 0
ID de session : 0, Numéro de série : 0

--
-- Essai de création du pfile à l'image du spfile
--
SQL> create pfile='/tmp/pfileEC.ora' from spfile;
create pfile='/tmp/pfileEC.ora' from spfile
*
ERROR at line 1:
ORA-01565: error in identifying file '?/dbs/spfile@.ora'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

--
-- Afficher l'emplacement exact du SPFILE
--
SQL> ! cat $ORACLE_HOME/dbs/initF100.ora
SPFILE='+SYSDG01/F100/spfileF100.ora'

--
-- Création du pfile à l'image du spfile
--
SQL> create pfile='/tmp/pfileEC.ora' from spfile='+SYSDG01/F100/spfileF100.ora';

File created.

SQL> exit

--
-- Éditer le pfile pour enlever la ligne SGA_MAX_SIZE
--
oracle@romeo:/tmp> vi pfileEC.ora

--
-- Redémarrer la base de données avec le PFILE pour s'assurer
-- aucune autre erreur

--
oracle@romeo:/tmp> sqlplus / as sysdba


SQL*Plus: Release 11.2.0.1.0 Production on Mer. Mai 5 12:12:40 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.


Connected to an idle instance.

SQL> startup pfile='/tmp/pfileEC.ora'

ORACLE instance started.

Total System Global Area 1871208448 bytes
Fixed Size 2149152 bytes
Variable Size 1325405408 bytes
Database Buffers 536870912 bytes
Redo Buffers 6782976 bytes
Database mounted.
Database opened.

--
-- Création du spfile à l'image du pfile
--
SQL> Create spfile='+SYSDG01/F100/spfileF100.ora' from pfile='/tmp/pfileEC.ora';

File created.

--
-- Arrêt de la base de données
--
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

--
-- Redémarrer la base de données à partir du Grid Infrastructure
--
oracle@romeo:/tmp> srvctl start database -d F100

Calculer le MEMORY_TARGET sous 11g

À partir des valeurs actuelles du SGA et du PGA, vous pouvez facilement déterminer les valeurs des nouveaux paramètres relatifs à la gestion automatique de la mémoire. Pour simplifier le calcul, je me suis bâtit une requête qui me propose les valeurs de base. La voici :

Select '-- Memory Target = '
||round(to_char((qry_sga_target.value+
greatest(qry_pga_target.value,
qry_pga_alloc.value)))/1024/1024)||' MB'||chr(10)||

'Alter system set memory_target='
||
to_char((qry_sga_target.value+
greatest(qry_pga_target.value,
qry_pga_alloc.value)))||' scope=spfile;'||chr(10)||

'-- Memory Max Target = '
||round(to_char((qry_sga_max.value+
greatest(qry_pga_target.value,
qry_pga_alloc.value)))/1024/1024)||' MB'||chr(10)||

'Alter system set memory_max_target='
||
to_char((qry_sga_max.value+
greatest(qry_pga_target.value,
qry_pga_alloc.value)))||' scope=spfile;'||chr(10)||

'Alter system reset sga_target scope=spfile;'||chr(10)||
'Alter system reset pga_aggregate_target scope=spfile;'||chr(10)||
'-- SGA_MAX_SIZE ne doit pas etre superieur a MEMORY_TARGET'||chr(10)||
'Alter system set sga_max_size='
||to_char((qry_sga_target.value+
greatest(qry_pga_target.value,
qry_pga_alloc.value)))||' scope=spfile;' CMD_SQL

from (select value from v$parameter
where name='sga_target') qry_sga_target,

(select value from v$parameter
where name='pga_aggregate_target') qry_pga_target,

(select value from v$pgastat
where name='maximum PGA allocated') qry_pga_alloc,

(select value from v$parameter
where name='sga_max_size') qry_sga_max
;


Il ne vous reste qu'à estimer le MEMORY_MAX_TARGET.

samedi 28 février 2009

Migrer une base de données vers un autre ORACLE_HOME

J'ai eu à migrer une bases de données 10.2.0.3 à 10.2.0.4.

La façon préconisée a été d'installer un nouveau "ORACLE_HOME" et tant qu'à faire, j'en ai profité pour déployer le CPU d'Oracle (Critical Patch Update Jan2009).

Installation
1. Installer le logiciel "Oracle Database 10.2.0.1"
2. Installer le patchset "Oracle Database 10.2.0.4"
3. Installer le "CPU January 2009"

Migration
1. Arrêt de la base de données

$ sqlplus / as sysdba
SQL> shutdown immediate

2. Création d'un fichier de paramètres PFILE à partir du SPFILE

$ sqlplus / as sysdba
SQL> create pfile='ORACLE_HOME/dbs/initORCL.ora' from spfile;
$ cd ORACLE_HOME/dbs
$ cp initORCL.ora NOUV_ORACLE_HOME/dbs/initORCL.ora

3. Editer le PFILE et modifier les paramètres dont ceux qui pointent dans l'ancien ORACLE_HOME ( compatible, optimizer_features_enable, etc...)

$ cd NOUV_ORACLE_HOME/dbs
$ vi initORCL.ora

4. Modifier le fichier ORATAB

Changer l'ORACLE_HOME correspondant à la base de données

$vi oratab
ORCL:NOUV_ORACLE_HOME:Y

5. Modifier le fichier de configuration du listener

(SID_DESC =
(GLOBAL_DBNAME = ORCL.world)
(ORACLE_HOME = NOUV_ORACLE_HOME)
(ENVS = 'LD_LIBRARY_PATH=NOUV_ORACLE_HOME/lib')
(SID_NAME = ORCL)

6. Redémarrer le listener

$ lsnrctl reload lsnr1020

7. Création des liens pour des fichiers (optionel)

Si vous n'utilisez pas les emplacements par défaut de certains fichiers (c'est mon cas!) alors vous devez créer des liens symboliques sous Unix.

Il suffit de se positionner dans le répertoire par défaut puis d'exécuter la commande:

- Pour l' ALERTSID.LOG
cd NOUV_ORACLE_HOME/rdbms/log
ln -s REPERTOIRE_DE_DESTN/alert_ORCL.log alert_ORCL.log

- Pour les fichiers de configuration (PFILE, SPFILE)
cd NOUV_ORACLE_HOME/dbs
ln –s REPERTOIRE_DE_DESTN/initORCL.ora initORCL.ora
ln –s REPERTOIRE_DE_DESTN/spfileORCL.ora spfileORCL.ora

8. Créer le fichier de mot de passe

$ orapwd file=NOUV_ORACLE_HOME/dbs/orapwORCL password= entries=20

9. Démarrer la base de données sous le nouveau ORACLE_HOME

$ sqlplus / as sysdba
SQL> create spfile from pfile='NOUV_ORACLE_HOME/dbs/initORCL.ora';

10. Démarrer la migration de la base de données

SQL> startup upgrade
SQL> SPOOL upgrade_info.log
SQL> @?/rdbms/admin/utlu102i.sql
SQL> SPOOL OFF

-- Vérifier le log précédent pour tout problème

SQL> SPOOL patch.log
SQL> @?/rdbms/admin/catupgrd.sql
SQL> SPOOL OFF
-- Vérifier le log précédent pour tout problème

11. Redémarrer la base de données en mode normal

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP

12. Recompiler les objets invalides

SQL> @?/rdbms/admin/utlrp.sql

13. Vérifier le statut des composantes de la base de données

SQL> SELECT COMP_NAME, VERSION, STATUS FROM SYS.DBA_REGISTRY;


Cette façon permet de réinstaller proprement le logiciel de la base de données. Aussi, l'avantage de celle-ci est que si votre ORACLE_HOME actuel est partagé par plusieurs bases de données, vous pourrez migrer une base de données sans impacter les autres. Cette méthode peut aussi être utilisé pour déplacer une base de données vers un autre ORACLE_HOME.

mercredi 4 février 2009

Segment d'annulation corrompu

Si un jour vous êtes pris avec des segments d'annulation système corrompus dans un tablespace, pensez à utiliser le paramètre caché "_corrupted_rollback_segments". Il vous permettra de détruire le tablespace qui contient ces segments corrompus ainsi que les segments corrompus.

Ce paramètre doit être inscrit dans le fichier de paramètres PFILE (initSID.ora) et il doit être affecté des noms des rollback segments corrompus.

Exemple : _corrupted_rollback_segments = _syssm24$

Il suffit de démarrer la base de données avec le fichier de paramètres contenant ce paramètre et, de procéder au ménage. Par la suite, vous pourrez redémarrer la base de données avec le SPFILE.

Il est fortement recommandé d’utiliser ce paramètre en dernier recours. Si vous l’utiliser, veuillez prendre une copie de sauvegarde de vos données car vous avez probablement une corruption de données à d’autres endroits et vous risquez de faire face à d’autres problèmes.