FAQ Oracle Last-MaJ 04-01-2010

109
FAQ Oracle Date de publication : 18/09/2006 Dernière mise à jour : 04/01/2009 Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum Oracle de www.developpez.com et de l'expérience personnelle des auteurs. Elle pourra traiter de tout type de questions portant sur les technologies Oracle. Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture. L'équipe Oracle de Developpez.

Transcript of FAQ Oracle Last-MaJ 04-01-2010

Page 1: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

Date de publication : 18/09/2006

Dernière mise à jour : 04/01/2009

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forumOracle de www.developpez.com et de l'expérience personnelle des auteurs. Elle pourratraiter de tout type de questions portant sur les technologies Oracle.Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nousvous souhaitons une bonne lecture.L'équipe Oracle de Developpez.

Page 2: FAQ Oracle Last-MaJ 04-01-2010

Ont contribué à cette FAQ :

Aline - rouardg - PlaineR - Pierre Forstmann - bouyao(http://mbouayoun.developpez.com/) - LeoAnderson

(http://leoanderson.developpez.com/) - LaurentDardenne (http://laurent-dardenne.developpez.com/) -Xavier Vlieghe (http://xo.developpez.com) - LaurentSchneider (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/) -

Page 3: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 3 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

1. Forum Oracle (5) ....................................................................................................................................................................... 42. Général (4) ................................................................................................................................................................................. 63. Développement (36) .................................................................................................................................................................. 8

3.1. SQL (18) ........................................................................................................................................................................... 93.2. PL/SQL (18) ................................................................................................................................................................... 30

4. Administration (67) ..................................................................................................................................................................464.1. Les Tables (6) .................................................................................................................................................................474.2. Les Utilisateurs (4) ......................................................................................................................................................... 524.3. Sécurité (7) ......................................................................................................................................................................574.4. Les Tablespaces et autres fichiers (16) .......................................................................................................................... 624.5. Système (14) ................................................................................................................................................................... 704.6. Objets (5) ........................................................................................................................................................................ 764.7. Archive Log (3) .............................................................................................................................................................. 804.8. ISqlPlus (10g) (3) ........................................................................................................................................................... 824.9. Autres (9) ........................................................................................................................................................................ 84

5. Outils (10) ................................................................................................................................................................................925.1. Rman (0) ......................................................................................................................................................................... 935.2. Exp/Imp (1) .....................................................................................................................................................................945.3. Dba Studio & OEM (0) ..................................................................................................................................................955.4. SQL*Plus (3) .................................................................................................................................................................. 965.5. Network Manager (3) ..................................................................................................................................................... 985.6. Portal (3) ....................................................................................................................................................................... 100

6. ERP (16) ................................................................................................................................................................................ 1026.1. Peoplesoft (16) ..............................................................................................................................................................103

6.1.1. Administration (14) ..............................................................................................................................................1046.1.2. Sécurité (1) ...........................................................................................................................................................109

Page 4: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 4 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 problème, 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 réponse à votre question : vous pouvez, après avoir lu les Règles du forum

poster une question précise avec un titre clair et vous enrichirez ainsi le forum Oracle.

Comment mettre le tag [Résolu] ?

Auteurs : Helyos ,

Il n'est plus nécessaire et même deconseillé d'éditer son premier post pour mettre le tag [Résolu]. En bas à gauche vousavez un bouton qui se charge de mettre le tag. Par contre il est conseillé d'éditer et de mettre un titre clair quand cen'est pas le cas.

Que signifie le tag [Délestage] ?

Auteurs : Helyos ,

La base de données du forum n'est pas extensible indéfiniment. Nous devons "nettoyer les forums" pour que la base nedevienne pas trop grosse, ceci entrainerait une chute des performances pour tous les utilisateurs. Pour faciliter ce travailun Tag [Délestage] est mis sur les threads à supprimer. Pour quelles raisons les messages sont marqués [Délestage] :• La réponse à la question se trouve dans un tutoriel, dans la FAQ ou dans l'aide.• La réponse a déjà été donnée sur le forum.• Le titre n'est pas assez précis.• La question est mal posée.

D'ailleurs vous pouvez, si vous êtes l'auteur du message initial, marquer le fil de discussion pour [Délestage]. Ce faisant,vous améliorerez la lisibilité du forum, vous faciliterez le travail des modérateurs (ils sont bénévoles et ils ont plein dechoses plus passionnantes à faire, comme répondre à une question qui n'a pas déjà été posée).

Comment obtenir une bonne réponse ?

Auteurs : Helyos ,

En posant de meilleures questions !Votre question sera lue par un grand nombre de personnes, faites l'effort de rédiger une question claire et précise,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 habitués du forum saurontvite si vous avez bien cherché ou pas. Ne soyez pas pressé, les personnes qui vous répondent sont des bénévoles qui vousconsacrent du temps, soyez-en reconnaissant. Rappelez-vous toujours qu'elles ne vous doivent rien.

Page 5: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 5 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Afin de les aider à trouver une solution plus rapidement, pensez à préciser la version de votre base de données, l'utilitaireutilisé, le code utilisé et les erreurs que vous avez obtenues.

Que signifie le tag [FAQ] ?

Auteurs : Helyos ,

Afin de faciliter les recherches sur des thèmes récurrents, l'équipe Oracle à mis en place cette FAQ. Les membres del'équipe passent donc régulièrement sur le forum afin d'identifier les questions qui reviennent de manière répétée sur leforum. Une fois la question identifiée, on lui assigne le tag [FAQ] afin de l'ajouter le plus rapidement possible à la FAQ.

Page 6: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 6 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Général

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 répertoire :

%ORACLE_HOME\admin\%ORACLE_SID%\pfile

Il existe aussi un fichier init{SID}.ora dans le repertoire %ORACLE_HOME%\dbs mais en règle générale ce fichiercontient juste un paramètre IFILE qui redirige vers le fichier donné au début.

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 répertoire d'installation de votreOracle. Par exemple si vous avez installé par défaut une Oracle 9i votre %ORACLE_HOME% correspondra à c:\oracle\ora92.

-- Sous WindowsSET ORACLE_HOME=c:\oracle\ora92

--Sous Linux en BASHexport ORACLE_HOME=/home/oracle/OraHome1

--Sous Linux en C Shellsetenv 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 voussouhaitez vous connecter. Par exemple si vous avez 2 instances actuellement en cours d'utilisation sur votre serveurTOTO et TATA, et que vous souhaitez vous connecter à TATA, il vous faudra alors positionner cette variabled'environnement à TATA.

-- Sous WindowsSET ORACLE_SID=TATA

--Sous Linux en BASHexport ORACLE_SID=TATA

--Sous Linux en C Shellsetenv ORACLE_SID

Page 7: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 7 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

TATA

Combien coûte la license Oracle ? Est-ce gratuit ?

Auteurs : Fred_D ,

Tous les produits édités par Oracle sont disponibles en version complète et gratuitement sur leur site detéléchargement.Néanmoins, seul SQL Developper est gratuit quelles que soient les circonstances. En effet, les autres produits ne sontdisponibles gratuitement qu'à des fins de tests du produit (hors de question de l'utiliser pour tester des développements,

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 dépend de trop nombreux paramètres

pour pouvoir être détaillée ici . Je vous invite donc à aller directement sur le site de vente en ligne Oracle Store pourvous faire une idée. Évidemment, il est important de vérifier et/ou discuter des conditions tarifaires avec un commercialOracle.A noter également qu'Oracle propose une distribution entièrement gratuite et professionnelle sous l'appellationd'Oracle Database 10g Express Edition. Cette version limitée intégre la base de données en version 10g, le développementd'une application ainsi que du reporting.

Page 8: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 8 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Développement

Page 9: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 9 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Développement > SQL

Comment filtrer les n premières lignes d'une requête avec ROWNUM ?

Auteurs : SheikYerbouti ,

• Obtenir les 10 premières lignes d'une requête non triée :

SELECT * FROM EMP WHERE ROWNUM <= 10 ;

• Obtenir les 10 premières lignes d'une requête triée :

SELECT * FROM (SELECT * FROM EMP ORDER BY ename) WHERE ROWNUM <= 10 ;

Explication de la seconde requête :Chaque ligne retournée par une requête se voit attribuer un numéro, commençant par 1.Cela est parfait tant que les données ne sont pas triées avec le mot-clé ORDER BY !Par contre, si vous souhaitez trier les données, le numéro (ROWNUM) est attribué pour chaque ligne AVANT le trifinal !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) sélectionnée(s).

Nous ne voulons maintenant afficher que les 4 premières lignes :

Page 10: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 10 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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é après que le ROWNUM ait été affecté aux lignes retournées par la requête.Il faut donc trier les données avant qu'Oracle ne leur affecte un numéro !Ceci est réalisé par un tri inclus dans une sous-requête :

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 résultat attendu.

Comment sélectionner du m-iéme au n-iéme enregistrements ?

Auteurs : Fred_D ,

Voici une méthode pour filtrer la liste des enregistrements sur des intervalles consécutifs 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;

Page 11: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 11 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• de la m-iéme à la n-iéme 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 très similaire au ROWNUM utilisédans le paragraphe précédent mais est appliqué sur le résultat de la requête et pas pendant l'exécution de la requêteelle-même.Avec ROWNUM, la requête précédente 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 requêtes et éventuellement améliorer leurs performances.

Comment détecter et supprimer les doublons ?

Auteurs : lalystar ,

Supposons qu'on ait une table PERSONNE (nom, prenom, telephone) et qu'on souhaite avoir la liste des personnesayant le même nom et le même prénom. On peut l'obtenir avec la requête suivante :

select nom, prenomfrom PERSONNEgroup by nom, prenomhaving count(*) > 1;

Si on ne veut garder qu'une seule ligne pour chaque ensemble de personnes ayant le même nom et le même prénom, lechoix se faisant de manière arbitraire, on peut utiliser la requête suivante :

delete PERSONNE awhere rowid > (select min(rowid)from PERSONNE bwhere b.nom = a.nom andb.prenom = a.prenom);

Remarque :- cette requête doit être adaptée si l'une des colonnes nom ou prénom peut être nulle.- cette requête garde la ligne de rowid minimum parmi l'ensemble des lignes ayant même nom et même prénom.

Page 12: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 12 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

lien : Comment sélectionner du m-iéme au n-iéme enregistrements ?

Comment détecter les enregistrements empêchant la validation d'une contrainte ?

Auteurs : Jaouad ,

À l'aide de la table des exceptions : elle peut se créer 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 valeuresinsert 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 créer 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) - clés en double trouvées

La requête suivante nous permet d'identifier les lignes posant problème :

Retrouver toutes les valeurs en doubles

SQL> select * from test where rowid in ( select row_id from exceptions where table_name='TEST' and owner ='SCOTT' ) ;

A B---------- ----------a 1b 2a 5b 8

Page 13: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 13 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Retrouver toutes les valeurs en doublesa 9

Comment supprimer/remplacer des caractères avec la fonction TRANSLATE ?

Auteurs : SheikYerbouti ,

Cette fonction permet d'effectuer plusieurs remplacements d'un coup (à l'inverse de REPLACE() qui ne permet leremplacement que d'un caractère ou une chaîne à la fois) :TRANSLATE( chaîne en entrée, chaîne de recherche, chaîne de substitution ) ;• Exemple de suppression de caractères indésirables 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 chaîne en entrée,Le deuxième indique la chaîne de recherche,Le troisième indique la substitution caractère par caractère,En clair, le premier caractère de la chaîne de recherche trouvé dans la chaîne en entrée sera remplacé par le premiercaractère de la chaîne de substitution et ainsi de suite pour les autres caractères.La ruse dans l'exemple est le premier caractère '1' dans les deux derniers arguments. On dit qu'il s'agit d'un caractèreleurre, pusiqu'il sert à ignorer tous les caractères de la chaîne en entrée qui ne sont pas dans la chaîne de recherche.La fonction remplace tous les '1' par '1' et tous les autres caractères de la chaîne de recherche trouvés dans la chaîneen entrée par rien !

• Exemple de remplacement de caractères indésirables 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 caractères de la chaîne de recherche par le caractère '_'.• Autre exemple de remplacement de caractères indésirables :

SQL> SELECT TRANSLATE ( 'àâäéèëêùûüô', 'àâäéèëêùûüô', 'aaaeeeeuuuo' ) "Chaine" 2 FROM DUAL ;

Chaine ----------- aaaeeeeuuuo

SQL>

La fonction remplace toutes les minuscules accentuées par leurs équivalents non accentués.Bien évidement, les arguments de la fonction peuvent être des variables :

Page 14: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 14 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 entière et décimale d'un numérique avec la fonction TRUNC ?

Auteurs : SheikYerbouti ,

TRUNC( valeur, précision ) ;Cette fonction permet d'effectuer deux types d'action (sur un numérique) :• Conserver le nombre de décimales souhaitées (précision >= 0)• Cadrer la partie entière d'un nombre dans une tranche (précision < 0)

• Exemple de conservation des décimales 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 entière et décimale d'un nombre :

SQL> DECLARE 2 LN$Num number := 100.95 ; 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE( 'Partie entière : ' || To_char( TRUNC ( LN$Num ) )) ; 5 DBMS_OUTPUT.PUT_LINE( 'Partie décimale : ' || To_char( LN$Num - TRUNC (LN$Num ) ) ) ; 6 END ; 7 / Partie entière : 100 Partie décimale : ,95

Page 15: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 15 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Procédure PL/SQL terminée avec succès.

Comment tronquer une date avec la fonction TRUNC ?

Auteurs : SheikYerbouti ,

La fonction TRUNC() appliquée à une date ne permet pas seulement l'ablation de la partie horaire.Nous connaissons tous cette fonction qui, sans spécification de son deuxième argument, retire la partie horaire.Mais nous connaissons souvent moins l'autre particularité de cette fonction appliquée aux dates, par l'intermédiairedu 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 modifiée.

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 tronquée au 1er jour de l'année -- SQL> SELECT TRUNC(SYSDATE, 'YEAR') "'YEAR'" FROM DUAL;

'YEAR' ------------------- 01/01/2004 00:00:00

SQL> SQL> -- date tronquée au 1er jour de l'année ISO-- SQL> SELECT TRUNC(SYSDATE, 'IYYY') "'IYYY'" FROM DUAL;

'IYYY' ------------------- 29/12/2003 00:00:00

SQL> SQL> -- date tronquée au 1er jour du trimestre -- SQL> SELECT TRUNC(SYSDATE, 'Q') "'Q'" FROM DUAL;

'Q' ------------------- 01/10/2004 00:00:00

SQL> SQL> -- date tronquée au 1er jour du mois -- SQL> SELECT TRUNC(SYSDATE, 'MONTH') "'MONTH'" FROM DUAL;

'MONTH' ------------------- 01/10/2004 00:00:00

SQL> SQL> -- date tronquée au 1er jour de la semaine -- SQL> SELECT TRUNC(SYSDATE, 'DAY') "'DAY'" FROM DUAL;

'DAY' -------------------

Page 16: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 16 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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'année -- 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'année ISO -- SQL> SELECT TRUNC(SYSDATE, 'IW') "'IW'" FROM DUAL;

'IW' ------------------- 04/10/2004 00:00:00

SQL> SQL> -- date tronquée au jour (retire les heures) -- SQL> SELECT TRUNC(SYSDATE, 'DD') "'DD'" FROM DUAL;

'DD' ------------------- 08/10/2004 00:00:00

SQL> SQL> -- date tronquée à l'heure (retire les minutes) -- SQL> SELECT TRUNC(SYSDATE, 'HH') "'HH'" FROM DUAL;

'HH' ------------------- 08/10/2004 14:00:00

SQL> SQL> -- date tronquée à 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 différents formats de date disponible.• - / , . ; : "text" : Ponctuation ou texte à insérer dans la chaîne finale.• AD A.D. : Pour ajouter les sigles aprés Jésus Christ• AM A.M. : Symbole Am• BC B.C. : Pour ajouter les sigles avant Jésus Christ• CC SCC : Pour obtenir le n° du siècle 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 paramètres NLS.

Page 17: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 17 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• DAY : Nom du jour (compensé avec des espaces jusqu'à 9 caractères)• DD : Le numéro du jour dans le mois (de 1 à 31)• DDD : Le numéro du jour dans l'année (de 1 à 366)• DY: Abréviation du nom du jour• E : Abréviation 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: Numéro de la semaine dans l'année (de 1 à 52 ou 53 en fonction de l'année)• IYY IY I : Les 3, 2 ou 1 derniers chiffres de l'année• IYYY : Les 4 chiffres de l'année• J: Nombre de jours depuis la date January 1, 4712 BC• MI: Minutes (de 1 à 59)• MM: Numéro du mois dans l'année• MON : Abréviation du nom du mois• MONTH : Nom du mois (compensé avec des espaces jusqu'à 9 caractères)• PM P.M. : Symbole Pm• Q: Numéro du trimestre• RM: Numéro du mois au format romain• RR: Les deux derniers chiffres de l'année (avec prise en compte du siècle en cours)• RRRR: Les 4 derniers chiffres de l'année (avec prise en compte du siècle en cours)• SS: Nombre de secondes (de 0 à 59)• SSSSS: Nombre de secondes écoulées depuis minuit (de 0 à 86399)• W: Numéro de la semaine dans le mois (de 1 à 5)• Y,YYY: Numéro de l'année avec une virgule pour délimiter le millénaire (par exemple 2,004)• YEAR : Epellation du numéro de l'année en cours• YYYY: Numéro de l'année en cours (sans prise en compte du siècle en cours)• YYY YY Y : Les 3, 2 ou 1 derniers chiffres de l'année

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 contrôle statique de validité des données, maiselles sont très limitées. Il faudra alors recourir à des déclencheurs pour des validations plus complexes.Une contrainte CHECK ne peut faire référence 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 personnalisée.Les fonctions standard (comme LENGTH ou UPPER par exemple) sont autorisées, à condition qu'elles soientdéterministes.

Page 18: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 18 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 système mal indiquée dans contrainte CHECK".Pour résumer, 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 déterministes.Exemples :

CHECK (UPPER(titre) IN ('M.', 'MME', 'MLLE'))CHECK ((col1 < col2) OR (col1 = 10))

Quelle est la différence entre les types CHAR et VARCHAR2 ?

Auteurs : Jaouad ,

Il existe essentiellement une différence de place entre ces types de données . En effet, VARCHAR2 a une longueurvariable qui dépend directement de la taille de la donnée inséree alors que CHAR à une longueur fixe (défini à la créationde la table ).Prenons l'exemple d'un VARCHAR2 (20)) et CHAR(20), si on insère 'Oracle' dans les deux colonnes, Oracle seratcompléte 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 créée.

