1 Introduction
Ce document a été prévu pour les cas de perte de données (datafile), du redolog (online), d’un fichier de contrôle (ctl), d’un rollback segment, du tablespace system, fichier, d’altération de bloc de données ….
L’organisation de ce document est purement historique.
2 Fichiers de configuration SQLNET V2.0 avec Oracle 7.3.4
a) listener.ora
(il se trouve dans /XXXX/oracle/network/admin ou dans /XXXX/oracle/tnsadmin ).
Ce fichier liste les bases de données visibles de SQLNET.
b) tnsname.ora
Ce fichier liste les clients Oracle (pour SQLNET) (un nom de service = une base ???) ???.
Dès qu’on modifie un de ces fichiers, il faut relancer le démon listener SQLNET V2.
lsnrctl reload (ou bien “lsnrctl stop” puis “lsnrctl start” ).
3 Augmenter la taille d’un datafile
set pages 10
select * from v$tablespace;
select name, bytes , ts# from v$datafile;
(pour calculer la taille du “datafile”), ou bien :
select tablespace_name, file_name, bytes from dba_data_files where tablespace_name=’EPT_TS_DATA1′
alter database datafile ‘/ora_data_tbl/eptidbo/epti_data001.dbf’ resize 800 M ;
(alter tablespace USER_DATA autoextend unlimited;) (???).
4 Réparation d’une base en cas de la perte d’un fichier datafile
Voici la procédure de restauration à appliquer :
– open database : STARTUP MOUNT;
– fichier offline : ALTER DATABASE DATAFILE OFFLINE;
– ALTER DATABASE OPEN;
– Restauration fichier : RECOVER DATAFILE; (après message : recover complete).
– Activer fichier de données : ALTER DATABASE DATAFILE ONLINE;
Note : existe aussi « recover tablespace » et « recover database », pour le cas de la restauration de plusieurs fichiers de données (à utiliser avec prudence).
5 Réparation d’une base si fichier “.ctl” est cassé (en Oracle 7.3.4.)
En cas de perte d’un fichier de contrôle, restauration possible :
– => si existe un miroir du fichier de contrôle perdu.
– => si existe une trace du fichier de CTL => ce qui permet de recréer le fichier de CTL.
Exemple de procédure de restauration :
Par exemple, si on a, par exemple les messages :
ORA-01110 : data file 1 : ‘/data_3/…./system_1.dbf’
ORA-01207 : file is more recent than control file.
on ne démarre que sur le 2° control file, en supprimant le 1er « control file », précisé dans le fichier « initXXX.ora ».
svrmgrl
connect internal ;
startup mount;
select * from v$log;
group sequence
67
65
66
select * from v$logfile;
/data_1/oracle_gret/gret_log_3_1.rdo
(note : ici avec cette commande, on voit s’afficher une liste de “logfiles” (liste de chemins _ paths _ absolus et fichiers unix).
select * from v$recover_file;
sequence# change#
select * from v$log_history;
sequence#
1er essai de “recover” de la base :
recover database until cancel using backup controlfile ;
(note : prompt affiché : <RET> = suggested | filename | AUTO | CANCEL )
On choisit alors “AUTO” (et non “OK”).
2ème essai de “recover” de la base :
Au : prompt affiché : « <RET> = suggested … », le réponds par le nom du fichier log, par exemple, par le « filename » : /data_3/oracle_gret/gret_log_1_2.rdo
(note : si les messages suivants, ci-dessous, s’affichent, alors l’opération est réussie :
log appli
Media recovery completed ).
Alter database open resetlogs ;
(note : on doit alors voir s’afficher le message : « statement processed ).
Test de fonctionnement de la base :
Select * from dba_freespaces ;
Shutdown immediate ;
Copie du 2ème “control file” sur le 1er (sur celui qui était “vérolé”).
Restauration du fichier « initXXX.ora », spécifiant les 2 fichiers « control file » employés.
Redémarrage de la base Oracle : startup open
6 Réparation d’une base dont l’un des fichiers de journalisation « …log …rdo » a été supprimé par erreur (Oracle 7.3.4)
svrmgrl
shutdown immediate ;
archive log liste ; (???)
alter system [disable | enable ] restricted session ;
recover database until cancel ;
alter database open resetlogs;
shutdown immediate ;
startup open;
Test fonctionnement de la base : select * from dual;
7 Réparation d’une base en cas de perte du fichier redolog ONLINE
=> procédure de restauration à appliquer :
– arrêt database : – shutdown
– suppression redolog : – rm …
– relance et montage BD : – statup mount
– restauration de la BD : – recover database (archive fic. Log)
– ouvrir BD avec recreation de log : – alter database open resetlogs
– sauvegarde physique de la base arrêtée.
8 Problème d’extension de tablespace : Ajout d’un fichier à un tablespace en Oracle 7.1.6 & 7.3.4
svrmgrl
connect internal
alter tablespace TEMP_1 add datafile ‘xxx/MIDV_temp_1.dbf’ size 20M ;
alter tablespace TEMP_1 default storage (initial 1M next 1M pctincrease 0);
select * from dba_tablespaces;
select tablespace_name, filename, bytes from dba_data_files ;
Ajout d’un “datafile” à un tablespace existant :
Svrmgrl
connect / as sysdba ;
ALTER TABLESPACE nom_tablespace ADD DATAFILE ‘xxx.dbf’ SIZE 20M ;
ALTER TABLESPACE TEMP_1 DEFAULT STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0);
SELECT * FROM DBA_TABLESPACE ;
Recherche de doublons dans une table :
Select col from table having(col) > 1 group by col ;
=> Exemple d’options de l’import d’Oracle :
imp system/manager file=expdat.dmp destroy=y full=y ignore=y log=expdat.log
=> Exemple d’options de l’export d’Oracle :
(exemple du contenu d’un script d’export : export_db ).
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
export ORACLE_HOME=/oracle/9.2.0
export PATH=$ORACLE_HOME/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sgbd/oracle/bin:/
usr/bin/X11:/sbin:.
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export TNS_ADMIN=/oracle/9.2.0/network/admin
export ORACLE_SID=PILOAP
exp system/manager full=yes compress=yes file=/ora_data_tbl/piloap/exppilo.dmp log=/util/admindb/pilo/ap/expilo.log statistics=none grants=yes indexes=yes
Sur NT, script exp_PILDBO.BAT dans c:\UTIL\ADMINDB\PIL\OPER :
REM
set ORACLE_SID
dir E:\data\pildboPROD.dmp
pause
set ORACLE_SID=PILO
set ORACLE_SID
pause
c:\orant\bin\exp73.exe system/manager full=yes compress=yes file=E:\data\pildboPROD.dmp log=C:\ORANT\expildboPROD.log statistics=none grants=yes indexes=yes
dir E:\data\pildboPROD.dmp
pause
=> Exemple de fichier ‘parfile’ pour l’import d’Oracle :
login/passe indexfile=creix.sql file=expdat.dmp (full=Y) (from use=c) (log=imp.log) |
Exemple :
c/c indexfile=ix.sql file=expC.dmp (full=Y) (from use=c) (log=imp.log)
|
La commande d’import sera par exemple : imp sumeq=sumeq parfile=parfile
Note : pour l’export Oracle (exp), on peut mettre l’option « compress=N ».
Faire un export/import d’une base sur une machine vers une autre base sur une autre machine
(avec des noms de tablespaces différents).
Note : pour la volumétrie : il y a le logiciel Oracle : oraflash2 (à partir du ‘dba_menu’ ???).
Opérations sur la machine source :
faire un full export (de l’utilisateur administrateur).
Par exemple : exp c/c [full=y] (export normal).
Opérations sur la machine cible :
créer le fichier « parfile » suivant :
login/passeindexfile=creix.sqlfile=expdat.dmp(full=Y)(from use=c)(log=imp.log) Exemple :c/cindexfile=ix.sqlfile=expC.dmp(full=Y)(from use=c)(log=imp.log)
faire un « imp c/c » normal (full). On importe les tables/données dans les tablespaces par défaut de l’utilisateur de l’import.
On génére un script de création d’index (avec la commande suivante et le parfile précédent) :
imp c/c parfile=parfile
Note : Il ne crée pas les tables mais crée le script : « creix.sql »
On modifie dans ce script « creix.sql », le nom du tablespace des index par celui qui est le « bon » (par exemple « CAPA_1 » par « C_2 »).
Note : Attention, ôter, dans ce script, l’ordre : « connect c ».
On lance ce script modifié : sqlplus c/c @creix.sql
9 Export d’une liste de tables
script « export_T_RAPPORT.sh » :
export ORACLE_SID=TTTDBT
exp system/manager file=/ora_arch_log/tttdbt/exp_TTT_T_RAPPORT.dmp indexes=y constraints=no grants=no tables= TTTDBA.T_RAPPORT,TTTDBA.T_RAPPORT_FOURN, TTTDBA.T_RAPPORT_PALIER log=log/export_TTT_T_RAPPORT.log
10 Export/import d’une base d’une machine vers une autre, en changeant le nom des tablespaces
a) machine source :
a.1) lancer le script export_chmdbaw contenant les lignes suivantes :
#!/bin/ksh
echo « init variables oracle »
export ORACLE_HOME=/sgbd/oracle/8.1.7
export PATH=/sgbd/oracle/8.1.7/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
export ORACLE_SID=CHMDBO
echo « etape 1 : export no row : export schema base »
exp chmdbaw/chmdbaw file=/ora_arch_log/exp_chmdbaw_norow.dmp rows=no log=exp_chmdbaw_norow.log
echo « etape 2 : export indexfile (pour créer un script de creation d’indexes) »
imp chmdbaw/chmdbaw file=/ora_arch_log/exp_chmdbaw_norow.dmp indexfile=/ora_arch_log/ exp_chmdbaw_ixfile.sql log=exp_chmdbaw_ixfile.log
b) transférer par ftp , les 3 fichiers : exp_chmdbaw_ixfile.sql et exp_chmdbaw_norow.dmp
c) machine cible :
c1.) Modifier les noms des tablespaces (sources par ceux cible) dans le fichier : exp_chmdbaw_ixfile.sql
Lancer l’exécution de ce script sql : sqlplus system/Mdp @exp_chmdbaw_ixfile.sql
c.2) Lancer le script import_chmdbaw contenant les lignes suivantes :
# maj par B. LISAN 20 oct 05
export ORACLE_SID=CHMDBO
export NLS_LANG=french_france.WE8ISO8859P15
imp chmdbaw/chmdbaw file=/ora_data_tbl/chmdbo/exp_chmdbaw_norow.dmp fromuser=CHMDBAW touser=CHMDBAW grants=y indexes=y commit=y ignore=y log=imp_chmdba.log
#imp system/xxx file/ora_data_tbl/chmdbo/exp_chmdbaw_norow.dmp fromuser=chmdbaw touser=chmdbaw ignore=y
11 Effacement par erreur du datafile avant de faire le drop de la tablespace associée
Message d’erreur : ORA-07368 : …
(note pas d’entrée pour cette erreur avec « oerr ora 07368 »).
Copier la tablespace (si possible)
sqlplus system/manager
alter tablespace TOTO offline;
Si OK, faire alors : alter database datafile ’/xxx/datafilex.dbf’ offline drop ;
Puis : drop tablespace C1 including contents ;
Une règle : en général, toujours lancer les commandes oracle avant les commandes unix.
12 Exemples de commandes DBA Oracle
Select * from v$database ;
Select sum(blocks), owner from dba_segments group by owner ;
Alter table TOTO deallocate unused ;
Select sum(blocks) from dba_data_files ;
Select sum(blocks), tablespace_name from dba_free_spaces group by tablespace_name ;
Set page 0
Select ‘alter table SUMEQ.’||[table_name|index_name]||’ deallocate unused keep 10k ;’ from [dba_tables|dba_indexes] where owner = ‘SUMEQ’;
Select count(*) from dba_indexes where table_owner=’SUMEQ’;
Truncate table TABLE1 ; (???)
DANGER ! : drop tablespace TABSPACE1 including contents ;
Alter user SUMEQ default tablespace TABSPACE2;
13 Exemple de type de démarrages et d’arrêt d’une base Oracle
Lancements d’une base :
Startup mount ;
Startup open ;
Alter database open ;
Mode restreint : startup rectrict ;
Alter system disable restricted session ;
Arrêt d’une base :
Shutdown ;
Shutdown immediate ;
Shutdown abort ;
14 En cas d’une erreur ORACLE mentionnant RESETLOGS lors d’un database open
Message d’erreur :
ORA-01589 : must user RESETLOGS or NORESETLOGS option for database open
Note : diagnostic pas “bon”.
svrmgrl
connect internal ;
alter database open [resetlogs | noresetlogs ] ;
15 Mettre une base Oracle en archive log
shutdown immediate ;
faire une sauvegarde à froid de la base
modifier le fichier « initXXX.ora » et y mettre :
Log_archive_start=true
Relancer “svrmgrl”.
Se connecter avec l’instance sysdba : connect a/a as sysdba ;
Startup mount ;
Alter database archive log ;
Alter database open ;
“archive log list;“ affiche alors “mode: archive automatical archival enable“.
Il faut sauvegarder le “control file“ :
Alter database backup controlfile to trace ;
Notes : . On doit voir apparaître le répertoire « userdumpdest ».
. L’archive est au format « control file ».
Startup mount ;
Alter system archive log start ;
16 Pour faire une sauvegarde manuelle de type archive log
Alter tablespace begin backup tablespace XXX ;
( alter tablespace unbackup tablespace XXX ; ).
17 Voir des cessions (leurs locks …)
Select sid, username from v$sessions ;
Select * from v$process;
18 Erreurs lors du lancement de la base (fichiers de contrôle perdu)
Messages d’erreur : ORA-01157 : cannot identify datafile 14 – file not found
ORA-01110 : ‘/data_26/oracle_sumeq/sumeq_sumeq_3_3.dbf’
select * from v$recover_file ;
FILE ON LINE ERROR
14 ON LINE FILE NOT FOUND
select name from v$datafile ;
alter database datafile ‘/data_26/oracle_sumeq/sumeq_sumeq_3_3.dbf’ offline drop ;
alter database open ;
select * from dba_data_files;
drop tablespace TEMP_1 ;
Message d’erreur : « not empty ».
Select * from dba_segments where tablespace_name = ‘TEMP_1’ ;
On trouve 2 tables : PRODUCT_FILE et USER_FILE
DANGER ! : drop tablespace TEMP_1 including contents ;
Create tablespace TEMP_1 … ;
19 Changement de place d’un datafile
Select file_name from dba_data_files ; (ou “from v$logfile” ou « from v$database” ).
arrêt de la base (shutdown immediate ?).
cp –p /partition_de_départ/FIC.dbf /partition_cible
svrmgrl
connect internal ;
startup mount ;
select * from v$datafile ;
alter database rename file ‘ancien_datafile’ to ‘nouveau_datafile’;
(alter database open ; )
shutdown immediate ;
startup mount ; (et start DB Oracle) ;
select * from v$datafile ;
Eventuellement, modifier le chemin du “control file” dans le fichier « iniXXX.ora ».
20 Si erreur Oracle : log on line non disponible (ORA-00313 ou ORA-00322)
Messages d’erreurs : ORA-00313 : open failed for members of log group %s of thread %s
ORA-00322 : log %s of thread %s is not current copy
a) Erreur ORA-00313 :
Cause: La « log online » ne peut pas être ouverte. La base semble incapable de trouver le fichier. Action: Voir les erreurs accompagnant le message d’erreur et faire en sorte que la log soit de nouveau disponible.
b) Erreur ORA-00322 :
Cause: La vérification de l’entête (header) de la “log file” à l’ouverture de la database (« open database ») montre que la « online log » est un « backup » restauré incorrect.
Action: Restaurer les correct “file” ou “reset logs” corrects.
connect internal ;
startup mount ;
alter database open resetlogs;
shutdown immediate ;
startup pmount=initXXX.ora
21 Rétablir le mot de passe du login “system”
sqlplus /nolog
connect / as sysdba
alter user system identified by manager ;
22 Création d’un fichier mot de passe
Mot de passe ayant été modifié par la commande :
orapwd file=/oracle/9.2.0/dbs/orapwPILOdbo password=Lfst2f$lcm#eaX entries=5
23 Suppression de la limite « maxextents » pour tables et indexes
Il faut d’abord trouver le propriétaire ([owner]) à qui appartient l’objet (table, index …).
Par exemple :
select owner, index_name from dba_indexes where index_name like ‘%I_COL_SESSIONS%’;
select owner, table_name from dba_tables where table_name = ‘TTDPUR051950’;
Alter [table|index] [ [owner.]nom_table | [owner.]nom_index ] storage ( maxextents unlimited ) ;
Exemple : alter table BAAN.TTDPUR051950 storage ( maxextents unlimited );
24 Déplacer un datafile d’un répertoire à un autre
Actions à faire pour renommer un fichier qui n’est pas dans le bon répertoire (avec copie du fichier dans le bon répertoire cible).
1.Mettre le tablespace offline en utilisant la commande ALTER TABLESPACE avec la clause OFFLINE :
ALTER TABLESPACE accounting OFFLINE NORMAL;
2.Copier le fichier de ‘diska:pay1.dat’ vers ‘diskb:receive1.dat’.
3.Renommer le datafile en utilisant ALTER TABLESPACE avec la clause RENAME DATAFILE :
ALTER TABLESPACE accounting
RENAME DATAFILE ‘diska:pay1.dbf’
TO ‘diskb:receive1.dbf’;
4. Remettre la tablespace en utilisant ALTER TABLESPACE avec la clause ONLINE :
ALTER TABLESPACE accounting ONLINE;
25 Commandes diverses
25.1 Script DOS pour transfert ftp à partir de machine NT
REM copie FTP de NT a UNIX
echo open h443111m > c:\util\system\put_stat.cmd
echo user oracle machin >> c:\util\system\put_stat.cmd
echo cd /tmp >> c:\util\system\put_stat.cmd
echo put e:\data\pildboPROD.dmp >> c:\util\system\put_stat.cmd
echo bye >> c:\util\system\put_stat.cmd
cat c:\util\system\put_stat.cmd
pause
ftp -n < c:\util\system\put_stat.cmd
del c:\util\system\put_stat.cmd
pause
26 Contourner une limite de taille à la création d’un fichier d’export
Exemple de script shell à lancer :
#!/bin/ksh
# script shell : expSYMDBO.sh
# export full de la base SYMDBO (Symbad ope).
#
export nopipe=410 # ce numero de pipe est pris comme exemple
# creation des fichiers pipes nommes
# mknod /dev/pipe_${nopipe} p
# mknod /dev/compress_${nopipe} p
export DUMPDIR=/work_oracle/backup
export TAILLE_SPLIT=1000
export ORACLE_SID=SYMDBO
# === Test de l’existence des pipes
if [ ! -p /dev/pipe_${nopip} -o ! -p /dev/compress_${nopip}]
then
echo « \nATTENTION, au moins un des pipes nommes n’existe pas !!\n »
exit 1
fi
nohup split -b${TAILLE_SPLIT}m /dev/pipe_${nopip} $DUMPDIR/exp${ORACLE_SID}.dmp &
# === compress recupere les donnees du pipe compress_pipe_${nopip},les compresse
# === et renvoie le tout dans le pipe split_pipe_${nopip}
nohup compress < /dev/compress_${nopip} > /dev/pipe_${nopip} &
exp system/<MdP> file=/dev/compress_${nopip} full=y compress=y constraints=y indexes=y log=$DUMPDIR/exp${ORACLE_SID}.log
Note : Pour créer un fichier pipe nommé : mknod /dev/nom_pipe p
27 Vérification de l’état de la base de donnée
select trigger_name, trigger_type, owner, status from dba_triggers where status = ‘DISABLED’;
select object_name, object_type, owner, status from dba_objects where status = ‘INVALID’;
28 Commande NT pour savoir quell process lock un fichier
HANDLE.EXE (disponible sur le site : SYSINTERNAL).
29 Installation d’un patch ORACLE
1) arrêter toutes les bases oracle :
a) export ORACLE_SID=<sid_base>
b) svrmgrl (ou sqlplus /nolog).
c) connect internal
d) shutdown immediate
[ e) shutdown abort (si le « shutdown immediate” d’avant ne fonctionne pas) ]
[f) faire le kill [-9] le reste des derniers process oracle restant en mémoire]
g) lancer dtterm ou xterm (en Xwindows / X11 sous un émulateur X _ par ex. Humingbird … _ ou sur une station graphique Unix).
(xterm ls –display @d
aixterm -ls -sb -sl 1000 -display @d -T ‘nom_du_serveur’ -fn 6×13 -fg black -bg white ).
h) export DISPLAY=adr_IP_de_son_PC :0
i) mount /cdrom (être root).
[j) rootpre.sh ]
k) ./runIntaller
[ k2) éventuellement, modifier “l’init<sid>.ora” ]
l) svrmgrl (ou sqlplus /nolog).
m) connect internal
n) startup (doit faire le mount et l’open dans la base).
o) vérification par : select * from dba_users ;
p) lancer @chemin_ORACLE_HOME/catalog
q) lancer @chemin_ORACLE_HOME/catproc
r) shutdown immediate
[s) éventuellement, modifier “l’init<sid>.ora” ]
t) startup
30 Tests sql*net
a) Test listener : lsnrctl status
b) Test TNS : tnsping [ nom_machine | nom_listener_base ]
31 Divers : mount sur AIX
Note : mount sur AIX
mount -rv cdrfs /dev/cd0 /cdrom
32 Mot de passe
orapwd file=oraNOCIDBO password=Lfst2flcmeap entries=5
Et placer, dans le fichier “init<sid>.ora” :
remote_login_passwordfile=EXCLUSIVE
select username , LAST_CALL_ET , PROGRAM from sys.v_$session;
33 Chargement de données par SQL*LOADER
a) script « load_T_Rapport.sh » :
export ORACLE_SID=TTTDBT
sqlldr userid=system/manager control=load_T_Rapport.ctl log=log/load_T_Rapport.log
b) script load_T_Rapport.ctl :
— ********************************************************************
— * load_T_Rapport.ctl *
— * Creation controle SQLLOADER de table la table T_RAPPORT *
— ********************************************************************
—
— *********transfert de donnees sqlserver
—
— NUMFOUR;NUMFOURNEE;DATES;DATEDEBUTTRAIT;HEUREDEBUTTRAIT;DATEFINTRAIT;HEUREFINTRAIT;USERNAME;USERDESC;TOTALTAP;COMMENTAIRESFAB;NOMFAB;USERFAB;VALIDFAB;COMMENTAIRESQUALITE;NOMQUALITE;USERQUALITE;VALIDQUALITE;TTHPILOTE;IDFOURNEE
— F31;1;08/10/2005 00:00;08/10/2005 00:00;01/01/1900 16:30;10/10/2005 00:00;01/01/1900 16:30;S086508;MACHTELINCKX;100,8;RAS;TROUSSELIER;S086972;1;;;;1;00464-09-11-6376;F31-2005/10/08-1
—
options (rows=15000,errors=9999)
load data
infile ‘T_Rapport.csv’
— SKIP 1
badfile ‘log/t_rapport.bad’
discardfile ‘log/t_rapport.dsc’
discardmax 999
replace
— preserve blanks
into table TTTGENIO.T_RAPPORT
fields terminated by « ; » optionally enclosed by ‘ »‘
TRAILING NULLCOLS
(
NUMFOUR ,
NUMFOURNEE ,
DATES DATE ‘DD/MM/YYYY HH24:MI’ ,
DATEDEBUTTRAIT DATE ‘DD/MM/YYYY HH24:MI’ ,
HEUREDEBUTTRAIT DATE ‘DD/MM/YYYY HH24:MI’ ,
DATEFINTRAIT DATE ‘DD/MM/YYYY HH24:MI’ ,
HEUREFINTRAIT DATE ‘DD/MM/YYYY HH24:MI’ ,
USERNAME ,
USERDESC ,
TOTALTAP INTEGER EXTERNAL ,
— TOTALTAP DECIMAL(7,2) EXTERNAL ,
COMMENTAIRESFAB ,
NOMFAB ,
USERFAB ,
VALIDFAB ,
COMMENTAIRESQUALITE ,
NOMQUALITE ,
USERQUALITE ,
VALIDQUALITE ,
TTHPILOTE ,
IDFOURNEE
)
34 Arrêt / démarrage du « listener » Oracle
./lsnrctl start
./lsnrctl stop
35 Analyze de la base
1) En V9, pour un propriétaire d’un schéma de la base :
exec DBMS_STATS.GATHER_SCHEMA_STATS(‘DATAMART’,degree=> 20,cascade=>true);
2) En V8 et V9, pour une table donnée :
analyze nom_table compute statistics ;
36 Support Oracle
En cas d’un gros problème ORACLE, utiliser / consulter :
37 recompilation d’un package
alter package <owner>.<package> compile [body] ;
alter view <view> compile [body] ; (vue compilée).
Exemples :
alter package DBMS_AQ_IMPORT_INTERNAL compile body ;
alter package ecoldba.pkg_ecol_master compile ;