Vous êtes sur la page 1sur 109

FAQ Oracle

Date de publication : 18/09/2006


Dernire mise jour : 04/01/2009
Cette F.A.Q. a t ralise partir des questions frquemment poses sur le forum
Oracle de www.developpez.com et de l'exprience personnelle des auteurs. Elle pourra
traiter de tout type de questions portant sur les technologies Oracle.
Nous esprons que cette F.A.Q. saura rpondre un maximum de vos questions. Nous
vous souhaitons une bonne lecture.
L'quipe Oracle de Developpez.
Ont contribu cette FAQ :
Aline - rouardg - PlaineR - Pierre Forstmann - bouyao
(http://mbouayoun.developpez.com/) - LeoAnderson
(http://leoanderson.developpez.com/) - Laurent
Dardenne (http://laurent-dardenne.developpez.com/) -
Xavier Vlieghe (http://xo.developpez.com) - Laurent
Schneider (http://360.yahoo.com/laurentschneider) -
Lafouine - Jaouad (http://jaouad.developpez.com/) -
lalystar (http://lalystar.developpez.com/) - Pomalaix
- Fred_D (http://orafrance.developpez.com/) -
SheikYerbouti (http://sheikyerbouti.developpez.com/)
- Helyos (http://helyos.developpez.com/) -
FAQ Oracle
- 3 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
1. Forum Oracle (5) ....................................................................................................................................................................... 4
2. Gnral (4) ................................................................................................................................................................................. 6
3. Dveloppement (36) .................................................................................................................................................................. 8
3.1. SQL (18) ........................................................................................................................................................................... 9
3.2. PL/SQL (18) ................................................................................................................................................................... 30
4. Administration (67) ..................................................................................................................................................................46
4.1. Les Tables (6) ................................................................................................................................................................. 47
4.2. Les Utilisateurs (4) ......................................................................................................................................................... 52
4.3. Scurit (7) ......................................................................................................................................................................57
4.4. Les Tablespaces et autres fichiers (16) .......................................................................................................................... 62
4.5. Systme (14) ................................................................................................................................................................... 70
4.6. Objets (5) ........................................................................................................................................................................ 76
4.7. Archive Log (3) .............................................................................................................................................................. 80
4.8. ISqlPlus (10g) (3) ........................................................................................................................................................... 82
4.9. Autres (9) ........................................................................................................................................................................ 84
5. Outils (10) ................................................................................................................................................................................ 92
5.1. Rman (0) ......................................................................................................................................................................... 93
5.2. Exp/Imp (1) .....................................................................................................................................................................94
5.3. Dba Studio & OEM (0) ..................................................................................................................................................95
5.4. SQL*Plus (3) .................................................................................................................................................................. 96
5.5. Network Manager (3) ..................................................................................................................................................... 98
5.6. Portal (3) ....................................................................................................................................................................... 100
6. ERP (16) ................................................................................................................................................................................ 102
6.1. Peoplesoft (16) .............................................................................................................................................................. 103
6.1.1. Administration (14) ..............................................................................................................................................104
6.1.2. Scurit (1) ...........................................................................................................................................................109
FAQ Oracle
- 4 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Forum Oracle
Guide de bon usage de la FAQ et du Forum
Auteurs : Helyos ,
Lorsque vous vous trouvez devant un problme, voil la marche suivre :
Chercher dans la FAQ
Chercher sur Google
Faire une recherche sur le forum concern.
Si vous n'avez toujours pas trouv de rponse votre question : vous pouvez, aprs avoir lu les Rgles du forum
poster une question prcise avec un titre clair et vous enrichirez ainsi le forum Oracle.
Comment mettre le tag [Rsolu] ?
Auteurs : Helyos ,
Il n'est plus ncessaire et mme deconseill d'diter son premier post pour mettre le tag [Rsolu]. En bas gauche vous
avez un bouton qui se charge de mettre le tag. Par contre il est conseill d'diter et de mettre un titre clair quand ce
n'est pas le cas.
Que signifie le tag [Dlestage] ?
Auteurs : Helyos ,
La base de donnes du forum n'est pas extensible indfiniment. Nous devons "nettoyer les forums" pour que la base ne
devienne pas trop grosse, ceci entrainerait une chute des performances pour tous les utilisateurs. Pour faciliter ce travail
un Tag [Dlestage] est mis sur les threads supprimer. Pour quelles raisons les messages sont marqus [Dlestage] :
La rponse la question se trouve dans un tutoriel, dans la FAQ ou dans l'aide.
La rponse a dj t donne sur le forum.
Le titre n'est pas assez prcis.
La question est mal pose.
D'ailleurs vous pouvez, si vous tes l'auteur du message initial, marquer le fil de discussion pour [Dlestage]. Ce faisant,
vous amliorerez la lisibilit du forum, vous faciliterez le travail des modrateurs (ils sont bnvoles et ils ont plein de
choses plus passionnantes faire, comme rpondre une question qui n'a pas dj t pose).
Comment obtenir une bonne rponse ?
Auteurs : Helyos ,
En posant de meilleures questions !
Votre question sera lue par un grand nombre de personnes, faites l'effort de rdiger une question claire et prcise,
donnez les informations indispensables. Montrez que vous avez fait des recherches en expliquant votre raisonnement,
et le but atteindre. Par contre, il est inutile de dire "J'ai cherch et je n'ai pas trouv". Les habitus du forum sauront
vite si vous avez bien cherch ou pas. Ne soyez pas press, les personnes qui vous rpondent sont des bnvoles qui vous
consacrent du temps, soyez-en reconnaissant. Rappelez-vous toujours qu'elles ne vous doivent rien.
FAQ Oracle
- 5 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Afin de les aider trouver une solution plus rapidement, pensez prciser la version de votre base de donnes, l'utilitaire
utilis, le code utilis et les erreurs que vous avez obtenues.
Que signifie le tag [FAQ] ?
Auteurs : Helyos ,
Afin de faciliter les recherches sur des thmes rcurrents, l'quipe Oracle mis en place cette FAQ. Les membres de
l'quipe passent donc rgulirement sur le forum afin d'identifier les questions qui reviennent de manire rpte sur le
forum. Une fois la question identifie, on lui assigne le tag [FAQ] afin de l'ajouter le plus rapidement possible la FAQ.
FAQ Oracle
- 6 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Gnral
O se trouve le fichier INIT.ora de ma base?
Auteurs : Helyos ,
Si votre installation est une installation standard, ce fichier se trouve dans le rpertoire :
%ORACLE_HOME\admin\%ORACLE_SID%\pfile
Il existe aussi un fichier init{SID}.ora dans le repertoire %ORACLE_HOME%\dbs mais en rgle gnrale ce fichier
contient juste un paramtre IFILE qui redirige vers le fichier donn au dbut.
lien : Que signifie %ORACLE_HOME% ?
lien : Que signifie %ORACLE_SID% ?
Que signifie %ORACLE_HOME% ?
Auteurs : Helyos ,
%ORACLE_HOME% est une variable d'environnement qui correspond en fait au rpertoire d'installation de votre
Oracle. Par exemple si vous avez install par dfaut une Oracle 9i votre %ORACLE_HOME% correspondra c:\oracle
\ora92.
-- Sous Windows
SET ORACLE_HOME=c:\oracle\ora92
--Sous Linux en BASH
export ORACLE_HOME=/home/oracle/OraHome1
--Sous Linux en C Shell
setenv ORACLE_SID
/home/oracle/OraHome1
Que signifie %ORACLE_SID% ?
Auteurs : Helyos ,
%ORACLE_SID% est une variable d'environnement qui correspond en fait au nom de l'instance sur laquelle vous
souhaitez vous connecter. Par exemple si vous avez 2 instances actuellement en cours d'utilisation sur votre serveur
TOTO et TATA, et que vous souhaitez vous connecter TATA, il vous faudra alors positionner cette variable
d'environnement TATA.
-- Sous Windows
SET ORACLE_SID=TATA
--Sous Linux en BASH
export ORACLE_SID=TATA
--Sous Linux en C Shell
setenv ORACLE_SID
FAQ Oracle
- 7 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
TATA
Combien cote la license Oracle ? Est-ce gratuit ?
Auteurs : Fred_D ,
Tous les produits dits par Oracle sont disponibles en version complte et gratuitement sur leur site de
tlchargement.
Nanmoins, seul SQL Developper est gratuit quelles que soient les circonstances. En effet, les autres produits ne sont
disponibles gratuitement qu' des fins de tests du produit (hors de question de l'utiliser pour tester des dveloppements,
seul le prototypage est autoris) et d'auto-formation seulement ! Vous pouvez lire la license sur cette page : http://
www.oracle.com/technology/software/htdocs/devlic.html .
Pour tout autre usage professionnel, il faudra vous acquitter d'une license qui dpend de trop nombreux paramtres
pour pouvoir tre dtaille ici . Je vous invite donc aller directement sur le site de vente en ligne Oracle Store pour
vous faire une ide. videmment, il est important de vrifier et/ou discuter des conditions tarifaires avec un commercial
Oracle.
A noter galement qu'Oracle propose une distribution entirement gratuite et professionnelle sous l'appellation
d'Oracle Database 10g Express Edition. Cette version limite intgre la base de donnes en version 10g, le dveloppement
d'une application ainsi que du reporting.
FAQ Oracle
- 8 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Dveloppement
FAQ Oracle
- 9 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Dveloppement > SQL
Comment filtrer les n premires lignes d'une requte avec ROWNUM ?
Auteurs : SheikYerbouti ,
Obtenir les 10 premires lignes d'une requte non trie :
SELECT *
FROM EMP
WHERE ROWNUM <= 10 ;
Obtenir les 10 premires lignes d'une requte trie :
SELECT *
FROM (SELECT *
FROM EMP
ORDER BY ename)
WHERE ROWNUM <= 10 ;
Explication de la seconde requte :
Chaque ligne retourne par une requte se voit attribuer un numro, commenant par 1.
Cela est parfait tant que les donnes ne sont pas tries avec le mot-cl ORDER BY !
Par contre, si vous souhaitez trier les donnes, le numro (ROWNUM) est attribu pour chaque ligne AVANT le tri
final !
Prenons un exemple en affichant le contenu de la table EMP tri par salaires :
1 SELECT ROWNUM, a.*
2 FROM emp a
3 WHERE sal > 1000
4* ORDER BY sal
SQL>
SQL> /
ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
11 7900 JAMES CLERK 7698 04/12/81 1045 30
10 7876 ADAMS CLERK 7788 24/05/87 1210 20
14 9991 Dupontont CLERK 7698 24/01/82 1210 10
15 9992 Duboudin CLERK 7698 24/01/82 1215 1250 10
2 7521 WARD SALESMAN 7698 23/02/81 1375 500 30
4 7654 MARTIN SALESMAN 7698 29/09/81 1375 1400 30
13 7934 MILLER CLERK 7782 24/01/82 1430 10
9 7844 TURNER SALESMAN 7698 09/09/81 1650 0 30
1 7499 ALLEN SALESMAN 7698 21/02/81 1936 300 30
16 9994 Schmoll CLERK 7698 24/05/87 2500 20
6 7782 CLARK MANAGER 7839 10/06/81 2695 2000 10
ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
5 7698 BLAKE MANAGER 7839 02/05/81 3135 30
3 7566 JONES MANAGER 7839 03/04/81 3273 20
7 7788 SCOTT ANALYST 7566 20/04/87 3300 20
12 7902 FORD ANALYST 7566 04/12/81 3300 20
8 7839 KING PRESIDENT 18/11/81 5500 10
16 ligne(s) slectionne(s).
Nous ne voulons maintenant afficher que les 4 premires lignes :
FAQ Oracle
- 10 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> SELECT ROWNUM, a.*
2 FROM emp a
3 WHERE sal > 1000
4 AND ROWNUM < 5
5 ORDER BY sal ;
ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
2 7521 WARD SALESMAN 7698 23/02/81 1375 500 30
4 7654 MARTIN SALESMAN 7698 29/09/81 1375 1400 30
1 7499 ALLEN SALESMAN 7698 21/02/81 1936 300 30
3 7566 JONES MANAGER 7839 03/04/81 3273 20
les CLERK ont disparu !
Simplement parce que le tri a t effectu aprs que le ROWNUM ait t affect aux lignes retournes par la requte.
Il faut donc trier les donnes avant qu'Oracle ne leur affecte un numro !
Ceci est ralis par un tri inclus dans une sous-requte :
SQL> SELECT ROWNUM, a.*
2 FROM (
3 SELECT *
4 FROM emp
5 ORDER BY sal
6 ) a
7 WHERE ROWNUM < 5 ;
ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
1 7369 SMITH CLERK 7902 18/12/80 880 20
2 7900 JAMES CLERK 7698 04/12/81 1045 30
3 7876 ADAMS CLERK 7788 24/05/87 1210 20
4 9991 Dupontont CLERK 7698 24/01/82 1210 10
Voici enfin le rsultat attendu.
Comment slectionner du m-ime au n-ime enregistrements ?
Auteurs : Fred_D ,
Voici une mthode pour filtrer la liste des enregistrements sur des intervalles conscutifs depuis la version 8i :
les 5 premiers :
SELECT ename, job
FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num
FROM emp
)
WHERE num BETWEEN 1 AND 5;
les 5 suivants :
SELECT ename, job
FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num
FROM emp
)
WHERE num BETWEEN 6 AND 10;
FAQ Oracle
- 11 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
de la m-ime la n-ime ligne :
SELECT ename, job
FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num
FROM emp
)
WHERE num BETWEEN &m AND &n;
Ces exemples utilisent la fonction analytique ROW_NUMBER. Cette fonction est trs similaire au ROWNUM utilis
dans le paragraphe prcdent mais est appliqu sur le rsultat de la requte et pas pendant l'excution de la requte
elle-mme.
Avec ROWNUM, la requte prcdente aurait pu s'crire :
SELECT ename, job
FROM ( SELECT ename, job, ROWNUM num
FROM (
SELECT ename, job
FROM emp ORDER BY sal
)
)
WHERE num BETWEEN &m AND &n;
Les fonctions analytiques peuvent sensiblement simplifier les requtes et ventuellement amliorer leurs performances.
Comment dtecter et supprimer les doublons ?
Auteurs : lalystar ,
Supposons qu'on ait une table PERSONNE (nom, prenom, telephone) et qu'on souhaite avoir la liste des personnes
ayant le mme nom et le mme prnom. On peut l'obtenir avec la requte suivante :
select nom, prenom
from PERSONNE
group by nom, prenom
having count(*) > 1;
Si on ne veut garder qu'une seule ligne pour chaque ensemble de personnes ayant le mme nom et le mme prnom, le
choix se faisant de manire arbitraire, on peut utiliser la requte suivante :
delete PERSONNE a
where rowid > (
select min(rowid)
from PERSONNE b
where b.nom = a.nom and
b.prenom = a.prenom
);
Remarque :
- cette requte doit tre adapte si l'une des colonnes nom ou prnom peut tre nulle.
- cette requte garde la ligne de rowid minimum parmi l'ensemble des lignes ayant mme nom et mme prnom.
FAQ Oracle
- 12 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
lien : Comment slectionner du m-ime au n-ime enregistrements ?
Comment dtecter les enregistrements empchant la validation d'une contrainte ?
Auteurs : Jaouad ,
l'aide de la table des exceptions : elle peut se crer via ce script :
create table exceptions(
row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
Ou en utilisant le script fournit dans $ORACLE_HOME/RDBMS/admin/UTLEXCPT.SQL.
Voyons son utilisation au travers de ce jeu d'essais :
create table test (
a varchar2(10),
b number );
-- Insertion des valeures
insert into test values ('a',1);
insert into test values ('b',2);
insert into test values ('c',3);
insert into test values ('d',4);
insert into test values ('a',5);
insert into test values ('e',6);
insert into test values ('f',7);
insert into test values ('b',8);
insert into test values ('a',9);
insert into test values ('z',10);
commit;
Essayons maintenant de crer une contrainte d'unicit : nous allons obtenir une erreur :
SQL> alter table test add constraint TEST_PK unique (a)
2 exceptions into exceptions ;
alter table test add constraint TEST_PK unique (a)
*
ERREUR la ligne 1 :
ORA-02299: impossible de valider (SCOTT.TEST_PK) - cls en double trouves
La requte suivante nous permet d'identifier les lignes posant problme :
Retrouver toutes les valeurs en doubles
SQL> select * from test where rowid in ( select row_id from exceptions where table_name='TEST' and o
wner ='SCOTT' ) ;
A B
---------- ----------
a 1
b 2
a 5
b 8
FAQ Oracle
- 13 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Retrouver toutes les valeurs en doubles
a 9
Comment supprimer/remplacer des caractres avec la fonction TRANSLATE ?
Auteurs : SheikYerbouti ,
Cette fonction permet d'effectuer plusieurs remplacements d'un coup ( l'inverse de REPLACE() qui ne permet le
remplacement que d'un caractre ou une chane la fois) :
TRANSLATE( chane en entre, chane de recherche, chane de substitution ) ;
Exemple de suppression de caractres indsirables pour la constitution d'un nom de fichier :
SQL> SELECT TRANSLATE ( 'Nom/de~fichier;non.conforme', '1/\^~.,;', '1' ) "Fichier"
2 FROM DUAL ;
Fichier
-----------------------
Nomdefichiernonconforme
Le premier argument de la fonction est la chane en entre,
Le deuxime indique la chane de recherche,
Le troisime indique la substitution caractre par caractre,
En clair, le premier caractre de la chane de recherche trouv dans la chane en entre sera remplac par le premier
caractre de la chane de substitution et ainsi de suite pour les autres caractres.
La ruse dans l'exemple est le premier caractre '1' dans les deux derniers arguments. On dit qu'il s'agit d'un caractre
leurre, pusiqu'il sert ignorer tous les caractres de la chane en entre qui ne sont pas dans la chane de recherche.
La fonction remplace tous les '1' par '1' et tous les autres caractres de la chane de recherche trouvs dans la chane
en entre par rien !
Exemple de remplacement de caractres indsirables pour la constitution d'un nom de fichier :
SQL> SELECT TRANSLATE ( 'Nom/de~fichier;non.conforme', '1/\^~.,;', '1_______' ) "Fichier"
2 FROM DUAL ;
Fichier
---------------------------
Nom_de_fichier_non_conforme
La fonction remplace tous les '1' par '1' et tous les autres caractres de la chane de recherche par le caractre '_'.
Autre exemple de remplacement de caractres indsirables :
SQL> SELECT TRANSLATE ( '', '', 'aaaeeeeuuuo' ) "Chaine"
2 FROM DUAL ;
Chaine
-----------
aaaeeeeuuuo
SQL>
La fonction remplace toutes les minuscules accentues par leurs quivalents non accentus.
Bien videment, les arguments de la fonction peuvent tre des variables :
FAQ Oracle
- 14 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
FUNCTION Remplace ( PC$Chaine IN VARCHAR2, PC$Rech IN VARCHAR2 , PC$Subst IN VARCHAR2
) RETURN VARCHAR2 IS
BEGIN
RETURN TRANSLATE( PC$Chaine, PC$Rech, PC$Subst ) ;
END ;
Comment manipuler la partie entire et dcimale d'un numrique avec la fonction TRUNC ?
Auteurs : SheikYerbouti ,
TRUNC( valeur, prcision ) ;
Cette fonction permet d'effectuer deux types d'action (sur un numrique) :
Conserver le nombre de dcimales souhaites (prcision >= 0)
Cadrer la partie entire d'un nombre dans une tranche (prcision < 0)
Exemple de conservation des dcimales voulues :
SQL> select
2 trunc(12.98764, 5) "+5 dec."
3 ,trunc(12.98764, 4) "+4 dec."
4 ,trunc(12.98764, 3) "+3 dec."
5 ,trunc(12.98764, 2) "+2 dec."
6 ,trunc(12.98764, 1) "+1 dec."
7 ,trunc(12.98764, 0) "+0 dec."
8 from dual ;
+5 dec. +4 dec. +3 dec. +2 dec. +1 dec. +0 dec.
---------- ---------- ---------- ---------- ---------- ----------
12,98764 12,9876 12,987 12,98 12,9 12
Exemple de cadrage par tranches :
SQL> select
2 trunc(1234567,-6) "million"
3 ,trunc(1234567,-5) "cent-mille"
4 ,trunc(1234567,-4) "dix-mille"
5 ,trunc(1234567,-3) "mille"
6 ,trunc(1234567,-2) "cent"
7 ,trunc(1234567,-1) "dix"
8 from dual ;
million cent-mille dix-mille mille cent dix
---------- ---------- ---------- ---------- ---------- ----------
1000000 1200000 1230000 1234000 1234500 1234560
Extraction des parties entire et dcimale d'un nombre :
SQL> DECLARE
2 LN$Num number := 100.95 ;
3 BEGIN
4 DBMS_OUTPUT.PUT_LINE( 'Partie entire : ' || To_char( TRUNC ( LN$Num ) )) ;
5 DBMS_OUTPUT.PUT_LINE( 'Partie dcimale : ' || To_char( LN$Num - TRUNC (LN$Num ) ) ) ;
6 END ;
7 /
Partie entire : 100
Partie dcimale : ,95
FAQ Oracle
- 15 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Procdure PL/SQL termine avec succs.
Comment tronquer une date avec la fonction TRUNC ?
Auteurs : SheikYerbouti ,
La fonction TRUNC() applique une date ne permet pas seulement l'ablation de la partie horaire.
Nous connaissons tous cette fonction qui, sans spcification de son deuxime argument, retire la partie horaire.
Mais nous connaissons souvent moins l'autre particularit de cette fonction applique aux dates, par l'intermdiaire
du second argument (format).
TRUNC( date [,'format'] )
SQL> -- Format tendu d'affichage des dates --
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS' ;
Session modifie.
SQL>
SQL> -- Affichage de la date du jour --
SQL> SELECT SYSDATE "Date du jour" FROM DUAL ;
Date du jour
-------------------
08/10/2004 14:08:48
SQL>
SQL> -- date tronque au 1er jour de l'anne --
SQL> SELECT TRUNC(SYSDATE, 'YEAR') "'YEAR'" FROM DUAL;
'YEAR'
-------------------
01/01/2004 00:00:00
SQL>
SQL> -- date tronque au 1er jour de l'anne ISO--
SQL> SELECT TRUNC(SYSDATE, 'IYYY') "'IYYY'" FROM DUAL;
'IYYY'
-------------------
29/12/2003 00:00:00
SQL>
SQL> -- date tronque au 1er jour du trimestre --
SQL> SELECT TRUNC(SYSDATE, 'Q') "'Q'" FROM DUAL;
'Q'
-------------------
01/10/2004 00:00:00
SQL>
SQL> -- date tronque au 1er jour du mois --
SQL> SELECT TRUNC(SYSDATE, 'MONTH') "'MONTH'" FROM DUAL;
'MONTH'
-------------------
01/10/2004 00:00:00
SQL>
SQL> -- date tronque au 1er jour de la semaine --
SQL> SELECT TRUNC(SYSDATE, 'DAY') "'DAY'" FROM DUAL;
'DAY'
-------------------
FAQ Oracle
- 16 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
04/10/2004 00:00:00
SQL>
SQL> -- jour de la semaine correspondant au jour du 1er jour du mois --
SQL> SELECT TRUNC(SYSDATE, 'W') "'W'" FROM DUAL;
'W'
-------------------
08/10/2004 00:00:00
SQL>
SQL> -- jour de la semaine correspondant au jour du 1er jour de l'anne --
SQL> SELECT TRUNC(SYSDATE, 'WW') "'WW'" FROM DUAL;
'WW'
-------------------
07/10/2004 00:00:00
SQL>
SQL> -- jour de la semaine correspondant au jour du 1er jour de l'anne ISO --
SQL> SELECT TRUNC(SYSDATE, 'IW') "'IW'" FROM DUAL;
'IW'
-------------------
04/10/2004 00:00:00
SQL>
SQL> -- date tronque au jour (retire les heures) --
SQL> SELECT TRUNC(SYSDATE, 'DD') "'DD'" FROM DUAL;
'DD'
-------------------
08/10/2004 00:00:00
SQL>
SQL> -- date tronque l'heure (retire les minutes) --
SQL> SELECT TRUNC(SYSDATE, 'HH') "'HH'" FROM DUAL;
'HH'
-------------------
08/10/2004 14:00:00
SQL>
SQL> -- date tronque la minute (retire les secondes) --
SQL> SELECT TRUNC(SYSDATE, 'MI') "'MI'" FROM DUAL;
'MI'
-------------------
08/10/2004 14:08:00
Comment formater les dates ?
Auteurs : Helyos ,
Il existe beaucoup de formats de date disponibles avec Oracle.
Voici une liste non exhaustive des diffrents formats de date disponible.
- / , . ; : "text" : Ponctuation ou texte insrer dans la chane finale.
AD A.D. : Pour ajouter les sigles aprs Jsus Christ
AM A.M. : Symbole Am
BC B.C. : Pour ajouter les sigles avant Jsus Christ
CC SCC : Pour obtenir le n du sicle en cours
D : N du jour dans la semaine (par exemple Lundi =1, Mardi =2, etc...) Attention la notation peut changer en
fonction de vos paramtres NLS.
FAQ Oracle
- 17 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
DAY : Nom du jour (compens avec des espaces jusqu' 9 caractres)
DD : Le numro du jour dans le mois (de 1 31)
DDD : Le numro du jour dans l'anne (de 1 366)
DY: Abrviation du nom du jour
E : Abrviation du nom de l're en cours (pour les calendriers Japonais, ROC et Thai).
EE : Nom complet de l're en cours
FM : Permet de supprimer les espaces inutiles
HH: Heure (de 1 12)
HH12: Heure (de 1 12)
HH24: Heure (de 1 23)
IW: Numro de la semaine dans l'anne (de 1 52 ou 53 en fonction de l'anne)
IYY IY I : Les 3, 2 ou 1 derniers chiffres de l'anne
IYYY : Les 4 chiffres de l'anne
J: Nombre de jours depuis la date January 1, 4712 BC
MI: Minutes (de 1 59)
MM: Numro du mois dans l'anne
MON : Abrviation du nom du mois
MONTH : Nom du mois (compens avec des espaces jusqu' 9 caractres)
PM P.M. : Symbole Pm
Q: Numro du trimestre
RM: Numro du mois au format romain
RR: Les deux derniers chiffres de l'anne (avec prise en compte du sicle en cours)
RRRR: Les 4 derniers chiffres de l'anne (avec prise en compte du sicle en cours)
SS: Nombre de secondes (de 0 59)
SSSSS: Nombre de secondes coules depuis minuit (de 0 86399)
W: Numro de la semaine dans le mois (de 1 5)
Y,YYY: Numro de l'anne avec une virgule pour dlimiter le millnaire (par exemple 2,004)
YEAR : Epellation du numro de l'anne en cours
YYYY: Numro de l'anne en cours (sans prise en compte du sicle en cours)
YYY YY Y : Les 3, 2 ou 1 derniers chiffres de l'anne
Exemple :
SELECT to_char(sysdate,'DD/MM/RRRR Day D Month Year')
FROM dual;
TO_CHAR(SYSDATE,'DD/MM/RRRRDAYDMONTHYEAR')
------------------------------------------------------------------------------------
15/10/2004 Vendredi 5 Octobre Two Thousand Four
Quelles sont les limitations d'une contrainte CHECK ?
Auteurs : Pomalaix ,
Les contraintes CHECK sont pratiques pour mettre en place un simple contrle statique de validit des donnes, mais
elles sont trs limites. Il faudra alors recourir des dclencheurs pour des validations plus complexes.
Une contrainte CHECK ne peut faire rfrence qu'aux colonnes de la ligne courante.
Elle ne peut donc pas impliquer d'autres lignes de la table, ni impliquer d'autres tables.
En particulier, on ne peut pas y utiliser un SELECT.
Dans une contrainte CHECK, on ne peut pas faire appel une fonction personnalise.
Les fonctions standard (comme LENGTH ou UPPER par exemple) sont autorises, condition qu'elles soient
dterministes.
FAQ Oracle
- 18 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
C'est pourquoi on ne peut pas utiliser les fonctions SYSDATE ou USER, qui provoquent l'une comme l'autre l'erreur
"ORA-02436: variable de date ou systme mal indique dans contrainte CHECK".
Pour rsumer, une contrainte CHECK ne peut mettre en jeu que les colonnes de la ligne courante, des constantes
ventuellement sous forme de listes, et des fonctions standard dterministes.
Exemples :
CHECK (UPPER(titre) IN ('M.', 'MME', 'MLLE'))
CHECK ((col1 < col2) OR (col1 = 10))
Quelle est la diffrence entre les types CHAR et VARCHAR2 ?
Auteurs : Jaouad ,
Il existe essentiellement une diffrence de place entre ces types de donnes . En effet, VARCHAR2 a une longueur
variable qui dpend directement de la taille de la donne insree alors que CHAR une longueur fixe (dfini la cration
de la table ).
Prenons l'exemple d'un VARCHAR2 (20)) et CHAR(20), si on insre 'Oracle' dans les deux colonnes, Oracle serat
complte par des espaces dans la colonne CHAR(20) :
create table dvp ( a char(20), b varchar2(20)) ;
insert into dvp values ('oracle','oracle') ;
commit ;
SQL> select '-'||a||'-', '-'||b||'-' from dvp ;
'-'||A||'-' '-'||B||'-'
---------------------- ----------------------
-oracle - -oracle-
SQL> select length(a) , length(b) from dvp ;
LENGTH(A) LENGTH(B)
---------- ----------
20 6
La Longueur maximale de Char (2000) et Varchar2 (4000) sur une 8i :
SQL> create table dvp ( a varchar2(4001) ;
create table dvp ( a varchar2(4001)
*
ERREUR la ligne 1 :
ORA-00910: specified length too long for its datatype
SQL> create table dvp ( a varchar2(4000)) ;
Table cre.
SQL> drop table dvp ;
Table supprime.
SQL> create table dvp ( a char(2001)) ;
create table dvp ( a char(2001))
*
ERREUR la ligne 1 :
FAQ Oracle
- 19 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
ORA-00910: specified length too long for its datatype
SQL> create table dvp ( a char(2000)) ;
Table cre.
Oracle recommande quand mme l'utilisation de VARCHAR2 au lieu de CHAR pour une raison de compatibilit dans
les versions suprieures.
Outre l'utilisation supplmentaire de place, l'utilisation de CHAR en lieu et place de VARCHAR2 augmentera
galement la taille de vos index et peut parfois diminuer les performances de recherches de ces derniers !
Comment dtecter les verrous (locks) ?
Auteurs : Jaouad ,
Via la requte suivante :
SELECT /*+ choose */
bs.username "Blocking User",
bs.username "DB User",
ws.username "Waiting User",
bs.sid "SID",
ws.sid "WSID",
bs.sql_address "address",
bs.sql_hash_value "Sql hash",
bs.program "Blocking App",
ws.program "Waiting App",
bs.machine "Blocking Machine",
ws.machine "Waiting Machine",
bs.osuser "Blocking OS User",
ws.osuser "Waiting OS User",
bs.serial# "Serial#",
DECODE (
wk.TYPE,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'USER Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL USER LOCK',
'DX', 'Distributed Xaction',
'CF', 'Control FILE',
'IS', 'Instance State',
'FS', 'FILE SET',
'IR', 'Instance Recovery',
'ST', 'Disk SPACE Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'LOG START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE
) lock_type,
DECODE (
hk.lmode,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
FAQ Oracle
- 20 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (hk.lmode)
) mode_held,
DECODE (
wk.request,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR (wk.request)
) mode_requested,
object_name ,
TO_CHAR (hk.id1) lock_id1,
TO_CHAR (hk.id2) lock_id2
FROM v$lock hk, v$session bs, v$lock wk, v$session ws , V$LOCKED_OBJECT a ,
dba_objects b
WHERE hk.BLOCK = 1
AND hk.lmode != 0
AND hk.lmode != 1
AND wk.request != 0
AND wk.TYPE(+) = hk.TYPE
AND wk.id1(+) = hk.id1
AND wk.id2(+) = hk.id2
AND hk.sid = bs.sid(+)
AND wk.sid = ws.sid(+)
AND a.object_id=b.object_id
AND hk.sid=a.session_id
ORDER BY 1;
Plus simplement, comment dtecter si une table est verouille :
SELECT session_id , oracle_username , os_user_name
FROM V$LOCKED_OBJECT VLO INNER JOIN dba_objects DO ON VLO.object_id = DO.object_id
WHERE object_name = 'object_name'
AND owner = 'owner';
Comment positionner la valeur d'une colonne sa valeur par dfaut ?
Auteurs : lalystar ,
partir d'Oracle 9i, on peut utiliser le mot-cl default pour spcifier la valeur par dfaut d'une colonne :
SQL> create table TEST (
2 x number default 5,
3 y number default -3
4 );
Table created.
SQL> insert into TEST
2 values (default, default);
1 row created.
SQL> select * from TEST;
FAQ Oracle
- 21 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
X Y
---------- ----------
5 -3
SQL> update TEST
2 set x = -5,
3 y = 0;
1 row updated.
SQL> select * from TEST;
X Y
---------- ----------
-5 0
SQL> update TEST
2 set x = default,
3 y = default;
1 row updated.
SQL> select * from TEST;
X Y
---------- ----------
5 -3
SQL> alter table TEST modify (
2 x default 0,
3 y default null
4 );
Table altered.
SQL> update TEST
2 set x = default,
3 y = default;
1 row updated.
SQL> select * from TEST;
X Y
---------- ----------
0
Comment diffrencier NULL et chane vide ?
Auteurs : Jaouad , Laurent Schneider ,
Comme le montre l'exemple suivant, lors de vos INSERT/UPDATE, Oracle retransforme les chanes vide en valeur
nulles, ce qui peut tre gnant fonctionnellement, en particulier pour des applications multi-SGBD.
jeu d'essais
CREATE TABLE dvp ( a VARCHAR2( 10 ) ) ;
INSERT INTO dvp VALUES (NULL) ;
INSERT INTO dvp VALUES ('DVP') ;
INSERT INTO dvp VALUES ('') ;
COMMIT;
SQL> SELECT '-' ||a FROM dvp ;
FAQ Oracle
- 22 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
'-'||A
-----------
-
-DVP
-
SQL> SELECT COUNT(*) FROM dvp ;
COUNT(*)
----------
3
SQL> SELECT COUNT(*) FROM dvp WHERE a IS NULL;
COUNT(*)
----------
2
SQL> SELECT COUNT(*) FROM dvp WHERE a = '' ;
COUNT(*)
----------
0
SQL> SELECT COUNT(*) FROM dvp WHERE a IS NOT NULL ;
COUNT(*)
----------
1
SQL> SELECT COUNT(*) FROM dvp WHERE a != '' ;
COUNT(*)
----------
0
Une solution consiste utiliser un caractre ou une chane de susbsitution, afin que votre applicatif puisse grer ces
informations de manire distincte. Le plus simple, si c'est possible, est d'utiliser le caractre espace, ce qui donne, si
l'on continue sur l'exemple prcdent :
SQL> insert into dvp values (' ') ;
1 ligne cre.
SQL> commit;
Validation effectue.
SQL> select count (*) from dvp ;
COUNT(*)
----------
4
SQL> select count(*) from dvp where a is null ;
Attention tout de mme :
Oracle Database SQL Reference 10g Release 2 (10.2) :
Note: Oracle Database currently treats a character value with a length of zero as null. However, this may not continue
to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.
FAQ Oracle
- 23 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Comment insrer ou mettre jour des donnes sans savoir
si les enregistrements correspondants existent dj ?
Auteurs : Xavier Vlieghe ,
Grce l'instruction MERGE, partir de la 9i. Voici sa syntaxe :
MERGE INTO Table1 T1
USING (SELECT Id, Meschamps FROM Table2) T2
ON ( T1.Id = T2.Id ) -- Condition de correspondance
WHEN MATCHED THEN -- Si Vraie
UPDATE SET T1.Meschamps = T2.Meschamps
WHEN NOT MATCHED THEN -- Si faux
INSERT (T1.ID, T1.MesChamps) VALUES ( T2.ID, T2.MesChamps);
Prenons l'exemple d'une table "Article" tout ce qu'il y a de plus classique :
Une cl (PK)
une rfrence (UQ)
un libell
un prix
La cl primaire est renseigne l'aide d'une squence.
CREATE Table Article (
Id Number (10),
Refe VARCHAR2 (16),
Libe VARCHAR2 (64),
Prix NUMBER (12,2));
CREATE SEQUENCE Seq_Id_Article START WITH 1 INCREMENT BY 1;
INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '001', 'Marteau', 7.46);
INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '002', 'Tournevis', 3.83);
INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '004', 'Lime', 5.09);
COMMIT;
Sa soeur Temp_Article reoit un fichier de MAJ jour des prix, sans cl et pouvant contenir de nouveaux articles :
CREATE Table Temp_Article (
Refe VARCHAR2 (16),
Libe VARCHAR2 (64),
Prix NUMBER (12,2));
INSERT INTO Temp_Article VALUES ('001', 'Marteau', 7.27);
INSERT INTO Temp_Article VALUES ('002', 'Tournevis', 3.81);
INSERT INTO Temp_Article VALUES ('003', 'Pince', 2.67);
INSERT INTO Temp_Article VALUES ('004', 'Lime', 5.35);
INSERT INTO Temp_Article VALUES ('005', 'Cl', 4.91);
COMMIT;
La commande MERGE va nous servir faire la MAJ des prix et l'intgration des nouveaux articles en une seule
commande :
FAQ Oracle
- 24 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> MERGE INTO Article A
2 USING (SELECT Refe, Libe, prix FROM Temp_Article) T
3 ON (A.Refe = T.Refe)
4 WHEN MATCHED THEN
5 UPDATE SET A.Prix = T.Prix, A.Libe = T.Libe
6 WHEN NOT MATCHED THEN
7 INSERT (A.Id, A.Refe, A.Libe, A.Prix) VALUES (Seq_Id_Article.NextVal, T.Refe, T.Libe,
T.Prix);

5 lignes fusionnes.
SQL> SELECT * FROM Article;
ID REFE LIBE PRIX
---------- ---------------- ---------------- -------
1 001 Marteau 7,27
2 002 Tournevis 3,81
3 004 Lime 5,35
7 003 Pince 2,67
8 005 Cl 4,91
Voici la page Oracle sur laquelle vous trouverez toutes les informations utiles propos de cette commande :
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606
Use the MERGE statement to select rows from one or more sources for update or insertion into one or more tables. You
can specify conditions to determine whether to update or insert into the target tables.
This statement is a convenient way to combine multiple operations. It lets you avoid multiple INSERT, UPDATE, and
DELETE DML statements.
MERGE is a deterministic statement. That is, you cannot update the same row of the target table multiple times in the
same MERGE statement.
lien : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606
Comment empcher l'excution d'une requte non r crite ?
Auteurs : Jaouad ,
Grce au hint apparue avec la version 10g :
/*+ REWRITE_OR_ERROR */
Comment construire une requte rcursive ?
Auteurs : Xavier Vlieghe ,
Oracle permet de grer le concept de requtes rcursives, l'aide des clauses suivantes :
START WITH Champ = {Valeur} : Cette clause permet de prciser le(s) noeud(s) de l'arborescence partir
duquel ou desquels on souhaite lister les lments,
CONNECT BY PRIOR Id = Id_Parent : Cette clause indique sur quels champs se baser pour parcourir
l'arborescence,
Depuis la version 9i, vous pouvez utiliser un pseudo champ LEVEL afin de connatre le niveau de chaque
enregistrement.
En voici un exemple, grce une table Catgorie comprenant les champs suivants :
Une Cl (Id)
FAQ Oracle
- 25 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Un Libell (Libe)
La cl de la catgorie parent (Id_Parent)
CREATE TABLE Categorie (
Id NUMBER (4),
Libe VARCHAR2 (16),
Id_Parent NUMBER (4));
-- Les cls sont attribues de manire hirarchique pour plus de clart, ce qui est bien entendu rarement le cas dans la ralit ...
INSERT INTO Categorie VALUES ( 1, 'Librairie' , NULL);
INSERT INTO Categorie VALUES ( 11, 'Revue' , 1);
INSERT INTO Categorie VALUES ( 111, 'Quotidien' , 11);
INSERT INTO Categorie VALUES ( 112, 'Hebdomadaire' , 11);
INSERT INTO Categorie VALUES ( 111, 'Mensuel' , 11);
INSERT INTO Categorie VALUES ( 12, 'Roman' , 1);
INSERT INTO Categorie VALUES ( 13, 'Bande Dessine', 1);
INSERT INTO Categorie VALUES ( 2, 'Alimentaire' , NULL);
INSERT INTO Categorie VALUES ( 21, 'Boisson' , 2);
INSERT INTO Categorie VALUES ( 211, 'Alcool' , 21);
INSERT INTO Categorie VALUES ( 212, 'Jus de fruits' , 21);
INSERT INTO Categorie VALUES ( 213, 'Alcool' , 21);
INSERT INTO Categorie VALUES (2131, 'Vins' , 213);
INSERT INTO Categorie VALUES (2132, 'Bire' , 213);
INSERT INTO Categorie VALUES (2133, 'Apritif' , 213);
INSERT INTO Categorie VALUES ( 22, 'Conserve' , 2);
INSERT INTO Categorie VALUES ( 23, 'Frais' , 2);
COMMIT;
Voici la liste des catgories dpendant de la catgorie 1 : Librairie :
SQL> SELECT Id, Libe, LEVEL, Id_Parent
2 FROM Categorie
3 START WITH Id = 1
4 CONNECT BY PRIOR Id = Id_Parent;
ID LIBE LEVEL ID_PARENT
---------- ---------------- ---------- ----------
1 Librairie 1
11 Revue 2 1
111 Quotidien 3 11
112 Hebdomadaire 3 11
111 Mensuel 3 11
12 Roman 2 1
13 Bande Dessine 2 1
7 ligne(s) slectionne(s).
A partir de la 9i, vous pouvez galement utilisez la fonction SYS_CONNECT_BY_PATH (Champ, sparateur), qui
permet de concatner les diffrents valeurs du champ spcifi pour connatre le chemin entre l'lment concern et le
neod racine :
SQL> SELECT SYS_CONNECT_BY_PATH(Libe, '-')
2 FROM Categorie
3 START WITH Id = 2
4 CONNECT BY PRIOR Id = Id_Parent;
SYS_CONNECT_BY_PATH(LIBE,'-')
------------------------------------------
-Alimentaire
FAQ Oracle
- 26 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
-Alimentaire-Boisson
-Alimentaire-Boisson-Alcool
-Alimentaire-Boisson-Jus de fruits
-Alimentaire-Boisson-Alcool
-Alimentaire-Boisson-Alcool-Vins
-Alimentaire-Boisson-Alcool-Bire
-Alimentaire-Boisson-Alcool-Apritif
-Alimentaire-Conserve
-Alimentaire-Frais
10 ligne(s) slectionne(s).
Quels sont les raccourcis sous SQL*Plus
Auteurs : Pomalaix , Jaouad , Fred_D ,
@ dsigne la variable ORACLE_SID courante. Est valable dans les scripts SQL, dans divers paramtres de l'INIT.ORA,
dans des scripts RMAN notamment.
? dsigne la variable ORACLE_HOME courante. Est valable dans les scripts SQL, dans divers paramtres de
l'INIT.ORA, dans des scripts RMAN notamment.
! quivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Unix uniquement
$ quivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Windows uniquement
& permet de dsigner une variable SQL*Plus
start et @ permet de lancer un script
define permet de dfinir une variable sous Sql*Plus , sans argument elle donne toutes les variables dja dfini
& permet de dfinir une variable, && permet de la dfinir une fois pour toute et pour toute la session.
ed permet de lancer le buffer
l permet de voir sans l'executer le dernier ordre SQL
r permet de voir et executer le dernier ordre SQL
c:mot1:mot2 permet de changer toutes les occurences du mot1 par mot2 dans le dernier ordre SQL
Quelles sont les principales variables d'environnement de SQL Plus ?
Auteurs : PlaineR ,
Voici les variables d'environnement les plus communes :
define : caractre utilis pour la substitution des variables (par dfaut "&")
syntaxe :
-- gre les caractres de substitution
SET define ON
-- les caractres de substitutions ne sont pas grs
SET define off
-- le caractre de substition est @
SET define @
linesize : nombre de caractres par lignes
NB : la ligne est complte par des espaces pour atteindre ce nombre de caractres.
syntaxe :
-- mets le nom de caractre par ligne 130
FAQ Oracle
- 27 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SET linesize 130
numformat : format par dfaut des numriques l'affichage.
syntaxe :
SET numformat 999G999D99
numwidth : largeur par dfaut des numriques
syntaxe :
SET numwidth 8
pagesize : nombre de lignes de dtail (entte nom compris)
syntaxe :
SET pagesize 60
scan : contrle la prsence de variables de substitution
syntaxe :
-- contrle la prsence de variables de substitions
SET scan ON
-- ne contrle pas la prsence de variables de substitions
SET scan OFF
tab : utilisation des tabulations
syntaxe :
-- utilisation des tabulations
SET tab ON
-- non utilisation des tabulations
SET tab OFF
trimspool : suppression des espaces en fin de lignes
syntaxe :
-- supprime les espaces en fin de lignes
SET trimspool ON
-- laisse les espaces en fin de lignes
SET trimspool OFF
verify : liste la commande avant son excution
FAQ Oracle
- 28 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
syntaxe :
-- liste la commande avant son excution
SET verify ON
-- la commande n'est pas affichee avant son excution
SET verify OFF
feed : affiche le nombre de lignes affectes par l'ordre SQL
syntaxe :
-- affichage du nombre de lignes affectes
SET feed ON
-- le nombre de lignes affectes n'est pas affich
SET feed OFF
term : affiche le rsultat des commandes d'un script
syntaxe :
-- affichage du rsultat
SET term ON
-- non affichage du rsultat
SET term OFF
heading : affichage de l'entte du rsultat
syntaxe :
-- affichage de l'entete
SET heading ON
-- non affichage de l'entete
SET head OFF
space : nombre d'espaces entre deux colonnes
syntaxe :
-- 2 espaces entre 2 colonnes
SET space 2
echo : affichade des commandes d'un script l'excution
syntaxe :
-- affichage de la commande
SET echo ON
-- non affichage de la commande
SET echo OFF
FAQ Oracle
- 29 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
NB : Ce sont les principales, il en existe d'autres (SQL*Plus : Menu Option-> Environment) dont vous trouverez
l'explication dans la documentation Oracle.
FAQ Oracle
- 30 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Dveloppement > PL/SQL
Comment obtenir le nombre de lignes impactes par le dernier ordre SQL (DML) ?
Auteurs : SheikYerbouti ,
La variable SQL%ROWCOUNT contient le nombre de lignes impactes par le dernier ordre DML excut.
Vous pouvez interroger cette variable aprs tout ordre INSERT, UPDATE ou DELETE
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 LN$Cpt PLS_INTEGER ;
3 BEGIN
4 SELECT COUNT(*) INTO LN$Cpt FROM test ;
5 DBMS_OUTPUT.PUT_LINE( To_char( LN$Cpt ) || ' enregistrements') ;

6 -- Mise jour --
7 UPDATE test
8 SET nom = nom
9 WHERE ROWNUM <= 3 ;
10 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements mis jour') ;

11 -- Insertion --
12 INSERT INTO test
13 SELECT * FROM test ;
14 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements insrs') ;

15 -- Suppression --
16 DELETE FROM test
17 WHERE ROWNUM < 3 ;
18 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements supprims') ;

19 ROLLBACK ;
20 END ;
21 /
6 enregistrements
3 enregistrements mis jour
6 enregistrements insrs
2 enregistrements supprims
Procdure PL/SQL termine avec succs.
Comment afficher les erreurs de compilation ?
Auteurs : SheikYerbouti ,
Les erreurs de compilation sont stockes dans la vue USER_ERRORS
Vous pouvez, aprs compilation d'un objet, afficher les ventuelles erreurs de compilation de deux faons :
SHOW ERROR
SELECT ... FROM USER_ERRORS
Exemple (SUBTR au lieu de SUBSTR) :
SQL> CREATE OR REPLACE FUNCTION debut
2 ( PC$Chaine IN VARCHAR2) RETURN VARCHAR2 IS
3 BEGIN
4 RETURN SUBTR( PC$Chaine, 1, 5 ) ;
5 END;
6 /
FAQ Oracle
- 31 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Avertissement : Fonction cre avec erreurs de compilation.
SQL> SHOW ERRORS
Erreurs pour FUNCTION DEBUT :
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/3 PL/SQL: Statement ignored
4/10 PLS-00201: l'identificateur 'SUBTR' doit tre dclar
SQL>
SQL> SELECT *
2 FROM user_errors
3 WHERE name = 'DEBUT'
4 AND type = 'FUNCTION'
5 ORDER BY SEQUENCE
6 /
NAME TYPE SEQUENCE LINE POSITION
------------------------------ ------------ ---------- ---------- ----------
TEXT
--------------------------------------------------------------------------------
DEBUT FUNCTION 1 4 10
PLS-00201: l'identificateur 'SUBTR' doit tre dclar
DEBUT FUNCTION 2 4 3
PL/SQL: Statement ignored
Comment compter le nombre d'occurrences dans une chane ?
Auteurs : SheikYerbouti ,
Comment compter le nombre d'occurrences dans une chane sans l'aide d'une boucle itrative ?
En utilisant les fonctions LENGTH() et REPLACE() de la faon suivante :
CREATE OR REPLACE FUNCTION CPT_OCCURRENCES
(
PC$Entree IN VARCHAR2, -- Chane en entre
PC$Recherche IN VARCHAR2 -- Chane rechercher
) RETURN PLS_INTEGER IS
BEGIN
RETURN ( (LENGTH(PC$Entree) - LENGTH(REPLACE(PC$Entree,PC$Recherche,NULL)) ) / NVL(LENGTH(PC
$Recherche),1) ) ;
END;
SQL> SELECT CPT_OCCURRENCES( 'le et le et le', 'le' ) "Nombre d'occurrences" FROM DUAL ;
Nombre d'occurrences
--------------------
3
Comment obtenir le temps d'excution instruction par instruction de vos codes PL/SQL ?
Auteurs : SheikYerbouti ,
En installant l'outil Oracle : Profiler
Vous devez tre connect avec le privilge SYSDBA
FAQ Oracle
- 32 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
--------------------------------------
-- Installation de l'outil profiler --
--------------------------------------
connect / as sysdba
@<ORACLE_HOME>/rdbms/admin/proftab.sql
@<ORACLE_HOME>/rdbms/admin/profload.sql
@<ORACLE_HOME>/plsql/demo/profrep.sql
Et en l'excutant sur n'importe quelle fonction ou procdure PL/SQL :
----------------------------------------------
-- Test de la procdure stocke : F_TRACE() --
----------------------------------------------
SQL>
1 DECLARE
2 Pgm NUMBER;
3 BEGIN
4 DBMS_PROFILER.START_PROFILER('test','test1',Pgm);
5 FD.F_TRACE('Hello Oracle world','T');
6 DBMS_PROFILER.STOP_PROFILER;
7 DBMS_PROFILER.ROLLUP_RUN(Pgm);
8 PROF_REPORT_UTILITIES.PRINT_RUN(Pgm);
9* END;
SQL> /
===========================Results for run #1 made on 23-OCT-04 14:20:55 =========================
(test) Run total time: .16 seconds
Unit #1: SYS.DBMS_PROFILER - Total time: .00 seconds
Unit #2: <anonymous>.<anonymous> - Total time: .00 seconds
Unit #3: FD.F_TRACE - Total time: .02 seconds
1 procedure F_TRACE ( PC$Message in VARCHAR2, PC
$Output in VARCHAR2 DEFAULT 'S' )
2 Is
3 PRAGMA AUTONOMOUS_TRANSACTION ;
4 LC$String Varchar2(4000) ;
5 LN$Slices PLS_INTEGER ;
6 LN$Rest PLS_INTEGER ;
7 1 ,00001660 ,00001660 LN$Pos PLS_INTEGER := 1 ;
8 LN$Inc PLS_INTEGER ;
9 Begin
10
11 1 ,00009573 ,00009573 If Upper( PC$Output ) = 'S' Then
12 -- Screen output (DBMS_OUTPUT) --
13 0 0 LN$Inc := 255 ;
14 0 0 LN$Slices := Length( PC
$Message ) / LN$Inc ;
15 0 0 LN$Rest := MOD( Length( PC
$Message ), LN$Inc ) ;
16 0 0
If LN$Rest > 0 Then LN$Slices := LN$Slices + 1 ; End if ;
17
18 -- output --
19 0 0 For i in 1..LN$Slices Loop
20 0 0 LC$String := Substr( PC
$Message, LN$Pos, LN$Inc ) ;
21 0 0 DBMS_OUTPUT.PUT_LINE( LC$String ) ;
22 0 0 LN$Pos := LN$Pos + LN$Inc ;
23 End loop ;
24
25 Else
26 -- Table output (INSERT) --
27 1 ,00000095 ,00000095 LN$Inc := 4000 ;
28 1 ,00003589 ,00003589 LN$Slices := Length( PC
$Message ) / LN$Inc ;
FAQ Oracle
- 33 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
29 1 ,00001622 ,00001622 LN$Rest := MOD( Length( PC
$Message ), LN$Inc ) ;
30 1 ,00000411 ,00000411
If LN$Rest > 0 Then LN$Slices := LN$Slices + 1 ; End if ;
31
32 -- output --
33 2 ,00004027 ,00002013 For i in 1..LN$Slices Loop
34 1 ,00001587 ,00001587 LC$String := Substr( PC
$Message, LN$Pos, LN$Inc ) ;
35 1 ,01580613 ,01580613 Insert into TRACE (LIGNE) Values
( LC$String ) ;
36 1 ,00094689 ,00094689 Commit ;
37 1 ,00000270 ,00000270 LN$Pos := LN$Pos + LN$Inc ;
38 End loop ;
39 End if ;
40
41 End;
Procdure PL/SQL termine avec succs.
Comment faire un REPLACE sur un CLOB ?
Auteurs : Helyos ,
Le package DBMS_LOB ne fournit pas de procdure ou fonction REPLACE pour les CLOBs. En voici une :
CREATE OR REPLACE PROCEDURE lob_replace(p_dest_clob IN OUT CLOB,
p_search VARCHAR2,
p_replace VARCHAR2) AS
v_clob_temp CLOB;
v_end_offset INTEGER := 1;
v_start_offset INTEGER := 1;
v_occurence NUMBER := 1;
v_replace_len NUMBER := length(p_replace);
v_clob_temp_len NUMBER := 0;
v_dest_clob_len NUMBER := 0;
BEGIN
IF dbms_lob.ISOPEN(p_dest_clob) = 0 THEN
NULL;
END IF;
dbms_lob.createtemporary(v_clob_temp, TRUE, dbms_lob.session);
LOOP
v_end_offset := dbms_lob.instr(p_dest_clob, p_search, 1, v_occurence);
IF v_end_offset = 0 THEN
v_clob_temp_len := dbms_lob.getlength(v_clob_temp);
v_dest_clob_len := dbms_lob.getlength(p_dest_clob) - v_start_offset + 1;
IF v_dest_clob_len > 0 THEN
dbms_lob.copy(v_clob_temp,
p_dest_clob,
v_dest_clob_len,
v_clob_temp_len + 1,
v_start_offset);
END IF;
EXIT;
END IF;
v_clob_temp_len := dbms_lob.getlength(v_clob_temp);
IF (v_end_offset - v_start_offset) > 0 THEN
dbms_lob.copy(v_clob_temp,
p_dest_clob,
(v_end_offset - v_start_offset),
v_clob_temp_len + 1,
v_start_offset);
END IF;
v_start_offset := v_end_offset + length(p_search);
FAQ Oracle
- 34 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
v_occurence := v_occurence + 1;
IF p_replace IS NOT NULL THEN
dbms_lob.writeappend(v_clob_temp, v_replace_len, p_replace);
END IF;
END LOOP;
IF length(p_search) > length(p_replace) THEN
dbms_lob.TRIM(p_dest_clob, dbms_lob.getlength(v_clob_temp));
END IF;
dbms_lob.copy(p_dest_clob, v_clob_temp, dbms_lob.getlength(v_clob_temp), 1, 1);
EXCEPTION
WHEN OTHERS THEN
htp.prn('[Error in lob_replace : ' || SQLCODE || ' ' ||
SQLERRM || ']');
END;
Comment savoir si une chaine de caractres correspond un nombre ?
Auteurs : lalystar ,
Plutt que de coder une fonction qui traite tous les cas de figure correspondant aux diffrents formats que peut prendre
un nombre (entier, nombre virgule, nombre avec exposant...), il vaut mieux laisser Oracle grer la conversion et nous
signaler s'il a rencontr une erreur comme dans la fonction suivante :
create or replace function isNumeric(x in varchar2) return number as
-- renvoie 1 si le paramtre correspond un nombre
-- 0 sinon
nb number;
begin
nb := to_number(x);
return 1;
exception
when others then
return 0;
end;
/
Exemple d'utilisation : si la colonne X correspond un nombre, on veut avoir ce nombre multipli par 1000 :
SQL> SELECT x,
2 isNumeric(x),
3 CASE
4 WHEN isNumeric(x) = 1 THEN 1000 * TO_NUMBER(x)
5 END x_fois_1000
6 FROM TEST;

X ISNUMERIC(X) X_FOIS_1000
---------- ------------ -----------
1 1 1000
1,10 1 1100
1,234E3 1 1234000
-1,23E-3 1 -1,23
FAQ Oracle
- 35 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
1 toto 0
Comment vrifier si une chaine vrifie un certain format ?
Auteurs : lalystar ,
Pour vrifier qu'une chaine de caractre vrifie un format donn, on peut utiliser, partir d'Oracle 10g, la fonction
MATCH du OWA_PATTERN qui permet de manipuler des expressions rgulires. Cette fonction retourne un boolen
indiquant si le format est vrifi ou pas; elle ne peut donc tre appele qu'en PL/SQL.
Par exemple, pour vrifier que les numros de tlphones en base suivent le format franais sur 10 chiffres avec comme
sparateur des tirets, on peut faire :
SQL> select *
2 from TELEPHONE;
TELEPHONE#
--------------------------------------------------------------------------------
07.08.09.02.02
07-08-09-02-02
01 02 02 02 02
TOTO
07/07/07/07/07
SQL>
1 begin
2 for tel in (select * from TELEPHONE)
3 loop
4 if owa_pattern.match(tel.telephone#, '^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$') then
5 dbms_output.put_line(tel.telephone#);
6 end if;
7 end loop;
8* end;
SQL> /
07-08-09-02-02
PL/SQL procedure successfully completed.
Les expressions rgulires peuvent utiliser les symboles suivants :
^ : dbut de la ligne
$ : saut de ligne ou fin de ligne
\n : saut de ligne
. : tout caractres sauf le saut de ligne
\t : tabulation
\d : chiffre (quivalent [0-9])
\D : tout caractre sauf un chiffre (quivalent [not 0-9])
\w : tout caractre alphanumrique (chiffres, lettres, _)
\W : tout caractre sauf un caractre alphanumrique
\s : tout espace (espace, tabulation, saut de ligne)
\S : tout caractre sauf un espace
\b : dlimiteur de mots (entre un caractre qui vrifie \w et un autre qui vrifie \W)
\xnn : caractre dont le code ascii est en hexadcimal nn
\nnn : caractre dont le code ascii est en octal nnn
Les lments ci-dessus peuvent tre suivi par les indicateurs de cardinalit suivants :
? : 0 ou 1 occurrence
* : 0 ou plus occurrences
+ : 1 ou plus occurrences
FAQ Oracle
- 36 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
{n} : exactement n occurences
(n,} : au moins n occurences
{n,m} : entre n et m occurences
L'expression rgulire qu'on a utilis pour dcrire notre format de numro de tlphone ^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$
se dcrypte donc de la manire suivante :
\d{2} : on cherche deux chiffres
- : suivis d'un tiret
\d{2}- : suivi de deux chiffres et d'un tiret
\d{2}- : suivi de deux chiffres et d'un tiret
\d{2}- : suivi de deux chiffres et d'un tiret
\d{2} : suivi de deux chiffres
Comme notre expression rgulire commence par ^, elle dcrit le dbut de la chaine; comme elle se termine par $,
elle dcrit aussi sa fin.
Ma requte fonctionne sous SQL*Plus mais lorsque j'essaie de
l'utiliser dans une procdure PL/SQL, celle-ci ne compile pas !
Auteurs : lalystar ,
Sous Oracle 8i, le moteur SQL utilis dans les procdures PL/SQL est diffrent et est en retard sur le moteur SQL utilis
pour les requtes. Certaines fonctionnalits disponibles en SQL ne le sont donc pas en PL/SQL comme :
les structures CASE ... WHEN
les fonctions analytiques
La solution est d'utiliser du SQL dynamique pour masquer la requte au moteur PL/SQL en utilisant par exemple
EXECUTE IMMEDIATE :
begin
execute immediate '
insert into TEST
select
case
when deptno = 10 then ''Dept 10''
when deptno = 20 then ''Dept 20''
else
''Departement inconnu''
end
from
TEST1';
end;
Comment gnrer un fichier de trace pour une session en cours ?
Auteurs : lalystar ,
Quand une procdure est en cours d'excution, il est possible de gnrer un fichier de trace (pour exploitation par
TkProf par exemple) en utilisant la routine set_sql_trace_in_session du package DBMS_SYSTEM. Les paramtres de
cette routine sont les suivants :
SID : identifiant de la session en provenance de V$SESSION
SERIAL# : second identifiant de la session en provenance de V$SESSION
FAQ Oracle
- 37 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
TRACE: boolen; il faut entrer TRUE pour demander Oracle de gnrer le fichier de trace, et FALSE pour
arrter sa gnration
Vous trouverez plus de dtails dans cet article : Diffrentes faon de tracer l'activit de sessions
Je n'ai pas de documentation Oracle, ni d'accs Internet,
comment puis-je trouver la documentation d'un package Oracle ?
Auteurs : lalystar ,
Pour avoir immdiatement la documentation minimale d'un package Oracle install, on peut utiliser la requte suivante
sous SQL*Plus :
SELECT text
FROM DBA_SOURCE
WHERE type = 'PACKAGE'
AND name like UPPER('%&package%')
ORDER BY line;
Par exemple, pour DBMS_OUTPUT :
SQL> SELECT text
2 FROM dba_source
3 WHERE type = 'PACKAGE'
4 AND name like UPPER('%&package%');
Enter value for package: dbms_output
old 4: name like UPPER('%&package%')
new 4: name like UPPER('%dbms_output%')
------------
-- OVERVIEW
--
-- These procedures accumulate information in a buffer (via "put" and
-- "put_line") so that it can be retrieved out later (via "get_line" or
-- "get_lines"). If this package is disabled then all
-- calls to this package are simply ignored. This way, these routines
-- are only active when the client is one that is able to deal with the
-- information. This is good for debugging, or SP's that want to want
-- to display messages or reports to sql*dba or plus (like 'describing
-- procedures', etc.). The default buffer size is 20000 bytes. The
-- minimum is 2000 and the maximum is 1,000,000.
...
procedure put_line(a varchar2);
pragma restrict_references(put_line,WNDS,RNDS);
procedure put_line(a number);
pragma restrict_references(put_line,WNDS,RNDS);
-- Put a piece of information in the buffer followed by an end-of-line
-- marker. When retrieved by get_line(s), the number and date items
-- will be formated with to_char using the default formats. If you
-- want another format then format it explicitly. get_line(s) return
-- "lines" as delimited by "newlines". So every call to put_line or
-- new_line will generate a line that will be returned by get_line(s).
-- Input parameters:
-- a
-- Item to buffer
-- Errors raised:
-- -20000, ORU-10027: buffer overflow, limit of <buf_limit> bytes.
FAQ Oracle
- 38 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
-- -20000, ORU-10028: line length overflow, limit of 255 bytes per line
Comment convertir une valeur hexadcimale en valeur dcimale ?
Auteurs : SheikYerbouti ,
Simplement grce la fonction TO_NUMBER :
En voici un exemple d'utilisation :
SQL> SELECT TO_NUMBER('ff','XXXXXXXX'),TO_NUMBER('fff','XXXXXXXX'),TO_NUMBER('ffff','XXXXXXXX') from
dual;
TO_NUMBER('FF','XXXXXXXX') TO_NUMBER('FFF','XXXXXXXX') TO_NUMBER('FFFF','XXXXXXXX')
-------------------------- --------------------------- ----------------------------
255 4095 65535
Comment afficher la diffrence de temps entre 2 dates
en nombre de jours, heures, minutes et secondes ?
Auteurs : SheikYerbouti ,
Grce la fonction suivante :
CREATE OR REPLACE FUNCTION Diff_Temps
(
LD$Date_Deb IN DATE DEFAULT SYSDATE
,LD$Date_Fin IN DATE DEFAULT SYSDATE
,LN$JJ OUT PLS_INTEGER
,LN$HH OUT PLS_INTEGER
,LN$MI OUT PLS_INTEGER
,LN$SS OUT PLS_INTEGER
) Return NUMBER
IS
dif NUMBER ;
Begin

If LD$Date_Fin < LD$Date_Deb Then
Return ( -1 ) ;
End if ;
Select LD$Date_Fin - LD$Date_Deb Into dif From DUAL ;
Select trunc ( LD$Date_Fin - LD$Date_Deb) Into LN$JJ From DUAL ;
Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 24) - ( LN$JJ * 24 ) Into LN$HH From DUAL ;
Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 1440) - ( (LN$HH * 60) +
( LN$JJ * 1440) ) Into LN$MI From DUAL ;
Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 86400) - ( (LN$MI * 60) + (LN$HH * 3600) +
( LN$JJ * 3600 * 24 ) ) Into LN$SS From DUAL ;
Return( dif ) ;

End ;
/
En voici un exemple d'utilisation :
SQL> set serveroutput on
FAQ Oracle
- 39 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> declare
2 dd pls_integer;
3 hh pls_integer;
4 mi pls_integer;
5 ss pls_integer;
6 dif number ;
7 Begin
8 dif := diff_temps ( sysdate, sysdate + 10.523, dd,hh,mi,ss ) ;
9 dbms_output.put_line(
10 '(' || ltrim(to_char(dif,'99999.99999')) || ')' || ' '
11 || to_char(dd,'99999') || 'j '
12 || to_char(hh,'00') ||':'
13 || to_char(mi,'00') ||':'
14 || to_char(ss,'00')
15 ) ;
16 End;
17 /
(10.52300) 10j 12: 33: 07
Procdure PL/SQL termine avec succs.
Comment exporter le rsultat d'une requte au format XML ?
Auteurs : Xavier Vlieghe ,
partir d'Oracle 9i, vous pouvez utiliser le package DBMS_XMLQuery. En voici 2 exemples d'utilisation :
Avec Utl_File :
SET SERVEROUTPUT ON
DECLARE
XmlFic Utl_File.File_Type;
XmlData CLOB;
Fin BOOLEAN := TRUE;
BEGIN
-- Crer des donnes au format XML partir d'une requte :
XmlData := DBMS_XMLQuery.GetXML ('SELECT * FROM EMP');

-- Copie les donnes au format XML dans un fichier :
XmlFic := Utl_File.FOpen ('C:\TMP\XML', 'TEST.xml', 'W');
WHILE FIN LOOP
Utl_File.Put (XmlFic, SUBSTR (XmlData, 1, 32767));
IF LENGTH (XmlData) > 32767 THEN
XmlData := SUBSTR (XmlData, 32768);
ELSE
FIN := FALSE;
END IF;
END LOOP;
Utl_File.FClose (XmlFic);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SUBSTR (SQLERRM,1,255));
Utl_File.FClose (XmlFic);
END;
/
Sans Utl_File : compilez d'abord la procdure suivante :
FAQ Oracle
- 40 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
CREATE OR REPLACE PROCEDURE OutPut_Fichier (fichier IN OUT NOCOPY CLOB) IS
ContenuXML VARCHAR2 (32767);
Ligne VARCHAR2 (2000);
BEGIN
ContenuXML := dbms_lob.SUBSTR(fichier, 32767);
LOOP
EXIT WHEN ContenuXML IS NULL;
-- dcoupe en lignes :
Ligne := SUBSTR(ContenuXML, 1, INSTR(ContenuXML, CHR(10)) - 1);
dbms_output.put_line (Ligne);
ContenuXML := SUBSTR(ContenuXML, INSTR(ContenuXML, CHR(10)) + 1);
END LOOP;
END;
/
Et le tour est jou :
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
fichier CLOB;
BEGIN
fichier := dbms_XMLQuery.getXML ('SELECT * FROM EMP');
OutPut_Fichier (fichier);
END;
/
Comment excuter une instruction du DDL dans un block PL/SQL ?
Auteurs : SheikYerbouti ,
Si vous souhaitez excuter un ordre du DDL (Data Description Language) pour crer une table, un index, altrer un
objet existant, utilisez l'instruction EXECUTE IMMEDIATE.
Par exemple, pour forcer la recration d'un index:
Declare
LC$OrdreSql Varchar2(2000) ;
Begin
LC$OrdreSql := 'ALTER INDEX my_index REBUILD' ;
EXECUTE IMMEDIATE LC$OrdreSql ;
End;
N'oubliez-pas que tout ordre du DDL gnre un COMMIT implicite et que les droits ncessaires l'excution de
l'instruction contenue dans la fonction EXECUTE IMMEDIATE doivent avoir t donn directement l'utilisateur,
et non pas via un rle.
lien : Voir le tutoriel sur le SQL Dynamique Natif
Comment implmenter une colonne valeur auto-incrmente ?
Auteurs : Fred_D ,
Les champs de type "Auto-Increment" n'existe pas en Oracle. Pour muler ce comportement, vous avez besoin
FAQ Oracle
- 41 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
d'une squence pour incrmenter la valeur de 1 chaque insertion
d'un trigger pour renseigner automatiquement le champ auto-incrment de votre table.
Voici comment procder :
CREATE SEQUENCE MaSequence
START WITH 1
MAXVALUE 999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;
CREATE TRIGGER MonTrigger
BEFORE INSERT
ON MaTable
FOR EACH ROW
BEGIN
SELECT MaSequence.NEXTVAL
INTO :NEW.macolonne_PK
FROM DUAL;
END;
/
Lorqu'une ligne sera insre dans la table MaTable, la colonne macolonne_PK sera alors renseigne avec la valeur
suivante de la squence MaSequence.
Il est galement possible de se passer du trigger, et d'opter pour la syntaxe suivante :
INSERT INTO MaTable (MaColonne_PK, ...)
VALUES (maSequence.NextVal, ...);
Il est utile de noter que la squence n'est donc pas lie un champ ou une table, et que vous pouvez utiliser la mme
squence pour plusieurs champs.
lien : Plus d'infos sur les triggers (ou dclencheurs)
Comment crer une vue paramtre ?
Auteurs : Fred_D ,
Il peut tre utile de rendre certains objets dynamiques, pour plus de souplesse dans vos applications. Or, les vues sont
souvent "cres en dur" dans la base, ce qui peut se rveler ennuyeux.
Voici donc une mthode pour les rendre dynamiques :
Crez d'abord un package, avec un paramtre global param1 :
CREATE OR REPLACE PACKAGE orafrance
AS
param1 VARCHAR2 (30);
FUNCTION get_param1
RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY orafrance
AS
FUNCTION get_param1
FAQ Oracle
- 42 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
RETURN VARCHAR2
AS
BEGIN
RETURN param1;
END;
END;
/
Crez ensuite votre vue, en faisant appel ce paramtre :
CREATE OR REPLACE VIEW v_orafrance
AS
SELECT *
FROM all_tables
WHERE table_name = UPPER (orafrance.get_param1);
Pour utiliser votre vue, il faut d'abord initialiser le paramtre :
SQL> execute orafrance.param1 := 't_orafrance';
Et vous pouvez dsormais faire appel votre vue :
SQL> select table_name from v_orafrance;
TABLE_NAME
------------------------------
T_ORAFRANCE
Comment excuter un shell depuis le PL/SQL ?
Auteurs : Helyos ,
Cette mthode est valable jusqu'en version 9 :
Pour excuter une commande systme depuis du PL/SQL nous allons utiliser une classe Java. La cration d'un classe
java excutable en PL/SQL passe par trois tapes :
tout d'abord on cr la Java Source
ensuite on publie la spcification d'appel de cette source
et enfin on accorde les privilges ncessaires l'excution de cette classe Java
Donc on va tout d'abord crer la classe Java permettant d'excuter une commande systme :
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" AS
import java.io.*;
public class Host {
public static void executeCommand(String command) {
try {
String[] finalCommand;
if (isWindows()) {
finalCommand = new String[4];
finalCommand[0] = "C:\\windows\\system32\\cmd.exe";
finalCommand[1] = "/y";
finalCommand[2] = "/c";
finalCommand[3] = command;
}
else {
FAQ Oracle
- 43 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
finalCommand = new String[3];
finalCommand[0] = "/bin/sh";
finalCommand[1] = "-c";
finalCommand[2] = command;
}

final Process pr = Runtime.getRuntime().exec(finalCommand);
new Thread(new Runnable() {
public void run() {
try {
BufferedReader br_in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String buff = null;
while ((buff = br_in.readLine()) != null) {
System.out.println("Process out :" + buff);
try {Thread.sleep(100); } catch(Exception e) {}
}
br_in.close();
}
catch (IOException ioe) {
System.out.println("Exception caught printing process output.");
ioe.printStackTrace();
}
}
}).start();

new Thread(new Runnable() {
public void run() {
try {
BufferedReader br_err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
String buff = null;
while ((buff = br_err.readLine()) != null) {
System.out.println("Process err :" + buff);
try {Thread.sleep(100); } catch(Exception e) {}
}
br_err.close();
}
catch (IOException ioe) {
System.out.println("Exception caught printing process error.");
ioe.printStackTrace();
}
}
}).start();
}
catch (Exception ex) {
System.out.println(ex.getLocalizedMessage());
}
}

public static boolean isWindows() {
if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1)
return true;
else
return false;
}
};
/
show errors java source "Host"
Ensuite on publie la spcification d'appel de cette classe en utilisant une procdure PL/SQL pour la "wrapper" :
CREATE OR REPLACE PROCEDURE Host_Command (p_command IN VARCHAR2)
AS LANGUAGE JAVA
NAME 'Host.executeCommand (java.lang.String)';
/
FAQ Oracle
- 44 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Enfin, les permissions ncessaire doivent tre donnes par l'utilisateur SYS pour que le JServer puisse accder aux
fichiers su systme :

EXEC Dbms_Java.Grant_Permission('SCHEMA-
NAME', 'java.io.FilePermission', '<>', 'read ,write, execute, delete');
EXEC Dbms_Java.Grant_Permission('SCHEMA-
NAME', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
EXEC Dbms_Java.Grant_Permission('SCHEMA-
NAME', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
On doit se reconnecter pour activer les privilges.
Ensuite on lance notre commande
SET SERVEROUTPUT ON SIZE 1000000
CALL DBMS_JAVA.SET_OUTPUT(1000000);
BEGIN
Host_Command (p_command => 'move C:\test1.txt C:\test2.txt');
END;
/
PS : ne pas oublier de lancer le script :
$ORACLE_HOME\javavm\install\initjvm.sql
En version 10g, vous pouvez utiliser le scheduler Oracle.
Comment crypter mon code ?
Auteurs : Xavier Vlieghe , LeoAnderson ,
Il est parfois ncessaire, lors du dploiement de vos applicatifs, de crypter votre code afin de le protger : il suffit
pour cela de sauvegarder votre code sous forme de fichiers sql et d'utiliser le programme wrap.exe, se trouvant dans
le rpertoire {Oracle_Home}\Bin\.
Le programme wrap accepte les 2 arguments suivants :
iname : nom du fichier en entre
oname : nom du fichier de sortie
Voici un exemple avec le fichier suivant :
debut.pls
CREATE OR REPLACE FUNCTION debut
(PC$Chaine IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN SUBSTR( PC$Chaine, 1, 5 ) ;
END;
Encryptons-le :
...\BIN> wrap iname=c:\temp\debut.pls oname=c:\temp\debut.plb
PL/SQL Wrapper: Release 10.2.0.1.0- Production on Dim. Oct. 15 23:52:50 2006
Copyright (c) 1993, 2004, Oracle. All rights reserved.
FAQ Oracle
- 45 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Processing c:\temp\debut.pls to c:\temp\debut.plb
Vous pouvez ouvrir le nouveau fichier pour vrifier son contenu.
Attention, prenez videmment soin de sauvegarder vos sources, cette procdure est bien entendu irrversible !
Vous pouvez (devez) galement vrifier que la compilation s'effectue correctement :
SQL> @c:\temp\debut.plb
Fonction cre.
Attention, ceci ne fonctionne pas sur les triggers ou les blocs PL/SQL anonymes, cf la documentation Oracle
The following CREATE statements are obfuscated: CREATE [OR REPLACE]
FUNCTION function_name CREATE [OR REPLACE] PROCEDURE procedure_name
CREATE [OR REPLACE] PACKAGE package_name CREATE [OR REPLACE]
PACKAGE BODY package_name CREATE [OR REPLACE] TYPE type_name AS
OBJECT CREATE [OR REPLACE] TYPE type_name UNDER type_name CREATE
[OR REPLACE] TYPE BODY type_name The CREATE [OR REPLACE] TRIGGER
statement, and [DECLARE] BEGIN..END anonymous blocks, are not obfuscated. All other
SQL statements are passed unchanged to the output file. All comment lines in the unit
being wrapped are deleted, except for those in a CREATE OR REPLACE header and C-
style comments (delimited by /* */).
FAQ Oracle
- 46 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration
FAQ Oracle
- 47 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Les Tables
Comment retrouver la liste des tables d'une base ?
Auteurs : SheikYerbouti ,
Trois vues permettent d'obtenir des informations sur les tables de votre base :
DBA_TABLES
ALL_TABLES
USER_TABLES
DBA_TABLES liste toutes les tables de tous les schmas
ALL_TABLES liste toutes les tables que l'utilisateur peut voir (les tables de son schma plus celles des autres schmas
dans lesquels il possde des droits)
USER_TABLES liste les tables du schma de l'utilisateur connect
Les colonnes de la vue DBA_TABLES sont les suivantes :
OWNER Schma propritaire de la table
TABLE_NAME Nom de la table
TABLESPACE_NAME Nom du tablespace de stockage de la table
CLUSTER_NAME Nom du cluster qui contient la table
IOT_NAME Nom de l'IOT laquele se rfre la zone de dbordement ou la table de correspondances
PCT_FREE Pourcentage minimum d'espace libre pour un bloc
PCT_USED Pourcentage minimum d'espace utilis pour un bloc
INI_TRANS Nombre initial de transactions
MAX_TRANS Nombre maximum de transactions autorises
INITIAL_EXTENT Taille du segment initial en octets
NEXT_EXTENT Taille du deuxime extent en octets
MIN_EXTENTS Nombre minimum d'extents allous dans le segment
MAX_EXTENTS Nombre maximum d'extents allous dans le segment
PCT_INCREASE Pourcentage d'augmentation des nouveaux extents crs
FREELISTS Nombre de freelists alloues pour le segment
FREELIST_GROUPS Nombre de groupes de freelists alloues pour le segment
LOGGING Attribut de logging
BACKED_UP Indique si la table a t sauvegarde depuis la dernire modification
NUM_ROWS Nombre de lignes de la table (*)
BLOCKS Nombre de blocs utiliss pour la table
EMPTY_BLOCKS Nombre de blocs vide (jamais utiliss) pour la table
AVG_SPACE Valeur moyenne de l'espace libre pour la table (en nombre de lignes) (*)
CHAIN_CNT Nombre de lignes chanes pour la table (*)
AVG_ROW_LEN Longueur moyenne d'une ligne (incluant l'entte) (*)
AVG_SPACE_FREELIST_BLOCKS Valeur moyenne de l'espace libre de tous les blocs dans une freelist (*)
NUM_FREELIST_BLOCKS Nombre de blocs dans la freelist
DEGREE Nombre de processus par instance
INSTANCES Nombre d'instances travers lesquelles la table est scanne
CACHE Indique si la table est charge en cache
TABLE_LOCK Indique si le verouillage de table est activ ou dsactiv
SAMPLE_SIZE Valeur de l'chantillon utilis pour analyser la table
LAST_ANALYZED Date de la dernire analyse de la table
PARTITIONED Indique si la table est partitionne
IOT_TYPE Indique le type d'objet d'une table organise en index (Prfixe, zone de dbordement ou table de
correspondance (MAPPING TABLE)
TEMPORARY Indique si la session courante peut voir les donnes insres
SECONDARY Indique si la table fait partie de la cration d'un index de domaine
NESTED Indique s'il s'agit d'une table imbrique
BUFFER_POOL Buffer pool par dfaut de chargement des blocs
FAQ Oracle
- 48 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
ROW_MOVEMENT Indique si le dplacement des lignes partitionnes est activ ou dsactiv
GLOBAL_STATS Indique si les statistiques ont t calcules sans fusion des partitions sous-jacentes
USER_STATS Indique si les statistiques ont t saisies directement par l'utilisateur
DURATION Persistance des donnes d'une table temporaire (sys$session oo sys$transaction)
SKIP_CORRUPT Indique si le contournement des blocs endommags est activ ou dsactiv
MONITORING Indique si le traage est activ
CLUSTER_OWNER Propritaire du cluster
DEPENDENCIES Indique si le traage des dpendances de niveau ligne est activ
COMPRESSION Indique si la compression de donnes est active ou dsactive
(*) ne prenez par comme argent comptant la valeur de ces colonnes, particulirement NUM_ROWS.
En effet ces colonnes ne sont (re)valorises qu'aprs analyse de la table.
Utilisez donc ces valeurs bon escient.
Si votre systme analyse vos tables chaque nuit, par exemple, ces valeurs peuvent sans crainte vous donner une bonne
indication de la volumtrie de vos tables, sans excuter la gourmande instruction : SELECT COUNT(*).
SQL> SELECT
2 OWNER,
3 TABLE_NAME,
4 TABLESPACE_NAME,
5 NUM_ROWS,
6 BLOCKS,
7 EMPTY_BLOCKS,
8 LAST_ANALYZED
9 FROM DBA_TABLES
10 WHERE OWNER = 'FD' ;
OWNER TABLE_NAME TABLESPACE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS LAST_ANA
---------- -------------------- --------------- ---------- ---------- ------------ --------
FD CONTACT USERS 2 5 0 03/12/02
FD DEPT USERS
FD EMP USERS
FD EMPLOYE USERS
FD FACTURE USERS
FD LOV_BLOCK USERS
FD LOV_COLONNE USERS
FD LOV_ELEMENT_COLONNE USERS
FD LOV_ITEM USERS
FD LOV_LOV USERS
FD LOV_MODULE USERS
FD NOMBRES USERS
FD TEST USERS 0 1 0 03/12/02
FD TESTX USERS
FD TEST_LOV USERS 52000 432 80 08/07/04
FD TEST_TYPES USERS
FD UTIL_PREFS USERS
FD UTIL_PREFS_ORDER USERS
FD UTIL_PREFS_RECORD_OR USERS
DER
19 ligne(s) slectionne(s).
Aprs analyse de la table DEPT
SQL> /
OWNER TABLE_NAME TABLESPACE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS LAST_ANA
---------- -------------------- --------------- ---------- ---------- ------------ --------
FD CONTACT USERS 2 5 3 14/10/04
FAQ Oracle
- 49 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
FD DEPT USERS 4 4 4 14/10/04
Comment passer une table en lecture seule ?
Auteurs : Pomalaix ,
Certaines tables doivent absolument tre mises l'abri des modifications, par exemple une table de paramtrage ou
un historique en ligne. Mme si le seul privilge donn sur ces tables est le SELECT, il y a toujours un risque que le
propritaire de la table, ou un utilisateur disposant d'un privilge global de type ANY TABLE, modifie par erreur ces
tables.
Comment se prmunir contre de telles erreurs ?
Il suffit de mettre profit un mode quelque peu mconnu des contraintes : DISABLE VALIDATE.
En effet, ce mode interdit sur la table concerne l'excution de toute instruction INSERT, UPDATE, DELETE ou mme
TRUNCATE, quels que soient les privilges dont on dispose.
La nature et la pertinence de la contrainte importent peu, seuls comptent les mots magiques DISABLE VALIDATE.
Cependant, une contrainte neutre est prfrable, pour le cas o elle serait active, c'est pourquoi je propose un
CHECK(1=1).
ALTER TABLE emp ADD CONSTRAINT lect_seule CHECK (1=1) DISABLE VALIDATE;
UPDATE emp SET ename=ename;
--> ORA-25128: Aucune insertion/mise jour/suppression possible sur une table avec contrainte
(SCOTT.LECT_SEULE) dsactive et valide
Notre table est donc protge contre toute modification accidentelle de son contenu.
Comment voir les lignes chanes sur les tables ?
Auteurs : Jaouad ,
Tout d'abord, il faut au pralable :
excuter le script $ORACLE_HOME/rdbms/admin/utlchain,
analyser la table en question avec la commande suivante :
Analyze Table MaTable;
La requte suivante vous permet maintenant de lister les lignes chanes :
SELECT table_name,
owner,
num_rows,
chain_cnt,
(chain_cnt * 100) / num_rows AS ratio,
pct_used,
pct_free
FROM Dba_Tables
WHERE Owner NOT IN ('SYS','SYSTEM')
AND table_name = 'MaTable'
AND Chain_Cnt !=0
ORDER BY 5 desc;
FAQ Oracle
- 50 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Attention, cela ne fonctionne pas avec le package DBMS_STATS.
Quelle est la diffrence entre une table et une vue ?
Auteurs : LeoAnderson ,
Une table est un ensemble "physique" de donnes qui occupe un espace disque.
Une vue est une interrogation logique (SELECT) base sur des tables ou d'autres vues qui n'occupent pas de place sur
le disque. Une vue n'est en fait qu'un "SELECT" mmoris en base (l'instruction est mmorise, pas les rsultats).
C'est la raison qui justifie l'impossibilit de crer un index, de n'importe quel type, sur ce type de segment. Afin
d'optimiser le temps de rponse d'une requte se basant sur un select, l'index est donc crer sur la table sur laquelle
porte la requte.
Concernant l'criture des requtes, les vues et les tables s'utilisent de la mme manire
Les vues sont toutes stockes dans le tablespace SYSTEM, alors que les tables sont stocks dans les tablespaces ddis.
Les tables sont visibles via les tables systmes : DBA_TABLES, ALL_TABLES et USER_TABLES alors que les vues
sont visibles via les DBA_VIEWS, ALL_VIEWS et USER_VIEWS.
lien : View and Base table
Comment connatre, pour une table, le nombre de
colonnes, d'index et le pourcentage de colonnes indexes ?
Auteurs : PlaineR ,
Grce la requte suivante :
SELECT utc.table_name,
count (distinct utc.column_name) nb_col,
count (distinct index_name) nb_index,
count (distinct uic.column_name) / count (distinct utc.column_name) prct_index
FROM user_tab_columns utc, user_ind_columns uic
WHERE utc.table_name = uic.table_name
AND utc.table_name= 'PS_JOB'
GROUP BY utc.table_name;
Comment lister toutes les contraintes se rapportant une table ?
Auteurs : rouardg , Jaouad ,
il suffit de regarder la table USER_CONSTRAINTS, en particulier la colonne CONSTRAINT_TYPE de cette table,
qui est code de la manire suivante :
C : contrainte de type CHECK (genre champ NOT NULL ou avec une condition de vrification genre BETWEEN)
P : contrainte de cl primaire (PK)
U : contrainte d'unicit (Unique)
R : contrainte rfrentielle (FK)
SQL> SELECT constraint_name,
1
decode(constraint_type, 'C', 'check', 'P', 'cl primaire ', 'U', 'Contrainte d''unicit', 'R', 'Contrainte Rfrentielle ')
constraint_name
2 table_name, search_condition, status
3 FROM USER_CONSTRAINTS;
FAQ Oracle
- 51 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
CONSTRAINT_NAME CONSTRAINT_NAME TABLE_NAME
SEARCH_CONDITION
------------------------------ ------------------------- ------------------------------ ------------
PK_LIST cl primaire USERS_ERP

PK_SEQUENCE cl primaire DD_JOURNAL

PK_PS_PROJECT_LIST cl primaire PS_PROJECT_LIST

SYS_C00774 check PSACCESSPRFL
"ACCESSID" IS NOT NULL
FAQ Oracle
- 52 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Les Utilisateurs
Comment afficher la liste des utilisateurs ?
Auteurs : Laurent Schneider ,
La requte suivante permet de lister les utilisateurs avec les proprits suivantes :
ID
Tablespace par dfaut
Tablespace temporaire
Mot de passe (crypt)
tat
Profil
Date de cration
select USERNAME,
USER_ID,
DEFAULT_TABLESPACE,
TEMPORARY_TABLESPACE,
PASSWORD,
ACCOUNT_STATUS,
PROFILE,
CREATED
from DBA_USERS
order by USERNAME;
USERNAME USER DEFAULT TEMPORARY PASSWORD ACCOUNT_STATUS PROFILE CREATED
---------- ---- ------- --------- ---------------- ---------------- ------- ----------
ANONYMOUS 38 SYSAUX TEMP anonymous EXPIRED & LOCKED DEFAULT 2006-04-18
CTXSYS 35 SYSAUX TEMP 24ABAB8B06281B4C EXPIRED & LOCKED DEFAULT 2006-04-18
DBSNMP 24 SYSAUX TEMP E066D214D5421CCC OPEN DEFAULT 2006-04-18
DIP 19 USERS TEMP CE4A36B8E06CA59C EXPIRED & LOCKED DEFAULT 2006-04-18
EXFSYS 34 SYSAUX TEMP 66F4EF5650C20355 EXPIRED & LOCKED DEFAULT 2006-04-18
Comment migrer vers un utilisateur identifi par le systme d'exploitation ?
Auteurs : Fred_D ,
L'objectif est de crer un utilisateur identifi par le systme d'exploitation pour viter la saisie des mots de passe "en
dur" dans les batchs. La difficult rside dans l'attibution des droits donner cette utilisateur.
Le script suivant permet de crer l'utilisateur de type OPS$ (cf. Cration d'un utilisateur authentifi par le systme
d'exploitation).
Le script Migrate2OPS$.sql gnre 4 scripts SQL qui seront lancs automatiquement si vous le souhaitez. C'est un
script interactif qui demande de saisir le nom de l'utilisateur crer et le nom de l'utilisateur source (i.e. l'utilisateur
de rfrence).
set verify on
set feedback on
set termout on
set linesize 200
ACCEPT to_user PROMPT 'Saisir le user cible (OPS$) : '
ACCEPT from_user PROMPT 'Saisir le user source : '
DEFINE filename = &to_user._&from_user
set verify off
set feedback off
set pagesize 0

COL dbname NOPRINT NEW_VALUE dbname
FAQ Oracle
- 53 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SELECT HOST_NAME||'-'||INSTANCE_NAME||'.UX' DBNAME FROM v$instance;
set termout on
SELECT 'Creating user build script...' FROM dual;
set termout off
spool c:\alter_user_&filename..sql
SELECT 'CREATE USER &to_user IDENTIFIED EXTERNALLY PROFILE ' || profile ||
' DEFAULT TABLESPACE '|| default_tablespace ||
' TEMPORARY TABLESPACE ' || temporary_tablespace
FROM sys.dba_users
WHERE username = UPPER('&from_user')
AND NOT EXISTS (SELECT 1 FROM dba_users WHERE username = UPPER('&to_user'))
/
SELECT 'ALTER USER &to_user QUOTA '
|| DECODE (max_bytes, -1, 'Unlimited', max_bytes)
|| ' ON '
|| tablespace_name
|| ';'
FROM sys.dba_ts_quotas
WHERE username = UPPER('&from_user')
/
spool off

set termout on
SELECT 'Creating grant build script...' FROM dual;
set termout off
spool c:\grant_prvs_&filename..sql
SELECT 'GRANT ' || privilege || ' TO &to_user' || admin_option
FROM (
SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege,
DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option
FROM sys.dba_role_privs
WHERE grantee != 'SYS'
union
SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege,
DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option
FROM sys.dba_role_privs
WHERE grantee != 'SYS'
union
SELECT LOWER(grantee) grantee, LOWER(privilege) privilege,
DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option
FROM dba_sys_privs s
WHERE grantee != 'SYS'
union
SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' ||
LOWER(table_name) privilege, DECODE(grantable,'YES',
' WITH ADMIN OPTION;',';') admin_option
FROM dba_tab_privs t
WHERE grantee != 'SYS'
and t.privilege !='EXECUTE'
union
SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' ||
LOWER(table_name) privilege, DECODE(grantable,'YES',
' WITH ADMIN OPTION;',';') admin_option
FROM dba_tab_privs t
WHERE grantee != 'SYS'
and t.privilege ='EXECUTE'
union
SELECT LOWER(owner) grantee, 'ALL ON ' || LOWER(owner) ||'.'||
LOWER(table_name) privilege, ';' admin_option
FROM all_tables
WHERE owner = upper('&from_user')
ORDER BY 1
)
WHERE grantee = LOWER('&from_user');
spool off

FAQ Oracle
- 54 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
set termout on
SELECT 'Creating synonym build script...' FROM dual;
set termout off
spool c:\create_synonyms_&filename..sql
SELECT DISTINCT 'CREATE SYNONYM '|| LOWER('&to_user') || '.' || LOWER(object_name) ||
' FOR ' || LOWER('&from_user') || '.' || LOWER(object_name) || ';'
FROM sys.dba_objects
WHERE owner = UPPER('&from_user')
AND object_type IN ('CLUSTER','FUNCTION','LIBRARY','MATERIALIZED VIEW','PACKAGE','PACKAGE BODY',
'PROCEDURE','SEQUENCE','TABLE','TABLE PARTITION','TYPE','TYPE BODY','VIEW')
ORDER BY 1
/
spool off
set termout on
SELECT 'Creating database link build script...' FROM dual;
set termout off
spool c:\create_dblinks_&filename..sql
SELECT 'ALTER USER &to_user IDENTIFIED BY dummypwd;' FROM dual;
SELECT 'CONNECT &to_user/dummypwd@&dbname' FROM dual;

SELECT 'CREATE DATABASE LINK ' || l.name ||
' CONNECT TO ' || LOWER(l.userid) || ' IDENTIFIED BY ' || LOWER(l.password) ||
DECODE(l.host,NULL, NULL, ' USING '''||l.host) || ''';'
FROM sys.link$ l, sys.user$ u
WHERE l.owner# = u.user#
AND u.name = UPPER('&from_user')
ORDER BY l.name
/
SELECT 'ALTER USER &to_user IDENTIFIED EXTERNALLY;' FROM dual;
spool off
set termout on
PROMPT
PROMPT Tapez [Ctrl+C] pour interrompre le process ou [Enter] pour continuer aprs avoir vrifier les
scripts gnrs...
PAUSE
spool c:\copy_user_&filename..sql
SELECT 'set feed on' FROM dual;
SELECT 'spool c:\alter_user_&filename..log' FROM dual;
SELECT '@alter_user_&filename..sql' FROM dual;
SELECT 'spool off' FROM dual;
SELECT 'spool c:\grant_prvs_&filename..log' FROM dual;
SELECT '@grant_prvs_&filename..sql' FROM dual;
SELECT 'spool off' FROM dual;
SELECT 'spool c:\create_synonyms_&filename..log' FROM dual;
SELECT '@create_synonyms_&filename..sql' FROM dual;
SELECT 'spool off' FROM dual;
SELECT 'spool c:\create_dblinks_&filename..log' FROM dual;
SELECT '@create_dblinks_&filename..sql' FROM dual;
SELECT 'spool off' FROM dual;
FAQ Oracle
- 55 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
spool off
Comment mettre en place l'authentification OS sous Windows ?
Auteurs : Pomalaix ,
Par dfaut, les mots de passe des utilisateurs sont stocks dans la base Oracle, sous forme crypte. On peut cependant
souhaiter que le compte Oracle d'un utilisateur soit synchronis avec son compte Windows.
Ceci procure deux avantages :
viter de devoir grer deux systmes distincts de mots de passe, l'un dans la base Oracle, et l'autre dans un serveur
de domaine.
permettre de se connecter la base de donnes sans fournir de mot de passe, puisqu'il a dj t valid par l'OS.
C'est un premier pas vers l'authentification unique, connue sous le sigle SSO.
Nous dcrivons ici le paramtrage ncessaire pour mettre en place cette authentification OS dans un environnement
Windows.
Prcisons qu'il ne suffit pas que le client soit sous Windows; le serveur Oracle doit l'tre aussi.
Le principe est que chaque compte NT doit tre mis en correspondance avec un compte Oracle. Le compte Oracle est
identique au compte NT, sauf que le compte Oracle possde en plus un prfixe qui est identique pour tous les comptes
authentifis par l'OS. Par dfaut, ce prfixe est OPS$. Ainsi, si le compte NT est TOTO, le compte Oracle correspondant
doit tre OPS$TOTO.
Le choix de l'authentification OS reste souple : il s'applique uniquement aux comptes choisis, si bien qu'on peut tout
fait grer certains comptes de manire traditionnelle, avec le mot de passe dans la base, et grer les autres grce
l'authentification OS.
Voici la procdure :
1) Dans le SQLNET.ORA ct client et ct serveur, insrer :
SQLNET.AUTHENTICATION_SERVICES=(NTS)
2) Dans le fichier d'initialisation INITxxx.ORA, insrer :
REMOTE_OS_AUTHENT=TRUE
3) Dans l'INITxxx.ORA, noter la valeur du paramtre OS_AUTHENT_PREFIX (OPS$ par dfaut), ou lui donner la
valeur dsire. Le plus commode est "" (deux guillemets conscutifs, sans espace) ce qui correspond une valeur nulle,
et permet d'avoir des comptes NT et des comptes Oracle identiques.
Redmarrer l'instance si une modification a t faite au point 2 ou 3.
4) La cl de registre OSAUTH_PREFIX_DOMAIN, situe ct serveur dans la branche HKLM\Software\Oracle
\HomeN, permet de spcifier si l'authentification doit tenir compte ou non du nom de domaine NT.
Avec OSAUTH_PREFIX_DOMAIN FALSE, seul le nom du compte est vrifi, indpendamment de son domaine NT.
Cela signifie que 2 comptes Toto, situs dans des domaines diffrents, pourraient accder la base de donnes.
Avec OSAUTH_PREFIX_DOMAIN TRUE, le domaine NT est galement vrifi, ce qui amliore la scurit.
5) Cration du compte Oracle en majuscules et entre guillemets.
(Si OS_AUTHENT_PREFIX est nul, il suffit de supprimer la mention OPS$)
5.1) Dans le cas o OSAUTH_PREFIX_DOMAIN est FALSE pour un compte NT nomm Stagiaire
CREATE USER "OPS$STAGIAIRE" IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION TO "OPS$STAGIAIRE";
FAQ Oracle
- 56 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
OU 5.2) Dans le cas o OSAUTH_PREFIX_DOMAIN est TRUE pour un compte NT nomm Stagiaire dans le domaine
Paris
CREATE USER "OPS$PARIS\STAGIAIRE" IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION TO "OPS$PARIS\STAGIAIRE";
6) Connexion SQL*Plus depuis l'OS :
sqlplusw /@labase
Il ne doit pas y avoir d'espace entre le / et le @. En effet, s'il y a un espace "labase" est considr comme le nom d'un
script excuter, et non comme un alias Oracle Net.
Ou si on est dj dans SQL*Plus :
CONNECT /@labase
Comment crer un utilisateur via un script SQL
Auteurs : Xavier Vlieghe ,
Via la commande CREATE USER, donc voici un exemple :
CREATE USER TEST /* on le baptise */
IDENTIFIED BY mypassword /* Attention, le password est en clair ! */
DEFAULT TABLESPACE TBSTEST /* Le tablespace associ */
TEMPORARY TABLESPACE TEMP; /* Le temporary associ */
Il est ensuite possible de lui assigner des droits via la commande GRANT :
GRANT CONNECT TO TEST;
FAQ Oracle
- 57 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Scurit
Comment empecher un utilisateur de se connecter avec un outil spcifique ?
Auteurs : SheikYerbouti ,
Via un trigger de type AFTER LOGON :
L'exemple suivant concerne l'outil Toad :
create or replace trigger interdire_toad after logon on database
declare
v_sid sys.v_$session.sid%TYPE;
v_isdba sys.v_$session.username%TYPE;
v_program sys.v_$session.program%TYPE;
begin
execute immediate
'select distinct sid from sys.v_$mystat' into v_sid;
execute immediate
'select program from sys.v_$session where sid = :b1' into v_program using v_sid;
execute immediate
'select username from sys.v_$session where sid = :b1' into v_isdba using v_sid;
if upper(v_program) like 'TOAD%' and v_isdba = 'USERNAME'
then
RAISE_APPLICATION_ERROR
(-20001,'Connexion avec '||v_isdba||' sous TOAD interdite,contactez le DBA ',TRUE);
end if;
end;
/
Ce trigger a deux limitations qu'il est important de connatre :
il n'a pas d'effet si l'utilisateur possde le privilge ADMINISTER DATABASE TRIGGER.
il n'a pas d'effet si on renomme l'utilitaire, le contrle se faisant via une comparaison entre le champ v_program
et le nom du programme.
Comment dsactiver - activer la scurit :
alter trigger interdire_toad disable ;
alter trigger interdire_toad enable ;
Comment empcher un utilisateur d'effectuer certaines oprations sous Sql*Plus ?
Auteurs : Jaouad ,
Il suffit d'effectuer une insertion dans la table product_user_profile :
INSERT INTO product_user_profile (product, userid, attribute, char_value)
VALUES ('SQL*Plus', 'SCOTT', 'CREATE', 'DISABLED');
COMMIT ;
Comment voir les interdictions :
set linesize 250
col CHAR_VALUE format a15
col ATTRIBUTE format a15
FAQ Oracle
- 58 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
select product, userid, attribute, char_value from product_user_profile ;
Voici un exemple de mise en oeuvre, o l'attribut CREATE est dsactiv pour l'utilisateur FORMATION :
SQL> conn system
Entrez le mot de passe : ********
Connect.
SQL> INSERT INTO product_user_profile (product, userid, attribute, char_value) VALUES
2 ('SQL*Plus', 'FORMATION', 'CREATE', 'DISABLED');
1 ligne cre.
SQL> commit ;
Validation effectue.
SQL> conn formation/formation
Connect.
SQL> create table dvp ( a varchar2(10)) ;
SP2-0544: commande non valide : create
SQL> conn system
Entrez le mot de passe : ********
Connect.
SQL> delete from product_user_profile where userid='FORMATION' ;
1 ligne supprime.
SQL> commit ;
Validation effectue.
SQL> conn formation/formation
Connect.
SQL> create table dvp ( a varchar2(10)) ;
Table cre.
Comment autoriser/interdire une connexion Net*8 ?
Auteurs : Jaouad ,
A placer dans le fichier Sqlnet.ora ( sur le serveur hbergeant le SGBDR ) Autoriser les personnes suivantes :
TCP.VALIDNODE_CHECKING=yes
TCP.INVITED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)
Interdire les personnes suivantes :
TCP.VALIDNODE_CHECKING=yes
TCP.EXCLUDED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)
FAQ Oracle
- 59 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Vous trouverez plus de dtails dans cet article : Filtrage global au niveau du serveur
Comment interdire le changement de mot de passe un utilisateur ?
Auteurs : Jaouad ,
l'aide de la fonction suivante :
REATE OR REPLACE FUNCTION restrict_pwd_change (username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN boolean IS
BEGIN
raise_application_error(-20009, 'ERROR: Modification du mot de passe impossible');
END;
/
et de la commande suivante :
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION restrict_pwd_change;
Pour dsactiver cette restriction, utilisez cette commande :
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null;
Je suis administrateur et pourtant j'ai une erreur de privilges insuffisants ?
Auteurs : Fred_D ,
Vrifiez que l'utilisateur avec lequel vous vous connectez les droits ncessaires pour faire l'action que vous souhaitez
en vous aidant de ce tutoriel : http://oracle.developpez.com/guide/administration/adminrole/#L8
Par exemple, pour voir toutes les tables de la base, il vous faudra avoir le privilge SELECT ANY TABLE.
Comment me connecter en tant que SYS, cela me retourne une erreur ?
Auteurs : LeoAnderson ,
Depuis la 9i, il est impossible de se connecter avec l'utilisateur SYS si on ne prcise pas AS SYSDBA ou AS SYSOPER
SQLPLUS /NOLOG
CONNECT SYS/pwd@db AS SYSDBA
Comment scuriser la gestion des mots de passe ?
Auteurs : Xavier Vlieghe ,
Via la gestion de profils ddis, qui peuvent grer les paramtres suivants :
FAQ Oracle
- 60 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
FAILED_LOGIN_ATTEMPTS : Nombre d'erreurs permises la saisie du mot de passe avant que le compte soit
verrouill,
PASSWORD_GRACE_TIME : En cas de premption d'un mot de passe d un dlai fix par l'administrateur,
cette option permet de paramtrer une dure (en jours) pendant laquelle l'utilisateur pourra tout de mme se
connceter, mais recevra un avertissement,
PASSWORD_LIFE_TIME : Dure (en jours) de vie maximum d'un mot de passe,
PASSWORD_LOCK_TIME : Dure (en jours) pendant laquelle un compte sera verrouill aprs qu'il ait atteint
le nombre d'erreurs permises la saisie de son mot de passe (FAILED_LOGIN_ATTEMPTS),
PASSWORD_REUSE_MAX : Nombre de changement de mots de passe requis avant de pouvoir r-utiliser un
mot de passe dj utilis,
PASSWORD_REUSE_TIME : Dure (en jours) minimum pendant laquellel'utilisateur ne peut pas r-utiliser un
mot de passe dj utilis, partir du moment o celui-ci a t chang,
PASSWORD_VERIFY_FUNCTION : permet de prciser une fonction (PL/SQL) vrifiant la compexit du mot
de passe.
Voici un exemple de mise en application :
1. Crons un utilisateur TEST :
CREATE USER TEST
IDENTIFIED BY TEST
DEFAULT TABLESPACE TBSTEST;
2. Crons un profil :
SQL> CREATE PROFILE Profil_Test LIMIT PASSWORD_LIFE_TIME 60;
Profil cr.
SQL> ALTER PROFILE Profil_Test LIMIT FAILED_LOGIN_ATTEMPTS 2;
Profil modifi.
3. Attribuons ce profil notre utilisateur :
SQL> ALTER USER TEST PROFILE Profil_Test;
Utilisateur modifi.
4. Vrifions que le paramtre FAILED_LOGIN_ATTEMPTS est bien actif :
SQL> connect test/test2@db
ERROR:
ORA-01017: invalid username/password; logon denied
Avertissement : vous n'tes plus connect ORACLE.
SQL> connect test/test3@db
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect test/test@db
ERROR:
ORA-28000: the account is locked
Il est possible de consulter les profils existants l'aide de la requte suivante :
FAQ Oracle
- 61 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> SELECT profile, resource_name, limit
2 FROM Dba_Profiles
3 WHERE resource_type = 'PASSWORD'
4 ORDER BY profile;
PROFILE RESOURCE_NAME LIMIT
--------------- ------------------------- ---------------
DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD_GRACE_TIME UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
PROFIL_TEST FAILED_LOGIN_ATTEMPTS 2
PROFIL_TEST PASSWORD_LIFE_TIME 60
PROFIL_TEST PASSWORD_REUSE_MAX DEFAULT
PROFIL_TEST PASSWORD_LOCK_TIME DEFAULT
PROFIL_TEST PASSWORD_GRACE_TIME DEFAULT
PROFIL_TEST PASSWORD_VERIFY_FUNCTION DEFAULT
PROFIL_TEST PASSWORD_REUSE_TIME DEFAULT
14 ligne(s) slectionne(s).
lien : Gestion des Profils
lien : Scurisation d'une base Oracle
FAQ Oracle
- 62 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Les Tablespaces et autres fichiers
Comment lister les tablespaces et leurs fichiers associs ?
Auteurs : Laurent Schneider ,
La requte suivante permet d'afficher l'identifiant, le nom, le status et le tablespace des fichiers de donnes :
select
FILE_ID,
FILE_NAME,
STATUS,
TABLESPACE_NAME
from
DBA_DATA_FILES
order by FILE_ID;
FILE_ID FILE_NAME STATUS TABLESPACE_NAME
---------- ---------------------------------- --------- ---------------
1 /u01/LSC63/data/system01LSC63.dbf AVAILABLE SYSTEM
2 /u01/LSC63/data/undo01LSC63.dbf AVAILABLE UNDOTBS1
3 /u01/LSC63/data/sysaux01LSC63.dbf AVAILABLE SYSAUX
4 /u01/LSC63/data/sysaux02LSC63.dbf AVAILABLE SYSAUX
5 /u01/LSC63/data/sysaux03LSC63.dbf AVAILABLE SYSAUX
6 /u01/LSC63/data/users01LSC63.dbf AVAILABLE USERS
Comment obtenir la liste des tablespaces avec leurs caractristiques principales ?
Auteurs : Laurent Schneider ,
La requte suivante permet d'afficher les tablespaces, avec les proprits suivantes :
Type
Mode de management d'extent
Type d'allocation
Mode de management de l'espace segment (9i)
Option bigfile (10g)
tat
Nombre de fichiers
Taille
Taille maximale (avec autoextend)
Espace utilis
select
a.TABLESPACE_NAME,
a.CONTENTS,
a.EXTENT_MANAGEMENT,
a.ALLOCATION_TYPE,
a.SEGMENT_SPACE_MANAGEMENT,
a.BIGFILE,
a.STATUS,
nvl(sum(b.count_files),0) FILES,
nvl(sum(b.bytes),0) "SIZE",
nvl(sum(b.maxbytes),0) MAX_SIZE,
nvl(sum(b.bytes),0)-nvl(sum(c.free_bytes),0) "USED"
from DBA_TABLESPACES a,
(
select TABLESPACE_NAME,
sum(BYTES) bytes,
count(*) count_files,
FAQ Oracle
- 63 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
sum(greatest(MAXBYTES,BYTES)) maxbytes
from DBA_DATA_FILES
group by TABLESPACE_NAME
union all
select TABLESPACE_NAME,
sum(BYTES),
count(*),
sum(greatest(MAXBYTES,BYTES)) maxbytes
from DBA_TEMP_FILES
group by TABLESPACE_NAME
) b,
(
select TABLESPACE_NAME,
sum(BYTES) free_bytes
from DBA_FREE_SPACE
group by TABLESPACE_NAME
union all
select TABLESPACE_NAME,
sum(BYTES_FREE) free_bytes
from V$TEMP_SPACE_HEADER
group by TABLESPACE_NAME
) c
where a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)
and a.TABLESPACE_NAME = c.TABLESPACE_NAME (+)
group by
a.TABLESPACE_NAME,
a.CONTENTS,
a.EXTENT_MANAGEMENT,
a.ALLOCATION_TYPE,
a.SEGMENT_SPACE_MANAGEMENT,
a.BIGFILE,
a.STATUS
order by a.TABLESPACE_NAME;
TABLESPA CONTENTS EXTENT_MAN ALLOCATIO SEGMEN BIG STATUS FILES SIZE MAX_SIZE USED
-------- --------- ---------- --------- ------ --- ------ ----- --------- ---------- ---------
SYSAUX PERMANENT LOCAL SYSTEM AUTO NO ONLINE 3 397410304 6442450944 395771904
SYSTEM PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 471859200 2147483648 470548480
TEMP TEMPORARY LOCAL UNIFORM MANUAL NO ONLINE 1 20971520 2147483648 17039360
UNDOTBS1 UNDO LOCAL SYSTEM MANUAL NO ONLINE 1 182452224 2147483648 13041664
USERS PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 26214400 2147483648 524288
Concernant les fichiers d'archives, la requte suivante permet de connatre les informations suivantes :
Chemin et nom de fichier
Numro de thread
Numro de squence
Taille
Identifiant resetlogs (10g)
Date
tat (9i)
select NAME,
THREAD#,
SEQUENCE#,
BLOCKS*BLOCK_SIZE "SIZE",
RESETLOGS_ID,
COMPLETION_TIME,
STATUS
from V$ARCHIVED_LOG
order by SEQUENCE#;
NAME THR SEQ SIZE RESETLOGS COMPLETION S
----------------------------------------- --- ---- ------- --------- ---------- -
FAQ Oracle
- 64 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
/u01/LSC63/arch/arch_588083500_1_2472.dbf 2472 2081280 588083500 2006-06-30 A
Comment lister les tablespaces temporaires (locally managed) ?
Auteurs : Laurent Schneider ,
La requte suivante nous permet d'afficher leurs identifiants, noms et status :
select
FILE_ID,
FILE_NAME,
STATUS,
TABLESPACE_NAME
from
DBA_TEMP_FILES
order by FILE_ID;
FILE_ID FILE_NAME STATUS TABLESPACE_NAME
---------- -------------------------------- --------- ---------------
1 /u01/LSC63/data/temp01LSC63.dbf AVAILABLE TEMP
Cela ne liste que les tablespaces temporaires allocation d'extent locale (locally managed). En effet, les tablespace
temporaires dictionary managed (qui datent d'Oracle 7) ne seront pas listes, car ils ne contiennent pas de "tempfile"
mais des datafiles.
Comment vider un tablespace temporaire ?
Auteurs : Helyos ,
Il ne sert rien de vider un tablespace temporaire, car celui-ci est automatiquement vid par le processus SMON.
De plus il est important de savoir que les tablespaces temporaires peuvent apparatre pleins lors d'une utilisation
normale de la base. En effet les extents sont allous une fois puis grs par le systme. Une fois l'utilisation de l'extent
termine il est alors marqu comme libre mais n'est pas libr pour des raisons de tuning. Il n'est donc pas rare de
ne pas avoir d'espace temporaire libre lors de l'utilisation d'une base. Les extents seront librs par SMON lors du
redmarrage de la base.
Comment afficher le nom et l'tat des fichiers de contrle ?
Auteurs : Laurent Schneider ,
Via la requte suivante :
select NAME,
STATUS
from V$CONTROLFILE
order by NAME;
NAME STATUS
------------------------------------------------- -------
/u01/LSC63/ctrl/ctrl01aLSC63.dbf
FAQ Oracle
- 65 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
/u01/LSC63/ctrl/ctrl01bLSC63.dbf
Comment lister les fichiers Redo Log ainsi que leurs caractristiques principales ?
Auteurs : Laurent Schneider ,
La requte suivante permet d'afficher les fichiers redo Log, avec les proprits suivantes :
Groupe
Thread
Squence
Taille
Nombre de log dans le groupe
Type (9i)
tat
Nom des fichiers
Groupe
select l.GROUP#,
l.THREAD#,
l.SEQUENCE#,
l.BYTES,
l.MEMBERS,
l.STATUS,
f.TYPE,
f.MEMBER
from V$LOGFILE f, V$LOG l
where l.GROUP# = f.GROUP#
order by GROUP#,MEMBER;
GROUP# THR SEQ BYTES MEMBERS STATUS TYPE MEMBER
------ --- ---- ------- ------- ---------- ------ --------------------------------
1 1 2473 4194304 2 INACTIVE ONLINE /u01/LSC63/redo/redo01aLSC63.dbf
1 1 2473 4194304 2 INACTIVE ONLINE /u01/LSC63/redo/redo01bLSC63.dbf
2 1 2474 4194304 2 ACTIVE ONLINE /u01/LSC63/redo/redo02aLSC63.dbf
2 1 2474 4194304 2 ACTIVE ONLINE /u01/LSC63/redo/redo02bLSC63.dbf
3 1 2475 4194304 2 CURRENT ONLINE /u01/LSC63/redo/redo03aLSC63.dbf
3 1 2475 4194304 2 CURRENT ONLINE /u01/LSC63/redo/redo03bLSC63.dbf
Comment afficher les caractristiques de la base de donnes ?
Auteurs : Laurent Schneider ,
La requte suivante nous permet d'obtenir les caractristiques suivantes :
Nom
Identifiant DBID
Mode d'archivage
Mode flashback (10g)
Mode d'ouverture (RW/RO)
Date de cration de la base de donnes
SELECT NAME,
DBID,
LOG_MODE,
FLASHBACK_ON,
OPEN_MODE,
CREATED
FAQ Oracle
- 66 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
FROM v$database;

NAME DBID LOG_MODE FLASHBACK OPEN_MODE CREATED
--------- ------------- ------------ --------- ---------- ----------
LSC63 1119326572 ARCHIVELOG NO READ WRITE 2006-04-18
partir d'Oracle 9i, la requte suivante permet d'afficher le nom et la valeur des proprits de la base de donnes (ex:
tablespace properties) :
SELECT PROPERTY_NAME,
PROPERTY_VALUE,
DESCRIPTION
FROM DATABASE_PROPERTIES
ORDER BY PROPERTY_NAME;
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------------ --------------- -------------------------------------
DEFAULT_PERMANENT_TABLESPACE USERS Name of default permanent tablespace
DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace
Comment afficher le nom et la version de l'instance ?
Auteurs : Laurent Schneider ,
Via la requte suivante :
SELECT INSTANCE_NAME,
VERSION
FROM V$INSTANCE;

INSTANCE_NAME VERSION
---------------- -----------------
LSC63 10.2.0.2.0
Comment afficher le nom global de la base ?
Auteurs : Laurent Schneider ,
Via la requte suivante :
SQL> SELECT GLOBAL_NAME
2 FROM GLOBAL_NAME;
GLOBAL_NAME
------------------------------
LSC63.DOMAIN.CH
Comment afficher la fonction et le nombre d'utilisations dtectes (ex: Partitioning) ?
Auteurs : Laurent Schneider ,
partir d'Oracle 10g, via la requte suivante :
FAQ Oracle
- 67 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SELECT NAME,
DETECTED_USAGES
FROM DBA_FEATURE_USAGE_STATISTICS
ORDER BY NAME;
NAME DETECTED
--------------------- --------
Partitioning (system) 11
Partitioning (user) 0
Comment supprimer une base de donnes sous SQL*Plus ?
Auteurs : Jaouad ,
A partir de la 10g il est possible de supprimer une base de donnes Oracle via une commande sous Sql*Plus : Il faut
tre connect en sysdba avec une base de donnes en mode open.
Nous vous recommandons bien entendu la plus grande vigilance quant l'utilisation de cette commande, dont la syntaxe
est la suivante :
SQL> drop database;
Comment migrer un tablespace de DICTIONNARY en LOCALLY MANAGED ?
Auteurs : Fred_D ,
Depuis la version 9.2, il est possible d'utiliser la procdure
sys.DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL ('NOM_DU_TABLESPACE')
SYSTEM ne peut tre migr que si tous les autres tablespaces ont t migr et si la base de donnes n'est pas configure
avec SYSTEM comme tablespace temporaire par dfaut.
Attention, la migration inverse est impossible ! Nanmoins, je vous rappelle qu'Oracle prconise l'utilisation de
LMT.
Note : la note Metalink 175434.1 dcrit en dtail cette migration.
Comment renommer un Tablespace ?
Auteurs : Jaouad ,
Depuis la version 10g, Il est possible de renommer un Tablespace grce la commande suivante :
SQL> alter tablespace Tbs1 rename to Tbs2 ;
Il n'est pas possible de renommer les tablespaces System et Sysaux. On peut renommer les tablespaces permanents et
temporaires : pour ce faire, le tablespace ou l'un de ses fichiers de donnes ne doit pas tre hors ligne, sinon l'opration
de renomage ne peut avoir lieu !
Lorsque l'on modifie le nom d'un tablespace, Oracle met jour les rfrences de ce tablespace : savoir les fichiers de
contrle, le dictionnaire de donnes et les en-ttes de fichiers.
Si ce Tablespace est en mode Read Only les enttes de fichiers ne sont pas modifis (ils ont besoin pour ce faire d'tre
en mode Read Write) : Un message est consign dans le fichier alerte de l'instance.
FAQ Oracle
- 68 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Si la modification de nom concerne le tablespace d'annulation UNDO et qu'il s'agit du tablespace dsign par le
paramtre d'initialisation, la modification affecte le Spfile. Si c'est le Pfile qui est utilis, alors un message d'alerte est
consign dans le fichier d'alerte de l'instance
Le paramtre compatible doit au moins tre a 10.0.0.
Comment supprimer un datafile ?
Auteurs : Fred_D , Laurent Schneider ,
C'est normallement impossible :
Au mieux un datafile peut tre renomm, retaill ou dplac. Pour le supprimer d'un tablespace il faut recrer le
tablespace sans ce datafile.
C'est maintenant possible en 10gR2 :
SQL> create tablespace x datafile '/tmp/x1.dbf' size 4m, '/tmp/x2.dbf' size 4m;
Tablespace created.
SQL> alter tablespace x drop datafile '/tmp/x2.dbf';
Tablespace altered.
Comment connatre la taille d'un tablespace et de son espace libre ?
Auteurs : LeoAnderson , rouardg ,
La vue DBA_DATA_FILES va nous permettre de dterminer la taile d'un tablespace,
La vue DBA_EXTENTS permet de connaitre la taille de tous les segments dans les diffrents datafiles,
La vue DBA_FREE_SPACE qui indique les espaces libres dans les database files.
La requte suivante vous permet de rcuprer toutes ces informations :
SQL> SELECT A.tablespace_Name, A.Alloue, B.Occupe, C.Libre
2 FROM (select tablespace_name, sum(bytes)/1024/1024 AS ALLOUE from dba_data_files group by
tablespace_name) a,
3 (select tablespace_name, Sum(bytes)/1024/1024 AS OCCUPE from dba_segments group by
tablespace_name) b,
4 (select tablespace_name, Sum(bytes)/1024/1024 AS LIBRE from dba_free_space group by
tablespace_name) c
5 WHERE B.tablespace_Name = A.tablespace_Name
6 AND C.Tablespace_Name = B.Tablespace_Name;
Attention : En 10g, le "LIBRE" peut tre diffrent de ("ALLOUE"- "OCCUPE") cause de la recyclebin !
Comment connatre l'occupation du tablespace SYSAUX (10g) ?
Auteurs : Jaouad ,
Le tablespace SYSAUX est apparue avec la version 10g, et a pour but de dcharger le tablespace SYSTEM de certains
segments.
SQL> select occupant_name, space_usage_kbytes from v$sysaux_occupants ;
FAQ Oracle
- 69 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
OCCUPANT_NAME SPACE_USAGE_KBYTES
---------------------------------------------------------------- ------------------
LOGMNR 6080
LOGSTDBY 896
STREAMS 512
XDB 49600
AO 21248
XSOQHIST 21248
...
FAQ Oracle
- 70 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Systme
Comment afficher l'encombrement disque/mmoire des units de traitement ?
Auteurs : SheikYerbouti ,
La place occupe par les units de traitement est interrogeable depuis la vue : USER_OBJECT_SIZE
NAME Contient le nom de l'objet
TYPE Contient le type de l'objet (TYPE, TYPE BODY, TABLE, VIEW, SYNONYM,SEQUENCE,
PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, JAVA SOURCE, JAVA CLASS, JAVA
RESOURCE ou JAVA DATA)
SOURCE_SIZE Contient la taille en octets du code source
PARSED_SIZE Contient la taille en octets du code DIANA (incluant les rfrences aux objets sous-jacents)
CODE_SIZE Contient la taille du code charg en mmoire l'excution
ERROR_SIZE Contient la taille des messages d'erreur
taille des units de traitement
SQL> SELECT *
2 FROM USER_OBJECT_SIZE
3 WHERE TYPE IN ('PACKAGE BODY','PACKAGE','FUNCTION','PROCEDURE')
4 ORDER BY TYPE,NAME ;
NAME TYPE SOURCE_SIZE PARSED_SIZE CODE_SIZE ERROR_SIZE
------------------------------ ------------- ----------- ----------- ---------- ----------
LIGNESALAIRE FUNCTION 280 261 563 0
PWD_DECODE FUNCTION 459 234 702 0
RETOURNE_PARAM FUNCTION 885 239 990 0
SRV_LECTURE_PARAMETRE FUNCTION 458 342 697 0
TEST_XX FUNCTION 869 269 1119 0
PKG_CORRECTION PACKAGE 414 1493 362 0
TEST_RECORD PACKAGE 233 761 875 0
PKG_CORRECTION PACKAGE BODY 11408 0 12467 0
TEST_RECORD PACKAGE BODY 403 0 1376 0
DEBUG PROCEDURE 1153 475 1343 0
DISPLAY_IMAGE PROCEDURE 894 509 1277 0
ECRITURE_ERREUR PROCEDURE 755 1517 673 0
La premire ligne indique que la fonction LIGNESALAIRE occupe 280 octets de code source et ncessite 563 octets
en mmoire l'excution.
Comment connatre les bases en cours d'utilisation ?
Auteurs : Helyos ,
Pour connatre les bases de donnes actuellement en cours d'utilisation sur votre poste il vous suffit :
Sous Windows d'aller dans le gestionnaire des services : Click droit sur le poste de travail => grer => services et
applications => services puis de regarder tous les services commenant par OracleService et qui sont formats de la
sorte OracleService<SID> (o SID correspond au nom de l'instance associe)
Sous Linux Vous pouvez lancer la commande suivante : ps -ef | egrep pmon_ | grep -v grep
Comment afficher l'encombrement mmoire des pools partags ?
Auteurs : SheikYerbouti ,
Voici un script permettant d'afficher la taille alloue, utilise et libre de chaque pool :
FAQ Oracle
- 71 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
COL "Total octets allous" FORMAT A20
COL "octets utiliss" FORMAT A20
COL "octets libres" FORMAT A20
SELECT
a.POOL "Pool"
, b.Octets || ' (' || ROUND(b.Octets/1024/1024) || ' Mo)' "Total octets allous"
, (b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utiliss"
, a.BYTES || ' (' || ROUND(a.BYTES/1024/1024) || 'Mo)' "octets libres"
FROM V$SGASTAT a,
( SELECT POOL, SUM(BYTES) Octets, SUM(BYTES/1024/1024) Mo
FROM V$SGASTAT
WHERE POOL IS NOT NULL
GROUP BY POOL
ORDER BY POOL) b
WHERE NAME = 'free memory'
AND a.POOL = b.POOL
ORDER BY a.POOL ;
Ainsi que le rsultat de l'excution
SQL> COL "Total octets allous" FORMAT A20
SQL> COL "octets utiliss" FORMAT A20
SQL> COL "octets libres" FORMAT A20
SQL> SELECT
2 a.POOL "Pool"
3 , b.Octets || ' (' || ROUND(b.Octets/1024/1024) || ' Mo)' "Total octets allous"
4 ,
(b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utiliss"
5 , a.BYTES || ' (' || ROUND(a.BYTES/1024/1024) || 'Mo)' "octets libres"
6 FROM V$SGASTAT a,
7 ( SELECT POOL, SUM(BYTES) Octets, SUM(BYTES/1024/1024) Mo
8 FROM V$SGASTAT
9 WHERE POOL IS NOT NULL
10 GROUP BY POOL
11 ORDER BY POOL) b
12 WHERE NAME = 'free memory'
13 AND a.POOL = b.POOL
14 ORDER BY a.POOL
15 /
Pool Total octets allous octets utiliss octets libres
----------- -------------------- -------------------- --------------------
java pool 29360128 (28 Mo) 0 (0 Mo) 29360128 (28Mo)
large pool 8404644 (8 Mo) 304668 (0 Mo) 8099976 (8Mo)
shared pool 41943040 (40 Mo) 22455544 (21 Mo) 19487496 (19Mo)
Comment mesurer les I/O sur les fichiers ?
Auteurs : Jaouad ,
Via le script suivant :
set linesize 250
col file_name format a40
select b.file_name, a.file#, a.cnt
from (select file#, count(1) cnt
from v$bh
group by file#) a,
dba_data_files b
FAQ Oracle
- 72 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
where a.file# = b.file_id;
Comment afficher le nom du composant, l'tat et la version des lments du registre ?
Auteurs : Laurent Schneider ,
Via la requte suivante, partir de la 9i :
SELECT COMP_NAME,
STATUS,
VERSION
FROM DBA_REGISTRY
ORDER BY COMP_NAME;
COMP_NAME STATUS VERSION
---------------------------------- ------ -----------
JServer JAVA Virtual Machine VALID 10.2.0.2.0
Oracle Database Catalog Views VALID 10.2.0.2.0
Oracle Database Java Packages VALID 10.2.0.2.0
Oracle Database Packages and Types VALID 10.2.0.2.0
Oracle Expression Filter VALID 10.2.0.2.0
Oracle Text VALID 10.2.0.2.0
Oracle Workspace Manager VALID 10.2.0.3.0
Oracle XDK VALID 10.2.0.2.0
Oracle XML Database VALID 10.2.0.2.0
Oracle interMedia VALID 10.2.0.2.0
Comment afficher la date, l'action et la version des patches/upgrades ?
Auteurs : Laurent Schneider ,
partir de la version 10.1.0.5 cpu2006jan, via le requte suivante :
SELECT ACTION_TIME,
ACTION,
VERSION,
ID
FROM DBA_REGISTRY_HISTORY
ORDER BY to_timestamp(ACTION_TIME,'DD.MM.YYYY HH24:MI:SSXFF');
ACTION_TIME ACTION VERSION ID
---------------- -------- ------------ ----------
14.02.2006 10:28 CPU 4751932
07.03.2006 11:30 UPGRADE 10.2.0.2.0
Quelle est la procdure pour dplacer des objets de SYSAUX (10g) ?
Auteurs : Jaouad ,
Lors d'une rorganisation de base de donnes, si l'on souhaite dplacer certains objets du tablespace SYSAUX vers
d'autres tablespaces, comment procder ?
Cette requte va nous donner la procdure utiliser pour le dplacement en fonction des objets
SQL> SELECT occupant_name, schema_name, move_procedure
2 FROM v$sysaux_occupants ;
FAQ Oracle
- 73 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
OCCUPANT_NAME SCHEMA_NAME MOVE_PROCEDURE
---------------- --------------- ---------------------------------------------------------------
LOGMNR SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE
LOGSTDBY SYSTEM SYS.DBMS_LOGSTDBY.SET_TABLESPACE
STREAMS SYS
XDB XDB XDB.DBMS_XDB.MOVEXDB_TABLESPACE
AO SYS DBMS_AW.MOVE_AWMETA
XSOQHIST SYS DBMS_XSOQ.OlapiMoveProc
...
Comment connatre le systme d'exploitation qui hberge le SGBDR ?
Auteurs : Jaouad ,
Via cette requte :
SQL> SELECT dbms_utility.port_string FROM dual;
PORT_STRING
-----------------------------------------------
IBMPC/WIN_NT-8.1.0
Comment savoir si une base source est valide pour une migration en 10g ?
Auteurs : Jaouad ,
Lors d'une migration vers une base 10g, comment savoir si les pr requis ont t vrifis avant d'effectuer la migration ?
Via un nouvel outil d'upgrade ( Upgrade information Tool ) :
Prendre le fichier utlu101i.sql ( migration vers une 10gR1 ) prsent dans le dossier $ORACLE_HOME\rdbms\admin
\ et le faire tourner sur la base source. Il est possible de faire une migration vers la 10g ( quelque que soit la release )
sans passer par d'autres versions si la base source est 806, 817, 927
Comment dtecter/supprimer les sessions qui sont marqus Killed ?
Auteurs : Jaouad ,
Voici comment dterminer les sessions qui sont killed for ever :
sous Unix :
SELECT spid
FROM v$process
WHERE NOT EXISTS ( SELECT 1
FROM v$session
WHERE paddr = addr);
sous Windows :
SVRMGRL> SELECT spid, osuser, s.program
FROM v$process p, v$session s
WHERE p.addr=s.paddr;
FAQ Oracle
- 74 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Pour les tuer :
c:>orakill sid thread
Comment modifier l'emplacement de la rgion de restauration flash (10g) ?
Auteurs : bouyao ,
Il suffit de modifier le parametre DB_RECOVERY_FILE_DEST.
Avec ce paramtre, il faut toujours spcifier le paramtre d'initialisation DB_RECOVERY_FILE_DEST_SIZE.
Par exemple :
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/disk1' SCOPE=BOTH SID='*' ;
Quelles sont les fonction de SMon (System Monitor) ? (en 9i)
Auteurs : bouyao ,
Fusion des extents libre toutes les 5 mn
Nettoyage des segments temporaires toutes les 2 h
Mise jours de SMON_SCN_TIME toutes les 5 mn
Nettoyage des objects inexistants dans OBJ$, toutes les 12 h
Nettoyage de IND$ toutes les heure
Compactage (shrink) des segments undo toutes les 12 h
Restauration des transactions uniquement au dmarrage de la base
Il annule les transactions non valides quand c'est post par PMON
Comment reveiller le SMON pour nettoyer les segements temporaires ?
Auteurs : LeoAnderson ,
En ralit, SMon (System MONitor) ne s'endort pas rellement, puisqu'il n'est sollicit que de temps autres lorsque
la base est en activit.
La doc (cf lien au bas de la QR) prcise simplement que :
SMON checks regularly to see whether it is needed
Mais il peut tre utile parfois de le solliciter manuellement, ce qu'on appelle un wakeup :
1. Excutez d'abord la requte suivante :
SQL> SELECT pid FROM v$process
2 WHERE addr =
3 (
4 SELECT paddr FROM v$bgprocess
5 WHERE name = 'SMON'
6 );
PID
----------
8
FAQ Oracle
- 75 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
2. Puis rcuprez le PID pour excuter la commande suivante (connect en tant que SYSDBA) :
En gnral : 6 => 8i, 7 => 9i et 8 => 10g

SQL> ORADEBUG WAKEUP 8
Instruction traite.
lien : System Monitor Process (SMON)
Comment trouver les sessions qui utilisent la tablespace temporaire ?
Auteurs : Aline ,
Grce la requte suivante :
SQL> SELECT se.osuser, se.username, se.sid,
2 su.extents, su.blocks * to_number(rtrim(p.value)) AS Space,
3 tablespace
4 FROM v$sort_usage su, v$parameter p, v$session se
5 WHERE p.name = 'db_block_size'
6 AND su.session_addr = se.saddr
7 ORDER BY se.username, se.sid;
FAQ Oracle
- 76 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Objets
Comment lister les objets invalides ?
Auteurs : Laurent Schneider ,
La requte suivante nous permet de lister les objets invalides, avec les informations suivantes :
Schma
Type d'objet
Date de cration
Date de dernire modification/compilation
SELECT OWNER,
OBJECT_TYPE,
OBJECT_NAME,
CREATED,
LAST_DDL_TIME
FROM DBA_OBJECTS
WHERE STATUS='INVALID'
ORDER BY OWNER, OBJECT_NAME;
OWNER OBJECT_TYPE OBJECT_NAME CREATED LAST_DDL_T
------ ----------- -------------------- ---------- ----------
PUBLIC SYNONYM DBA_HIST_FILESTATXS 2006-04-18 2006-06-13
PUBLIC SYNONYM DBA_HIST_SQLBIND 2006-04-18 2006-06-13
PUBLIC SYNONYM DBA_HIST_SQLSTAT 2006-04-18 2006-06-13
Comment lister les objets supprims (10g) ?
Auteurs : Laurent Schneider ,
partir de la version 10g, la requte suivante permet de lister les objets dans la poubelle, avec les proprits suivantes :
Nom du tablespace
Type d'objet
Propritaire
Nom original
Nom BIN$
SCN
Date de cration
Date d'effacement des objets dans la poubelle (Recycle bin)
SELECT
TS_NAME,
TYPE,
OWNER,
ORIGINAL_NAME,
OBJECT_NAME,
DROPSCN,
CREATETIME,
DROPTIME
FROM dba_recyclebin
ORDER BY owner, type, original_name, dropSCN;
TS_NAME TYPE OWNER ORIG OBJECT_NAME DROPSCN CREATETIME DROPTIME
------- ----- ----- ---- ------------------------------ ---------- ---------- ----------
FAQ Oracle
- 77 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
USERS TABLE SCOTT T BIN$F22M89kvcArgQwow5W1wCg==$0 3537036 2006-06-30 2006-06-30
Comment lister les jobs ?
Auteurs : Laurent Schneider ,
La requte suivante nous permet de lister les jobs, avec les caractristiques suivantes :
Schma
Numro du job
Date de prochaine xecution
Code des jobs
SELECT SCHEMA_USER,
JOB,
NEXT_DATE,
WHAT
FROM DBA_JOBS;

SCHEMA JOB NEXT_DATE WHAT
------ --- ---------- --------
SYS 1 2006-07-01 scott.p;
Comment lister les sessions ?
Auteurs : Laurent Schneider ,
La requte suivante permet de lister les sessions, avec les proprits suivantes :
Utilisateur DB
Utilisateur SE
SID
SERIAL#
Processus OS
Type de serveur
Status
Machine cliente
Programme
Heure du login
Nom du dispatcher
Nom du shared server
SELECT s.USERNAME,
s.OSUSER,
s.SID,
s.SERIAL#,
p.SPID,
s.SERVER,
s.STATUS,
s.MACHINE,
s.PROGRAM,
TO_CHAR(s.LOGON_TIME, 'hh24:mi:ss') LOGON_TIME,
d.name DISP,
ss.name SERV
FROM V$PROCESS p,
V$SESSION s,
V$DISPATCHER d,
FAQ Oracle
- 78 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
V$CIRCUIT c,
V$SHARED_SERVER ss
WHERE p.ADDR = s.PADDR
AND s.SADDR=c.SADDR (+)
AND c.DISPATCHER=d.PADDR (+)
AND c.SERVER=ss.PADDR (+)
AND s.USERNAME IS NOT NULL
ORDER BY s.USERNAME, p.SPID;

USERNAME OSUSER SID SERIAL# SPID SERVER STATUS MACHINE PROGRAM LOGON DISP SERV
-------- ------ ---- ------- ------------ --------- -------- --------- ------- ----- ---- ----
DBSNMP oracle 129 31 2465846 SHARED ACTIVE pclsc01 emagent 06:17 D000 S003
DBSNMP oracle 122 6 2728088 NONE INACTIVE pclsc01 emagent 06:17 D000
SYS oracle 113 2669 2920628 DEDICATED ACTIVE pclsc01 sqlplus 10:38
Concernant les "longues oprations", la requte suivante vous permettra d'obtenir :
Numros de sessions
Opration
Travail effectu
Travail total
Temps restant
SELECT SID,
SERIAL#,
OPNAME,
SOFAR,
TOTALWORK,
TIME_REMAINING
FROM V$SESSION_LONGOPS
WHERE TIME_REMAINING != 0;

SID SERIAL# OPNAME SOFAR TOTAL TIME_REM
----- ------- --------------------------- ------ ------ --------
120 4001 RMAN: full datafile backup 33692 66496 76
Comment voir toutes les tables qui sont dans le buffer KEEP ?
Auteurs : LeoAnderson , Jaouad ,
Depuis la version 8, le BUFFER CACHE est divis en plusieurs segments : DEFAULT, KEEP et RECYCLE.
Contrairement ce que leurs noms peuvent laisser penser, ils sont grs tous les 3 exactement de la mme faon, par
les mme rgles LRU (Last Recently Used).
En gnral, on utilise le buffer KEEP pour y stocker les blocks des tables que l'on interroge souvent; et le buffer
RECYCLE pour des donnes plus volatiles.
Par exemple, si on a une table de REFERENCE, une table de COMMANDES et une table IMAGE_PRODUIT, on aura
intrt rpartir les tables de la faon suivante :
COMMANDES sur le buffer pool DEFAULT
REFERENCE dans le buffer pool KEEP
IMAGE_PRODUIT dans le buffer pool RECYCLE
En effet, si l'on interroge l'image (volume important), cela va ncessiter de sortir du pool de nombreux blocs de
REFERENCE qu'il faudra recharger ultrieurement alors que les blocs de l'image auront trs peu de chance de
resservir...
Les noms des buffers pools ne sont qu'une astuce mnmotechnique, car ils pourraient trs bien s'appeller A, B et C,
cela ne changerait rien !
Remarque : depuis la 9i, il est possible de dfinir des buffer pools de taille de block diffrente ( db_nk_cache_size) mais
les buffer KEEP et RECYCLE auront forcment comme taille de bloc la taille DEFAULT.
FAQ Oracle
- 79 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Donc, on a 3 pools de taille par dfault et jusqu' 4 buffers de taille diffrente, ce qui fait 7 zones buffers indpendantes
au maximum ! (mais je vous dconseille vivement d'implmenter un tel systme, a deviendra impossible administrer/
tuner !)
La requte est la suivante :
col object_type format a10
col object_name format a20
SELECT dba_objects.owner,object_name,object_type,object_type
FROM dba_objects, dba_indexes,dba_tables
WHERE dba_objects.object_name = dba_indexes.index_name
AND dba_objects.object_name = dba_tables.table_name
AND dba_tables.buffer_pool = 'KEEP'
AND dba_indexes.buffer_pool = 'KEEP' ;
Comment "Keeper" une table en mmoire :
ALTER TABLE TABLE_NAME STORAGE (BUFFER_POOL KEEP) ;
Attention : avec les multiples buffers pools, il n'est plus possible de monitorer les ratios par la vue habituellement utilise
(v$SysStat) mais Oracle a implment la vue v$Buffer_Pool_Statistics :
SQL> SELECT Name,
Block_size, Round(100*(CONSISTENT_GETS+DB_BLOCK_GETS-PHYSICAL_READS)/(CONSISTENT_GETS+DB_BLOCK_GETS) ,2)
2 AS HitRatio
3 FROM v$buffer_pool_statistics;
NAME BLOCK_SIZE HITRATIO
-------------------- ---------- ----------
DEFAULT 8192 97.77


SQL> ALTER system SET db_keep_cache_size=50M scope=SPFILE;

/* ARRET / RELANCE DE LA BASE */

SQL> CREATE TABLE toto (col1 varchar2(30) ) storage (buffer_pool keep);

TABLE created.

SQL> SELECT Name,
Block_size, Round(100*(CONSISTENT_GETS+DB_BLOCK_GETS-PHYSICAL_READS)/(CONSISTENT_GETS+DB_BLOCK_GETS) ,2)
2 AS HitRatio
3 FROM v$buffer_pool_statistics;

NAME BLOCK_SIZE HITRATIO
-------------------- ---------- ----------
KEEP 8192 100
DEFAULT 8192 89.57
FAQ Oracle
- 80 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Archive Log
Comment savoir si une base est en mode archivelog ?
Auteurs : bouyao ,
Grce la commande suivante :
SQL> ARCHIVE LOG LIST
mode Database log mode No Archive
Archivage automatique Dsactiv
Destination de l'archive USE_DB_RECOVERY_FILE_DEST
Squence de journal en ligne la plus ancienne 82
Squence de journal courante 84
Il faut tre connect en tant que SYSDBA, sous peine d'obtenir l'erreur suivante :
ORA-01031: insufficient privileges
On peut galement utiliser le vue V$DATABASE :
SELECT LOG_MODE FROM SYS.V$DATABASE;
LOG_MODE
------------
NOARCHIVELOG
Comment savoir le volume d'archive log gnr par une instance ?
Auteurs : Jaouad ,
Il est important de monitorer le suivi des archiveLog, afin de dtecter des archives trop importantes par rapport
l'activit.
Cette requte fontionne sur toutes les versions :
SQL> SELECT TO_DATE(TO_CHAR(next_time, 'dd/mm/yyyy'), 'dd/mm/yyyy') Jour, ROUND(SUM(blocks*block_siz
e/1024/1024)) Mo
2 FROM v$archived_log
3 GROUP BY TO_DATE(TO_CHAR(next_time, 'dd/mm/yyyy'), 'dd/mm/yyyy')
4 ORDER BY 1 DESC ;
JOUR MO
--------- ----------
26-SEP-06 48226
25-SEP-06 25258
24-SEP-06 20438
23-SEP-06 31261
22-SEP-06 17450
21-SEP-06 18811
20-SEP-06 30778
19-SEP-06 36108
18-SEP-06 90508
17-SEP-06 31568
FAQ Oracle
- 81 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
16-SEP-06 50283
Comment activer l'archivage dans Oracle ?
Auteurs : bouyao ,
1. Il faut tout d'abord arrter la base :
Sql> SHUTDOWN
On ne peut pas modifier le mode ARCHIVELOG en NOARCHIVELOG si la base besoin d'une restauration media.
2. Il faut ensuite sauvegarder la base :
En effet, avant de faire des modifications majeures dans la base, il faut toujours la sauvegarder pour se protger pour
des raisons de scurit.
3. Editer le fichier d'initialisation pour ajouter les paramtres qui spcifient la destination des archives.
4. Dmarrer la base en mode mount sans l'ouvrir :
sql> STARTUP MOUNT
5. Modifier le mode d'archivage et ouvrir la base.
sql> ALTER DATABASE ARCHIVELOG;
sql> ALTER DATABASE OPEN;
Le changement du mode d'archivage mettra jours le fichier de contrle et rendra les anciennes sauvegardes
inutilisables.
6. Arrter la base :
sql> SHUTDOWN IMMEDIATE
7. Sauvegarde la base :
En version 10g, il n'est pas ncessaire de renseigner le paramtre d'initialisation :
LOG_ARCHIVE_START = TRUE
FAQ Oracle
- 82 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > ISqlPlus (10g)
Comment dmarrer et arrter Isqlplus ?
Auteurs : Jaouad ,
Isqlplus est install automatiquement partir de la version 10g. Pour le dmarrer et l'arrter, Oracle a prvu un binaire
Isqlpluscl ( prsent dans le rpertoire $ORACLE_HOME/bin) :
dmarrage :
sproerp17-oracle: /oracle/product/102>isqlplusctl start
iSQL*Plus 10.2.0.1.0
Copyright (c) 2003, 2005, Oracle. ALL rights reserved.
Starting iSQL*Plus ...
iSQL*Plus started.
Arrt :
sproerp17-oracle: /oracle/product/102>isqlplusctl stop
iSQL*Plus 10.2.0.1.0
Copyright (c) 2003, 2005, Oracle. ALL rights reserved.
Stopping iSQL*Plus ...
iSQL*Plus stopped.
Comment retrouver les informations de connexions Isqlplus
Auteurs : Jaouad ,
Le fichier contenant les URL de connexions Isqlplus (informations qui sont donnes la fin de l'installation) peut tre
retrouv cet emplacement : $ORACLE_HOME/install/readme.txt
sproerp17-oracle: /oracle/product/102>more $ORACLE_HOME/install/readme.txt

The following J2EE Applications have been deployed AND are accessible at the URLs listed below.

iSQL*Plus URL:
http://sproerp17:5560/isqlplus

iSQL*Plus DBA URL:
http://sproerp17:5560/isqlplus/dba
Comment changer le port d'Isqlplus ?
Auteurs : Jaouad ,
Voici comment changer le port d'coute d'Isqlplus, en passant par exemple de 5560 80 :
arrter Isqlplus avec la commande :
isqlplusctl stop
Editer le script /$ORACLE_HOME/oc4j/j2ee/isqlplus/config/http-web-site.xml et remplacer 5560 par 80 :
FAQ Oracle
- 83 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
<web-site port="80" display-name="OC4J Java HTTP Web Site">
Dmarrer Isqlplus avec la commande :
isqlplusctl start
FAQ Oracle
- 84 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Administration > Autres
Comment afficher l'espace disque occup par les objets Oracle ?
Auteurs : SheikYerbouti ,
Comment calculer l'espace disque occup par les objets Oracle
En interrogeant la vue DBA_SEGMENTS :
SQL> COLUMN TABLE FORMAT A30
SQL> COLUMN Taille FORMAT A15
SQL> COLUMN TABLESPACE FORMAT A20
SQL>
SQL> SELECT segment_name "TABLE"
2 , SUM(BYTES) /1024 || 'Ko' "Taille"
3 , blocks "Blocs"
4 , tablespace_name "TABLESPACE"
5 FROM dba_segments
6 WHERE segment_type = 'TABLE'
7 AND OWNER = 'FD'
8 GROUP BY segment_name, tablespace_name, blocks
9 ORDER BY segment_name ;
TABLE Taille Blocs TABLESPACE
------------------------------ --------------- ---------- --------------------
ADRESSE 64Ko 8 USERS
CONTACT 64Ko 8 USERS
DEPT 64Ko 8 USERS
EMP 128Ko 16 USERS
EMPLOYE 64Ko 8 USERS
FACTURE 64Ko 8 USERS
LOV_BLOCK 64Ko 8 USERS
LOV_COLONNE 64Ko 8 USERS
LOV_ELEMENT_COLONNE 64Ko 8 USERS
LOV_ITEM 64Ko 8 USERS
LOV_LOV 64Ko 8 USERS
LOV_MODULE 64Ko 8 USERS
NOMBRES 64Ko 8 USERS
TELEPHONE 64Ko 8 USERS
TEST 2048Ko 256 USERS
TEST_LOV 4096Ko 512 USERS
TEST_TYPES 64Ko 8 USERS
TRACE 64Ko 8 SYSTEM
UTIL_PREFS 64Ko 8 USERS
UTIL_PREFS_ORDER 64Ko 8 USERS
UTIL_PREFS_RECORD_ORDER 64Ko 8 USERS
21 ligne(s) slectionne(s).
Afficher la place occupe par toutes les tables d'un schma particulier :
SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille"
2 , SUM(blocks) "Blocs"
3 FROM dba_segments
4 WHERE segment_type = 'TABLE'
5 AND OWNER = 'FD'
6 GROUP BY OWNER ;
Taille Blocs
--------------- ----------
7,25Mo 928
Afficher le cumul de volumtrie de tous les objets d'un schma particulier :
FAQ Oracle
- 85 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille"
2 , SUM(blocks) "Blocs"
3 FROM dba_segments
4 WHERE OWNER = 'FD' ;
Taille Blocs
--------------- ----------
12,625Mo 1616
Afficher l'espace occup par l'ensemble des schmas :
SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille"
2 , SUM(blocks) "Blocs"
3 FROM dba_segments ;
Taille Blocs
--------------- ----------
647,484375Mo 82878
Comment positionner la valeur de certains paramtres la connection?
Auteurs : lalystar ,
Pour fixer la valeur de certains paramtres de sessions automatiquement chaque connection d'un utilisateur donn,
le plus simple est d'utiliser un trigger au niveau de la base.
Le trigger doit tre cr en tant que SYS ou bien par un utilisateur ayant le privilge ADMINISTER DATABASE
TRIGGER.
create or replace trigger TG_DB_AFTER_LOGON after logon on database
begin
if user = 'SCOTT' then
execute immediate 'alter session set sort_area_size=100000';
end if;
end;
Exemple d'utilisation :
SQL> connect sys/... as sysdba
Connected.
SQL> create or replace trigger TG_DB_AFTER_LOGON after logon on database
2 begin
3 if user = 'SCOTT' then
4 execute immediate 'alter session set sort_area_size=100000';
5 end if;
6 end;
7
8 /
Trigger created.
SQL> show parameter sort_area_size
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
sort_area_size integer 65536
SQL> connect scott/...
Connected.
FAQ Oracle
- 86 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> show parameter sort_area_size;
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
sort_area_size integer 100000
Ce genre de trigger est utile en particulier pour fixer les paramtres rgionaux (sparateur dcimal, sparateur de
milliers...) indpendamment de la plateforme (Windows, Unix...) et de l'outil utilis pour la connection (SQL*Plus,
SQL*Loader, ...).
Comment crer un DBLink sans Tnsnames.ora ?
Auteurs : Jaouad ,
Create database link dblink_name
connect to user identified by password
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SID)
)
)'
Comment lire le fichier d'alert de Sql*Plus ?
Auteurs : Jaouad ,
Ici il s'agit d'utiliser les tables externes, fonctionnalit disponible partir de la 9i :
create directory BDUMP as 'background_dump_dest'
create table alert_log(text varchar2(80))
organization external
(
type oracle_loader
default directory BDUMP
access parameters (records delimited by newline)
location ('alert_SID.log')
)
reject limit 1000;
SQL> select * from alert_log ;
Comment lister les Directory ainsi que leurs caractristiques principales ?
Auteurs : Laurent Schneider ,
La requte suivante permet d'afficher les directory, avec les proprits suivantes :
Schma
Nom
Chemin
FAQ Oracle
- 87 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
select OWNER,
DIRECTORY_NAME,
DIRECTORY_PATH
from DBA_DIRECTORIES
order by OWNER,
DIRECTORY_NAME;

OWNER DIRECTORY_NAME DIRECTORY_PATH
----- --------------- ----------------------------------------
SYS WORK_DIR /app/oracle/product/10.2.0.2/work
SYS TMP /tmp
SYS DATA_PUMP_DIR /app/oracle/product/10.2.0.2/rdbms/log/
SYS ADMIN_DIR /app/oracle/product/10.2.0.2/md/admin
Comment recompiler des objets en fonction de leurs dpendances ?
Auteurs : Pierre Forstmann ,
Grce au mcanisme de compilation automatique l'excution d'un objet invalide, Oracle va compiler toutes les vues
dpendantes pour les excuter lors de l'excution d'une vue.
La procdure suivante qui excute " vide" toutes les vues du schma courant qui ne sont pas rfrences dans d'autres
vues va donc compiler toutes les vues du schma courant:
create or replace procedure ev
is
comm varchar2(100);
res int;
begin
for lv in (select view_name from user_views where not exists
(select referenced_name from user_dependencies where referenced_name = view_name))
loop
comm := 'SELECT COUNT(*) FROM ' || lv.view_name || ' WHERE 1=0';
dbms_output.put_line(comm || ' ...');
execute immediate comm into res;
dbms_output.put_line('... OK.');
end loop;
end;
/
Voici un exemple :
SQL> create table t(x int, y int);
Table created.
SQL> create view v1 as select x,y from t;
View created.
SQL> create view v2 as select x,y from v1 where x >= 0;
View created.
SQL> create view v3 as select x,y from v2 where y >= 0;
View created.
SQL>
SQL> create view v4 as select x from t;
View created.
FAQ Oracle
- 88 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL>
SQL> --
SQL> -- compiler toutes les vues
SQL> --
SQL> create or replace procedure ctv
2 is
3 comm varchar2(100);
4 begin
5 for lv in (select view_name from user_views)
6 loop
7 comm := 'ALTER VIEW ' || lv.view_name || ' COMPILE';
8 dbms_output.put_line(comm || ' ...');
9 execute immediate comm;
10 dbms_output.put_line('... OK.');
11 end loop;
12 end;
13 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL> --
SQL> -- lister status des vues
SQL> --
SQL>
SQL> create or replace procedure lsv(cv out sys_refcursor)
2 is
3 begin
4 open cv for
5 'select object_name, status from user_objects where object_type = ''VIEW'' ';
6 end;
7 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL>
SQL> --
SQL> -- executer les vues dont aucune autre vue ne dpend
SQL> --
SQL>
SQL> create or replace procedure ev
2 is
3 comm varchar2(100);
4 res int;
5 begin
6 for lv in (select view_name from user_views where not exists
7 (select referenced_name from user_dependencies where referenced_name = view_name))
8 loop
9 comm := 'SELECT COUNT(*) FROM ' || lv.view_name || ' WHERE 1=0';
10 dbms_output.put_line(comm || ' ...');
11 execute immediate comm into res;
12 dbms_output.put_line('... OK.');
13 end loop;
14 end;
15 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL>
FAQ Oracle
- 89 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL> var rc refcursor;
SQL> column object_name format a15
SQL>
SQL> --
SQL> -- execute v1, v4
SQL> --
SQL> set serveroutput on;
SQL> alter table t add (z char(3));
Table altered.
SQL> exec lsv(:rc);
PL/SQL procedure successfully completed.
SQL> print :rc
OBJECT_NAME STATUS
--------------- -------
V1 INVALID
V2 INVALID
V3 INVALID
V4 INVALID
SQL> exec ev;
SELECT COUNT(*) FROM V4 WHERE 1=0 ...
... OK.
SELECT COUNT(*) FROM V3 WHERE 1=0 ...
... OK.
PL/SQL procedure successfully completed.
SQL> exec lsv(:rc);
PL/SQL procedure successfully completed.
SQL> print :rc
OBJECT_NAME STATUS
--------------- -------
V1 VALID
V2 VALID
V3 VALID
V4 VALID
SQL>
Comment vider les caches Oracle ?
Auteurs : Jaouad ,
Voici la commande pour la Shared Pool :
SQL> alter system flush shared_pool
2 ;
Systme modifi.
Et celle pour vider le cache de donnes (10g) :
SQL> alter system flush buffer_cache ;
FAQ Oracle
- 90 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Systme modifi.
elle peut galement recevoir les paramtres suivant : GLOBAL et CONTEXT
Comment modifier le mot de passe de l'utilisateur sysman dans Enterprise Manager Grid Control ?
Auteurs : bouyao ,
1. Il faut tout d'abord arrter OMS :
sous Unix :
$ emctl stop oms
sous Windows :
Arrter le service windows Oracle{oracle_home_name}ProcessManger
ou, sous la ligne de commande Dos :
C> emctl stop oms
2. Vrifier que OMS est arrt :
sous Unix :
$ emctl status oms
sous Windows :
Vrifier la status du service Windows Oracle{oracle_home_name}ProcessManager
ou, sous la ligne de commande Dos :
C> emctl status oms
3. Se connecter la base avec un privilge DBA, puis tapez la commande suivante :
SQL> ALTER USER sysman IDENTIFIED BY 'new_password';
4. Vrifier le nouveau mot de passe :
SQL> CONNECT sysman/nouveau_passe[@database_alias]
5. Dans $ORACLE_HOME/sysman/config
5.1. Sauvegarder le fichier emoms.properties dans emoms.properties.orig
5.2. Editer le fichier emoms.properties
a. Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd=
Remplacer la valeur encrypt par le nouveau mot de passe
FAQ Oracle
- 91 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
b. Rechercher la ligne : oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE
Remplacer TRUE par FALSE
6. Redmarrer OMS
sous Unix :
$ emctl start oms
sous Windows :
Dmarrer le service Oracle{oracle_home_name}ProcessManager
ou, sous la ligne de commande Dos :
C> emctl start oms
7. Vrifier que oracle.sysman.eml.mntr.emdRepPwd est encrypt.
Comment afficher les paramtres cachs d'Oracle ?
Auteurs : bouyao , Fred_D ,
Pour excuter cette requte, il faut avoir le privilge DBA :
SELECT a.ksppinm Parametre,
c.ksppstvl Valeur
FROM x$ksppi a,
x$ksppcv b,
x$ksppsv c
WHERE a.indx = b.indx
AND a.indx = c.indx
AND a.ksppinm LIKE '/_%' escape '/' ;
Normalement, les paramtres cachs commencent par un underscore ('_'), et dans la 10g, on a en plus les paramtres
cachs qui commencent par deux underscore ('__').
Attention :
la modification de certains paramtres cachs peuvent corrompre votre base. Il faut les utiliser avec prcautions !
FAQ Oracle
- 92 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils
FAQ Oracle
- 93 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > Rman
FAQ Oracle
- 94 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > Exp/Imp
Comment faire un import/export entre deux bases dans des versions diffrentes ?
Auteurs : lalystar ,
Si vous souhaitez exporter le contenu d'une base 8i pour l'importer dans une base 9i par exemple, il s'agit d'utiliser les
versions adaptes des utilitaires import et export.
La rgle est d'utiliser l'utilitaire import dans la version de la base de destination et l'utilitaire export dans la version
de la base la plus ancienne.
Avec notre exemple, l'export doit tre fait avec l'utilitaire export dans sa version 8i et l'import doit tre fait avec
l'utilitaire import dans sa version 9i.
Pour plus d'informations, voir le lien ci dessous :
lien : http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96652/ch01.htm#1012993
FAQ Oracle
- 95 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > Dba Studio & OEM
FAQ Oracle
- 96 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > SQL*Plus
Comment sauvegarder mon affichage SQL dans un fichier ?
Auteurs : Helyos ,
Il peut parfois tre utile de sauvegarder le rsultat de la requte dans un fichier texte sur le disque dur. Pour cela
SQL*Plus nous offre la possibilit d'utiliser la commande SPOOL qui fonctionne comme dans l'exemple suivant :
-- On demande rediriger l'affichage vers le fichier c:\toto.txt
SPOOL c:\toto.txt
-- On execute notre requete
SELECT SYSDATE FROM DUAL;
-- On stoppe la redirection
SPOOL OFF
Voici le contenu de notre fichier :
SQL> SELECT sysdate
2 FROM dual;
SYSDATE
--------
28/06/04
SQL> SPOOL OFF
On pourra facilement supprimer les premires et dernires lignes grce aux commandes de formatages de SQL*Plus.
On peut prciser que jusqu' la version 9i incluse, le fichier est cras s'il existe dj. En 10g, les options CREATE/
REPLACE/APPEND apportent un choix en la matire.
Comment insrer du texte contenant '&' ?
Auteurs : Fred_D ,
& est un caractre spcial qui permet de prfixer un nom de variable. Or, lorsque l'on veut insrer du texte contenant
ce caractre, SQL*Plus demande une valeur insrer.
Par exemple :
SQL> select 'toi & moi' from dual;
Entrez une valeur pour moi :
ancien 1 : select 'toi & moi' from dual
nouveau 1 : select 'toi ' from dual
'TOI
----
toi
Pour viter ce dsagrment il suffit de taper :
SET DEFINE OFF
Ainsi on obtient :
FAQ Oracle
- 97 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
SQL > set define off
SQL > select 'toi & moi' from dual;
'TOI&MOI'
---------
toi & moi
Comment viter de voir les lignes de remplacement d'une variable ?
Auteurs : Fred_D ,
Lorsque l'on utilise des variables SQL*Plus de la forme &nom_variable et que l'on excute la requte, Oracle rappelle
quelle valeur est remplace de la manire suivante :
SQL > select '&texte_a_afficher' from dual;
Entrez une valeur pour texte_a_afficher : Bonjour Developpez.com
ancien 1 : select '&texte_a_afficher' from dual
nouveau 1 : select 'Bonjour Developpez.com' from dual
'BONJOURDEVELOPPEZ.COM
----------------------
Bonjour Developpez.com
Pour viter ces lignes disgracieuses dans un log, il faut dsactiver la vrification avec la commande suivante :
SET VERIFY OFF
Ainsi on obtient le rsultat suivant :
SQL > set verify off
SQL > select '&texte_a_afficher' from dual;
Entrez une valeur pour texte_a_afficher : Bonjour Developpez.com
'BONJOURDEVELOPPEZ.COM
----------------------
Bonjour Developpez.com
FAQ Oracle
- 98 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > Network Manager
Comment diagnostiquer les problmes de connection NET*8 ?
Auteurs : Jaouad ,
Dans le fichier sqlnet.ora du client, ajouter les lignes suivantes :
#TRACE_LEVEL_CLIENT = SUPPORT
#TRACE_DIRECTORY_CLIENT = d:\oracle\ora92\network\trace
#TRACE_TIMESTAMP_CLIENT = TRUE
#TRACE_UNIQUE_CLIENT = TRUE
Suite l'activation du mode trace partir du sqlnet.ora, voici comment rendre plus lisible le fichier gnr :
trcasst fichier >> fichier.txt
Comment configurer le mode trace d'un client Oracle des fins de Debug ?
Auteurs : Laurent Dardenne ,
Certaines configurations du client Oracle peuvent tre places sur un lecteur rseaux, voici comment faire pour la
modifier provisoirement sous rserve de disposer des droits ncessaires.
Ouvrez la base de registre puis slectionnez la cl :
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ALL_HOMES
La valeur de la sous-cl LASTHOME rfrence la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
\HOMEnumro
Par exemple si la sous-cl LASTHOME vaut 1 alors on utilisera la sous-cl HKEY_LOCAL_MACHINE\SOFTWARE
\ORACLE\HOME1
Slectionnez la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1, la sous-cl TNS_ADMIN contient le
nom du rpertoire hbergeant les fichiers sqlnet.ora et tnsnames.ora.
Mmorisez ce nom de rpertoire.
Crez un rpertoire (par exemple C:\config-oracle) et recopiez-y les 2 fichiers sqlnet.ora et tnsnames.ora hbergs dans
le rpertoire point par la sous-cl TNS_ADMIN.
Placez-vous dans le rpertoire nouvellement cr puis modifiez, l'aide d'un diteur, le fichier sqlnet.ora comme ci-
dessous :
Placez en commentaire l'ancienne configuration du mode Trace
#TRACE_LEVEL_CLIENT = OFF
Ajoutez ces 2 lignes :
TRACE_LEVEL_CLIENT=SUPPORT
TRACE_DIRECTORY_CLIENT=C:\config-oracle
La valeur de l'entre TRACE_DIRECTORY_CLIENT contient le rpertoire prcdemment cr et indique o placer
les fichiers trace.
La valeur de l'entre TRACE_LEVEL_CLIENT indique le niveau de trace souhait, seul SUPPORT permet d'avoir
un compte rendu dtaill sur les requtes SQL (en mission et en rception).
Enfin slectionnez la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1 et modifiez le contenu de la
sous-cl TNS_ADMIN avec le nom du rpertoire prcdemment cr.
En fin de session de Debug replacez, dans la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
\HOME1\TNS_ADMIN, la valeur d'origine.
Le mode trace n'est plus activ, sous rserve que le fichier sqlnet.ora d'origine contenait
TRACE_LEVEL_CLIENT=OFF
FAQ Oracle
- 99 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Attention le fichier trace cre est trs verbeux et impacte les performances, veillez donc ne pas le laisser actif sur les
postes en production !
Comment paramtrer le TAF (Transparent Application Fail Over) ?
Auteurs : Jaouad ,
Regardez cet exemple :
DVP =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOST1)(PORT = 1521))
(CONNECT_DATA =
(SID = SID1)
)
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOST2)(PORT = 1521))
(CONNECT_DATA =
(SID = SID2)
)
)
)
Lorsque, via notre chane de connexion, nous souhaitons nous connecter la base nomme DVP, Oracle va tout d'abord
essayer de se connecter au SID1 sur le HOST1. Si celui ci ne rpond pas, avant de provoquer l'erreur, Oracle va essayer
de se connecter sur le SID2 du Host2.
FAQ Oracle
- 100 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > Outils > Portal
Comment trouver des informations sur l'utilisateur courant ?
Auteurs : Helyos ,
Vous allez tre srement amen, dans le cours de votre dveloppement sur Portal, trouver des informations sur
l'utilisateur couramment connect. Les informations les plus utilises sont surtout l'id de l'utilisateur connect, ainsi
que son login, voire la langue qu'il utilise actuellement avec son browser sur le Portal.
Pour cela vous disposez d'un package Portal qui vous permet d'obtenir ces informations trs facilement :
PORTAL.WWCTX_API
Ce package dispose d'un grand nombre de fonctions et procdures qui vous permettront de trouver des informations
sur l'utilisateur connect.
Par exemple vous utiliserez :
-- Pour trouver l'id de l'utilisateur
declare
p_user_id number:=portal.wwctx_api.get_user_id;
begin
htp.prn('Votre id est '||p_user_id);
end;
/
-- Pour trouver le login de l'utilisateur
declare
p_user_name varchar2(30):=portal.wwctx_api.get_user;
begin
htp.prn('Votre login est '||p_user_name);
end;
/
-- Pour trouver la langue utilise par le browser de l'utilisateur
declare
p_lang varchar2(10):=portal.wwctx_api.get_nls_language;
begin
htp.prn('La langue actuellement utilise est '||p_user_id);
end;
/
Comment trouver des informations sur un utilisateur prcis ?
Auteurs : Helyos ,
Vous allez tre srement amen, dans le cours de votre dveloppement sur Portal, trouver des informations sur un
utilisateur lambda. En rgle gnrale vous allez surtout chercher connatre son id partir de son login ou inversement.
Pour cela vous disposez d'un package Portal qui vous permet d'obtenir ces informations trs facilement :
PORTAL.WWSEC_API
Ce package dispose d'un grand nombre de fonctions et procdures qui vous permettront de trouver des informations
sur les utilisateurs.
Par exemple vous utiliserez :
-- Pour trouver l'id de l'utilisateur
declare
p_user_name varchar2(30):='HELYOS';
p_user_id number:=portal.wwsec_api.id(upper(p_user_name));
begin
htp.prn('L''id de l''utilisateur '||p_user_name||' est '||p_user_id);
end;
/
FAQ Oracle
- 101 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
-- Pour trouver le login de l'utilisateur
declare
p_user_id number:='2003';
p_user_name varchar2(30):=portal.wwsec_api.user_name(p_user_id);
begin
htp.prn('Le login correspondant l''id '||p_user_id||' est ' || p_user_name );
end;
/
Comment afficher correctement un CLOB avec le package HTP ?
Auteurs : Helyos ,
Le package htp est soumis certaines limitations induites par le mod_plsql. En effet les procdures d'affichage (htp.p,
htp.prn, htp.pint) ne supportent pas le fait d'afficher des chaines de caractres de taille suprieure 32767 caractres).
Le rsultat de cette limitation est l'affichage du CLOB en question sous forme de caractres incomprhensibles.
Voici une procdure vous permettant de contourner la limitation :
CREATE OR REPLACE PROCEDURE write_clob(p_clob CLOB) IS
v_buffer VARCHAR2(32000);
v_offset PLS_INTEGER DEFAULT 1;
v_taille PLS_INTEGER;
v_longueur PLS_INTEGER;
v_chunk PLS_INTEGER;
v_clob CLOB := p_clob;
BEGIN
v_chunk := dbms_lob.getchunksize(v_clob);
v_longueur := dbms_lob.getlength(v_clob);
WHILE v_offset < v_longueur LOOP
IF v_longueur - (v_offset - 1) > v_chunk THEN
v_taille := v_chunk;
ELSE
v_taille := v_longueur - (v_offset - 1);
END IF;
v_buffer := NULL;
dbms_lob.READ(v_clob, v_taille, v_offset, v_buffer);
htp.prn(v_buffer);
v_offset := v_offset + v_taille;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
htp.print(SQLERRM);
END;
FAQ Oracle
- 102 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > ERP
FAQ Oracle
- 103 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > ERP > Peoplesoft
Qu'est-ce que PeopleSoft ?
Auteurs : Jaouad ,
PeopleSoft est un diteur d'ERP, il dite des solutions "prtes l'emploi" pour divers domaines : Ressources Humaines,
Finance, CRM , Paye ...
Dcouvrez PeopleSoft : PeopleSoft Overview
Dcouvrez les ERP : Administration des ERP
FAQ Oracle
- 104 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > ERP > Peoplesoft > Administration
Comment dterminer les traitements, la description et leur statuts sous la console de traitement ?
Auteurs : Jaouad ,
Grce la requte suivante :
SQL> SELECT a.prcsinstance, a.servernamerqst, a.PRCSNAME, b.descr, begindttm, enddttm, XLATLONGNAME
2 FROM PSPRCSRQST a, PS_PRCSDEFNLANG b, PSXLATITEM c
3 WHERE a.PRCSNAME = b.prcsname
4 AND fieldvalue = runstatus
5 AND fieldname = 'RUNSTATUS'
6 ORDER BY 2 DESC ;
PRCSINSTANCE SERVERNA PRCSNAME DESCR BEGINDTTM ENDDTTM XLATLONGNAME
------------ -------- ------------ ------------------------------ --------- --------- --------------
223321 PSUNX BICURCNV Conversion Devise Facturation 25-SEP-06 25-SEP-06 Success
Dans les version infrieur (8.43) , il faut remplacer PS_XLATITEM par PS_XLATTABLE
Il est galement impratif de tenir compte de la langue si il y a plusieurs langues d'installes
Comment voir les diffrents projets qui ont t installs et migrs sur une base ?
Auteurs : Jaouad ,
Grce la requte suivante :
SQL> select * from PSPROJECTDEFN ;
PROJECTNAME VERSION PROJECTDESCR TGTSERVERNAME TGTDBNAM TGTOPRID

--------------- ---------- ------------------------- ------------------- -------- --------
CFO_PORTAL 1 CFO Portal Pagelets


Comment savoir quels sont la release et les modules installs ?
Auteurs : Jaouad ,
Grce la requte suivante :
SQL> select * from psrelease ;
RELEASEDT RELEASELABEL
--------- --------------------------------------------------
01-JAN-00 Core 6.00.00.000
09-SEP-97 Core 7.00.00.000
10-SEP-97 Core 7.01.00.000
11-SEP-97 Core 7.02.00.000
09-MAY-98 Core 7.50.00.000
10-MAY-98 Core 7.51.00.000
11-MAY-98 Core 7.52.00.000
12-MAY-98 Core 7.53.00.000
17-AUG-00 Financials/SCM 8.00.00.000
30-NOV-00 Financials/SCM 8.00.01.000
FAQ Oracle
- 105 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
07-JUN-01 Financials/SCM 8.00.02.000
07-MAR-02 Financials/SCM 8.40.00.000
15-FEB-04 Financials/SCM 8.40.00.000
15-FEB-04 Financials/SCM 8.40.01.000
14 ligne(s) slectionne(s).
Comment connatre les dfinitions des process Scheduler ?
Auteurs : Jaouad ,
Grce la requte suivante :
SQL> SELECT a.servername, SRVRHOSTNAME host_name, XLATLONGNAME statut,
2 PRCSDISKSPACE espace_disque, sleeptime temps_veille, heartbeat Rythme
3 FROM PSSERVERSTAT a, PSXLATITEM b , PS_SERVERDEFN c
4 WHERE fieldname = 'SERVERSTATUS'
5 AND serverstatus = fieldvalue
6 AND a.servername = c.servername;
SERVERNA HOST_NAME STATUT ESPACE_DISQUE TEMPS_VEILLE RYTHME
-------- -------------------- ---------- ------------- ------------ ----------
PSUNX sproerp21 Running 6426 15 60
PSNT SPROERP16 Running 3561 15 60
Comment voir la dfinition des traitements ?
Auteurs : Jaouad ,
Grce la requte suivante :
SQL> col descrlong format a50
SQL> set linesize 250
SQL> SELECT * FROM PS_PRCSDEFNLANG
2 WHERE language_cd ='FRA' ;
PRCSTYPE PRCSNAME LAN DESCR DESCRLONG
------------------------------ ------------ --- -------------------- ---------------------
Application Engine 1099_RPT_PST FRA 1099_RPT_PST Prpare les donnes 1099
Application Engine AEBDASSTITEM FRA AEBDASSTITEM Alimente le Catalogue Immos
Ici, on suppose que la langue installe est le francais.
Comment lister les run control des diffrents AE ?
Auteurs : Jaouad ,
La requte suivante permet de voir les contrle d'xcution en fonction des AE ( Application Engine ) :
SQL> SELECT process_instance, oprid, run_cntl_id, ae_applid
2 FROM PS_AERUNCONTROL;
PROCESS_INSTANCE OPRID RUN_CNTL_ID AE_APPLID
---------------- ------------------------------ ------------------------------ ------------
FAQ Oracle
- 106 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
11178 JHY ARUPDATE_TT_ENTITES_ANT AR_UPDATE
25285 APE Psoft_Access B2_OMC140
Comment lister les run control par Oprid ?
Auteurs : Jaouad ,
Ceci permet de dterminer pour tout utilisateur ( Oprid ) les contrle d'excution (Run contrle ). Les contrle
d'excution permettre de stocker les diffrents paramtres d'un traitement et de ne pas avoir les re saisir si on relance
le traitement.
SQL> SELECT *
2 FROM PS_PRCSRUNCNTL
3 WHERE oprid = 'KBN' ;
OPRID RUN_CNTL_ID LAN L
------------------------------ ------------------------------ --- -
KBN KBN FRA O
KBN KBN_AM FRA O
KBN KBN_AP FRA O
Comment connatre le droulement d'un traitement ?
Auteurs : Jaouad ,
La requte suivante permet de savoir quelle tape se trouve le traitement, et si celui-ci est en echec ou en succs :
SQL> SELECT *
2 FROM PS_PMN_PRCSLIST ;
SEQUENCENO PRCSINSTANCE JOBINSTANCE PRCSJOBSEQ PRCSTYPE PRCSNAME RUNCNTLID R R SERVER
---------- ------------ ----------- ---------- ------------ -------------------- - - ------
227561 227561 0 0 COBOL SQL FSPGJGEN gen 2 0 PSUNX

Comment connatre la frquence d'un traitement ?
Auteurs : Jaouad ,
Voici comment voir la frquence des traitements qui sont scheduls, notamment pour la maintenance ou
l'administration : c'est le cas par exemple des traitements de purge : "Daily purge"
SQL> SELECT *
2 FROM ps_prcsrecur ;
RECURTYPE RECURNAME VERSION DAYOFMONTH RUN1STWEEK RUN2NDWEEK RUN3RDWEEK RUN4THWEEK RUN5THWEEK
---------- ---------- -------- ---------- ---------- ---------- ---------- ---------- ----------
FAQ Oracle
- 107 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
2 Daily 1 0 1 2 3 4 5
Comment lister les squence systme PS ?
Auteurs : Jaouad ,
Utile notamment pour la squence servant affecter le PRCSINSTANCE (identificateur unique des traitements) :
SQL> SELECT *
2 FROM PS_PRCSSEQUENCE ;
PR SEQUENCENO MIN_SEQ_NBR MAX_SEQ_NBR
-- ---------- ----------- -----------
0 227564 1 9999999
1 121544 1 9999999
2 122265 1 9999999
3 43007 1 9999999
4 7 1 9999999
Comment lister les rapports gnrs ainsi que leurs types et leurs emplacements ?
Auteurs : Jaouad ,
Grce cette requte, nous allons pouvoir allez chercher directement les rapports lorsqu'il ne sont pas disponibles via
la consle des traitements :
SQL> SELECT a.prcsinstance, a.prcsname, a.prcstype, a.PRCSOUTPUTDIR, b.xlatlongname
2 FROM PS_CDM_LIST a, PSXLATITEM b
3 WHERE a.outdestformat = b.fieldvalue
4 AND b.fieldname = 'OUTDESTFORMAT';

PRCSINSTANCE PRCSNAME PRCSTYPE PRCSOUTPUTDIR

------------ ------------ -------------------- ------------------------------------------
227399 BF_GL001 SQR Process
/psoftsp1/appserv/prcs/INT/log_output/SQR_BF_GL001_227399
Comment dmarrer une session en 4/3 en mode trace ?
Auteurs : Jaouad ,
Il est parfois important de tracer une session en transactionel, pour connaitre notamment les ralentissements.
Dans l'url de connexion, il faut ajouter la fin "&trace=y"
par exemple :
http://serveur/psp/DOMAINE/EMPLOYEE/ERP/?cmd=login&languageCd=FRA&trace=y
Le fichier trace est gnr dans :
$PS_HOME/appserv/DOMAINE/LOGS/
FAQ Oracle
- 108 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
et se dcompose ainsi :
OPRID_NomPoste.tracesql
Comment dterminer la version des Tools ?
Auteurs : Jaouad ,
La version des tools peut tre dtermine prcisment grce la commande suivante :
sproerp17-psoft84: /psoftsp1/appserv>psadmin -v
Version 8.46.06
Cette commande doit tre lanc avec l'utilisateur systme PSOFT et dans le rpertoire suivant :
$PS_HOME/appserv
Comment connatre toutes les installations sur PeopleSoft ?
Auteurs : Jaouad ,
La requte suivante permet de lister toutes les installations de Hotfix, Bundles, patch ...
SQL> SELECT * FROM PS_MAINTENANCE_LOG;

UPDATE_ID DESCR DTTM_IMPO FIXOPRID APPLYOPRID PRODUCT_LI RELEASEDT
RELEASELABEL MAIN DESCRLONG
----------- -------------------------- --------- ---------- ------------ ---------- --------- ------------------------------- ---- -----------------------------------------
500787001 PRJ102547 /7-22-02 /C305 21-JUL-03 PPLSOFT GLT 26-JUN-02
Financials/SCM 8.40.00.304 Financials Asset Management Bundle #1
FAQ Oracle
- 109 -
Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources
constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez
LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://oracle.developpez.com/faq/
Sommaire > ERP > Peoplesoft > Scurit
Quels sont les diffrents utilisateurs ainsi que les rles qui leur sont affects ?
Auteurs : Jaouad ,
La requte suivante nous donne les rles affects un USER ou OPRID
SQL> SELECT * FROM PSROLEUSER ;
ROLEUSER ROLENAME D
--------------- ------------------- -
AMA1 AM_SS_EMPLOYEE N
AMA1 ANALYST N
AMA1 PAPP_USER N
AMA1 PeopleSoft User N
Et celle ci les diffrents User ou OPRID :
SQL> SELECT * FROM PSOPRDEFN
OPRID VERSION OPRDEFNDESC EMPLID EMAILID

------------- ---------- --------------- ----------- ---------------
AMA1 2009 Toto,tata IXHEEE120 peoplesoft@peoplesoft.com

Vous aimerez peut-être aussi