SQL> drop table dvp ;

Table supprimée.

SQL> create table dvp ( a char(2001)) ; create table dvp ( a char(2001)) * ERREUR à la ligne 1 :

Page 19: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 19 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

ORA-00910: specified length too long for its datatype

SQL> create table dvp ( a char(2000)) ;

Table créée.

Oracle recommande quand même l'utilisation de VARCHAR2 au lieu de CHAR pour une raison de compatibilité dansles versions supérieures.Outre l'utilisation supplémentaire 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 détecter les verrous (locks) ?

Auteurs : Jaouad ,

Via la requête 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)',

Page 20: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 20 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 détecter si une table est verouillée :

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 défaut ?

Auteurs : lalystar ,

À partir d'Oracle 9i, on peut utiliser le mot-clé default pour spécifier la valeur par défaut 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;

Page 21: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 21 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 différencier NULL et chaîne vide ?

Auteurs : Jaouad , Laurent Schneider ,

Comme le montre l'exemple suivant, lors de vos INSERT/UPDATE, Oracle retransforme les chaînes vide en valeurnulles, ce qui peut être gênant 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 ;

Page 22: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 22 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 caractère ou une chaîne de susbsitution, afin que votre applicatif puisse gérer cesinformations de manière distincte. Le plus simple, si c'est possible, est d'utiliser le caractère espace, ce qui donne, sil'on continue sur l'exemple précédent :

SQL> insert into dvp values (' ') ;

1 ligne créée.

SQL> commit;

Validation effectuée.

SQL> select count (*) from dvp ;

COUNT(*)----------4

SQL> select count(*) from dvp where a is null ;

Attention tout de même :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 continueto be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.

Page 23: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 23 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Comment insérer ou mettre à jour des données sans savoirsi les enregistrements correspondants existent déjà ?

Auteurs : Xavier Vlieghe ,

Grâce à 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 correspondanceWHEN MATCHED THEN -- Si Vraie UPDATE SET T1.Meschamps = T2.MeschampsWHEN 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 référence (UQ)• un libellé• un prix

La clé primaire est renseignée à l'aide d'une séquence.

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 reçoit 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'intégration des nouveaux articles en une seulecommande :

Page 24: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 24 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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

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#SQLRF01606Use the MERGE statement to select rows from one or more sources for update or insertion into one or more tables. Youcan 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, andDELETE DML statements.MERGE is a deterministic statement. That is, you cannot update the same row of the target table multiple times in thesame MERGE statement.

lien : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606

Comment empêcher l'exécution d'une requête non ré écrite ?

Auteurs : Jaouad ,

Grâce au hint apparue avec la version 10g :

/*+ REWRITE_OR_ERROR */

Comment construire une requête récursive ?

Auteurs : Xavier Vlieghe ,

Oracle permet de gérer le concept de requêtes récursives, à l'aide des clauses suivantes :• START WITH Champ = {Valeur} : Cette clause permet de préciser le(s) noeud(s) de l'arborescence à partir

duquel ou desquels on souhaite lister les éléments,• 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 connaître le niveau de chaqueenregistrement.En voici un exemple, grâce à une table Catégorie comprenant les champs suivants :• Une Clé (Id)

Page 25: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 25 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• Un Libellé (Libe)• La clé de la catégorie parent (Id_Parent)

CREATE TABLE Categorie (Id NUMBER (4),Libe VARCHAR2 (16),Id_Parent NUMBER (4));

-- Les clés sont attribuées de manière hiérarchique pour plus de clarté, ce qui est bien entendu rarement le cas dans la réalité ...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 Dessinée', 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, 'Bière' , 213);INSERT INTO Categorie VALUES (2133, 'Apéritif' , 213);INSERT INTO Categorie VALUES ( 22, 'Conserve' , 2);INSERT INTO Categorie VALUES ( 23, 'Frais' , 2);

COMMIT;

Voici la liste des catégories dépendant de la catégorie 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 Dessinée 2 1

7 ligne(s) sélectionnée(s).

A partir de la 9i, vous pouvez également utilisez la fonction SYS_CONNECT_BY_PATH (Champ, séparateur), quipermet de concaténer les différents valeurs du champ spécifié pour connaître le chemin entre l'élément concerné et leneod 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

Page 26: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 26 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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-Bière-Alimentaire-Boisson-Alcool-Apéritif-Alimentaire-Conserve-Alimentaire-Frais

10 ligne(s) sélectionnée(s).

Quels sont les raccourcis sous SQL*Plus

Auteurs : Pomalaix , Jaouad , Fred_D ,

@ désigne la variable ORACLE_SID courante. Est valable dans les scripts SQL, dans divers paramètres de l'INIT.ORA,dans des scripts RMAN notamment.? désigne la variable ORACLE_HOME courante. Est valable dans les scripts SQL, dans divers paramètres del'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 désigner une variable SQL*Plusstart et @ permet de lancer un scriptdefine permet de définir une variable sous Sql*Plus , sans argument elle donne toutes les variables déja défini& permet de définir une variable, && permet de la définir une fois pour toute et pour toute la session.ed permet de lancer le bufferl permet de voir sans l'executer le dernier ordre SQLr permet de voir et executer le dernier ordre SQLc: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 : caractère utilisé pour la substitution des variables (par défaut "&")

syntaxe :

-- gère les caractères de substitutionSET define ON-- les caractères de substitutions ne sont pas gérésSET define off-- le caractère de substition est @SET define @

• linesize : nombre de caractères par lignes

NB : la ligne est complétée par des espaces pour atteindre ce nombre de caractères.syntaxe :

-- mets le nom de caractère par ligne à 130

Page 27: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 27 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

SET linesize 130

• numformat : format par défaut des numériques à l'affichage.

syntaxe :

SET numformat 999G999D99

• numwidth : largeur par défaut des numériques

syntaxe :

SET numwidth 8

• pagesize : nombre de lignes de détail (entête nom compris)

syntaxe :

SET pagesize 60

• scan : contrôle la présence de variables de substitution

syntaxe :

-- contrôle la présence de variables de substitionsSET scan ON-- ne contrôle pas la présence de variables de substitionsSET scan OFF

• tab : utilisation des tabulations

syntaxe :

-- utilisation des tabulationsSET tab ON-- non utilisation des tabulationsSET tab OFF

• trimspool : suppression des espaces en fin de lignes

syntaxe :

-- supprime les espaces en fin de lignesSET trimspool ON-- laisse les espaces en fin de lignesSET trimspool OFF

• verify : liste la commande avant son exécution

Page 28: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 28 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

syntaxe :

-- liste la commande avant son exécutionSET verify ON-- la commande n'est pas affichee avant son exécutionSET verify OFF

• feed : affiche le nombre de lignes affectées par l'ordre SQL

syntaxe :

-- affichage du nombre de lignes affectéesSET feed ON-- le nombre de lignes affectées n'est pas affichéSET feed OFF

• term : affiche le résultat des commandes d'un script

syntaxe :

-- affichage du résultatSET term ON -- non affichage du résultatSET term OFF

• heading : affichage de l'entête du résultat

syntaxe :

-- affichage de l'enteteSET heading ON -- non affichage de l'enteteSET 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'exécution

syntaxe :

-- affichage de la commandeSET echo ON -- non affichage de la commandeSET echo OFF

Page 29: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 29 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

NB : Ce sont les principales, il en existe d'autres (SQL*Plus : Menu Option-> Environment) dont vous trouverezl'explication dans la documentation Oracle.

Page 30: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 30 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Développement > PL/SQL

Comment obtenir le nombre de lignes impactées par le dernier ordre SQL (DML) ?

Auteurs : SheikYerbouti ,

La variable SQL%ROWCOUNT contient le nombre de lignes impactées par le dernier ordre DML exécuté.Vous pouvez interroger cette variable après 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 insérés') ; 15 -- Suppression -- 16 DELETE FROM test 17 WHERE ROWNUM < 3 ; 18 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements supprimés') ; 19 ROLLBACK ; 20 END ; 21 / 6 enregistrements 3 enregistrements mis à jour 6 enregistrements insérés 2 enregistrements supprimés

Procédure PL/SQL terminée avec succès.

Comment afficher les erreurs de compilation ?

Auteurs : SheikYerbouti ,

Les erreurs de compilation sont stockées dans la vue USER_ERRORSVous pouvez, après compilation d'un objet, afficher les éventuelles erreurs de compilation de deux façons :• 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 /

Page 31: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 31 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Avertissement : Fonction créée 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 déclaré

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 déclaré

DEBUT FUNCTION 2 4 3 PL/SQL: Statement ignored

Comment compter le nombre d'occurrences dans une chaîne ?

Auteurs : SheikYerbouti ,

Comment compter le nombre d'occurrences dans une chaîne sans l'aide d'une boucle itérative ?En utilisant les fonctions LENGTH() et REPLACE() de la façon suivante :

CREATE OR REPLACE FUNCTION CPT_OCCURRENCES ( PC$Entree IN VARCHAR2, -- Chaîne en entrée PC$Recherche IN VARCHAR2 -- Chaîne à 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'exécution instruction par instruction de vos codes PL/SQL ?

Auteurs : SheikYerbouti ,

En installant l'outil Oracle : ProfilerVous devez être connecté avec le privilège SYSDBA

Page 32: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 32 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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'exécutant sur n'importe quelle fonction ou procédure PL/SQL :

---------------------------------------------- -- Test de la procédure stockée : 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 ;

Page 33: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 33 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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;

Procédure PL/SQL terminée avec succès.

Comment faire un REPLACE sur un CLOB ?

Auteurs : Helyos ,

Le package DBMS_LOB ne fournit pas de procédure 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);

Page 34: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 34 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 caractères correspond à un nombre ?

Auteurs : lalystar ,

Plutôt que de coder une fonction qui traite tous les cas de figure correspondant aux différents formats que peut prendreun nombre (entier, nombre à virgule, nombre avec exposant...), il vaut mieux laisser Oracle gérer la conversion et noussignaler 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 paramètre 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

Page 35: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 35 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

1 toto 0

Comment vérifier si une chaine vérifie un certain format ?

Auteurs : lalystar ,

Pour vérifier qu'une chaine de caractère vérifie un format donné, on peut utiliser, à partir d'Oracle 10g, la fonctionMATCH du OWA_PATTERN qui permet de manipuler des expressions régulières. Cette fonction retourne un booléenindiquant si le format est vérifié ou pas; elle ne peut donc être appelée qu'en PL/SQL.Par exemple, pour vérifier que les numéros de téléphones en base suivent le format français sur 10 chiffres avec commeséparateur des tirets, on peut faire :

SQL> select * 2 from TELEPHONE;

TELEPHONE#--------------------------------------------------------------------------------07.08.09.02.0207-08-09-02-0201 02 02 02 02TOTO07/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 régulières peuvent utiliser les symboles suivants :• ^ : début de la ligne• $ : saut de ligne ou fin de ligne• \n : saut de ligne• . : tout caractères sauf le saut de ligne• \t : tabulation• \d : chiffre (équivalent à [0-9])• \D : tout caractère sauf un chiffre (équivalent à [not 0-9])• \w : tout caractère alphanumérique (chiffres, lettres, _)• \W : tout caractère sauf un caractère alphanumérique• \s : tout espace (espace, tabulation, saut de ligne)• \S : tout caractère sauf un espace• \b : délimiteur de mots (entre un caractère qui vérifie \w et un autre qui vérifie \W)• \xnn : caractère dont le code ascii est en hexadécimal nn• \nnn : caractère dont le code ascii est en octal nnn

Les éléments ci-dessus peuvent être suivi par les indicateurs de cardinalité suivants :• ? : 0 ou 1 occurrence• * : 0 ou plus occurrences• + : 1 ou plus occurrences

Page 36: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 36 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• {n} : exactement n occurences• (n,} : au moins n occurences• {n,m} : entre n et m occurences

L'expression régulière qu'on a utilisé pour décrire notre format de numéro de téléphone ̂ \d{2}-\d{2}-\d{2}-\d{2}-\d{2}$se décrypte donc de la manière 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 régulière commence par ^, elle décrit le début de la chaine; comme elle se termine par $,elle décrit aussi sa fin.

Ma requête fonctionne sous SQL*Plus mais lorsque j'essaie del'utiliser dans une procédure PL/SQL, celle-ci ne compile pas !

Auteurs : lalystar ,

Sous Oracle 8i, le moteur SQL utilisé dans les procédures PL/SQL est différent et est en retard sur le moteur SQL utilisépour les requêtes. Certaines fonctionnalités 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 requête au moteur PL/SQL en utilisant par exempleEXECUTE 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 générer un fichier de trace pour une session en cours ?

Auteurs : lalystar ,

Quand une procédure est en cours d'exécution, il est possible de générer un fichier de trace (pour exploitation parTkProf par exemple) en utilisant la routine set_sql_trace_in_session du package DBMS_SYSTEM. Les paramètres decette 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

Page 37: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 37 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• TRACE: booléen; il faut entrer TRUE pour demander à Oracle de générer le fichier de trace, et FALSE pourarrêter sa génération

Vous trouverez plus de détails dans cet article : Différentes façon de tracer l'activité de sessions

Je n'ai pas de documentation Oracle, ni d'accès Internet,comment puis-je trouver la documentation d'un package Oracle ?

Auteurs : lalystar ,

Pour avoir immédiatement la documentation minimale d'un package Oracle installé, on peut utiliser la requête suivantesous 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_outputold 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.

Page 38: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 38 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

-- -20000, ORU-10028: line length overflow, limit of 255 bytes per line

Comment convertir une valeur hexadécimale en valeur décimale ?

Auteurs : SheikYerbouti ,

Simplement grâce 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 différence de temps entre 2 datesen nombre de jours, heures, minutes et secondes ?

Auteurs : SheikYerbouti ,

Grâce 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 NUMBERIS 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

Page 39: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 39 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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

Procédure PL/SQL terminée avec succès.

Comment exporter le résultat d'une requête 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 ONDECLARE XmlFic Utl_File.File_Type; XmlData CLOB; Fin BOOLEAN := TRUE;BEGIN -- Créer des données au format XML à partir d'une requête : XmlData := DBMS_XMLQuery.GetXML ('SELECT * FROM EMP'); -- Copie les données 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 procédure suivante :

Page 40: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 40 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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; -- découpe 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 exécuter une instruction du DDL dans un block PL/SQL ?

Auteurs : SheikYerbouti ,

Si vous souhaitez exécuter un ordre du DDL (Data Description Language) pour créer une table, un index, altérer unobjet existant, utilisez l'instruction EXECUTE IMMEDIATE.Par exemple, pour forcer la recréation 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 génère un COMMIT implicite et que les droits nécessaires à l'exécution del'instruction contenue dans la fonction EXECUTE IMMEDIATE doivent avoir été donné directement à l'utilisateur,et non pas via un rôle.

lien : Voir le tutoriel sur le SQL Dynamique Natif

Comment implémenter une colonne à valeur auto-incrémentée ?

Auteurs : Fred_D ,

Les champs de type "Auto-Increment" n'existe pas en Oracle. Pour émuler ce comportement, vous avez besoin

Page 41: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 41 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• d'une séquence pour incrémenter la valeur de 1 à chaque insertion• d'un trigger pour renseigner automatiquement le champ auto-incrémenté de votre table.

Voici comment procéder :

CREATE SEQUENCE MaSequence START WITH 1 MAXVALUE 999999999999999999999999 MINVALUE 1 NOCYCLE NOCACHE NOORDER;

CREATE TRIGGER MonTrigger BEFORE INSERT ON MaTable FOR EACH ROWBEGIN SELECT MaSequence.NEXTVAL INTO :NEW.macolonne_PK FROM DUAL;END;/

Lorqu'une ligne sera insérée dans la table MaTable, la colonne macolonne_PK sera alors renseignée avec la valeursuivante de la séquence 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 séquence n'est donc pas liée à un champ ou une table, et que vous pouvez utiliser la mêmeséquence pour plusieurs champs.

lien : Plus d'infos sur les triggers (ou déclencheurs)

Comment créer une vue paramétrée ?

Auteurs : Fred_D ,

Il peut être utile de rendre certains objets dynamiques, pour plus de souplesse dans vos applications. Or, les vues sontsouvent "créées en dur" dans la base, ce qui peut se réveler ennuyeux.Voici donc une méthode pour les rendre dynamiques :Créez d'abord un package, avec un paramètre global param1 :

CREATE OR REPLACE PACKAGE orafranceAS param1 VARCHAR2 (30);

FUNCTION get_param1 RETURN VARCHAR2;END;/

CREATE OR REPLACE PACKAGE BODY orafranceAS FUNCTION get_param1

Page 42: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 42 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

RETURN VARCHAR2 AS BEGIN RETURN param1; END;END;/

Créez ensuite votre vue, en faisant appel à ce paramètre :

CREATE OR REPLACE VIEW v_orafranceAS SELECT * FROM all_tables WHERE table_name = UPPER (orafrance.get_param1);

Pour utiliser votre vue, il faut d'abord initialiser le paramétre :

SQL> execute orafrance.param1 := 't_orafrance';

Et vous pouvez désormais faire appel à votre vue :

SQL> select table_name from v_orafrance;

TABLE_NAME------------------------------T_ORAFRANCE

Comment exécuter un shell depuis le PL/SQL ?

Auteurs : Helyos ,

Cette méthode est valable jusqu'en version 9 :Pour exécuter une commande système depuis du PL/SQL nous allons utiliser une classe Java. La création d'un classejava exécutable en PL/SQL passe par trois étapes :• tout d'abord on créé la Java Source• ensuite on publie la spécification d'appel de cette source• et enfin on accorde les privilèges nécessaires à l'exécution de cette classe Java

Donc on va tout d'abord créer la classe Java permettant d'exécuter une commande système :

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" ASimport 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 {

Page 43: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 43 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 spécification d'appel de cette classe en utilisant une procédure PL/SQL pour la "wrapper" :

CREATE OR REPLACE PROCEDURE Host_Command (p_command IN VARCHAR2)AS LANGUAGE JAVA NAME 'Host.executeCommand (java.lang.String)';/

Page 44: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 44 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Enfin, les permissions nécessaire doivent être données par l'utilisateur SYS pour que le JServer puisse accèder auxfichiers su système :

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 privilèges.Ensuite on lance notre commande

SET SERVEROUTPUT ON SIZE 1000000CALL 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 nécessaire, lors du déploiement de vos applicatifs, de crypter votre code afin de le protéger : il suffitpour cela de sauvegarder votre code sous forme de fichiers sql et d'utiliser le programme wrap.exe, se trouvant dansle répertoire {Oracle_Home}\Bin\.Le programme wrap accepte les 2 arguments suivants :• iname : nom du fichier en entrée• 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.

Page 45: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 45 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Processing c:\temp\debut.pls to c:\temp\debut.plb

Vous pouvez ouvrir le nouveau fichier pour vérifier son contenu.Attention, prenez évidemment soin de sauvegarder vos sources, cette procédure est bien entendu irréversible !Vous pouvez (devez) également vérifier que la compilation s'effectue correctement :

SQL> @c:\temp\debut.plb

Fonction créée.

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_nameCREATE [OR REPLACE] PACKAGE package_name CREATE [OR REPLACE]PACKAGE BODY package_name CREATE [OR REPLACE] TYPE type_name ASOBJECT CREATE [OR REPLACE] TYPE type_name UNDER type_name CREATE[OR REPLACE] TYPE BODY type_name The CREATE [OR REPLACE] TRIGGERstatement, and [DECLARE] BEGIN..END anonymous blocks, are not obfuscated. All otherSQL statements are passed unchanged to the output file. All comment lines in the unitbeing wrapped are deleted, except for those in a CREATE OR REPLACE header and C-style comments (delimited by /* */).

Page 46: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 46 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration

Page 47: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 47 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 schémasALL_TABLES liste toutes les tables que l'utilisateur peut voir (les tables de son schéma plus celles des autres schémasdans lesquels il possède des droits)USER_TABLES liste les tables du schéma de l'utilisateur connectéLes colonnes de la vue DBA_TABLES sont les suivantes :OWNER Schéma propriétaire de la tableTABLE_NAME Nom de la tableTABLESPACE_NAME Nom du tablespace de stockage de la tableCLUSTER_NAME Nom du cluster qui contient la tableIOT_NAME Nom de l'IOT à laquele se réfère la zone de débordement ou la table de correspondancesPCT_FREE Pourcentage minimum d'espace libre pour un blocPCT_USED Pourcentage minimum d'espace utilisé pour un blocINI_TRANS Nombre initial de transactionsMAX_TRANS Nombre maximum de transactions autoriséesINITIAL_EXTENT Taille du segment initial en octetsNEXT_EXTENT Taille du deuxième extent en octetsMIN_EXTENTS Nombre minimum d'extents alloués dans le segmentMAX_EXTENTS Nombre maximum d'extents alloués dans le segmentPCT_INCREASE Pourcentage d'augmentation des nouveaux extents créésFREELISTS Nombre de freelists allouées pour le segmentFREELIST_GROUPS Nombre de groupes de freelists allouées pour le segmentLOGGING Attribut de loggingBACKED_UP Indique si la table a été sauvegardée depuis la dernière modificationNUM_ROWS Nombre de lignes de la table (*)BLOCKS Nombre de blocs utilisés pour la tableEMPTY_BLOCKS Nombre de blocs vide (jamais utilisés) pour la tableAVG_SPACE Valeur moyenne de l'espace libre pour la table (en nombre de lignes) (*)CHAIN_CNT Nombre de lignes chaînées pour la table (*)AVG_ROW_LEN Longueur moyenne d'une ligne (incluant l'entête) (*)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 freelistDEGREE Nombre de processus par instanceINSTANCES Nombre d'instances à travers lesquelles la table est scannéeCACHE Indique si la table est chargée en cacheTABLE_LOCK Indique si le verouillage de table est activé ou désactivéSAMPLE_SIZE Valeur de l'échantillon utilisé pour analyser la tableLAST_ANALYZED Date de la dernière analyse de la tablePARTITIONED Indique si la table est partitionnéeIOT_TYPE Indique le type d'objet d'une table organisée en index (Préfixe, zone de débordement ou table decorrespondance (MAPPING TABLE)TEMPORARY Indique si la session courante peut voir les données inséréesSECONDARY Indique si la table fait partie de la création d'un index de domaineNESTED Indique s'il s'agit d'une table imbriquéeBUFFER_POOL Buffer pool par défaut de chargement des blocs

Page 48: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 48 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

ROW_MOVEMENT Indique si le déplacement des lignes partitionnées est activé ou désactivéGLOBAL_STATS Indique si les statistiques ont été calculées sans fusion des partitions sous-jacentesUSER_STATS Indique si les statistiques ont été saisies directement par l'utilisateurDURATION Persistance des données d'une table temporaire (sys$session oo sys$transaction)SKIP_CORRUPT Indique si le contournement des blocs endommagés est activé ou désactivéMONITORING Indique si le traçage est activéCLUSTER_OWNER Propriétaire du clusterDEPENDENCIES Indique si le traçage des dépendances de niveau ligne est activéCOMPRESSION Indique si la compression de données est activée ou désactivée(*) ne prenez par comme argent comptant la valeur de ces colonnes, particulièrement NUM_ROWS.En effet ces colonnes ne sont (re)valorisées qu'après analyse de la table.Utilisez donc ces valeurs à bon escient.Si votre système analyse vos tables chaque nuit, par exemple, ces valeurs peuvent sans crainte vous donner une bonneindication de la volumétrie de vos tables, sans exécuter 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) sélectionnée(s).

Après 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

Page 49: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 49 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 paramétrage ouun historique en ligne. Même si le seul privilège donné sur ces tables est le SELECT, il y a toujours un risque que lepropriétaire de la table, ou un utilisateur disposant d'un privilège global de type ANY TABLE, modifie par erreur cestables.Comment se prémunir contre de telles erreurs ?Il suffit de mettre à profit un mode quelque peu méconnu des contraintes : DISABLE VALIDATE.En effet, ce mode interdit sur la table concernée l'exécution de toute instruction INSERT, UPDATE, DELETE ou mêmeTRUNCATE, quels que soient les privilèges 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 préférable, pour le cas où elle serait activée, c'est pourquoi je propose unCHECK(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) désactivée et validéeNotre table est donc protégée contre toute modification accidentelle de son contenu.

Comment voir les lignes chaînées sur les tables ?

Auteurs : Jaouad ,

Tout d'abord, il faut au préalable :• exécuter le script $ORACLE_HOME/rdbms/admin/utlchain,• analyser la table en question avec la commande suivante :

Analyze Table MaTable;

La requête suivante vous permet maintenant de lister les lignes chaînées :

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;

Page 50: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 50 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Attention, cela ne fonctionne pas avec le package DBMS_STATS.

Quelle est la différence entre une table et une vue ?

Auteurs : LeoAnderson ,

Une table est un ensemble "physique" de données qui occupe un espace disque.Une vue est une interrogation logique (SELECT) basée sur des tables ou d'autres vues qui n'occupent pas de place surle disque. Une vue n'est en fait qu'un "SELECT" mémorisé en base (l'instruction est mémorisée, pas les résultats).C'est la raison qui justifie l'impossibilité de créer un index, de n'importe quel type, sur ce type de segment. Afind'optimiser le temps de réponse d'une requête se basant sur un select, l'index est donc à créer sur la table sur laquelleporte la requête.Concernant l'écriture des requêtes, les vues et les tables s'utilisent de la même manièreLes vues sont toutes stockées dans le tablespace SYSTEM, alors que les tables sont stockés dans les tablespaces dédiés.Les tables sont visibles via les tables systèmes : DBA_TABLES, ALL_TABLES et USER_TABLES alors que les vuessont visibles via les DBA_VIEWS, ALL_VIEWS et USER_VIEWS.

lien : View and Base table

Comment connaître, pour une table, le nombre decolonnes, d'index et le pourcentage de colonnes indexées ?

Auteurs : PlaineR ,

Grâce à la requête 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 codée de la manière suivante :• C : contrainte de type CHECK (genre champ NOT NULL ou avec une condition de vérification genre BETWEEN)• P : contrainte de clé primaire (PK)• U : contrainte d'unicité (Unique)• R : contrainte référentielle (FK)

SQL> SELECT constraint_name, 1 decode(constraint_type, 'C', 'check', 'P', 'clé primaire ', 'U', 'Contrainte d''unicité', 'R', 'Contrainte Référentielle ') constraint_name 2 table_name, search_condition, status 3 FROM USER_CONSTRAINTS;

Page 51: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 51 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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

Page 52: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 52 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Les Utilisateurs

Comment afficher la liste des utilisateurs ?

Auteurs : Laurent Schneider ,

La requête suivante permet de lister les utilisateurs avec les propriétés suivantes :• ID• Tablespace par défaut• Tablespace temporaire• Mot de passe (crypté)• État• Profil• Date de création

select USERNAME, USER_ID, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE, PASSWORD, ACCOUNT_STATUS, PROFILE, CREATEDfrom DBA_USERSorder by USERNAME;

USERNAME USER DEFAULT TEMPORARY PASSWORD ACCOUNT_STATUS PROFILE CREATED---------- ---- ------- --------- ---------------- ---------------- ------- ----------ANONYMOUS 38 SYSAUX TEMP anonymous EXPIRED & LOCKED DEFAULT 2006-04-18CTXSYS 35 SYSAUX TEMP 24ABAB8B06281B4C EXPIRED & LOCKED DEFAULT 2006-04-18DBSNMP 24 SYSAUX TEMP E066D214D5421CCC OPEN DEFAULT 2006-04-18DIP 19 USERS TEMP CE4A36B8E06CA59C EXPIRED & LOCKED DEFAULT 2006-04-18EXFSYS 34 SYSAUX TEMP 66F4EF5650C20355 EXPIRED & LOCKED DEFAULT 2006-04-18

Comment migrer vers un utilisateur identifié par le système d'exploitation ?

Auteurs : Fred_D ,

L'objectif est de créer un utilisateur identifié par le système d'exploitation pour éviter la saisie des mots de passe "endur" dans les batchs. La difficulté réside dans l'attibution des droits à donner à cette utilisateur.

Le script suivant permet de créer l'utilisateur de type OPS$ (cf. Création d'un utilisateur authentifié par le systèmed'exploitation).Le script Migrate2OPS$.sql génére 4 scripts SQL qui seront lancés automatiquement si vous le souhaitez. C'est unscript interactif qui demande de saisir le nom de l'utilisateur à créer et le nom de l'utilisateur source (i.e. l'utilisateurde référence).

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

Page 53: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 53 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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

Page 54: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 54 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 après avoir vérifier les scripts générés... 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;

Page 55: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 55 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

spool off

Comment mettre en place l'authentification OS sous Windows ?

Auteurs : Pomalaix ,

Par défaut, les mots de passe des utilisateurs sont stockés dans la base Oracle, sous forme cryptée. On peut cependantsouhaiter que le compte Oracle d'un utilisateur soit synchronisé avec son compte Windows.Ceci procure deux avantages :• éviter de devoir gérer deux systèmes 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 données sans fournir de mot de passe, puisqu'il a déjà été validé par l'OS.

C'est un premier pas vers l'authentification unique, connue sous le sigle SSO.

Nous décrivons ici le paramétrage nécessaire pour mettre en place cette authentification OS dans un environnementWindows.Précisons 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 estidentique au compte NT, sauf que le compte Oracle possède en plus un préfixe qui est identique pour tous les comptesauthentifiés par l'OS. Par défaut, ce préfixe est OPS$. Ainsi, si le compte NT est TOTO, le compte Oracle correspondantdoit ê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 gérer certains comptes de manière traditionnelle, avec le mot de passe dans la base, et gérer les autres grâce àl'authentification OS.Voici la procédure :1) Dans le SQLNET.ORA côté client et côté serveur, insérer :

SQLNET.AUTHENTICATION_SERVICES=(NTS)

2) Dans le fichier d'initialisation INITxxx.ORA, insérer :

REMOTE_OS_AUTHENT=TRUE

3) Dans l'INITxxx.ORA, noter la valeur du paramètre OS_AUTHENT_PREFIX (OPS$ par défaut), ou lui donner lavaleur désirée. Le plus commode est "" (deux guillemets consécutifs, sans espace) ce qui correspond à une valeur nulle,et permet d'avoir des comptes NT et des comptes Oracle identiques.Redémarrer l'instance si une modification a été faite au point 2 ou 3.4) La clé de registre OSAUTH_PREFIX_DOMAIN, située côté serveur dans la branche HKLM\Software\Oracle\HomeN, permet de spécifier si l'authentification doit tenir compte ou non du nom de domaine NT.Avec OSAUTH_PREFIX_DOMAIN à FALSE, seul le nom du compte est vérifié, indépendamment de son domaine NT.Cela signifie que 2 comptes Toto, situés dans des domaines différents, pourraient accéder à la base de données.Avec OSAUTH_PREFIX_DOMAIN à TRUE, le domaine NT est également vérifié, ce qui améliore la sécurité.5) Création 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";

Page 56: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 56 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 domaineParis

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 considéré comme le nom d'unscript à exécuter, et non comme un alias Oracle Net.Ou si on est déjà dans SQL*Plus :

CONNECT /@labase

Comment créer 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;

Page 57: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 57 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Sécurité

Comment empecher un utilisateur de se connecter avec un outil spécifique ?

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 connaître :• il n'a pas d'effet si l'utilisateur posséde le privilége ADMINISTER DATABASE TRIGGER.• il n'a pas d'effet si on renomme l'utilitaire, le contrôle se faisant via une comparaison entre le champ v_program

et le nom du programme.

Comment désactiver - activer la sécurité :

alter trigger interdire_toad disable ;

alter trigger interdire_toad enable ;

Comment empêcher un utilisateur d'effectuer certaines opérations 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 250col CHAR_VALUE format a15col ATTRIBUTE format a15

Page 58: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 58 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 désactivé pour l'utilisateur FORMATION :

SQL> conn systemEntrez 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 créée.

SQL> commit ;

Validation effectuée.

SQL> conn formation/formationConnecté.SQL> create table dvp ( a varchar2(10)) ;SP2-0544: commande non valide : createSQL> conn systemEntrez le mot de passe : ********Connecté.SQL> delete from product_user_profile where userid='FORMATION' ;

1 ligne supprimée.

SQL> commit ;

Validation effectuée.

SQL> conn formation/formationConnecté.

SQL> create table dvp ( a varchar2(10)) ;

Table créée.

Comment autoriser/interdire une connexion Net*8 ?

Auteurs : Jaouad ,

A placer dans le fichier Sqlnet.ora ( sur le serveur hébergeant le SGBDR ) Autoriser les personnes suivantes :

TCP.VALIDNODE_CHECKING=yesTCP.INVITED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)

Interdire les personnes suivantes :

TCP.VALIDNODE_CHECKING=yesTCP.EXCLUDED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)

Page 59: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 59 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Vous trouverez plus de détails 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 BEGINraise_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 désactiver cette restriction, utilisez cette commande :

ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null;

Je suis administrateur et pourtant j'ai une erreur de privilèges insuffisants ?

Auteurs : Fred_D ,

Vérifiez que l'utilisateur avec lequel vous vous connectez à les droits nécessaires pour faire l'action que vous souhaitez

en vous aidant de ce tutoriel : http://oracle.developpez.com/guide/administration/adminrole/#L8Par exemple, pour voir toutes les tables de la base, il vous faudra avoir le privilège 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 précise pas AS SYSDBA ou AS SYSOPER

SQLPLUS /NOLOG CONNECT SYS/pwd@db AS SYSDBA

Comment sécuriser la gestion des mots de passe ?

Auteurs : Xavier Vlieghe ,

Via la gestion de profils dédiés, qui peuvent gérer les paramètres suivants :

Page 60: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 60 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

• FAILED_LOGIN_ATTEMPTS : Nombre d'erreurs permises à la saisie du mot de passe avant que le compte soitverrouillé,

• PASSWORD_GRACE_TIME : En cas de péremption d'un mot de passe dû à un délai fixé par l'administrateur,cette option permet de paramétrer une durée (en jours) pendant laquelle l'utilisateur pourra tout de même seconnceter, mais recevra un avertissement,

• PASSWORD_LIFE_TIME : Durée (en jours) de vie maximum d'un mot de passe,• PASSWORD_LOCK_TIME : Durée (en jours) pendant laquelle un compte sera verrouillé après 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 déjà utilisé,• PASSWORD_REUSE_TIME : Durée (en jours) minimum pendant laquellel'utilisateur ne peut pas ré-utiliser un

mot de passe déjà utilisé, à partir du moment où celui-ci a été changé,• PASSWORD_VERIFY_FUNCTION : permet de préciser une fonction (PL/SQL) vérifiant la compexité du mot

de passe.

Voici un exemple de mise en application :1. Créons un utilisateur TEST :

CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE TBSTEST;

2. Créons 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. Vérifions que le paramètre 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 requête suivante :

Page 61: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 61 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 UNLIMITEDDEFAULT PASSWORD_LIFE_TIME UNLIMITEDDEFAULT PASSWORD_REUSE_MAX UNLIMITEDDEFAULT PASSWORD_LOCK_TIME UNLIMITEDDEFAULT PASSWORD_GRACE_TIME UNLIMITEDDEFAULT PASSWORD_VERIFY_FUNCTION NULLDEFAULT PASSWORD_REUSE_TIME UNLIMITEDPROFIL_TEST FAILED_LOGIN_ATTEMPTS 2PROFIL_TEST PASSWORD_LIFE_TIME 60PROFIL_TEST PASSWORD_REUSE_MAX DEFAULTPROFIL_TEST PASSWORD_LOCK_TIME DEFAULTPROFIL_TEST PASSWORD_GRACE_TIME DEFAULTPROFIL_TEST PASSWORD_VERIFY_FUNCTION DEFAULTPROFIL_TEST PASSWORD_REUSE_TIME DEFAULT

14 ligne(s) sélectionnée(s).

lien : Gestion des Profils

lien : Sécurisation d'une base Oracle

Page 62: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 62 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Les Tablespaces et autres fichiers

Comment lister les tablespaces et leurs fichiers associés ?

Auteurs : Laurent Schneider ,

La requête suivante permet d'afficher l'identifiant, le nom, le status et le tablespace des fichiers de données :

select FILE_ID, FILE_NAME, STATUS, TABLESPACE_NAMEfrom DBA_DATA_FILESorder 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 caractéristiques principales ?

Auteurs : Laurent Schneider ,

La requête suivante permet d'afficher les tablespaces, avec les propriétés 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,

Page 63: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 63 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 ) cwhere 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.STATUSorder 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 395771904SYSTEM PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 471859200 2147483648 470548480TEMP TEMPORARY LOCAL UNIFORM MANUAL NO ONLINE 1 20971520 2147483648 17039360UNDOTBS1 UNDO LOCAL SYSTEM MANUAL NO ONLINE 1 182452224 2147483648 13041664USERS PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 26214400 2147483648 524288

Concernant les fichiers d'archives, la requête suivante permet de connaître les informations suivantes :• Chemin et nom de fichier• Numéro de thread• Numéro de séquence• Taille• Identifiant resetlogs (10g)• Date• État (9i)

select NAME, THREAD#, SEQUENCE#, BLOCKS*BLOCK_SIZE "SIZE", RESETLOGS_ID, COMPLETION_TIME, STATUSfrom V$ARCHIVED_LOGorder by SEQUENCE#;

NAME THR SEQ SIZE RESETLOGS COMPLETION S----------------------------------------- --- ---- ------- --------- ---------- -

Page 64: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 64 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 requête suivante nous permet d'afficher leurs identifiants, noms et status :

select FILE_ID, FILE_NAME, STATUS, TABLESPACE_NAMEfrom DBA_TEMP_FILESorder 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 tablespacetemporaires dictionary managed (qui datent d'Oracle 7) ne seront pas listées, 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 apparaître pleins lors d'une utilisationnormale de la base. En effet les extents sont alloués une fois puis gérés par le système. Une fois l'utilisation de l'extentterminée il est alors marqué comme libre mais n'est pas libéré pour des raisons de tuning. Il n'est donc pas rare dene pas avoir d'espace temporaire libre lors de l'utilisation d'une base. Les extents seront libérés par SMON lors duredémarrage de la base.

Comment afficher le nom et l'état des fichiers de contrôle ?

Auteurs : Laurent Schneider ,

Via la requête suivante :

select NAME, STATUSfrom V$CONTROLFILEorder by NAME;

NAME STATUS------------------------------------------------- -------/u01/LSC63/ctrl/ctrl01aLSC63.dbf

Page 65: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 65 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

/u01/LSC63/ctrl/ctrl01bLSC63.dbf

Comment lister les fichiers Redo Log ainsi que leurs caractéristiques principales ?

Auteurs : Laurent Schneider ,

La requête suivante permet d'afficher les fichiers redo Log, avec les propriétés suivantes :• Groupe• Thread• Séquence• 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.MEMBERfrom V$LOGFILE f, V$LOG lwhere 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 caractéristiques de la base de données ?

Auteurs : Laurent Schneider ,

La requête suivante nous permet d'obtenir les caractéristiques suivantes :• Nom• Identifiant DBID• Mode d'archivage• Mode flashback (10g)• Mode d'ouverture (RW/RO)• Date de création de la base de données

SELECT NAME, DBID, LOG_MODE, FLASHBACK_ON, OPEN_MODE, CREATED

Page 66: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 66 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 requête suivante permet d'afficher le nom et la valeur des propriétés de la base de données (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 tablespaceDEFAULT_TBS_TYPE SMALLFILE Default tablespace typeDEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace

Comment afficher le nom et la version de l'instance ?

Auteurs : Laurent Schneider ,

Via la requête 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 requête suivante :

SQL> SELECT GLOBAL_NAME 2 FROM GLOBAL_NAME;

GLOBAL_NAME------------------------------LSC63.DOMAIN.CH

Comment afficher la fonction et le nombre d'utilisations détectées (ex: Partitioning) ?

Auteurs : Laurent Schneider ,

À partir d'Oracle 10g, via la requête suivante :

Page 67: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 67 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

SELECT NAME, DETECTED_USAGES FROM DBA_FEATURE_USAGE_STATISTICS ORDER BY NAME;

NAME DETECTED--------------------- --------Partitioning (system) 11Partitioning (user) 0

Comment supprimer une base de données sous SQL*Plus ?

Auteurs : Jaouad ,

A partir de la 10g il est possible de supprimer une base de données Oracle via une commande sous Sql*Plus : Il fautêtre connecté en sysdba avec une base de données en mode open.Nous vous recommandons bien entendu la plus grande vigilance quant à l'utilisation de cette commande, dont la syntaxeest 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 procéduresys.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 données n'est pas configuréeavec SYSTEM comme tablespace temporaire par défaut.Attention, la migration inverse est impossible ! Néanmoins, je vous rappelle qu'Oracle préconise l'utilisation de

LMT.Note : la note Metalink 175434.1 décrit en détail cette migration.

Comment renommer un Tablespace ?

Auteurs : Jaouad ,

Depuis la version 10g, Il est possible de renommer un Tablespace grâce à 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 ettemporaires : pour ce faire, le tablespace ou l'un de ses fichiers de données ne doit pas être hors ligne, sinon l'opérationde renomage ne peut avoir lieu !Lorsque l'on modifie le nom d'un tablespace, Oracle met à jour les références de ce tablespace : à savoir les fichiers decontrôle, le dictionnaire de données et les en-têtes de fichiers.Si ce Tablespace est en mode Read Only les entêtes de fichiers ne sont pas modifiés (ils ont besoin pour ce faire d'êtreen mode Read Write) : Un message est consigné dans le fichier alerte de l'instance.

Page 68: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 68 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Si la modification de nom concerne le tablespace d'annulation UNDO et qu'il s'agit du tablespace désigné par leparamètre d'initialisation, la modification affecte le Spfile. Si c'est le Pfile qui est utilisé, alors un message d'alerte estconsigné dans le fichier d'alerte de l'instanceLe paramètre 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 déplacé. Pour le supprimer d'un tablespace il faut recréer letablespace 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 connaître la taille d'un tablespace et de son espace libre ?

Auteurs : LeoAnderson , rouardg ,

La vue DBA_DATA_FILES va nous permettre de déterminer la taile d'un tablespace,La vue DBA_EXTENTS permet de connaitre la taille de tous les segments dans les différents datafiles,La vue DBA_FREE_SPACE qui indique les espaces libres dans les database files.La requête suivante vous permet de récupérer 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 différent de ("ALLOUE"- "OCCUPE") à cause de la recyclebin !

Comment connaître l'occupation du tablespace SYSAUX (10g) ?

Auteurs : Jaouad ,

Le tablespace SYSAUX est apparue avec la version 10g, et a pour but de décharger le tablespace SYSTEM de certainssegments.

SQL> select occupant_name, space_usage_kbytes from v$sysaux_occupants ;

Page 69: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 69 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

OCCUPANT_NAME SPACE_USAGE_KBYTES---------------------------------------------------------------- ------------------LOGMNR 6080LOGSTDBY 896STREAMS 512XDB 49600AO 21248XSOQHIST 21248...

Page 70: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 70 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Système

Comment afficher l'encombrement disque/mémoire des unités de traitement ?

Auteurs : SheikYerbouti ,

La place occupée par les unités 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, JAVARESOURCE 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 références aux objets sous-jacents)• CODE_SIZE Contient la taille du code chargé en mémoire à l'exécution• ERROR_SIZE Contient la taille des messages d'erreur

taille des unités 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 première ligne indique que la fonction LIGNESALAIRE occupe 280 octets de code source et nécessite 563 octetsen mémoire à l'exécution.

Comment connaître les bases en cours d'utilisation ?

Auteurs : Helyos ,

Pour connaître les bases de données 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 => gérer => services etapplications => services puis de regarder tous les services commençant par OracleService et qui sont formatés de lasorte OracleService<SID> (où SID correspond au nom de l'instance associée)Sous Linux Vous pouvez lancer la commande suivante : ps -ef | egrep pmon_ | grep -v grep

Comment afficher l'encombrement mémoire des pools partagés ?

Auteurs : SheikYerbouti ,

Voici un script permettant d'afficher la taille allouée, utilisée et libre de chaque pool :

Page 71: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 71 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

COL "Total octets alloués" FORMAT A20 COL "octets utilisés" FORMAT A20 COL "octets libres" FORMAT A20 SELECT a.POOL "Pool" , b.Octets || ' (' || ROUND(b.Octets/1024/1024) || ' Mo)' "Total octets alloués" , (b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utilisés" , 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 résultat de l'exécution

SQL> COL "Total octets alloués" FORMAT A20 SQL> COL "octets utilisés" 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 alloués" 4 , (b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utilisés" 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 alloués octets utilisés 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 250col 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

Page 72: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 72 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

where a.file# = b.file_id;

Comment afficher le nom du composant, l'état et la version des éléments du registre ?

Auteurs : Laurent Schneider ,

Via la requête 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.0Oracle Database Catalog Views VALID 10.2.0.2.0Oracle Database Java Packages VALID 10.2.0.2.0Oracle Database Packages and Types VALID 10.2.0.2.0Oracle Expression Filter VALID 10.2.0.2.0Oracle Text VALID 10.2.0.2.0Oracle Workspace Manager VALID 10.2.0.3.0Oracle XDK VALID 10.2.0.2.0Oracle XML Database VALID 10.2.0.2.0Oracle 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 requête 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 475193207.03.2006 11:30 UPGRADE 10.2.0.2.0

Quelle est la procédure pour déplacer des objets de SYSAUX (10g) ?

Auteurs : Jaouad ,

Lors d'une réorganisation de base de données, si l'on souhaite déplacer certains objets du tablespace SYSAUX versd'autres tablespaces, comment procéder ?Cette requête va nous donner la procédure à utiliser pour le déplacement en fonction des objets

SQL> SELECT occupant_name, schema_name, move_procedure 2 FROM v$sysaux_occupants ;

Page 73: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 73 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

OCCUPANT_NAME SCHEMA_NAME MOVE_PROCEDURE---------------- --------------- ---------------------------------------------------------------LOGMNR SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACELOGSTDBY SYSTEM SYS.DBMS_LOGSTDBY.SET_TABLESPACESTREAMS SYS XDB XDB XDB.DBMS_XDB.MOVEXDB_TABLESPACEAO SYS DBMS_AW.MOVE_AWMETAXSOQHIST SYS DBMS_XSOQ.OlapiMoveProc...

Comment connaître le systéme d'exploitation qui héberge le SGBDR ?

Auteurs : Jaouad ,

Via cette requête :

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é vérifiés avant d'effectuer la migration ?Via un nouvel outil d'upgrade ( Upgrade information Tool ) :Prendre le fichier utlu101i.sql ( migration vers une 10gR1 ) présent 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 détecter/supprimer les sessions qui sont marqués Killed ?

Auteurs : Jaouad ,

Voici comment déterminer 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;

Page 74: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 74 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Pour les tuer :

c:>orakill sid thread

Comment modifier l'emplacement de la région de restauration flash (10g) ?

Auteurs : bouyao ,

Il suffit de modifier le parametre DB_RECOVERY_FILE_DEST.Avec ce paramètre, il faut toujours spécifier le paramètre 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 démarrage de la base• Il annule les transactions non validées quand c'est posté par PMON

Comment reveiller le SMON pour nettoyer les segements temporaires ?

Auteurs : LeoAnderson ,

En réalité, SMon (System MONitor) ne s'endort pas réellement, puisqu'il n'est sollicité que de temps à autres lorsquela base est en activité.La doc (cf lien au bas de la QR) précise 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. Exécutez d'abord la requête suivante :

SQL> SELECT pid FROM v$process 2 WHERE addr = 3 ( 4 SELECT paddr FROM v$bgprocess 5 WHERE name = 'SMON' 6 );

PID---------- 8

Page 75: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 75 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

2. Puis récupérez le PID pour exécuter la commande suivante (connecté en tant que SYSDBA) :En général : 6 => 8i, 7 => 9i et 8 => 10g

SQL> ORADEBUG WAKEUP 8Instruction traitée.

lien : System Monitor Process (SMON)

Comment trouver les sessions qui utilisent la tablespace temporaire ?

Auteurs : Aline ,

Grâce à la requête 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;

Page 76: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 76 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Objets

Comment lister les objets invalides ?

Auteurs : Laurent Schneider ,

La requête suivante nous permet de lister les objets invalides, avec les informations suivantes :• Schéma• Type d'objet• Date de création• Date de dernière 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-13PUBLIC SYNONYM DBA_HIST_SQLBIND 2006-04-18 2006-06-13PUBLIC SYNONYM DBA_HIST_SQLSTAT 2006-04-18 2006-06-13

Comment lister les objets supprimés (10g) ?

Auteurs : Laurent Schneider ,

À partir de la version 10g, la requête suivante permet de lister les objets dans la poubelle, avec les propriétés suivantes :• Nom du tablespace• Type d'objet• Propriétaire• Nom original• Nom BIN$• SCN• Date de création• 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------- ----- ----- ---- ------------------------------ ---------- ---------- ----------

Page 77: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 77 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 requête suivante nous permet de lister les jobs, avec les caractéristiques suivantes :• Schéma• Numéro 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 requête suivante permet de lister les sessions, avec les propriétés 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,

Page 78: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 78 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 S003DBSNMP oracle 122 6 2728088 NONE INACTIVE pclsc01 emagent 06:17 D000SYS oracle 113 2669 2920628 DEDICATED ACTIVE pclsc01 sqlplus 10:38

Concernant les "longues opérations", la requête suivante vous permettra d'obtenir :• Numéros de sessions• Opération• 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 gérés tous les 3 exactement de la même façon, parles même règles LRU (Last Recently Used).En général, on utilise le buffer KEEP pour y stocker les blocks des tables que l'on interroge souvent; et le bufferRECYCLE pour des données plus volatiles.Par exemple, si on a une table de REFERENCE, une table de COMMANDES et une table IMAGE_PRODUIT, on auraintérêt à répartir les tables de la façon 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 nécessiter de sortir du pool de nombreux blocs deREFERENCE qu'il faudra recharger ultérieurement alors que les blocs de l'image auront très peu de chance deresservir...Les noms des buffers pools ne sont qu'une astuce mnémotechnique, car ils pourraient très bien s'appeller A, B et C,cela ne changerait rien !Remarque : depuis la 9i, il est possible de définir des buffer pools de taille de block différente ( db_nk_cache_size) maisles buffer KEEP et RECYCLE auront forcément comme taille de bloc la taille DEFAULT.

Page 79: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 79 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Donc, on a 3 pools de taille par défault et jusqu'à 4 buffers de taille différente, ce qui fait 7 zones buffers indépendantesau maximum ! (mais je vous déconseille vivement d'implémenter un tel système, ça deviendra impossible à administrer/tuner !)La requête est la suivante :

col object_type format a10col 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 mémoire :

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 utilisée(v$SysStat) mais Oracle a implémenté 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 100DEFAULT 8192 89.57

Page 80: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 80 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > Archive Log

Comment savoir si une base est en mode archivelog ?

Auteurs : bouyao ,

Grâce à la commande suivante :

SQL> ARCHIVE LOG LISTmode Database log mode No ArchiveArchivage automatique DésactivéDestination de l'archive USE_DB_RECOVERY_FILE_DESTSéquence de journal en ligne la plus ancienne 82Séquence 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 généré par une instance ?

Auteurs : Jaouad ,

Il est important de monitorer le suivi des archiveLog, afin de détecter des archives trop importantes par rapport àl'activité.Cette requête fontionne sur toutes les versions :

SQL> SELECT TO_DATE(TO_CHAR(next_time, 'dd/mm/yyyy'), 'dd/mm/yyyy') Jour, ROUND(SUM(blocks*block_size/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 4822625-SEP-06 2525824-SEP-06 2043823-SEP-06 3126122-SEP-06 1745021-SEP-06 1881120-SEP-06 3077819-SEP-06 3610818-SEP-06 9050817-SEP-06 31568

Page 81: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 81 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

16-SEP-06 50283

Comment activer l'archivage dans Oracle ?

Auteurs : bouyao ,

1. Il faut tout d'abord arrêter 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 protéger pourdes raisons de sécurité.3. Editer le fichier d'initialisation pour ajouter les paramètres qui spécifient la destination des archives.4. Démarrer 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 contrôle et rendra les anciennes sauvegardesinutilisables.6. Arrêter la base :

sql> SHUTDOWN IMMEDIATE

7. Sauvegarde la base :En version 10g, il n'est pas nécessaire de renseigner le paramètre d'initialisation :

LOG_ARCHIVE_START = TRUE

Page 82: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 82 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Administration > ISqlPlus (10g)

Comment démarrer et arrêter Isqlplus ?

Auteurs : Jaouad ,

Isqlplus est installé automatiquement à partir de la version 10g. Pour le démarrer et l'arrêter, Oracle a prévu un binaireIsqlpluscl ( présent dans le répertoire $ORACLE_HOME/bin) :• démarrage :

sproerp17-oracle: /oracle/product/102>isqlplusctl startiSQL*Plus 10.2.0.1.0Copyright (c) 2003, 2005, Oracle. ALL rights reserved.Starting iSQL*Plus ...iSQL*Plus started.

• Arrêt :

sproerp17-oracle: /oracle/product/102>isqlplusctl stopiSQL*Plus 10.2.0.1.0Copyright (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 données à la fin de l'installation) peut êtreretrouvé à 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 :• arrêter Isqlplus avec la commande :

isqlplusctl stop

• Editer le script /$ORACLE_HOME/oc4j/j2ee/isqlplus/config/http-web-site.xml et remplacer 5560 par 80 :

Page 83: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 83 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

<web-site port="80" display-name="OC4J Java HTTP Web Site">

• Démarrer Isqlplus avec la commande :

isqlplusctl start

Page 84: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 84 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 OracleEn 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) sélectionnée(s).

Afficher la place occupée par toutes les tables d'un schéma 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 volumétrie de tous les objets d'un schéma particulier :

Page 85: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 85 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 schémas :

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 paramètres à la connection?

Auteurs : lalystar ,

Pour fixer la valeur de certains paramètres 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 privilège ADMINISTER DATABASETRIGGER.

create or replace trigger TG_DB_AFTER_LOGON after logon on databasebegin if user = 'SCOTT' then execute immediate 'alter session set sort_area_size=100000'; end if;end;

Exemple d'utilisation :

SQL> connect sys/... as sysdbaConnected.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 65536SQL> connect scott/...Connected.

Page 86: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 86 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 paramètres régionaux (séparateur décimal, séparateur demilliers...) indépendamment de la plateforme (Windows, Unix...) et de l'outil utilisé pour la connection (SQL*Plus,SQL*Loader, ...).

Comment créer un DBLink sans Tnsnames.ora ?

Auteurs : Jaouad ,

Create database link dblink_nameconnect to user identified by passwordusing '(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_loaderdefault directory BDUMPaccess parameters (records delimited by newline)location ('alert_SID.log'))reject limit 1000;

SQL> select * from alert_log ;

Comment lister les Directory ainsi que leurs caractéristiques principales ?

Auteurs : Laurent Schneider ,

La requête suivante permet d'afficher les directory, avec les propriétés suivantes :• Schéma• Nom• Chemin

Page 87: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 87 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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/workSYS TMP /tmpSYS 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 dépendances ?

Auteurs : Pierre Forstmann ,

Grâce au mécanisme de compilation automatique à l'exécution d'un objet invalide, Oracle va compiler toutes les vuesdépendantes pour les exécuter lors de l'exécution d'une vue.La procédure suivante qui exécute "à vide" toutes les vues du schéma courant qui ne sont pas référencées dans d'autresvues va donc compiler toutes les vues du schéma courant:

create or replace procedure eviscomm varchar2(100);res int;beginfor 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.

Page 88: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 88 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

SQL> SQL> --SQL> -- compiler toutes les vuesSQL> --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 errorsNo errors.SQL> SQL> --SQL> -- lister status des vuesSQL> --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 errorsNo errors.SQL> SQL> SQL> --SQL> -- executer les vues dont aucune autre vue ne dépendSQL> --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 errorsNo errors.SQL> SQL>

Page 89: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 89 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

SQL> var rc refcursor;SQL> column object_name format a15SQL> SQL> --SQL> -- execute v1, v4SQL> --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 ;

Système modifié.

Et celle pour vider le cache de données (10g) :

SQL> alter system flush buffer_cache ;

Page 90: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 90 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Système modifié.

elle peut également recevoir les paramétres 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 arrêter OMS :• sous Unix :

$ emctl stop oms

• sous Windows :

Arrêter le service windows Oracle{oracle_home_name}ProcessMangerou, sous la ligne de commande Dos :

C> emctl stop oms

2. Vérifier que OMS est arrêté :

• sous Unix :

$ emctl status oms

• sous Windows :

Vérifier la status du service Windows Oracle{oracle_home_name}ProcessManagerou, sous la ligne de commande Dos :

C> emctl status oms

3. Se connecter à la base avec un privilège DBA, puis tapez la commande suivante :

SQL> ALTER USER sysman IDENTIFIED BY 'new_password';

4. Vérifier le nouveau mot de passe :

SQL> CONNECT sysman/nouveau_passe[@database_alias]

5. Dans $ORACLE_HOME/sysman/config5.1. Sauvegarder le fichier emoms.properties dans emoms.properties.orig5.2. Editer le fichier emoms.propertiesa. Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd=Remplacer la valeur encrypté par le nouveau mot de passe

Page 91: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 91 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

b. Rechercher la ligne : oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUERemplacer TRUE par FALSE6. Redémarrer OMS• sous Unix :

$ emctl start oms

• sous Windows :

Démarrer le service Oracle{oracle_home_name}ProcessManagerou, sous la ligne de commande Dos :

C> emctl start oms

7. Vérifier que oracle.sysman.eml.mntr.emdRepPwd est encrypté.

Comment afficher les paramètres cachés d'Oracle ?

Auteurs : bouyao , Fred_D ,

Pour exécuter cette requête, il faut avoir le privilège 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 paramètres cachés commencent par un underscore ('_'), et dans la 10g, on a en plus les paramètrescachés qui commencent par deux underscore ('__').Attention :la modification de certains paramètres cachés peuvent corrompre votre base. Il faut les utiliser avec précautions !

Page 92: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 92 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils

Page 93: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 93 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils > Rman

Page 94: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 94 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils > Exp/Imp

Comment faire un import/export entre deux bases dans des versions différentes ?

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 lesversions adaptées des utilitaires import et export.La règle est d'utiliser l'utilitaire import dans la version de la base de destination et l'utilitaire export dans la versionde 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 avecl'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

Page 95: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 95 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils > Dba Studio & OEM

Page 96: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 96 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 résultat de la requête dans un fichier texte sur le disque dur. Pour celaSQL*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 premières et dernières lignes grâce aux commandes de formatages de SQL*Plus.On peut préciser que jusqu'à la version 9i incluse, le fichier est écrasé s'il existe déjà. En 10g, les options CREATE/REPLACE/APPEND apportent un choix en la matière.

Comment insérer du texte contenant '&' ?

Auteurs : Fred_D ,

& est un caractère spécial qui permet de préfixer un nom de variable. Or, lorsque l'on veut insérer du texte contenantce caractère, SQL*Plus demande une valeur à insérer.Par exemple :

SQL> select 'toi & moi' from dual;Entrez une valeur pour moi : ancien 1 : select 'toi & moi' from dualnouveau 1 : select 'toi ' from dual

'TOI----toi

Pour éviter ce désagrément il suffit de taper :

SET DEFINE OFF

Ainsi on obtient :

Page 97: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 97 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

SQL > set define offSQL > 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 exécute la requête, Oracle rappellequelle valeur est remplacée de la manière suivante :

SQL > select '&texte_a_afficher' from dual;Entrez une valeur pour texte_a_afficher : Bonjour Developpez.comancien 1 : select '&texte_a_afficher' from dualnouveau 1 : select 'Bonjour Developpez.com' from dual

'BONJOURDEVELOPPEZ.COM----------------------Bonjour Developpez.com

Pour éviter ces lignes disgracieuses dans un log, il faut désactiver la vérification avec la commande suivante :

SET VERIFY OFF

Ainsi on obtient le résultat suivant :

SQL > set verify offSQL > select '&texte_a_afficher' from dual;Entrez une valeur pour texte_a_afficher : Bonjour Developpez.com

'BONJOURDEVELOPPEZ.COM----------------------Bonjour Developpez.com

Page 98: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 98 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils > Network Manager

Comment diagnostiquer les problèmes 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 généré :

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 placées sur un lecteur réseaux, voici comment faire pour lamodifier provisoirement sous réserve de disposer des droits nécessaires.Ouvrez la base de registre puis sélectionnez la clé :HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ALL_HOMESLa valeur de la sous-clé LASTHOME référence la clé HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEnuméroPar exemple si la sous-clé LASTHOME vaut 1 alors on utilisera la sous-clé HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1Sélectionnez la clé HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1, la sous-clé TNS_ADMIN contient lenom du répertoire hébergeant les fichiers sqlnet.ora et tnsnames.ora.Mémorisez ce nom de répertoire.Créez un répertoire (par exemple C:\config-oracle) et recopiez-y les 2 fichiers sqlnet.ora et tnsnames.ora hébergés dansle répertoire pointé par la sous-clé TNS_ADMIN.Placez-vous dans le répertoire 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 = OFFAjoutez ces 2 lignes :TRACE_LEVEL_CLIENT=SUPPORTTRACE_DIRECTORY_CLIENT=C:\config-oracleLa valeur de l'entrée TRACE_DIRECTORY_CLIENT contient le répertoire précédemment créé et indique où placerles fichiers trace.La valeur de l'entrée TRACE_LEVEL_CLIENT indique le niveau de trace souhaité, seul SUPPORT permet d'avoirun compte rendu détaillé sur les requêtes SQL (en émission et en réception).Enfin sélectionnez la clé HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1 et modifiez le contenu de lasous-clé TNS_ADMIN avec le nom du répertoire précédemment 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 réserve que le fichier sqlnet.ora d'origine contenaitTRACE_LEVEL_CLIENT=OFF

Page 99: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 99 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Attention le fichier trace crée est très verbeux et impacte les performances, veillez donc à ne pas le laisser actif sur lespostes en production !

Comment paramétrer 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 chaîne de connexion, nous souhaitons nous connecter à la base nommée DVP, Oracle va tout d'abordessayer de se connecter au SID1 sur le HOST1. Si celui ci ne répond pas, avant de provoquer l'erreur, Oracle va essayerde se connecter sur le SID2 du Host2.

Page 100: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 100 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > Outils > Portal

Comment trouver des informations sur l'utilisateur courant ?

Auteurs : Helyos ,

Vous allez être sûrement amené, dans le cours de votre développement sur Portal, à trouver des informations surl'utilisateur couramment connecté. Les informations les plus utilisées sont surtout l'id de l'utilisateur connecté, ainsique 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 très facilement :PORTAL.WWCTX_APICe package dispose d'un grand nombre de fonctions et procédures qui vous permettront de trouver des informationssur l'utilisateur connecté.Par exemple vous utiliserez :

-- Pour trouver l'id de l'utilisateurdeclarep_user_id number:=portal.wwctx_api.get_user_id;beginhtp.prn('Votre id est '||p_user_id);end;/

-- Pour trouver le login de l'utilisateurdeclarep_user_name varchar2(30):=portal.wwctx_api.get_user;beginhtp.prn('Votre login est '||p_user_name);end;/

-- Pour trouver la langue utilisée par le browser de l'utilisateurdeclarep_lang varchar2(10):=portal.wwctx_api.get_nls_language;beginhtp.prn('La langue actuellement utilisée est '||p_user_id);end;/

Comment trouver des informations sur un utilisateur précis ?

Auteurs : Helyos ,

Vous allez être sûrement amené, dans le cours de votre développement sur Portal, à trouver des informations sur unutilisateur lambda. En règle générale vous allez surtout chercher à connaître son id à partir de son login ou inversement.Pour cela vous disposez d'un package Portal qui vous permet d'obtenir ces informations très facilement :PORTAL.WWSEC_APICe package dispose d'un grand nombre de fonctions et procédures qui vous permettront de trouver des informationssur les utilisateurs.Par exemple vous utiliserez :

-- Pour trouver l'id de l'utilisateurdeclarep_user_name varchar2(30):='HELYOS';p_user_id number:=portal.wwsec_api.id(upper(p_user_name));beginhtp.prn('L''id de l''utilisateur '||p_user_name||' est '||p_user_id);end;/

Page 101: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 101 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

-- Pour trouver le login de l'utilisateurdeclarep_user_id number:='2003';p_user_name varchar2(30):=portal.wwsec_api.user_name(p_user_id);beginhtp.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 procédures d'affichage (htp.p,htp.prn, htp.pint) ne supportent pas le fait d'afficher des chaines de caractères de taille supérieure à 32767 caractères).Le résultat de cette limitation est l'affichage du CLOB en question sous forme de caractères incompréhensibles.Voici une procédure 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;

Page 102: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 102 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > ERP

Page 103: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 103 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 "prêtes à l'emploi" pour divers domaines : Ressources Humaines,Finance, CRM , Paye ...

Découvrez PeopleSoft : PeopleSoft Overview

Découvrez les ERP : Administration des ERP

Page 104: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 104 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > ERP > Peoplesoft > Administration

Comment déterminer les traitements, la description et leur statuts sous la console de traitement ?

Auteurs : Jaouad ,

Grâce à la requête 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 inférieur (8.43) , il faut remplacer PS_XLATITEM par PS_XLATTABLEIl est également impératif de tenir compte de la langue si il y a plusieurs langues d'installées

Comment voir les différents projets qui ont été installés et migrés sur une base ?

Auteurs : Jaouad ,

Grâce à la requête 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 installés ?

Auteurs : Jaouad ,

Grâce à la requête suivante :

SQL> select * from psrelease ;

RELEASEDT RELEASELABEL--------- --------------------------------------------------01-JAN-00 Core 6.00.00.00009-SEP-97 Core 7.00.00.00010-SEP-97 Core 7.01.00.00011-SEP-97 Core 7.02.00.00009-MAY-98 Core 7.50.00.00010-MAY-98 Core 7.51.00.00011-MAY-98 Core 7.52.00.00012-MAY-98 Core 7.53.00.00017-AUG-00 Financials/SCM 8.00.00.00030-NOV-00 Financials/SCM 8.00.01.000

Page 105: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 105 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

07-JUN-01 Financials/SCM 8.00.02.00007-MAR-02 Financials/SCM 8.40.00.00015-FEB-04 Financials/SCM 8.40.00.00015-FEB-04 Financials/SCM 8.40.01.000

14 ligne(s) sélectionnée(s).

Comment connaître les définitions des process Scheduler ?

Auteurs : Jaouad ,

Grâce à la requête 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 60PSNT SPROERP16 Running 3561 15 60

Comment voir la définition des traitements ?

Auteurs : Jaouad ,

Grâce à la requête suivante :

SQL> col descrlong format a50SQL> set linesize 250SQL> SELECT * FROM PS_PRCSDEFNLANG 2 WHERE language_cd ='FRA' ;

PRCSTYPE PRCSNAME LAN DESCR DESCRLONG------------------------------ ------------ --- -------------------- ---------------------Application Engine 1099_RPT_PST FRA 1099_RPT_PST Prépare les données 1099 Application Engine AEBDASSTITEM FRA AEBDASSTITEM Alimente le Catalogue Immos

Ici, on suppose que la langue installée est le francais.

Comment lister les run control des différents AE ?

Auteurs : Jaouad ,

La requête suivante permet de voir les contrôle 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---------------- ------------------------------ ------------------------------ ------------

Page 106: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 106 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

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 déterminer pour tout utilisateur ( Oprid ) les contrôle d'exécution (Run contrôle ). Les contrôled'exécution permettre de stocker les différents paramètres d'un traitement et de ne pas avoir à les re saisir si on relancele traitement.

SQL> SELECT * 2 FROM PS_PRCSRUNCNTL 3 WHERE oprid = 'KBN' ;

OPRID RUN_CNTL_ID LAN L------------------------------ ------------------------------ --- -KBN KBN FRA OKBN KBN_AM FRA OKBN KBN_AP FRA O

Comment connaître le déroulement d'un traitement ?

Auteurs : Jaouad ,

La requête suivante permet de savoir à quelle étape se trouve le traitement, et si celui-ci est en echec ou en succès :

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 connaître la fréquence d'un traitement ?

Auteurs : Jaouad ,

Voici comment voir la fréquence des traitements qui sont schedulés, notamment pour la maintenance oul'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---------- ---------- -------- ---------- ---------- ---------- ---------- ---------- ----------

Page 107: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 107 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

2 Daily 1 0 1 2 3 4 5

Comment lister les séquence système PS ?

Auteurs : Jaouad ,

Utile notamment pour la séquence 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 99999991 121544 1 99999992 122265 1 99999993 43007 1 99999994 7 1 9999999

Comment lister les rapports générés ainsi que leurs types et leurs emplacements ?

Auteurs : Jaouad ,

Grâce à cette requête, nous allons pouvoir allez chercher directement les rapports lorsqu'il ne sont pas disponibles viala consôle 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 démarrer 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 généré dans :

$PS_HOME/appserv/DOMAINE/LOGS/

Page 108: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 108 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

et se décompose ainsi :

OPRID_NomPoste.tracesql

Comment déterminer la version des Tools ?

Auteurs : Jaouad ,

La version des tools peut être déterminée précisément grâce à la commande suivante :

sproerp17-psoft84: /psoftsp1/appserv>psadmin -vVersion 8.46.06

Cette commande doit être lancé avec l'utilisateur système PSOFT et dans le répertoire suivant :$PS_HOME/appserv

Comment connaître toutes les installations sur PeopleSoft ?

Auteurs : Jaouad ,

La requête 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

Page 109: FAQ Oracle Last-MaJ 04-01-2010

FAQ Oracle

- 109 -Les sources présentées sur cette pages sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre la page de présentation de ces sourcesconstitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2007 Developpez LLC. Tout droits réservés Developpez LLC. Aucunereproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de DeveloppezLLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

http://oracle.developpez.com/faq/

Sommaire > ERP > Peoplesoft > Sécurité

Quels sont les différents utilisateurs ainsi que les rôles qui leur sont affectés ?

Auteurs : Jaouad ,

La requête suivante nous donne les rôles affectés à 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 différents User ou OPRID :

SQL> SELECT * FROM PSOPRDEFN

OPRID VERSION OPRDEFNDESC EMPLID EMAILID ------------- ---------- --------------- ----------- ---------------AMA1 2009 Toto,tata IXHEEE120 [email protected]