Dernire mise jour : 04/01/2009 Cette F.A.Q. a t ralise partir des questions frquemment poses sur le forum Oracle de www.developpez.com et de l'exprience personnelle des auteurs. Elle pourra traiter de tout type de questions portant sur les technologies Oracle. Nous esprons que cette F.A.Q. saura rpondre un maximum de vos questions. Nous vous souhaitons une bonne lecture. L'quipe Oracle de Developpez. Ont contribu cette FAQ : Aline - rouardg - PlaineR - Pierre Forstmann - bouyao (http://mbouayoun.developpez.com/) - LeoAnderson (http://leoanderson.developpez.com/) - Laurent Dardenne (http://laurent-dardenne.developpez.com/) - Xavier Vlieghe (http://xo.developpez.com) - Laurent Schneider (http://360.yahoo.com/laurentschneider) - Lafouine - Jaouad (http://jaouad.developpez.com/) - lalystar (http://lalystar.developpez.com/) - Pomalaix - Fred_D (http://orafrance.developpez.com/) - SheikYerbouti (http://sheikyerbouti.developpez.com/) - Helyos (http://helyos.developpez.com/) - FAQ Oracle - 3 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 1. Forum Oracle (5) ....................................................................................................................................................................... 4 2. Gnral (4) ................................................................................................................................................................................. 6 3. Dveloppement (36) .................................................................................................................................................................. 8 3.1. SQL (18) ........................................................................................................................................................................... 9 3.2. PL/SQL (18) ................................................................................................................................................................... 30 4. Administration (67) ..................................................................................................................................................................46 4.1. Les Tables (6) ................................................................................................................................................................. 47 4.2. Les Utilisateurs (4) ......................................................................................................................................................... 52 4.3. Scurit (7) ......................................................................................................................................................................57 4.4. Les Tablespaces et autres fichiers (16) .......................................................................................................................... 62 4.5. Systme (14) ................................................................................................................................................................... 70 4.6. Objets (5) ........................................................................................................................................................................ 76 4.7. Archive Log (3) .............................................................................................................................................................. 80 4.8. ISqlPlus (10g) (3) ........................................................................................................................................................... 82 4.9. Autres (9) ........................................................................................................................................................................ 84 5. Outils (10) ................................................................................................................................................................................ 92 5.1. Rman (0) ......................................................................................................................................................................... 93 5.2. Exp/Imp (1) .....................................................................................................................................................................94 5.3. Dba Studio & OEM (0) ..................................................................................................................................................95 5.4. SQL*Plus (3) .................................................................................................................................................................. 96 5.5. Network Manager (3) ..................................................................................................................................................... 98 5.6. Portal (3) ....................................................................................................................................................................... 100 6. ERP (16) ................................................................................................................................................................................ 102 6.1. Peoplesoft (16) .............................................................................................................................................................. 103 6.1.1. Administration (14) ..............................................................................................................................................104 6.1.2. Scurit (1) ...........................................................................................................................................................109 FAQ Oracle - 4 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Forum Oracle Guide de bon usage de la FAQ et du Forum Auteurs : Helyos , Lorsque vous vous trouvez devant un problme, voil la marche suivre : Chercher dans la FAQ Chercher sur Google Faire une recherche sur le forum concern. Si vous n'avez toujours pas trouv de rponse votre question : vous pouvez, aprs avoir lu les Rgles du forum poster une question prcise avec un titre clair et vous enrichirez ainsi le forum Oracle. Comment mettre le tag [Rsolu] ? Auteurs : Helyos , Il n'est plus ncessaire et mme deconseill d'diter son premier post pour mettre le tag [Rsolu]. En bas gauche vous avez un bouton qui se charge de mettre le tag. Par contre il est conseill d'diter et de mettre un titre clair quand ce n'est pas le cas. Que signifie le tag [Dlestage] ? Auteurs : Helyos , La base de donnes du forum n'est pas extensible indfiniment. Nous devons "nettoyer les forums" pour que la base ne devienne pas trop grosse, ceci entrainerait une chute des performances pour tous les utilisateurs. Pour faciliter ce travail un Tag [Dlestage] est mis sur les threads supprimer. Pour quelles raisons les messages sont marqus [Dlestage] : La rponse la question se trouve dans un tutoriel, dans la FAQ ou dans l'aide. La rponse a dj t donne sur le forum. Le titre n'est pas assez prcis. La question est mal pose. D'ailleurs vous pouvez, si vous tes l'auteur du message initial, marquer le fil de discussion pour [Dlestage]. Ce faisant, vous amliorerez la lisibilit du forum, vous faciliterez le travail des modrateurs (ils sont bnvoles et ils ont plein de choses plus passionnantes faire, comme rpondre une question qui n'a pas dj t pose). Comment obtenir une bonne rponse ? Auteurs : Helyos , En posant de meilleures questions ! Votre question sera lue par un grand nombre de personnes, faites l'effort de rdiger une question claire et prcise, donnez les informations indispensables. Montrez que vous avez fait des recherches en expliquant votre raisonnement, et le but atteindre. Par contre, il est inutile de dire "J'ai cherch et je n'ai pas trouv". Les habitus du forum sauront vite si vous avez bien cherch ou pas. Ne soyez pas press, les personnes qui vous rpondent sont des bnvoles qui vous consacrent du temps, soyez-en reconnaissant. Rappelez-vous toujours qu'elles ne vous doivent rien. FAQ Oracle - 5 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Afin de les aider trouver une solution plus rapidement, pensez prciser la version de votre base de donnes, l'utilitaire utilis, le code utilis et les erreurs que vous avez obtenues. Que signifie le tag [FAQ] ? Auteurs : Helyos , Afin de faciliter les recherches sur des thmes rcurrents, l'quipe Oracle mis en place cette FAQ. Les membres de l'quipe passent donc rgulirement sur le forum afin d'identifier les questions qui reviennent de manire rpte sur le forum. Une fois la question identifie, on lui assigne le tag [FAQ] afin de l'ajouter le plus rapidement possible la FAQ. FAQ Oracle - 6 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Gnral O se trouve le fichier INIT.ora de ma base? Auteurs : Helyos , Si votre installation est une installation standard, ce fichier se trouve dans le rpertoire : %ORACLE_HOME\admin\%ORACLE_SID%\pfile Il existe aussi un fichier init{SID}.ora dans le repertoire %ORACLE_HOME%\dbs mais en rgle gnrale ce fichier contient juste un paramtre IFILE qui redirige vers le fichier donn au dbut. lien : Que signifie %ORACLE_HOME% ? lien : Que signifie %ORACLE_SID% ? Que signifie %ORACLE_HOME% ? Auteurs : Helyos , %ORACLE_HOME% est une variable d'environnement qui correspond en fait au rpertoire d'installation de votre Oracle. Par exemple si vous avez install par dfaut une Oracle 9i votre %ORACLE_HOME% correspondra c:\oracle \ora92. -- Sous Windows SET ORACLE_HOME=c:\oracle\ora92 --Sous Linux en BASH export ORACLE_HOME=/home/oracle/OraHome1 --Sous Linux en C Shell setenv ORACLE_SID /home/oracle/OraHome1 Que signifie %ORACLE_SID% ? Auteurs : Helyos , %ORACLE_SID% est une variable d'environnement qui correspond en fait au nom de l'instance sur laquelle vous souhaitez vous connecter. Par exemple si vous avez 2 instances actuellement en cours d'utilisation sur votre serveur TOTO et TATA, et que vous souhaitez vous connecter TATA, il vous faudra alors positionner cette variable d'environnement TATA. -- Sous Windows SET ORACLE_SID=TATA --Sous Linux en BASH export ORACLE_SID=TATA --Sous Linux en C Shell setenv ORACLE_SID FAQ Oracle - 7 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ TATA Combien cote la license Oracle ? Est-ce gratuit ? Auteurs : Fred_D , Tous les produits dits par Oracle sont disponibles en version complte et gratuitement sur leur site de tlchargement. Nanmoins, seul SQL Developper est gratuit quelles que soient les circonstances. En effet, les autres produits ne sont disponibles gratuitement qu' des fins de tests du produit (hors de question de l'utiliser pour tester des dveloppements, seul le prototypage est autoris) et d'auto-formation seulement ! Vous pouvez lire la license sur cette page : http:// www.oracle.com/technology/software/htdocs/devlic.html . Pour tout autre usage professionnel, il faudra vous acquitter d'une license qui dpend de trop nombreux paramtres pour pouvoir tre dtaille ici . Je vous invite donc aller directement sur le site de vente en ligne Oracle Store pour vous faire une ide. videmment, il est important de vrifier et/ou discuter des conditions tarifaires avec un commercial Oracle. A noter galement qu'Oracle propose une distribution entirement gratuite et professionnelle sous l'appellation d'Oracle Database 10g Express Edition. Cette version limite intgre la base de donnes en version 10g, le dveloppement d'une application ainsi que du reporting. FAQ Oracle - 8 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Dveloppement FAQ Oracle - 9 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Dveloppement > SQL Comment filtrer les n premires lignes d'une requte avec ROWNUM ? Auteurs : SheikYerbouti , Obtenir les 10 premires lignes d'une requte non trie : SELECT * FROM EMP WHERE ROWNUM <= 10 ; Obtenir les 10 premires lignes d'une requte trie : SELECT * FROM (SELECT * FROM EMP ORDER BY ename) WHERE ROWNUM <= 10 ; Explication de la seconde requte : Chaque ligne retourne par une requte se voit attribuer un numro, commenant par 1. Cela est parfait tant que les donnes ne sont pas tries avec le mot-cl ORDER BY ! Par contre, si vous souhaitez trier les donnes, le numro (ROWNUM) est attribu pour chaque ligne AVANT le tri final ! Prenons un exemple en affichant le contenu de la table EMP tri par salaires : 1 SELECT ROWNUM, a.* 2 FROM emp a 3 WHERE sal > 1000 4* ORDER BY sal SQL> SQL> / ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ---------- 11 7900 JAMES CLERK 7698 04/12/81 1045 30 10 7876 ADAMS CLERK 7788 24/05/87 1210 20 14 9991 Dupontont CLERK 7698 24/01/82 1210 10 15 9992 Duboudin CLERK 7698 24/01/82 1215 1250 10 2 7521 WARD SALESMAN 7698 23/02/81 1375 500 30 4 7654 MARTIN SALESMAN 7698 29/09/81 1375 1400 30 13 7934 MILLER CLERK 7782 24/01/82 1430 10 9 7844 TURNER SALESMAN 7698 09/09/81 1650 0 30 1 7499 ALLEN SALESMAN 7698 21/02/81 1936 300 30 16 9994 Schmoll CLERK 7698 24/05/87 2500 20 6 7782 CLARK MANAGER 7839 10/06/81 2695 2000 10 ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ---------- 5 7698 BLAKE MANAGER 7839 02/05/81 3135 30 3 7566 JONES MANAGER 7839 03/04/81 3273 20 7 7788 SCOTT ANALYST 7566 20/04/87 3300 20 12 7902 FORD ANALYST 7566 04/12/81 3300 20 8 7839 KING PRESIDENT 18/11/81 5500 10 16 ligne(s) slectionne(s). Nous ne voulons maintenant afficher que les 4 premires lignes : FAQ Oracle - 10 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> SELECT ROWNUM, a.* 2 FROM emp a 3 WHERE sal > 1000 4 AND ROWNUM < 5 5 ORDER BY sal ; ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ---------- 2 7521 WARD SALESMAN 7698 23/02/81 1375 500 30 4 7654 MARTIN SALESMAN 7698 29/09/81 1375 1400 30 1 7499 ALLEN SALESMAN 7698 21/02/81 1936 300 30 3 7566 JONES MANAGER 7839 03/04/81 3273 20 les CLERK ont disparu ! Simplement parce que le tri a t effectu aprs que le ROWNUM ait t affect aux lignes retournes par la requte. Il faut donc trier les donnes avant qu'Oracle ne leur affecte un numro ! Ceci est ralis par un tri inclus dans une sous-requte : SQL> SELECT ROWNUM, a.* 2 FROM ( 3 SELECT * 4 FROM emp 5 ORDER BY sal 6 ) a 7 WHERE ROWNUM < 5 ; ROWNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ---------- 1 7369 SMITH CLERK 7902 18/12/80 880 20 2 7900 JAMES CLERK 7698 04/12/81 1045 30 3 7876 ADAMS CLERK 7788 24/05/87 1210 20 4 9991 Dupontont CLERK 7698 24/01/82 1210 10 Voici enfin le rsultat attendu. Comment slectionner du m-ime au n-ime enregistrements ? Auteurs : Fred_D , Voici une mthode pour filtrer la liste des enregistrements sur des intervalles conscutifs depuis la version 8i : les 5 premiers : SELECT ename, job FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num FROM emp ) WHERE num BETWEEN 1 AND 5; les 5 suivants : SELECT ename, job FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num FROM emp ) WHERE num BETWEEN 6 AND 10; FAQ Oracle - 11 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ de la m-ime la n-ime ligne : SELECT ename, job FROM (SELECT ename, job, ROW_NUMBER() OVER (ORDER BY sal) num FROM emp ) WHERE num BETWEEN &m AND &n; Ces exemples utilisent la fonction analytique ROW_NUMBER. Cette fonction est trs similaire au ROWNUM utilis dans le paragraphe prcdent mais est appliqu sur le rsultat de la requte et pas pendant l'excution de la requte elle-mme. Avec ROWNUM, la requte prcdente aurait pu s'crire : SELECT ename, job FROM ( SELECT ename, job, ROWNUM num FROM ( SELECT ename, job FROM emp ORDER BY sal ) ) WHERE num BETWEEN &m AND &n; Les fonctions analytiques peuvent sensiblement simplifier les requtes et ventuellement amliorer leurs performances. Comment dtecter et supprimer les doublons ? Auteurs : lalystar , Supposons qu'on ait une table PERSONNE (nom, prenom, telephone) et qu'on souhaite avoir la liste des personnes ayant le mme nom et le mme prnom. On peut l'obtenir avec la requte suivante : select nom, prenom from PERSONNE group by nom, prenom having count(*) > 1; Si on ne veut garder qu'une seule ligne pour chaque ensemble de personnes ayant le mme nom et le mme prnom, le choix se faisant de manire arbitraire, on peut utiliser la requte suivante : delete PERSONNE a where rowid > ( select min(rowid) from PERSONNE b where b.nom = a.nom and b.prenom = a.prenom ); Remarque : - cette requte doit tre adapte si l'une des colonnes nom ou prnom peut tre nulle. - cette requte garde la ligne de rowid minimum parmi l'ensemble des lignes ayant mme nom et mme prnom. FAQ Oracle - 12 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ lien : Comment slectionner du m-ime au n-ime enregistrements ? Comment dtecter les enregistrements empchant la validation d'une contrainte ? Auteurs : Jaouad , l'aide de la table des exceptions : elle peut se crer via ce script : create table exceptions( row_id rowid, owner varchar2(30), table_name varchar2(30), constraint varchar2(30)); Ou en utilisant le script fournit dans $ORACLE_HOME/RDBMS/admin/UTLEXCPT.SQL. Voyons son utilisation au travers de ce jeu d'essais : create table test ( a varchar2(10), b number ); -- Insertion des valeures insert into test values ('a',1); insert into test values ('b',2); insert into test values ('c',3); insert into test values ('d',4); insert into test values ('a',5); insert into test values ('e',6); insert into test values ('f',7); insert into test values ('b',8); insert into test values ('a',9); insert into test values ('z',10); commit; Essayons maintenant de crer une contrainte d'unicit : nous allons obtenir une erreur : SQL> alter table test add constraint TEST_PK unique (a) 2 exceptions into exceptions ; alter table test add constraint TEST_PK unique (a) * ERREUR la ligne 1 : ORA-02299: impossible de valider (SCOTT.TEST_PK) - cls en double trouves La requte suivante nous permet d'identifier les lignes posant problme : Retrouver toutes les valeurs en doubles SQL> select * from test where rowid in ( select row_id from exceptions where table_name='TEST' and o wner ='SCOTT' ) ; A B ---------- ---------- a 1 b 2 a 5 b 8 FAQ Oracle - 13 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Retrouver toutes les valeurs en doubles a 9 Comment supprimer/remplacer des caractres avec la fonction TRANSLATE ? Auteurs : SheikYerbouti , Cette fonction permet d'effectuer plusieurs remplacements d'un coup ( l'inverse de REPLACE() qui ne permet le remplacement que d'un caractre ou une chane la fois) : TRANSLATE( chane en entre, chane de recherche, chane de substitution ) ; Exemple de suppression de caractres indsirables pour la constitution d'un nom de fichier : SQL> SELECT TRANSLATE ( 'Nom/de~fichier;non.conforme', '1/\^~.,;', '1' ) "Fichier" 2 FROM DUAL ; Fichier ----------------------- Nomdefichiernonconforme Le premier argument de la fonction est la chane en entre, Le deuxime indique la chane de recherche, Le troisime indique la substitution caractre par caractre, En clair, le premier caractre de la chane de recherche trouv dans la chane en entre sera remplac par le premier caractre de la chane de substitution et ainsi de suite pour les autres caractres. La ruse dans l'exemple est le premier caractre '1' dans les deux derniers arguments. On dit qu'il s'agit d'un caractre leurre, pusiqu'il sert ignorer tous les caractres de la chane en entre qui ne sont pas dans la chane de recherche. La fonction remplace tous les '1' par '1' et tous les autres caractres de la chane de recherche trouvs dans la chane en entre par rien ! Exemple de remplacement de caractres indsirables pour la constitution d'un nom de fichier : SQL> SELECT TRANSLATE ( 'Nom/de~fichier;non.conforme', '1/\^~.,;', '1_______' ) "Fichier" 2 FROM DUAL ; Fichier --------------------------- Nom_de_fichier_non_conforme La fonction remplace tous les '1' par '1' et tous les autres caractres de la chane de recherche par le caractre '_'. Autre exemple de remplacement de caractres indsirables : SQL> SELECT TRANSLATE ( '', '', 'aaaeeeeuuuo' ) "Chaine" 2 FROM DUAL ; Chaine ----------- aaaeeeeuuuo SQL> La fonction remplace toutes les minuscules accentues par leurs quivalents non accentus. Bien videment, les arguments de la fonction peuvent tre des variables : FAQ Oracle - 14 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ FUNCTION Remplace ( PC$Chaine IN VARCHAR2, PC$Rech IN VARCHAR2 , PC$Subst IN VARCHAR2 ) RETURN VARCHAR2 IS BEGIN RETURN TRANSLATE( PC$Chaine, PC$Rech, PC$Subst ) ; END ; Comment manipuler la partie entire et dcimale d'un numrique avec la fonction TRUNC ? Auteurs : SheikYerbouti , TRUNC( valeur, prcision ) ; Cette fonction permet d'effectuer deux types d'action (sur un numrique) : Conserver le nombre de dcimales souhaites (prcision >= 0) Cadrer la partie entire d'un nombre dans une tranche (prcision < 0) Exemple de conservation des dcimales voulues : SQL> select 2 trunc(12.98764, 5) "+5 dec." 3 ,trunc(12.98764, 4) "+4 dec." 4 ,trunc(12.98764, 3) "+3 dec." 5 ,trunc(12.98764, 2) "+2 dec." 6 ,trunc(12.98764, 1) "+1 dec." 7 ,trunc(12.98764, 0) "+0 dec." 8 from dual ; +5 dec. +4 dec. +3 dec. +2 dec. +1 dec. +0 dec. ---------- ---------- ---------- ---------- ---------- ---------- 12,98764 12,9876 12,987 12,98 12,9 12 Exemple de cadrage par tranches : SQL> select 2 trunc(1234567,-6) "million" 3 ,trunc(1234567,-5) "cent-mille" 4 ,trunc(1234567,-4) "dix-mille" 5 ,trunc(1234567,-3) "mille" 6 ,trunc(1234567,-2) "cent" 7 ,trunc(1234567,-1) "dix" 8 from dual ; million cent-mille dix-mille mille cent dix ---------- ---------- ---------- ---------- ---------- ---------- 1000000 1200000 1230000 1234000 1234500 1234560 Extraction des parties entire et dcimale d'un nombre : SQL> DECLARE 2 LN$Num number := 100.95 ; 3 BEGIN 4 DBMS_OUTPUT.PUT_LINE( 'Partie entire : ' || To_char( TRUNC ( LN$Num ) )) ; 5 DBMS_OUTPUT.PUT_LINE( 'Partie dcimale : ' || To_char( LN$Num - TRUNC (LN$Num ) ) ) ; 6 END ; 7 / Partie entire : 100 Partie dcimale : ,95 FAQ Oracle - 15 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Procdure PL/SQL termine avec succs. Comment tronquer une date avec la fonction TRUNC ? Auteurs : SheikYerbouti , La fonction TRUNC() applique une date ne permet pas seulement l'ablation de la partie horaire. Nous connaissons tous cette fonction qui, sans spcification de son deuxime argument, retire la partie horaire. Mais nous connaissons souvent moins l'autre particularit de cette fonction applique aux dates, par l'intermdiaire du second argument (format). TRUNC( date [,'format'] ) SQL> -- Format tendu d'affichage des dates -- SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS' ; Session modifie. SQL> SQL> -- Affichage de la date du jour -- SQL> SELECT SYSDATE "Date du jour" FROM DUAL ; Date du jour ------------------- 08/10/2004 14:08:48 SQL> SQL> -- date tronque au 1er jour de l'anne -- SQL> SELECT TRUNC(SYSDATE, 'YEAR') "'YEAR'" FROM DUAL; 'YEAR' ------------------- 01/01/2004 00:00:00 SQL> SQL> -- date tronque au 1er jour de l'anne ISO-- SQL> SELECT TRUNC(SYSDATE, 'IYYY') "'IYYY'" FROM DUAL; 'IYYY' ------------------- 29/12/2003 00:00:00 SQL> SQL> -- date tronque au 1er jour du trimestre -- SQL> SELECT TRUNC(SYSDATE, 'Q') "'Q'" FROM DUAL; 'Q' ------------------- 01/10/2004 00:00:00 SQL> SQL> -- date tronque au 1er jour du mois -- SQL> SELECT TRUNC(SYSDATE, 'MONTH') "'MONTH'" FROM DUAL; 'MONTH' ------------------- 01/10/2004 00:00:00 SQL> SQL> -- date tronque au 1er jour de la semaine -- SQL> SELECT TRUNC(SYSDATE, 'DAY') "'DAY'" FROM DUAL; 'DAY' ------------------- FAQ Oracle - 16 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 04/10/2004 00:00:00 SQL> SQL> -- jour de la semaine correspondant au jour du 1er jour du mois -- SQL> SELECT TRUNC(SYSDATE, 'W') "'W'" FROM DUAL; 'W' ------------------- 08/10/2004 00:00:00 SQL> SQL> -- jour de la semaine correspondant au jour du 1er jour de l'anne -- SQL> SELECT TRUNC(SYSDATE, 'WW') "'WW'" FROM DUAL; 'WW' ------------------- 07/10/2004 00:00:00 SQL> SQL> -- jour de la semaine correspondant au jour du 1er jour de l'anne ISO -- SQL> SELECT TRUNC(SYSDATE, 'IW') "'IW'" FROM DUAL; 'IW' ------------------- 04/10/2004 00:00:00 SQL> SQL> -- date tronque au jour (retire les heures) -- SQL> SELECT TRUNC(SYSDATE, 'DD') "'DD'" FROM DUAL; 'DD' ------------------- 08/10/2004 00:00:00 SQL> SQL> -- date tronque l'heure (retire les minutes) -- SQL> SELECT TRUNC(SYSDATE, 'HH') "'HH'" FROM DUAL; 'HH' ------------------- 08/10/2004 14:00:00 SQL> SQL> -- date tronque la minute (retire les secondes) -- SQL> SELECT TRUNC(SYSDATE, 'MI') "'MI'" FROM DUAL; 'MI' ------------------- 08/10/2004 14:08:00 Comment formater les dates ? Auteurs : Helyos , Il existe beaucoup de formats de date disponibles avec Oracle. Voici une liste non exhaustive des diffrents formats de date disponible. - / , . ; : "text" : Ponctuation ou texte insrer dans la chane finale. AD A.D. : Pour ajouter les sigles aprs Jsus Christ AM A.M. : Symbole Am BC B.C. : Pour ajouter les sigles avant Jsus Christ CC SCC : Pour obtenir le n du sicle en cours D : N du jour dans la semaine (par exemple Lundi =1, Mardi =2, etc...) Attention la notation peut changer en fonction de vos paramtres NLS. FAQ Oracle - 17 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ DAY : Nom du jour (compens avec des espaces jusqu' 9 caractres) DD : Le numro du jour dans le mois (de 1 31) DDD : Le numro du jour dans l'anne (de 1 366) DY: Abrviation du nom du jour E : Abrviation du nom de l're en cours (pour les calendriers Japonais, ROC et Thai). EE : Nom complet de l're en cours FM : Permet de supprimer les espaces inutiles HH: Heure (de 1 12) HH12: Heure (de 1 12) HH24: Heure (de 1 23) IW: Numro de la semaine dans l'anne (de 1 52 ou 53 en fonction de l'anne) IYY IY I : Les 3, 2 ou 1 derniers chiffres de l'anne IYYY : Les 4 chiffres de l'anne J: Nombre de jours depuis la date January 1, 4712 BC MI: Minutes (de 1 59) MM: Numro du mois dans l'anne MON : Abrviation du nom du mois MONTH : Nom du mois (compens avec des espaces jusqu' 9 caractres) PM P.M. : Symbole Pm Q: Numro du trimestre RM: Numro du mois au format romain RR: Les deux derniers chiffres de l'anne (avec prise en compte du sicle en cours) RRRR: Les 4 derniers chiffres de l'anne (avec prise en compte du sicle en cours) SS: Nombre de secondes (de 0 59) SSSSS: Nombre de secondes coules depuis minuit (de 0 86399) W: Numro de la semaine dans le mois (de 1 5) Y,YYY: Numro de l'anne avec une virgule pour dlimiter le millnaire (par exemple 2,004) YEAR : Epellation du numro de l'anne en cours YYYY: Numro de l'anne en cours (sans prise en compte du sicle en cours) YYY YY Y : Les 3, 2 ou 1 derniers chiffres de l'anne Exemple : SELECT to_char(sysdate,'DD/MM/RRRR Day D Month Year') FROM dual; TO_CHAR(SYSDATE,'DD/MM/RRRRDAYDMONTHYEAR') ------------------------------------------------------------------------------------ 15/10/2004 Vendredi 5 Octobre Two Thousand Four Quelles sont les limitations d'une contrainte CHECK ? Auteurs : Pomalaix , Les contraintes CHECK sont pratiques pour mettre en place un simple contrle statique de validit des donnes, mais elles sont trs limites. Il faudra alors recourir des dclencheurs pour des validations plus complexes. Une contrainte CHECK ne peut faire rfrence qu'aux colonnes de la ligne courante. Elle ne peut donc pas impliquer d'autres lignes de la table, ni impliquer d'autres tables. En particulier, on ne peut pas y utiliser un SELECT. Dans une contrainte CHECK, on ne peut pas faire appel une fonction personnalise. Les fonctions standard (comme LENGTH ou UPPER par exemple) sont autorises, condition qu'elles soient dterministes. FAQ Oracle - 18 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ C'est pourquoi on ne peut pas utiliser les fonctions SYSDATE ou USER, qui provoquent l'une comme l'autre l'erreur "ORA-02436: variable de date ou systme mal indique dans contrainte CHECK". Pour rsumer, une contrainte CHECK ne peut mettre en jeu que les colonnes de la ligne courante, des constantes ventuellement sous forme de listes, et des fonctions standard dterministes. Exemples : CHECK (UPPER(titre) IN ('M.', 'MME', 'MLLE')) CHECK ((col1 < col2) OR (col1 = 10)) Quelle est la diffrence entre les types CHAR et VARCHAR2 ? Auteurs : Jaouad , Il existe essentiellement une diffrence de place entre ces types de donnes . En effet, VARCHAR2 a une longueur variable qui dpend directement de la taille de la donne insree alors que CHAR une longueur fixe (dfini la cration de la table ). Prenons l'exemple d'un VARCHAR2 (20)) et CHAR(20), si on insre 'Oracle' dans les deux colonnes, Oracle serat complte par des espaces dans la colonne CHAR(20) : create table dvp ( a char(20), b varchar2(20)) ; insert into dvp values ('oracle','oracle') ; commit ; SQL> select '-'||a||'-', '-'||b||'-' from dvp ; '-'||A||'-' '-'||B||'-' ---------------------- ---------------------- -oracle - -oracle- SQL> select length(a) , length(b) from dvp ; LENGTH(A) LENGTH(B) ---------- ---------- 20 6 La Longueur maximale de Char (2000) et Varchar2 (4000) sur une 8i : SQL> create table dvp ( a varchar2(4001) ; create table dvp ( a varchar2(4001) * ERREUR la ligne 1 : ORA-00910: specified length too long for its datatype SQL> create table dvp ( a varchar2(4000)) ; Table cre. SQL> drop table dvp ; Table supprime. SQL> create table dvp ( a char(2001)) ; create table dvp ( a char(2001)) * ERREUR la ligne 1 : FAQ Oracle - 19 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ ORA-00910: specified length too long for its datatype SQL> create table dvp ( a char(2000)) ; Table cre. Oracle recommande quand mme l'utilisation de VARCHAR2 au lieu de CHAR pour une raison de compatibilit dans les versions suprieures. Outre l'utilisation supplmentaire de place, l'utilisation de CHAR en lieu et place de VARCHAR2 augmentera galement la taille de vos index et peut parfois diminuer les performances de recherches de ces derniers ! Comment dtecter les verrous (locks) ? Auteurs : Jaouad , Via la requte suivante : SELECT /*+ choose */ bs.username "Blocking User", bs.username "DB User", ws.username "Waiting User", bs.sid "SID", ws.sid "WSID", bs.sql_address "address", bs.sql_hash_value "Sql hash", bs.program "Blocking App", ws.program "Waiting App", bs.machine "Blocking Machine", ws.machine "Waiting Machine", bs.osuser "Blocking OS User", ws.osuser "Waiting OS User", bs.serial# "Serial#", DECODE ( wk.TYPE, 'MR', 'Media Recovery', 'RT', 'Redo Thread', 'UN', 'USER Name', 'TX', 'Transaction', 'TM', 'DML', 'UL', 'PL/SQL USER LOCK', 'DX', 'Distributed Xaction', 'CF', 'Control FILE', 'IS', 'Instance State', 'FS', 'FILE SET', 'IR', 'Instance Recovery', 'ST', 'Disk SPACE Transaction', 'TS', 'Temp Segment', 'IV', 'Library Cache Invalidation', 'LS', 'LOG START OR Switch', 'RW', 'ROW Wait', 'SQ', 'Sequence Number', 'TE', 'Extend TABLE', 'TT', 'Temp TABLE', wk.TYPE ) lock_type, DECODE ( hk.lmode, 0, 'None', 1, 'NULL', 2, 'ROW-S (SS)', 3, 'ROW-X (SX)', FAQ Oracle - 20 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 4, 'SHARE', 5, 'S/ROW-X (SSX)', 6, 'EXCLUSIVE', TO_CHAR (hk.lmode) ) mode_held, DECODE ( wk.request, 0, 'None', 1, 'NULL', 2, 'ROW-S (SS)', 3, 'ROW-X (SX)', 4, 'SHARE', 5, 'S/ROW-X (SSX)', 6, 'EXCLUSIVE', TO_CHAR (wk.request) ) mode_requested, object_name , TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2 FROM v$lock hk, v$session bs, v$lock wk, v$session ws , V$LOCKED_OBJECT a , dba_objects b WHERE hk.BLOCK = 1 AND hk.lmode != 0 AND hk.lmode != 1 AND wk.request != 0 AND wk.TYPE(+) = hk.TYPE AND wk.id1(+) = hk.id1 AND wk.id2(+) = hk.id2 AND hk.sid = bs.sid(+) AND wk.sid = ws.sid(+) AND a.object_id=b.object_id AND hk.sid=a.session_id ORDER BY 1; Plus simplement, comment dtecter si une table est verouille : SELECT session_id , oracle_username , os_user_name FROM V$LOCKED_OBJECT VLO INNER JOIN dba_objects DO ON VLO.object_id = DO.object_id WHERE object_name = 'object_name' AND owner = 'owner'; Comment positionner la valeur d'une colonne sa valeur par dfaut ? Auteurs : lalystar , partir d'Oracle 9i, on peut utiliser le mot-cl default pour spcifier la valeur par dfaut d'une colonne : SQL> create table TEST ( 2 x number default 5, 3 y number default -3 4 ); Table created. SQL> insert into TEST 2 values (default, default); 1 row created. SQL> select * from TEST; FAQ Oracle - 21 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ X Y ---------- ---------- 5 -3 SQL> update TEST 2 set x = -5, 3 y = 0; 1 row updated. SQL> select * from TEST; X Y ---------- ---------- -5 0 SQL> update TEST 2 set x = default, 3 y = default; 1 row updated. SQL> select * from TEST; X Y ---------- ---------- 5 -3 SQL> alter table TEST modify ( 2 x default 0, 3 y default null 4 ); Table altered. SQL> update TEST 2 set x = default, 3 y = default; 1 row updated. SQL> select * from TEST; X Y ---------- ---------- 0 Comment diffrencier NULL et chane vide ? Auteurs : Jaouad , Laurent Schneider , Comme le montre l'exemple suivant, lors de vos INSERT/UPDATE, Oracle retransforme les chanes vide en valeur nulles, ce qui peut tre gnant fonctionnellement, en particulier pour des applications multi-SGBD. jeu d'essais CREATE TABLE dvp ( a VARCHAR2( 10 ) ) ; INSERT INTO dvp VALUES (NULL) ; INSERT INTO dvp VALUES ('DVP') ; INSERT INTO dvp VALUES ('') ; COMMIT; SQL> SELECT '-' ||a FROM dvp ; FAQ Oracle - 22 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ '-'||A ----------- - -DVP - SQL> SELECT COUNT(*) FROM dvp ; COUNT(*) ---------- 3 SQL> SELECT COUNT(*) FROM dvp WHERE a IS NULL; COUNT(*) ---------- 2 SQL> SELECT COUNT(*) FROM dvp WHERE a = '' ; COUNT(*) ---------- 0 SQL> SELECT COUNT(*) FROM dvp WHERE a IS NOT NULL ; COUNT(*) ---------- 1 SQL> SELECT COUNT(*) FROM dvp WHERE a != '' ; COUNT(*) ---------- 0 Une solution consiste utiliser un caractre ou une chane de susbsitution, afin que votre applicatif puisse grer ces informations de manire distincte. Le plus simple, si c'est possible, est d'utiliser le caractre espace, ce qui donne, si l'on continue sur l'exemple prcdent : SQL> insert into dvp values (' ') ; 1 ligne cre. SQL> commit; Validation effectue. SQL> select count (*) from dvp ; COUNT(*) ---------- 4 SQL> select count(*) from dvp where a is null ; Attention tout de mme : Oracle Database SQL Reference 10g Release 2 (10.2) : Note: Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls. FAQ Oracle - 23 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Comment insrer ou mettre jour des donnes sans savoir si les enregistrements correspondants existent dj ? Auteurs : Xavier Vlieghe , Grce l'instruction MERGE, partir de la 9i. Voici sa syntaxe : MERGE INTO Table1 T1 USING (SELECT Id, Meschamps FROM Table2) T2 ON ( T1.Id = T2.Id ) -- Condition de correspondance WHEN MATCHED THEN -- Si Vraie UPDATE SET T1.Meschamps = T2.Meschamps WHEN NOT MATCHED THEN -- Si faux INSERT (T1.ID, T1.MesChamps) VALUES ( T2.ID, T2.MesChamps); Prenons l'exemple d'une table "Article" tout ce qu'il y a de plus classique : Une cl (PK) une rfrence (UQ) un libell un prix La cl primaire est renseigne l'aide d'une squence. CREATE Table Article ( Id Number (10), Refe VARCHAR2 (16), Libe VARCHAR2 (64), Prix NUMBER (12,2)); CREATE SEQUENCE Seq_Id_Article START WITH 1 INCREMENT BY 1; INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '001', 'Marteau', 7.46); INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '002', 'Tournevis', 3.83); INSERT INTO Article VALUES (Seq_Id_Article.NextVal, '004', 'Lime', 5.09); COMMIT; Sa soeur Temp_Article reoit un fichier de MAJ jour des prix, sans cl et pouvant contenir de nouveaux articles : CREATE Table Temp_Article ( Refe VARCHAR2 (16), Libe VARCHAR2 (64), Prix NUMBER (12,2)); INSERT INTO Temp_Article VALUES ('001', 'Marteau', 7.27); INSERT INTO Temp_Article VALUES ('002', 'Tournevis', 3.81); INSERT INTO Temp_Article VALUES ('003', 'Pince', 2.67); INSERT INTO Temp_Article VALUES ('004', 'Lime', 5.35); INSERT INTO Temp_Article VALUES ('005', 'Cl', 4.91); COMMIT; La commande MERGE va nous servir faire la MAJ des prix et l'intgration des nouveaux articles en une seule commande : FAQ Oracle - 24 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> MERGE INTO Article A 2 USING (SELECT Refe, Libe, prix FROM Temp_Article) T 3 ON (A.Refe = T.Refe) 4 WHEN MATCHED THEN 5 UPDATE SET A.Prix = T.Prix, A.Libe = T.Libe 6 WHEN NOT MATCHED THEN 7 INSERT (A.Id, A.Refe, A.Libe, A.Prix) VALUES (Seq_Id_Article.NextVal, T.Refe, T.Libe, T.Prix);
5 lignes fusionnes. SQL> SELECT * FROM Article; ID REFE LIBE PRIX ---------- ---------------- ---------------- ------- 1 001 Marteau 7,27 2 002 Tournevis 3,81 3 004 Lime 5,35 7 003 Pince 2,67 8 005 Cl 4,91 Voici la page Oracle sur laquelle vous trouverez toutes les informations utiles propos de cette commande : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606 Use the MERGE statement to select rows from one or more sources for update or insertion into one or more tables. You can specify conditions to determine whether to update or insert into the target tables. This statement is a convenient way to combine multiple operations. It lets you avoid multiple INSERT, UPDATE, and DELETE DML statements. MERGE is a deterministic statement. That is, you cannot update the same row of the target table multiple times in the same MERGE statement. lien : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9016.htm#SQLRF01606 Comment empcher l'excution d'une requte non r crite ? Auteurs : Jaouad , Grce au hint apparue avec la version 10g : /*+ REWRITE_OR_ERROR */ Comment construire une requte rcursive ? Auteurs : Xavier Vlieghe , Oracle permet de grer le concept de requtes rcursives, l'aide des clauses suivantes : START WITH Champ = {Valeur} : Cette clause permet de prciser le(s) noeud(s) de l'arborescence partir duquel ou desquels on souhaite lister les lments, CONNECT BY PRIOR Id = Id_Parent : Cette clause indique sur quels champs se baser pour parcourir l'arborescence, Depuis la version 9i, vous pouvez utiliser un pseudo champ LEVEL afin de connatre le niveau de chaque enregistrement. En voici un exemple, grce une table Catgorie comprenant les champs suivants : Une Cl (Id) FAQ Oracle - 25 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Un Libell (Libe) La cl de la catgorie parent (Id_Parent) CREATE TABLE Categorie ( Id NUMBER (4), Libe VARCHAR2 (16), Id_Parent NUMBER (4)); -- Les cls sont attribues de manire hirarchique pour plus de clart, ce qui est bien entendu rarement le cas dans la ralit ... INSERT INTO Categorie VALUES ( 1, 'Librairie' , NULL); INSERT INTO Categorie VALUES ( 11, 'Revue' , 1); INSERT INTO Categorie VALUES ( 111, 'Quotidien' , 11); INSERT INTO Categorie VALUES ( 112, 'Hebdomadaire' , 11); INSERT INTO Categorie VALUES ( 111, 'Mensuel' , 11); INSERT INTO Categorie VALUES ( 12, 'Roman' , 1); INSERT INTO Categorie VALUES ( 13, 'Bande Dessine', 1); INSERT INTO Categorie VALUES ( 2, 'Alimentaire' , NULL); INSERT INTO Categorie VALUES ( 21, 'Boisson' , 2); INSERT INTO Categorie VALUES ( 211, 'Alcool' , 21); INSERT INTO Categorie VALUES ( 212, 'Jus de fruits' , 21); INSERT INTO Categorie VALUES ( 213, 'Alcool' , 21); INSERT INTO Categorie VALUES (2131, 'Vins' , 213); INSERT INTO Categorie VALUES (2132, 'Bire' , 213); INSERT INTO Categorie VALUES (2133, 'Apritif' , 213); INSERT INTO Categorie VALUES ( 22, 'Conserve' , 2); INSERT INTO Categorie VALUES ( 23, 'Frais' , 2); COMMIT; Voici la liste des catgories dpendant de la catgorie 1 : Librairie : SQL> SELECT Id, Libe, LEVEL, Id_Parent 2 FROM Categorie 3 START WITH Id = 1 4 CONNECT BY PRIOR Id = Id_Parent; ID LIBE LEVEL ID_PARENT ---------- ---------------- ---------- ---------- 1 Librairie 1 11 Revue 2 1 111 Quotidien 3 11 112 Hebdomadaire 3 11 111 Mensuel 3 11 12 Roman 2 1 13 Bande Dessine 2 1 7 ligne(s) slectionne(s). A partir de la 9i, vous pouvez galement utilisez la fonction SYS_CONNECT_BY_PATH (Champ, sparateur), qui permet de concatner les diffrents valeurs du champ spcifi pour connatre le chemin entre l'lment concern et le neod racine : SQL> SELECT SYS_CONNECT_BY_PATH(Libe, '-') 2 FROM Categorie 3 START WITH Id = 2 4 CONNECT BY PRIOR Id = Id_Parent; SYS_CONNECT_BY_PATH(LIBE,'-') ------------------------------------------ -Alimentaire FAQ Oracle - 26 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ -Alimentaire-Boisson -Alimentaire-Boisson-Alcool -Alimentaire-Boisson-Jus de fruits -Alimentaire-Boisson-Alcool -Alimentaire-Boisson-Alcool-Vins -Alimentaire-Boisson-Alcool-Bire -Alimentaire-Boisson-Alcool-Apritif -Alimentaire-Conserve -Alimentaire-Frais 10 ligne(s) slectionne(s). Quels sont les raccourcis sous SQL*Plus Auteurs : Pomalaix , Jaouad , Fred_D , @ dsigne la variable ORACLE_SID courante. Est valable dans les scripts SQL, dans divers paramtres de l'INIT.ORA, dans des scripts RMAN notamment. ? dsigne la variable ORACLE_HOME courante. Est valable dans les scripts SQL, dans divers paramtres de l'INIT.ORA, dans des scripts RMAN notamment. ! quivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Unix uniquement $ quivalent de la commande HOST de SQL*Plus, permet d'appeler le shell, sous Windows uniquement & permet de dsigner une variable SQL*Plus start et @ permet de lancer un script define permet de dfinir une variable sous Sql*Plus , sans argument elle donne toutes les variables dja dfini & permet de dfinir une variable, && permet de la dfinir une fois pour toute et pour toute la session. ed permet de lancer le buffer l permet de voir sans l'executer le dernier ordre SQL r permet de voir et executer le dernier ordre SQL c:mot1:mot2 permet de changer toutes les occurences du mot1 par mot2 dans le dernier ordre SQL Quelles sont les principales variables d'environnement de SQL Plus ? Auteurs : PlaineR , Voici les variables d'environnement les plus communes : define : caractre utilis pour la substitution des variables (par dfaut "&") syntaxe : -- gre les caractres de substitution SET define ON -- les caractres de substitutions ne sont pas grs SET define off -- le caractre de substition est @ SET define @ linesize : nombre de caractres par lignes NB : la ligne est complte par des espaces pour atteindre ce nombre de caractres. syntaxe : -- mets le nom de caractre par ligne 130 FAQ Oracle - 27 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SET linesize 130 numformat : format par dfaut des numriques l'affichage. syntaxe : SET numformat 999G999D99 numwidth : largeur par dfaut des numriques syntaxe : SET numwidth 8 pagesize : nombre de lignes de dtail (entte nom compris) syntaxe : SET pagesize 60 scan : contrle la prsence de variables de substitution syntaxe : -- contrle la prsence de variables de substitions SET scan ON -- ne contrle pas la prsence de variables de substitions SET scan OFF tab : utilisation des tabulations syntaxe : -- utilisation des tabulations SET tab ON -- non utilisation des tabulations SET tab OFF trimspool : suppression des espaces en fin de lignes syntaxe : -- supprime les espaces en fin de lignes SET trimspool ON -- laisse les espaces en fin de lignes SET trimspool OFF verify : liste la commande avant son excution FAQ Oracle - 28 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ syntaxe : -- liste la commande avant son excution SET verify ON -- la commande n'est pas affichee avant son excution SET verify OFF feed : affiche le nombre de lignes affectes par l'ordre SQL syntaxe : -- affichage du nombre de lignes affectes SET feed ON -- le nombre de lignes affectes n'est pas affich SET feed OFF term : affiche le rsultat des commandes d'un script syntaxe : -- affichage du rsultat SET term ON -- non affichage du rsultat SET term OFF heading : affichage de l'entte du rsultat syntaxe : -- affichage de l'entete SET heading ON -- non affichage de l'entete SET head OFF space : nombre d'espaces entre deux colonnes syntaxe : -- 2 espaces entre 2 colonnes SET space 2 echo : affichade des commandes d'un script l'excution syntaxe : -- affichage de la commande SET echo ON -- non affichage de la commande SET echo OFF FAQ Oracle - 29 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ NB : Ce sont les principales, il en existe d'autres (SQL*Plus : Menu Option-> Environment) dont vous trouverez l'explication dans la documentation Oracle. FAQ Oracle - 30 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Dveloppement > PL/SQL Comment obtenir le nombre de lignes impactes par le dernier ordre SQL (DML) ? Auteurs : SheikYerbouti , La variable SQL%ROWCOUNT contient le nombre de lignes impactes par le dernier ordre DML excut. Vous pouvez interroger cette variable aprs tout ordre INSERT, UPDATE ou DELETE SQL> SET SERVEROUTPUT ON SQL> DECLARE 2 LN$Cpt PLS_INTEGER ; 3 BEGIN 4 SELECT COUNT(*) INTO LN$Cpt FROM test ; 5 DBMS_OUTPUT.PUT_LINE( To_char( LN$Cpt ) || ' enregistrements') ;
6 -- Mise jour -- 7 UPDATE test 8 SET nom = nom 9 WHERE ROWNUM <= 3 ; 10 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements mis jour') ;
11 -- Insertion -- 12 INSERT INTO test 13 SELECT * FROM test ; 14 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements insrs') ;
15 -- Suppression -- 16 DELETE FROM test 17 WHERE ROWNUM < 3 ; 18 DBMS_OUTPUT.PUT_LINE( To_char( SQL%ROWCOUNT ) || ' enregistrements supprims') ;
19 ROLLBACK ; 20 END ; 21 / 6 enregistrements 3 enregistrements mis jour 6 enregistrements insrs 2 enregistrements supprims Procdure PL/SQL termine avec succs. Comment afficher les erreurs de compilation ? Auteurs : SheikYerbouti , Les erreurs de compilation sont stockes dans la vue USER_ERRORS Vous pouvez, aprs compilation d'un objet, afficher les ventuelles erreurs de compilation de deux faons : SHOW ERROR SELECT ... FROM USER_ERRORS Exemple (SUBTR au lieu de SUBSTR) : SQL> CREATE OR REPLACE FUNCTION debut 2 ( PC$Chaine IN VARCHAR2) RETURN VARCHAR2 IS 3 BEGIN 4 RETURN SUBTR( PC$Chaine, 1, 5 ) ; 5 END; 6 / FAQ Oracle - 31 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Avertissement : Fonction cre avec erreurs de compilation. SQL> SHOW ERRORS Erreurs pour FUNCTION DEBUT : LINE/COL ERROR -------- ----------------------------------------------------------------- 4/3 PL/SQL: Statement ignored 4/10 PLS-00201: l'identificateur 'SUBTR' doit tre dclar SQL> SQL> SELECT * 2 FROM user_errors 3 WHERE name = 'DEBUT' 4 AND type = 'FUNCTION' 5 ORDER BY SEQUENCE 6 / NAME TYPE SEQUENCE LINE POSITION ------------------------------ ------------ ---------- ---------- ---------- TEXT -------------------------------------------------------------------------------- DEBUT FUNCTION 1 4 10 PLS-00201: l'identificateur 'SUBTR' doit tre dclar DEBUT FUNCTION 2 4 3 PL/SQL: Statement ignored Comment compter le nombre d'occurrences dans une chane ? Auteurs : SheikYerbouti , Comment compter le nombre d'occurrences dans une chane sans l'aide d'une boucle itrative ? En utilisant les fonctions LENGTH() et REPLACE() de la faon suivante : CREATE OR REPLACE FUNCTION CPT_OCCURRENCES ( PC$Entree IN VARCHAR2, -- Chane en entre PC$Recherche IN VARCHAR2 -- Chane rechercher ) RETURN PLS_INTEGER IS BEGIN RETURN ( (LENGTH(PC$Entree) - LENGTH(REPLACE(PC$Entree,PC$Recherche,NULL)) ) / NVL(LENGTH(PC $Recherche),1) ) ; END; SQL> SELECT CPT_OCCURRENCES( 'le et le et le', 'le' ) "Nombre d'occurrences" FROM DUAL ; Nombre d'occurrences -------------------- 3 Comment obtenir le temps d'excution instruction par instruction de vos codes PL/SQL ? Auteurs : SheikYerbouti , En installant l'outil Oracle : Profiler Vous devez tre connect avec le privilge SYSDBA FAQ Oracle - 32 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ -------------------------------------- -- Installation de l'outil profiler -- -------------------------------------- connect / as sysdba @<ORACLE_HOME>/rdbms/admin/proftab.sql @<ORACLE_HOME>/rdbms/admin/profload.sql @<ORACLE_HOME>/plsql/demo/profrep.sql Et en l'excutant sur n'importe quelle fonction ou procdure PL/SQL : ---------------------------------------------- -- Test de la procdure stocke : F_TRACE() -- ---------------------------------------------- SQL> 1 DECLARE 2 Pgm NUMBER; 3 BEGIN 4 DBMS_PROFILER.START_PROFILER('test','test1',Pgm); 5 FD.F_TRACE('Hello Oracle world','T'); 6 DBMS_PROFILER.STOP_PROFILER; 7 DBMS_PROFILER.ROLLUP_RUN(Pgm); 8 PROF_REPORT_UTILITIES.PRINT_RUN(Pgm); 9* END; SQL> / ===========================Results for run #1 made on 23-OCT-04 14:20:55 ========================= (test) Run total time: .16 seconds Unit #1: SYS.DBMS_PROFILER - Total time: .00 seconds Unit #2: <anonymous>.<anonymous> - Total time: .00 seconds Unit #3: FD.F_TRACE - Total time: .02 seconds 1 procedure F_TRACE ( PC$Message in VARCHAR2, PC $Output in VARCHAR2 DEFAULT 'S' ) 2 Is 3 PRAGMA AUTONOMOUS_TRANSACTION ; 4 LC$String Varchar2(4000) ; 5 LN$Slices PLS_INTEGER ; 6 LN$Rest PLS_INTEGER ; 7 1 ,00001660 ,00001660 LN$Pos PLS_INTEGER := 1 ; 8 LN$Inc PLS_INTEGER ; 9 Begin 10 11 1 ,00009573 ,00009573 If Upper( PC$Output ) = 'S' Then 12 -- Screen output (DBMS_OUTPUT) -- 13 0 0 LN$Inc := 255 ; 14 0 0 LN$Slices := Length( PC $Message ) / LN$Inc ; 15 0 0 LN$Rest := MOD( Length( PC $Message ), LN$Inc ) ; 16 0 0 If LN$Rest > 0 Then LN$Slices := LN$Slices + 1 ; End if ; 17 18 -- output -- 19 0 0 For i in 1..LN$Slices Loop 20 0 0 LC$String := Substr( PC $Message, LN$Pos, LN$Inc ) ; 21 0 0 DBMS_OUTPUT.PUT_LINE( LC$String ) ; 22 0 0 LN$Pos := LN$Pos + LN$Inc ; 23 End loop ; 24 25 Else 26 -- Table output (INSERT) -- 27 1 ,00000095 ,00000095 LN$Inc := 4000 ; 28 1 ,00003589 ,00003589 LN$Slices := Length( PC $Message ) / LN$Inc ; FAQ Oracle - 33 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 29 1 ,00001622 ,00001622 LN$Rest := MOD( Length( PC $Message ), LN$Inc ) ; 30 1 ,00000411 ,00000411 If LN$Rest > 0 Then LN$Slices := LN$Slices + 1 ; End if ; 31 32 -- output -- 33 2 ,00004027 ,00002013 For i in 1..LN$Slices Loop 34 1 ,00001587 ,00001587 LC$String := Substr( PC $Message, LN$Pos, LN$Inc ) ; 35 1 ,01580613 ,01580613 Insert into TRACE (LIGNE) Values ( LC$String ) ; 36 1 ,00094689 ,00094689 Commit ; 37 1 ,00000270 ,00000270 LN$Pos := LN$Pos + LN$Inc ; 38 End loop ; 39 End if ; 40 41 End; Procdure PL/SQL termine avec succs. Comment faire un REPLACE sur un CLOB ? Auteurs : Helyos , Le package DBMS_LOB ne fournit pas de procdure ou fonction REPLACE pour les CLOBs. En voici une : CREATE OR REPLACE PROCEDURE lob_replace(p_dest_clob IN OUT CLOB, p_search VARCHAR2, p_replace VARCHAR2) AS v_clob_temp CLOB; v_end_offset INTEGER := 1; v_start_offset INTEGER := 1; v_occurence NUMBER := 1; v_replace_len NUMBER := length(p_replace); v_clob_temp_len NUMBER := 0; v_dest_clob_len NUMBER := 0; BEGIN IF dbms_lob.ISOPEN(p_dest_clob) = 0 THEN NULL; END IF; dbms_lob.createtemporary(v_clob_temp, TRUE, dbms_lob.session); LOOP v_end_offset := dbms_lob.instr(p_dest_clob, p_search, 1, v_occurence); IF v_end_offset = 0 THEN v_clob_temp_len := dbms_lob.getlength(v_clob_temp); v_dest_clob_len := dbms_lob.getlength(p_dest_clob) - v_start_offset + 1; IF v_dest_clob_len > 0 THEN dbms_lob.copy(v_clob_temp, p_dest_clob, v_dest_clob_len, v_clob_temp_len + 1, v_start_offset); END IF; EXIT; END IF; v_clob_temp_len := dbms_lob.getlength(v_clob_temp); IF (v_end_offset - v_start_offset) > 0 THEN dbms_lob.copy(v_clob_temp, p_dest_clob, (v_end_offset - v_start_offset), v_clob_temp_len + 1, v_start_offset); END IF; v_start_offset := v_end_offset + length(p_search); FAQ Oracle - 34 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ v_occurence := v_occurence + 1; IF p_replace IS NOT NULL THEN dbms_lob.writeappend(v_clob_temp, v_replace_len, p_replace); END IF; END LOOP; IF length(p_search) > length(p_replace) THEN dbms_lob.TRIM(p_dest_clob, dbms_lob.getlength(v_clob_temp)); END IF; dbms_lob.copy(p_dest_clob, v_clob_temp, dbms_lob.getlength(v_clob_temp), 1, 1); EXCEPTION WHEN OTHERS THEN htp.prn('[Error in lob_replace : ' || SQLCODE || ' ' || SQLERRM || ']'); END; Comment savoir si une chaine de caractres correspond un nombre ? Auteurs : lalystar , Plutt que de coder une fonction qui traite tous les cas de figure correspondant aux diffrents formats que peut prendre un nombre (entier, nombre virgule, nombre avec exposant...), il vaut mieux laisser Oracle grer la conversion et nous signaler s'il a rencontr une erreur comme dans la fonction suivante : create or replace function isNumeric(x in varchar2) return number as -- renvoie 1 si le paramtre correspond un nombre -- 0 sinon nb number; begin nb := to_number(x); return 1; exception when others then return 0; end; / Exemple d'utilisation : si la colonne X correspond un nombre, on veut avoir ce nombre multipli par 1000 : SQL> SELECT x, 2 isNumeric(x), 3 CASE 4 WHEN isNumeric(x) = 1 THEN 1000 * TO_NUMBER(x) 5 END x_fois_1000 6 FROM TEST;
X ISNUMERIC(X) X_FOIS_1000 ---------- ------------ ----------- 1 1 1000 1,10 1 1100 1,234E3 1 1234000 -1,23E-3 1 -1,23 FAQ Oracle - 35 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 1 toto 0 Comment vrifier si une chaine vrifie un certain format ? Auteurs : lalystar , Pour vrifier qu'une chaine de caractre vrifie un format donn, on peut utiliser, partir d'Oracle 10g, la fonction MATCH du OWA_PATTERN qui permet de manipuler des expressions rgulires. Cette fonction retourne un boolen indiquant si le format est vrifi ou pas; elle ne peut donc tre appele qu'en PL/SQL. Par exemple, pour vrifier que les numros de tlphones en base suivent le format franais sur 10 chiffres avec comme sparateur des tirets, on peut faire : SQL> select * 2 from TELEPHONE; TELEPHONE# -------------------------------------------------------------------------------- 07.08.09.02.02 07-08-09-02-02 01 02 02 02 02 TOTO 07/07/07/07/07 SQL> 1 begin 2 for tel in (select * from TELEPHONE) 3 loop 4 if owa_pattern.match(tel.telephone#, '^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$') then 5 dbms_output.put_line(tel.telephone#); 6 end if; 7 end loop; 8* end; SQL> / 07-08-09-02-02 PL/SQL procedure successfully completed. Les expressions rgulires peuvent utiliser les symboles suivants : ^ : dbut de la ligne $ : saut de ligne ou fin de ligne \n : saut de ligne . : tout caractres sauf le saut de ligne \t : tabulation \d : chiffre (quivalent [0-9]) \D : tout caractre sauf un chiffre (quivalent [not 0-9]) \w : tout caractre alphanumrique (chiffres, lettres, _) \W : tout caractre sauf un caractre alphanumrique \s : tout espace (espace, tabulation, saut de ligne) \S : tout caractre sauf un espace \b : dlimiteur de mots (entre un caractre qui vrifie \w et un autre qui vrifie \W) \xnn : caractre dont le code ascii est en hexadcimal nn \nnn : caractre dont le code ascii est en octal nnn Les lments ci-dessus peuvent tre suivi par les indicateurs de cardinalit suivants : ? : 0 ou 1 occurrence * : 0 ou plus occurrences + : 1 ou plus occurrences FAQ Oracle - 36 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ {n} : exactement n occurences (n,} : au moins n occurences {n,m} : entre n et m occurences L'expression rgulire qu'on a utilis pour dcrire notre format de numro de tlphone ^\d{2}-\d{2}-\d{2}-\d{2}-\d{2}$ se dcrypte donc de la manire suivante : \d{2} : on cherche deux chiffres - : suivis d'un tiret \d{2}- : suivi de deux chiffres et d'un tiret \d{2}- : suivi de deux chiffres et d'un tiret \d{2}- : suivi de deux chiffres et d'un tiret \d{2} : suivi de deux chiffres Comme notre expression rgulire commence par ^, elle dcrit le dbut de la chaine; comme elle se termine par $, elle dcrit aussi sa fin. Ma requte fonctionne sous SQL*Plus mais lorsque j'essaie de l'utiliser dans une procdure PL/SQL, celle-ci ne compile pas ! Auteurs : lalystar , Sous Oracle 8i, le moteur SQL utilis dans les procdures PL/SQL est diffrent et est en retard sur le moteur SQL utilis pour les requtes. Certaines fonctionnalits disponibles en SQL ne le sont donc pas en PL/SQL comme : les structures CASE ... WHEN les fonctions analytiques La solution est d'utiliser du SQL dynamique pour masquer la requte au moteur PL/SQL en utilisant par exemple EXECUTE IMMEDIATE : begin execute immediate ' insert into TEST select case when deptno = 10 then ''Dept 10'' when deptno = 20 then ''Dept 20'' else ''Departement inconnu'' end from TEST1'; end; Comment gnrer un fichier de trace pour une session en cours ? Auteurs : lalystar , Quand une procdure est en cours d'excution, il est possible de gnrer un fichier de trace (pour exploitation par TkProf par exemple) en utilisant la routine set_sql_trace_in_session du package DBMS_SYSTEM. Les paramtres de cette routine sont les suivants : SID : identifiant de la session en provenance de V$SESSION SERIAL# : second identifiant de la session en provenance de V$SESSION FAQ Oracle - 37 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ TRACE: boolen; il faut entrer TRUE pour demander Oracle de gnrer le fichier de trace, et FALSE pour arrter sa gnration Vous trouverez plus de dtails dans cet article : Diffrentes faon de tracer l'activit de sessions Je n'ai pas de documentation Oracle, ni d'accs Internet, comment puis-je trouver la documentation d'un package Oracle ? Auteurs : lalystar , Pour avoir immdiatement la documentation minimale d'un package Oracle install, on peut utiliser la requte suivante sous SQL*Plus : SELECT text FROM DBA_SOURCE WHERE type = 'PACKAGE' AND name like UPPER('%&package%') ORDER BY line; Par exemple, pour DBMS_OUTPUT : SQL> SELECT text 2 FROM dba_source 3 WHERE type = 'PACKAGE' 4 AND name like UPPER('%&package%'); Enter value for package: dbms_output old 4: name like UPPER('%&package%') new 4: name like UPPER('%dbms_output%') ------------ -- OVERVIEW -- -- These procedures accumulate information in a buffer (via "put" and -- "put_line") so that it can be retrieved out later (via "get_line" or -- "get_lines"). If this package is disabled then all -- calls to this package are simply ignored. This way, these routines -- are only active when the client is one that is able to deal with the -- information. This is good for debugging, or SP's that want to want -- to display messages or reports to sql*dba or plus (like 'describing -- procedures', etc.). The default buffer size is 20000 bytes. The -- minimum is 2000 and the maximum is 1,000,000. ... procedure put_line(a varchar2); pragma restrict_references(put_line,WNDS,RNDS); procedure put_line(a number); pragma restrict_references(put_line,WNDS,RNDS); -- Put a piece of information in the buffer followed by an end-of-line -- marker. When retrieved by get_line(s), the number and date items -- will be formated with to_char using the default formats. If you -- want another format then format it explicitly. get_line(s) return -- "lines" as delimited by "newlines". So every call to put_line or -- new_line will generate a line that will be returned by get_line(s). -- Input parameters: -- a -- Item to buffer -- Errors raised: -- -20000, ORU-10027: buffer overflow, limit of <buf_limit> bytes. FAQ Oracle - 38 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ -- -20000, ORU-10028: line length overflow, limit of 255 bytes per line Comment convertir une valeur hexadcimale en valeur dcimale ? Auteurs : SheikYerbouti , Simplement grce la fonction TO_NUMBER : En voici un exemple d'utilisation : SQL> SELECT TO_NUMBER('ff','XXXXXXXX'),TO_NUMBER('fff','XXXXXXXX'),TO_NUMBER('ffff','XXXXXXXX') from dual; TO_NUMBER('FF','XXXXXXXX') TO_NUMBER('FFF','XXXXXXXX') TO_NUMBER('FFFF','XXXXXXXX') -------------------------- --------------------------- ---------------------------- 255 4095 65535 Comment afficher la diffrence de temps entre 2 dates en nombre de jours, heures, minutes et secondes ? Auteurs : SheikYerbouti , Grce la fonction suivante : CREATE OR REPLACE FUNCTION Diff_Temps ( LD$Date_Deb IN DATE DEFAULT SYSDATE ,LD$Date_Fin IN DATE DEFAULT SYSDATE ,LN$JJ OUT PLS_INTEGER ,LN$HH OUT PLS_INTEGER ,LN$MI OUT PLS_INTEGER ,LN$SS OUT PLS_INTEGER ) Return NUMBER IS dif NUMBER ; Begin
If LD$Date_Fin < LD$Date_Deb Then Return ( -1 ) ; End if ; Select LD$Date_Fin - LD$Date_Deb Into dif From DUAL ; Select trunc ( LD$Date_Fin - LD$Date_Deb) Into LN$JJ From DUAL ; Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 24) - ( LN$JJ * 24 ) Into LN$HH From DUAL ; Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 1440) - ( (LN$HH * 60) + ( LN$JJ * 1440) ) Into LN$MI From DUAL ; Select trunc ( (LD$Date_Fin - LD$Date_Deb) * 86400) - ( (LN$MI * 60) + (LN$HH * 3600) + ( LN$JJ * 3600 * 24 ) ) Into LN$SS From DUAL ; Return( dif ) ;
End ; / En voici un exemple d'utilisation : SQL> set serveroutput on FAQ Oracle - 39 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> declare 2 dd pls_integer; 3 hh pls_integer; 4 mi pls_integer; 5 ss pls_integer; 6 dif number ; 7 Begin 8 dif := diff_temps ( sysdate, sysdate + 10.523, dd,hh,mi,ss ) ; 9 dbms_output.put_line( 10 '(' || ltrim(to_char(dif,'99999.99999')) || ')' || ' ' 11 || to_char(dd,'99999') || 'j ' 12 || to_char(hh,'00') ||':' 13 || to_char(mi,'00') ||':' 14 || to_char(ss,'00') 15 ) ; 16 End; 17 / (10.52300) 10j 12: 33: 07 Procdure PL/SQL termine avec succs. Comment exporter le rsultat d'une requte au format XML ? Auteurs : Xavier Vlieghe , partir d'Oracle 9i, vous pouvez utiliser le package DBMS_XMLQuery. En voici 2 exemples d'utilisation : Avec Utl_File : SET SERVEROUTPUT ON DECLARE XmlFic Utl_File.File_Type; XmlData CLOB; Fin BOOLEAN := TRUE; BEGIN -- Crer des donnes au format XML partir d'une requte : XmlData := DBMS_XMLQuery.GetXML ('SELECT * FROM EMP');
-- Copie les donnes au format XML dans un fichier : XmlFic := Utl_File.FOpen ('C:\TMP\XML', 'TEST.xml', 'W'); WHILE FIN LOOP Utl_File.Put (XmlFic, SUBSTR (XmlData, 1, 32767)); IF LENGTH (XmlData) > 32767 THEN XmlData := SUBSTR (XmlData, 32768); ELSE FIN := FALSE; END IF; END LOOP; Utl_File.FClose (XmlFic); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SUBSTR (SQLERRM,1,255)); Utl_File.FClose (XmlFic); END; / Sans Utl_File : compilez d'abord la procdure suivante : FAQ Oracle - 40 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ CREATE OR REPLACE PROCEDURE OutPut_Fichier (fichier IN OUT NOCOPY CLOB) IS ContenuXML VARCHAR2 (32767); Ligne VARCHAR2 (2000); BEGIN ContenuXML := dbms_lob.SUBSTR(fichier, 32767); LOOP EXIT WHEN ContenuXML IS NULL; -- dcoupe en lignes : Ligne := SUBSTR(ContenuXML, 1, INSTR(ContenuXML, CHR(10)) - 1); dbms_output.put_line (Ligne); ContenuXML := SUBSTR(ContenuXML, INSTR(ContenuXML, CHR(10)) + 1); END LOOP; END; / Et le tour est jou : SET SERVEROUTPUT ON SIZE 1000000 DECLARE fichier CLOB; BEGIN fichier := dbms_XMLQuery.getXML ('SELECT * FROM EMP'); OutPut_Fichier (fichier); END; / Comment excuter une instruction du DDL dans un block PL/SQL ? Auteurs : SheikYerbouti , Si vous souhaitez excuter un ordre du DDL (Data Description Language) pour crer une table, un index, altrer un objet existant, utilisez l'instruction EXECUTE IMMEDIATE. Par exemple, pour forcer la recration d'un index: Declare LC$OrdreSql Varchar2(2000) ; Begin LC$OrdreSql := 'ALTER INDEX my_index REBUILD' ; EXECUTE IMMEDIATE LC$OrdreSql ; End; N'oubliez-pas que tout ordre du DDL gnre un COMMIT implicite et que les droits ncessaires l'excution de l'instruction contenue dans la fonction EXECUTE IMMEDIATE doivent avoir t donn directement l'utilisateur, et non pas via un rle. lien : Voir le tutoriel sur le SQL Dynamique Natif Comment implmenter une colonne valeur auto-incrmente ? Auteurs : Fred_D , Les champs de type "Auto-Increment" n'existe pas en Oracle. Pour muler ce comportement, vous avez besoin FAQ Oracle - 41 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ d'une squence pour incrmenter la valeur de 1 chaque insertion d'un trigger pour renseigner automatiquement le champ auto-incrment de votre table. Voici comment procder : CREATE SEQUENCE MaSequence START WITH 1 MAXVALUE 999999999999999999999999 MINVALUE 1 NOCYCLE NOCACHE NOORDER; CREATE TRIGGER MonTrigger BEFORE INSERT ON MaTable FOR EACH ROW BEGIN SELECT MaSequence.NEXTVAL INTO :NEW.macolonne_PK FROM DUAL; END; / Lorqu'une ligne sera insre dans la table MaTable, la colonne macolonne_PK sera alors renseigne avec la valeur suivante de la squence MaSequence. Il est galement possible de se passer du trigger, et d'opter pour la syntaxe suivante : INSERT INTO MaTable (MaColonne_PK, ...) VALUES (maSequence.NextVal, ...); Il est utile de noter que la squence n'est donc pas lie un champ ou une table, et que vous pouvez utiliser la mme squence pour plusieurs champs. lien : Plus d'infos sur les triggers (ou dclencheurs) Comment crer une vue paramtre ? Auteurs : Fred_D , Il peut tre utile de rendre certains objets dynamiques, pour plus de souplesse dans vos applications. Or, les vues sont souvent "cres en dur" dans la base, ce qui peut se rveler ennuyeux. Voici donc une mthode pour les rendre dynamiques : Crez d'abord un package, avec un paramtre global param1 : CREATE OR REPLACE PACKAGE orafrance AS param1 VARCHAR2 (30); FUNCTION get_param1 RETURN VARCHAR2; END; / CREATE OR REPLACE PACKAGE BODY orafrance AS FUNCTION get_param1 FAQ Oracle - 42 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ RETURN VARCHAR2 AS BEGIN RETURN param1; END; END; / Crez ensuite votre vue, en faisant appel ce paramtre : CREATE OR REPLACE VIEW v_orafrance AS SELECT * FROM all_tables WHERE table_name = UPPER (orafrance.get_param1); Pour utiliser votre vue, il faut d'abord initialiser le paramtre : SQL> execute orafrance.param1 := 't_orafrance'; Et vous pouvez dsormais faire appel votre vue : SQL> select table_name from v_orafrance; TABLE_NAME ------------------------------ T_ORAFRANCE Comment excuter un shell depuis le PL/SQL ? Auteurs : Helyos , Cette mthode est valable jusqu'en version 9 : Pour excuter une commande systme depuis du PL/SQL nous allons utiliser une classe Java. La cration d'un classe java excutable en PL/SQL passe par trois tapes : tout d'abord on cr la Java Source ensuite on publie la spcification d'appel de cette source et enfin on accorde les privilges ncessaires l'excution de cette classe Java Donc on va tout d'abord crer la classe Java permettant d'excuter une commande systme : CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Host" AS import java.io.*; public class Host { public static void executeCommand(String command) { try { String[] finalCommand; if (isWindows()) { finalCommand = new String[4]; finalCommand[0] = "C:\\windows\\system32\\cmd.exe"; finalCommand[1] = "/y"; finalCommand[2] = "/c"; finalCommand[3] = command; } else { FAQ Oracle - 43 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ finalCommand = new String[3]; finalCommand[0] = "/bin/sh"; finalCommand[1] = "-c"; finalCommand[2] = command; }
final Process pr = Runtime.getRuntime().exec(finalCommand); new Thread(new Runnable() { public void run() { try { BufferedReader br_in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String buff = null; while ((buff = br_in.readLine()) != null) { System.out.println("Process out :" + buff); try {Thread.sleep(100); } catch(Exception e) {} } br_in.close(); } catch (IOException ioe) { System.out.println("Exception caught printing process output."); ioe.printStackTrace(); } } }).start();
public static boolean isWindows() { if (System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) return true; else return false; } }; / show errors java source "Host" Ensuite on publie la spcification d'appel de cette classe en utilisant une procdure PL/SQL pour la "wrapper" : CREATE OR REPLACE PROCEDURE Host_Command (p_command IN VARCHAR2) AS LANGUAGE JAVA NAME 'Host.executeCommand (java.lang.String)'; / FAQ Oracle - 44 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Enfin, les permissions ncessaire doivent tre donnes par l'utilisateur SYS pour que le JServer puisse accder aux fichiers su systme :
EXEC Dbms_Java.Grant_Permission('SCHEMA- NAME', 'java.io.FilePermission', '<>', 'read ,write, execute, delete'); EXEC Dbms_Java.Grant_Permission('SCHEMA- NAME', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', ''); EXEC Dbms_Java.Grant_Permission('SCHEMA- NAME', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', ''); On doit se reconnecter pour activer les privilges. Ensuite on lance notre commande SET SERVEROUTPUT ON SIZE 1000000 CALL DBMS_JAVA.SET_OUTPUT(1000000); BEGIN Host_Command (p_command => 'move C:\test1.txt C:\test2.txt'); END; / PS : ne pas oublier de lancer le script : $ORACLE_HOME\javavm\install\initjvm.sql En version 10g, vous pouvez utiliser le scheduler Oracle. Comment crypter mon code ? Auteurs : Xavier Vlieghe , LeoAnderson , Il est parfois ncessaire, lors du dploiement de vos applicatifs, de crypter votre code afin de le protger : il suffit pour cela de sauvegarder votre code sous forme de fichiers sql et d'utiliser le programme wrap.exe, se trouvant dans le rpertoire {Oracle_Home}\Bin\. Le programme wrap accepte les 2 arguments suivants : iname : nom du fichier en entre oname : nom du fichier de sortie Voici un exemple avec le fichier suivant : debut.pls CREATE OR REPLACE FUNCTION debut (PC$Chaine IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN SUBSTR( PC$Chaine, 1, 5 ) ; END; Encryptons-le : ...\BIN> wrap iname=c:\temp\debut.pls oname=c:\temp\debut.plb PL/SQL Wrapper: Release 10.2.0.1.0- Production on Dim. Oct. 15 23:52:50 2006 Copyright (c) 1993, 2004, Oracle. All rights reserved. FAQ Oracle - 45 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Processing c:\temp\debut.pls to c:\temp\debut.plb Vous pouvez ouvrir le nouveau fichier pour vrifier son contenu. Attention, prenez videmment soin de sauvegarder vos sources, cette procdure est bien entendu irrversible ! Vous pouvez (devez) galement vrifier que la compilation s'effectue correctement : SQL> @c:\temp\debut.plb Fonction cre. Attention, ceci ne fonctionne pas sur les triggers ou les blocs PL/SQL anonymes, cf la documentation Oracle The following CREATE statements are obfuscated: CREATE [OR REPLACE] FUNCTION function_name CREATE [OR REPLACE] PROCEDURE procedure_name CREATE [OR REPLACE] PACKAGE package_name CREATE [OR REPLACE] PACKAGE BODY package_name CREATE [OR REPLACE] TYPE type_name AS OBJECT CREATE [OR REPLACE] TYPE type_name UNDER type_name CREATE [OR REPLACE] TYPE BODY type_name The CREATE [OR REPLACE] TRIGGER statement, and [DECLARE] BEGIN..END anonymous blocks, are not obfuscated. All other SQL statements are passed unchanged to the output file. All comment lines in the unit being wrapped are deleted, except for those in a CREATE OR REPLACE header and C- style comments (delimited by /* */). FAQ Oracle - 46 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration FAQ Oracle - 47 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Les Tables Comment retrouver la liste des tables d'une base ? Auteurs : SheikYerbouti , Trois vues permettent d'obtenir des informations sur les tables de votre base : DBA_TABLES ALL_TABLES USER_TABLES DBA_TABLES liste toutes les tables de tous les schmas ALL_TABLES liste toutes les tables que l'utilisateur peut voir (les tables de son schma plus celles des autres schmas dans lesquels il possde des droits) USER_TABLES liste les tables du schma de l'utilisateur connect Les colonnes de la vue DBA_TABLES sont les suivantes : OWNER Schma propritaire de la table TABLE_NAME Nom de la table TABLESPACE_NAME Nom du tablespace de stockage de la table CLUSTER_NAME Nom du cluster qui contient la table IOT_NAME Nom de l'IOT laquele se rfre la zone de dbordement ou la table de correspondances PCT_FREE Pourcentage minimum d'espace libre pour un bloc PCT_USED Pourcentage minimum d'espace utilis pour un bloc INI_TRANS Nombre initial de transactions MAX_TRANS Nombre maximum de transactions autorises INITIAL_EXTENT Taille du segment initial en octets NEXT_EXTENT Taille du deuxime extent en octets MIN_EXTENTS Nombre minimum d'extents allous dans le segment MAX_EXTENTS Nombre maximum d'extents allous dans le segment PCT_INCREASE Pourcentage d'augmentation des nouveaux extents crs FREELISTS Nombre de freelists alloues pour le segment FREELIST_GROUPS Nombre de groupes de freelists alloues pour le segment LOGGING Attribut de logging BACKED_UP Indique si la table a t sauvegarde depuis la dernire modification NUM_ROWS Nombre de lignes de la table (*) BLOCKS Nombre de blocs utiliss pour la table EMPTY_BLOCKS Nombre de blocs vide (jamais utiliss) pour la table AVG_SPACE Valeur moyenne de l'espace libre pour la table (en nombre de lignes) (*) CHAIN_CNT Nombre de lignes chanes pour la table (*) AVG_ROW_LEN Longueur moyenne d'une ligne (incluant l'entte) (*) AVG_SPACE_FREELIST_BLOCKS Valeur moyenne de l'espace libre de tous les blocs dans une freelist (*) NUM_FREELIST_BLOCKS Nombre de blocs dans la freelist DEGREE Nombre de processus par instance INSTANCES Nombre d'instances travers lesquelles la table est scanne CACHE Indique si la table est charge en cache TABLE_LOCK Indique si le verouillage de table est activ ou dsactiv SAMPLE_SIZE Valeur de l'chantillon utilis pour analyser la table LAST_ANALYZED Date de la dernire analyse de la table PARTITIONED Indique si la table est partitionne IOT_TYPE Indique le type d'objet d'une table organise en index (Prfixe, zone de dbordement ou table de correspondance (MAPPING TABLE) TEMPORARY Indique si la session courante peut voir les donnes insres SECONDARY Indique si la table fait partie de la cration d'un index de domaine NESTED Indique s'il s'agit d'une table imbrique BUFFER_POOL Buffer pool par dfaut de chargement des blocs FAQ Oracle - 48 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ ROW_MOVEMENT Indique si le dplacement des lignes partitionnes est activ ou dsactiv GLOBAL_STATS Indique si les statistiques ont t calcules sans fusion des partitions sous-jacentes USER_STATS Indique si les statistiques ont t saisies directement par l'utilisateur DURATION Persistance des donnes d'une table temporaire (sys$session oo sys$transaction) SKIP_CORRUPT Indique si le contournement des blocs endommags est activ ou dsactiv MONITORING Indique si le traage est activ CLUSTER_OWNER Propritaire du cluster DEPENDENCIES Indique si le traage des dpendances de niveau ligne est activ COMPRESSION Indique si la compression de donnes est active ou dsactive (*) ne prenez par comme argent comptant la valeur de ces colonnes, particulirement NUM_ROWS. En effet ces colonnes ne sont (re)valorises qu'aprs analyse de la table. Utilisez donc ces valeurs bon escient. Si votre systme analyse vos tables chaque nuit, par exemple, ces valeurs peuvent sans crainte vous donner une bonne indication de la volumtrie de vos tables, sans excuter la gourmande instruction : SELECT COUNT(*). SQL> SELECT 2 OWNER, 3 TABLE_NAME, 4 TABLESPACE_NAME, 5 NUM_ROWS, 6 BLOCKS, 7 EMPTY_BLOCKS, 8 LAST_ANALYZED 9 FROM DBA_TABLES 10 WHERE OWNER = 'FD' ; OWNER TABLE_NAME TABLESPACE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS LAST_ANA ---------- -------------------- --------------- ---------- ---------- ------------ -------- FD CONTACT USERS 2 5 0 03/12/02 FD DEPT USERS FD EMP USERS FD EMPLOYE USERS FD FACTURE USERS FD LOV_BLOCK USERS FD LOV_COLONNE USERS FD LOV_ELEMENT_COLONNE USERS FD LOV_ITEM USERS FD LOV_LOV USERS FD LOV_MODULE USERS FD NOMBRES USERS FD TEST USERS 0 1 0 03/12/02 FD TESTX USERS FD TEST_LOV USERS 52000 432 80 08/07/04 FD TEST_TYPES USERS FD UTIL_PREFS USERS FD UTIL_PREFS_ORDER USERS FD UTIL_PREFS_RECORD_OR USERS DER 19 ligne(s) slectionne(s). Aprs analyse de la table DEPT SQL> / OWNER TABLE_NAME TABLESPACE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS LAST_ANA ---------- -------------------- --------------- ---------- ---------- ------------ -------- FD CONTACT USERS 2 5 3 14/10/04 FAQ Oracle - 49 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ FD DEPT USERS 4 4 4 14/10/04 Comment passer une table en lecture seule ? Auteurs : Pomalaix , Certaines tables doivent absolument tre mises l'abri des modifications, par exemple une table de paramtrage ou un historique en ligne. Mme si le seul privilge donn sur ces tables est le SELECT, il y a toujours un risque que le propritaire de la table, ou un utilisateur disposant d'un privilge global de type ANY TABLE, modifie par erreur ces tables. Comment se prmunir contre de telles erreurs ? Il suffit de mettre profit un mode quelque peu mconnu des contraintes : DISABLE VALIDATE. En effet, ce mode interdit sur la table concerne l'excution de toute instruction INSERT, UPDATE, DELETE ou mme TRUNCATE, quels que soient les privilges dont on dispose. La nature et la pertinence de la contrainte importent peu, seuls comptent les mots magiques DISABLE VALIDATE. Cependant, une contrainte neutre est prfrable, pour le cas o elle serait active, c'est pourquoi je propose un CHECK(1=1). ALTER TABLE emp ADD CONSTRAINT lect_seule CHECK (1=1) DISABLE VALIDATE; UPDATE emp SET ename=ename; --> ORA-25128: Aucune insertion/mise jour/suppression possible sur une table avec contrainte (SCOTT.LECT_SEULE) dsactive et valide Notre table est donc protge contre toute modification accidentelle de son contenu. Comment voir les lignes chanes sur les tables ? Auteurs : Jaouad , Tout d'abord, il faut au pralable : excuter le script $ORACLE_HOME/rdbms/admin/utlchain, analyser la table en question avec la commande suivante : Analyze Table MaTable; La requte suivante vous permet maintenant de lister les lignes chanes : SELECT table_name, owner, num_rows, chain_cnt, (chain_cnt * 100) / num_rows AS ratio, pct_used, pct_free FROM Dba_Tables WHERE Owner NOT IN ('SYS','SYSTEM') AND table_name = 'MaTable' AND Chain_Cnt !=0 ORDER BY 5 desc; FAQ Oracle - 50 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Attention, cela ne fonctionne pas avec le package DBMS_STATS. Quelle est la diffrence entre une table et une vue ? Auteurs : LeoAnderson , Une table est un ensemble "physique" de donnes qui occupe un espace disque. Une vue est une interrogation logique (SELECT) base sur des tables ou d'autres vues qui n'occupent pas de place sur le disque. Une vue n'est en fait qu'un "SELECT" mmoris en base (l'instruction est mmorise, pas les rsultats). C'est la raison qui justifie l'impossibilit de crer un index, de n'importe quel type, sur ce type de segment. Afin d'optimiser le temps de rponse d'une requte se basant sur un select, l'index est donc crer sur la table sur laquelle porte la requte. Concernant l'criture des requtes, les vues et les tables s'utilisent de la mme manire Les vues sont toutes stockes dans le tablespace SYSTEM, alors que les tables sont stocks dans les tablespaces ddis. Les tables sont visibles via les tables systmes : DBA_TABLES, ALL_TABLES et USER_TABLES alors que les vues sont visibles via les DBA_VIEWS, ALL_VIEWS et USER_VIEWS. lien : View and Base table Comment connatre, pour une table, le nombre de colonnes, d'index et le pourcentage de colonnes indexes ? Auteurs : PlaineR , Grce la requte suivante : SELECT utc.table_name, count (distinct utc.column_name) nb_col, count (distinct index_name) nb_index, count (distinct uic.column_name) / count (distinct utc.column_name) prct_index FROM user_tab_columns utc, user_ind_columns uic WHERE utc.table_name = uic.table_name AND utc.table_name= 'PS_JOB' GROUP BY utc.table_name; Comment lister toutes les contraintes se rapportant une table ? Auteurs : rouardg , Jaouad , il suffit de regarder la table USER_CONSTRAINTS, en particulier la colonne CONSTRAINT_TYPE de cette table, qui est code de la manire suivante : C : contrainte de type CHECK (genre champ NOT NULL ou avec une condition de vrification genre BETWEEN) P : contrainte de cl primaire (PK) U : contrainte d'unicit (Unique) R : contrainte rfrentielle (FK) SQL> SELECT constraint_name, 1 decode(constraint_type, 'C', 'check', 'P', 'cl primaire ', 'U', 'Contrainte d''unicit', 'R', 'Contrainte Rfrentielle ') constraint_name 2 table_name, search_condition, status 3 FROM USER_CONSTRAINTS; FAQ Oracle - 51 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ CONSTRAINT_NAME CONSTRAINT_NAME TABLE_NAME SEARCH_CONDITION ------------------------------ ------------------------- ------------------------------ ------------ PK_LIST cl primaire USERS_ERP
PK_SEQUENCE cl primaire DD_JOURNAL
PK_PS_PROJECT_LIST cl primaire PS_PROJECT_LIST
SYS_C00774 check PSACCESSPRFL "ACCESSID" IS NOT NULL FAQ Oracle - 52 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Les Utilisateurs Comment afficher la liste des utilisateurs ? Auteurs : Laurent Schneider , La requte suivante permet de lister les utilisateurs avec les proprits suivantes : ID Tablespace par dfaut Tablespace temporaire Mot de passe (crypt) tat Profil Date de cration select USERNAME, USER_ID, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE, PASSWORD, ACCOUNT_STATUS, PROFILE, CREATED from DBA_USERS order by USERNAME; USERNAME USER DEFAULT TEMPORARY PASSWORD ACCOUNT_STATUS PROFILE CREATED ---------- ---- ------- --------- ---------------- ---------------- ------- ---------- ANONYMOUS 38 SYSAUX TEMP anonymous EXPIRED & LOCKED DEFAULT 2006-04-18 CTXSYS 35 SYSAUX TEMP 24ABAB8B06281B4C EXPIRED & LOCKED DEFAULT 2006-04-18 DBSNMP 24 SYSAUX TEMP E066D214D5421CCC OPEN DEFAULT 2006-04-18 DIP 19 USERS TEMP CE4A36B8E06CA59C EXPIRED & LOCKED DEFAULT 2006-04-18 EXFSYS 34 SYSAUX TEMP 66F4EF5650C20355 EXPIRED & LOCKED DEFAULT 2006-04-18 Comment migrer vers un utilisateur identifi par le systme d'exploitation ? Auteurs : Fred_D , L'objectif est de crer un utilisateur identifi par le systme d'exploitation pour viter la saisie des mots de passe "en dur" dans les batchs. La difficult rside dans l'attibution des droits donner cette utilisateur. Le script suivant permet de crer l'utilisateur de type OPS$ (cf. Cration d'un utilisateur authentifi par le systme d'exploitation). Le script Migrate2OPS$.sql gnre 4 scripts SQL qui seront lancs automatiquement si vous le souhaitez. C'est un script interactif qui demande de saisir le nom de l'utilisateur crer et le nom de l'utilisateur source (i.e. l'utilisateur de rfrence). set verify on set feedback on set termout on set linesize 200 ACCEPT to_user PROMPT 'Saisir le user cible (OPS$) : ' ACCEPT from_user PROMPT 'Saisir le user source : ' DEFINE filename = &to_user._&from_user set verify off set feedback off set pagesize 0
COL dbname NOPRINT NEW_VALUE dbname FAQ Oracle - 53 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SELECT HOST_NAME||'-'||INSTANCE_NAME||'.UX' DBNAME FROM v$instance; set termout on SELECT 'Creating user build script...' FROM dual; set termout off spool c:\alter_user_&filename..sql SELECT 'CREATE USER &to_user IDENTIFIED EXTERNALLY PROFILE ' || profile || ' DEFAULT TABLESPACE '|| default_tablespace || ' TEMPORARY TABLESPACE ' || temporary_tablespace FROM sys.dba_users WHERE username = UPPER('&from_user') AND NOT EXISTS (SELECT 1 FROM dba_users WHERE username = UPPER('&to_user')) / SELECT 'ALTER USER &to_user QUOTA ' || DECODE (max_bytes, -1, 'Unlimited', max_bytes) || ' ON ' || tablespace_name || ';' FROM sys.dba_ts_quotas WHERE username = UPPER('&from_user') / spool off
set termout on SELECT 'Creating grant build script...' FROM dual; set termout off spool c:\grant_prvs_&filename..sql SELECT 'GRANT ' || privilege || ' TO &to_user' || admin_option FROM ( SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege, DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option FROM sys.dba_role_privs WHERE grantee != 'SYS' union SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege, DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option FROM sys.dba_role_privs WHERE grantee != 'SYS' union SELECT LOWER(grantee) grantee, LOWER(privilege) privilege, DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option FROM dba_sys_privs s WHERE grantee != 'SYS' union SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' || LOWER(table_name) privilege, DECODE(grantable,'YES', ' WITH ADMIN OPTION;',';') admin_option FROM dba_tab_privs t WHERE grantee != 'SYS' and t.privilege !='EXECUTE' union SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' || LOWER(table_name) privilege, DECODE(grantable,'YES', ' WITH ADMIN OPTION;',';') admin_option FROM dba_tab_privs t WHERE grantee != 'SYS' and t.privilege ='EXECUTE' union SELECT LOWER(owner) grantee, 'ALL ON ' || LOWER(owner) ||'.'|| LOWER(table_name) privilege, ';' admin_option FROM all_tables WHERE owner = upper('&from_user') ORDER BY 1 ) WHERE grantee = LOWER('&from_user'); spool off
FAQ Oracle - 54 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ set termout on SELECT 'Creating synonym build script...' FROM dual; set termout off spool c:\create_synonyms_&filename..sql SELECT DISTINCT 'CREATE SYNONYM '|| LOWER('&to_user') || '.' || LOWER(object_name) || ' FOR ' || LOWER('&from_user') || '.' || LOWER(object_name) || ';' FROM sys.dba_objects WHERE owner = UPPER('&from_user') AND object_type IN ('CLUSTER','FUNCTION','LIBRARY','MATERIALIZED VIEW','PACKAGE','PACKAGE BODY', 'PROCEDURE','SEQUENCE','TABLE','TABLE PARTITION','TYPE','TYPE BODY','VIEW') ORDER BY 1 / spool off set termout on SELECT 'Creating database link build script...' FROM dual; set termout off spool c:\create_dblinks_&filename..sql SELECT 'ALTER USER &to_user IDENTIFIED BY dummypwd;' FROM dual; SELECT 'CONNECT &to_user/dummypwd@&dbname' FROM dual;
SELECT 'CREATE DATABASE LINK ' || l.name || ' CONNECT TO ' || LOWER(l.userid) || ' IDENTIFIED BY ' || LOWER(l.password) || DECODE(l.host,NULL, NULL, ' USING '''||l.host) || ''';' FROM sys.link$ l, sys.user$ u WHERE l.owner# = u.user# AND u.name = UPPER('&from_user') ORDER BY l.name / SELECT 'ALTER USER &to_user IDENTIFIED EXTERNALLY;' FROM dual; spool off set termout on PROMPT PROMPT Tapez [Ctrl+C] pour interrompre le process ou [Enter] pour continuer aprs avoir vrifier les scripts gnrs... PAUSE spool c:\copy_user_&filename..sql SELECT 'set feed on' FROM dual; SELECT 'spool c:\alter_user_&filename..log' FROM dual; SELECT '@alter_user_&filename..sql' FROM dual; SELECT 'spool off' FROM dual; SELECT 'spool c:\grant_prvs_&filename..log' FROM dual; SELECT '@grant_prvs_&filename..sql' FROM dual; SELECT 'spool off' FROM dual; SELECT 'spool c:\create_synonyms_&filename..log' FROM dual; SELECT '@create_synonyms_&filename..sql' FROM dual; SELECT 'spool off' FROM dual; SELECT 'spool c:\create_dblinks_&filename..log' FROM dual; SELECT '@create_dblinks_&filename..sql' FROM dual; SELECT 'spool off' FROM dual; FAQ Oracle - 55 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ spool off Comment mettre en place l'authentification OS sous Windows ? Auteurs : Pomalaix , Par dfaut, les mots de passe des utilisateurs sont stocks dans la base Oracle, sous forme crypte. On peut cependant souhaiter que le compte Oracle d'un utilisateur soit synchronis avec son compte Windows. Ceci procure deux avantages : viter de devoir grer deux systmes distincts de mots de passe, l'un dans la base Oracle, et l'autre dans un serveur de domaine. permettre de se connecter la base de donnes sans fournir de mot de passe, puisqu'il a dj t valid par l'OS. C'est un premier pas vers l'authentification unique, connue sous le sigle SSO. Nous dcrivons ici le paramtrage ncessaire pour mettre en place cette authentification OS dans un environnement Windows. Prcisons qu'il ne suffit pas que le client soit sous Windows; le serveur Oracle doit l'tre aussi. Le principe est que chaque compte NT doit tre mis en correspondance avec un compte Oracle. Le compte Oracle est identique au compte NT, sauf que le compte Oracle possde en plus un prfixe qui est identique pour tous les comptes authentifis par l'OS. Par dfaut, ce prfixe est OPS$. Ainsi, si le compte NT est TOTO, le compte Oracle correspondant doit tre OPS$TOTO. Le choix de l'authentification OS reste souple : il s'applique uniquement aux comptes choisis, si bien qu'on peut tout fait grer certains comptes de manire traditionnelle, avec le mot de passe dans la base, et grer les autres grce l'authentification OS. Voici la procdure : 1) Dans le SQLNET.ORA ct client et ct serveur, insrer : SQLNET.AUTHENTICATION_SERVICES=(NTS) 2) Dans le fichier d'initialisation INITxxx.ORA, insrer : REMOTE_OS_AUTHENT=TRUE 3) Dans l'INITxxx.ORA, noter la valeur du paramtre OS_AUTHENT_PREFIX (OPS$ par dfaut), ou lui donner la valeur dsire. Le plus commode est "" (deux guillemets conscutifs, sans espace) ce qui correspond une valeur nulle, et permet d'avoir des comptes NT et des comptes Oracle identiques. Redmarrer l'instance si une modification a t faite au point 2 ou 3. 4) La cl de registre OSAUTH_PREFIX_DOMAIN, situe ct serveur dans la branche HKLM\Software\Oracle \HomeN, permet de spcifier si l'authentification doit tenir compte ou non du nom de domaine NT. Avec OSAUTH_PREFIX_DOMAIN FALSE, seul le nom du compte est vrifi, indpendamment de son domaine NT. Cela signifie que 2 comptes Toto, situs dans des domaines diffrents, pourraient accder la base de donnes. Avec OSAUTH_PREFIX_DOMAIN TRUE, le domaine NT est galement vrifi, ce qui amliore la scurit. 5) Cration du compte Oracle en majuscules et entre guillemets. (Si OS_AUTHENT_PREFIX est nul, il suffit de supprimer la mention OPS$) 5.1) Dans le cas o OSAUTH_PREFIX_DOMAIN est FALSE pour un compte NT nomm Stagiaire CREATE USER "OPS$STAGIAIRE" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "OPS$STAGIAIRE"; FAQ Oracle - 56 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ OU 5.2) Dans le cas o OSAUTH_PREFIX_DOMAIN est TRUE pour un compte NT nomm Stagiaire dans le domaine Paris CREATE USER "OPS$PARIS\STAGIAIRE" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "OPS$PARIS\STAGIAIRE"; 6) Connexion SQL*Plus depuis l'OS : sqlplusw /@labase Il ne doit pas y avoir d'espace entre le / et le @. En effet, s'il y a un espace "labase" est considr comme le nom d'un script excuter, et non comme un alias Oracle Net. Ou si on est dj dans SQL*Plus : CONNECT /@labase Comment crer un utilisateur via un script SQL Auteurs : Xavier Vlieghe , Via la commande CREATE USER, donc voici un exemple : CREATE USER TEST /* on le baptise */ IDENTIFIED BY mypassword /* Attention, le password est en clair ! */ DEFAULT TABLESPACE TBSTEST /* Le tablespace associ */ TEMPORARY TABLESPACE TEMP; /* Le temporary associ */ Il est ensuite possible de lui assigner des droits via la commande GRANT : GRANT CONNECT TO TEST; FAQ Oracle - 57 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Scurit Comment empecher un utilisateur de se connecter avec un outil spcifique ? Auteurs : SheikYerbouti , Via un trigger de type AFTER LOGON : L'exemple suivant concerne l'outil Toad : create or replace trigger interdire_toad after logon on database declare v_sid sys.v_$session.sid%TYPE; v_isdba sys.v_$session.username%TYPE; v_program sys.v_$session.program%TYPE; begin execute immediate 'select distinct sid from sys.v_$mystat' into v_sid; execute immediate 'select program from sys.v_$session where sid = :b1' into v_program using v_sid; execute immediate 'select username from sys.v_$session where sid = :b1' into v_isdba using v_sid; if upper(v_program) like 'TOAD%' and v_isdba = 'USERNAME' then RAISE_APPLICATION_ERROR (-20001,'Connexion avec '||v_isdba||' sous TOAD interdite,contactez le DBA ',TRUE); end if; end; / Ce trigger a deux limitations qu'il est important de connatre : il n'a pas d'effet si l'utilisateur possde le privilge ADMINISTER DATABASE TRIGGER. il n'a pas d'effet si on renomme l'utilitaire, le contrle se faisant via une comparaison entre le champ v_program et le nom du programme. Comment dsactiver - activer la scurit : alter trigger interdire_toad disable ; alter trigger interdire_toad enable ; Comment empcher un utilisateur d'effectuer certaines oprations sous Sql*Plus ? Auteurs : Jaouad , Il suffit d'effectuer une insertion dans la table product_user_profile : INSERT INTO product_user_profile (product, userid, attribute, char_value) VALUES ('SQL*Plus', 'SCOTT', 'CREATE', 'DISABLED'); COMMIT ; Comment voir les interdictions : set linesize 250 col CHAR_VALUE format a15 col ATTRIBUTE format a15 FAQ Oracle - 58 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ select product, userid, attribute, char_value from product_user_profile ; Voici un exemple de mise en oeuvre, o l'attribut CREATE est dsactiv pour l'utilisateur FORMATION : SQL> conn system Entrez le mot de passe : ******** Connect. SQL> INSERT INTO product_user_profile (product, userid, attribute, char_value) VALUES 2 ('SQL*Plus', 'FORMATION', 'CREATE', 'DISABLED'); 1 ligne cre. SQL> commit ; Validation effectue. SQL> conn formation/formation Connect. SQL> create table dvp ( a varchar2(10)) ; SP2-0544: commande non valide : create SQL> conn system Entrez le mot de passe : ******** Connect. SQL> delete from product_user_profile where userid='FORMATION' ; 1 ligne supprime. SQL> commit ; Validation effectue. SQL> conn formation/formation Connect. SQL> create table dvp ( a varchar2(10)) ; Table cre. Comment autoriser/interdire une connexion Net*8 ? Auteurs : Jaouad , A placer dans le fichier Sqlnet.ora ( sur le serveur hbergeant le SGBDR ) Autoriser les personnes suivantes : TCP.VALIDNODE_CHECKING=yes TCP.INVITED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx) Interdire les personnes suivantes : TCP.VALIDNODE_CHECKING=yes TCP.EXCLUDED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx) FAQ Oracle - 59 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Vous trouverez plus de dtails dans cet article : Filtrage global au niveau du serveur Comment interdire le changement de mot de passe un utilisateur ? Auteurs : Jaouad , l'aide de la fonction suivante : REATE OR REPLACE FUNCTION restrict_pwd_change (username VARCHAR2, password VARCHAR2, old_password VARCHAR2) RETURN boolean IS BEGIN raise_application_error(-20009, 'ERROR: Modification du mot de passe impossible'); END; / et de la commande suivante : ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION restrict_pwd_change; Pour dsactiver cette restriction, utilisez cette commande : ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null; Je suis administrateur et pourtant j'ai une erreur de privilges insuffisants ? Auteurs : Fred_D , Vrifiez que l'utilisateur avec lequel vous vous connectez les droits ncessaires pour faire l'action que vous souhaitez en vous aidant de ce tutoriel : http://oracle.developpez.com/guide/administration/adminrole/#L8 Par exemple, pour voir toutes les tables de la base, il vous faudra avoir le privilge SELECT ANY TABLE. Comment me connecter en tant que SYS, cela me retourne une erreur ? Auteurs : LeoAnderson , Depuis la 9i, il est impossible de se connecter avec l'utilisateur SYS si on ne prcise pas AS SYSDBA ou AS SYSOPER SQLPLUS /NOLOG CONNECT SYS/pwd@db AS SYSDBA Comment scuriser la gestion des mots de passe ? Auteurs : Xavier Vlieghe , Via la gestion de profils ddis, qui peuvent grer les paramtres suivants : FAQ Oracle - 60 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ FAILED_LOGIN_ATTEMPTS : Nombre d'erreurs permises la saisie du mot de passe avant que le compte soit verrouill, PASSWORD_GRACE_TIME : En cas de premption d'un mot de passe d un dlai fix par l'administrateur, cette option permet de paramtrer une dure (en jours) pendant laquelle l'utilisateur pourra tout de mme se connceter, mais recevra un avertissement, PASSWORD_LIFE_TIME : Dure (en jours) de vie maximum d'un mot de passe, PASSWORD_LOCK_TIME : Dure (en jours) pendant laquelle un compte sera verrouill aprs qu'il ait atteint le nombre d'erreurs permises la saisie de son mot de passe (FAILED_LOGIN_ATTEMPTS), PASSWORD_REUSE_MAX : Nombre de changement de mots de passe requis avant de pouvoir r-utiliser un mot de passe dj utilis, PASSWORD_REUSE_TIME : Dure (en jours) minimum pendant laquellel'utilisateur ne peut pas r-utiliser un mot de passe dj utilis, partir du moment o celui-ci a t chang, PASSWORD_VERIFY_FUNCTION : permet de prciser une fonction (PL/SQL) vrifiant la compexit du mot de passe. Voici un exemple de mise en application : 1. Crons un utilisateur TEST : CREATE USER TEST IDENTIFIED BY TEST DEFAULT TABLESPACE TBSTEST; 2. Crons un profil : SQL> CREATE PROFILE Profil_Test LIMIT PASSWORD_LIFE_TIME 60; Profil cr. SQL> ALTER PROFILE Profil_Test LIMIT FAILED_LOGIN_ATTEMPTS 2; Profil modifi. 3. Attribuons ce profil notre utilisateur : SQL> ALTER USER TEST PROFILE Profil_Test; Utilisateur modifi. 4. Vrifions que le paramtre FAILED_LOGIN_ATTEMPTS est bien actif : SQL> connect test/test2@db ERROR: ORA-01017: invalid username/password; logon denied Avertissement : vous n'tes plus connect ORACLE. SQL> connect test/test3@db ERROR: ORA-01017: invalid username/password; logon denied SQL> connect test/test@db ERROR: ORA-28000: the account is locked Il est possible de consulter les profils existants l'aide de la requte suivante : FAQ Oracle - 61 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> SELECT profile, resource_name, limit 2 FROM Dba_Profiles 3 WHERE resource_type = 'PASSWORD' 4 ORDER BY profile; PROFILE RESOURCE_NAME LIMIT --------------- ------------------------- --------------- DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED DEFAULT PASSWORD_LIFE_TIME UNLIMITED DEFAULT PASSWORD_REUSE_MAX UNLIMITED DEFAULT PASSWORD_LOCK_TIME UNLIMITED DEFAULT PASSWORD_GRACE_TIME UNLIMITED DEFAULT PASSWORD_VERIFY_FUNCTION NULL DEFAULT PASSWORD_REUSE_TIME UNLIMITED PROFIL_TEST FAILED_LOGIN_ATTEMPTS 2 PROFIL_TEST PASSWORD_LIFE_TIME 60 PROFIL_TEST PASSWORD_REUSE_MAX DEFAULT PROFIL_TEST PASSWORD_LOCK_TIME DEFAULT PROFIL_TEST PASSWORD_GRACE_TIME DEFAULT PROFIL_TEST PASSWORD_VERIFY_FUNCTION DEFAULT PROFIL_TEST PASSWORD_REUSE_TIME DEFAULT 14 ligne(s) slectionne(s). lien : Gestion des Profils lien : Scurisation d'une base Oracle FAQ Oracle - 62 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Les Tablespaces et autres fichiers Comment lister les tablespaces et leurs fichiers associs ? Auteurs : Laurent Schneider , La requte suivante permet d'afficher l'identifiant, le nom, le status et le tablespace des fichiers de donnes : select FILE_ID, FILE_NAME, STATUS, TABLESPACE_NAME from DBA_DATA_FILES order by FILE_ID; FILE_ID FILE_NAME STATUS TABLESPACE_NAME ---------- ---------------------------------- --------- --------------- 1 /u01/LSC63/data/system01LSC63.dbf AVAILABLE SYSTEM 2 /u01/LSC63/data/undo01LSC63.dbf AVAILABLE UNDOTBS1 3 /u01/LSC63/data/sysaux01LSC63.dbf AVAILABLE SYSAUX 4 /u01/LSC63/data/sysaux02LSC63.dbf AVAILABLE SYSAUX 5 /u01/LSC63/data/sysaux03LSC63.dbf AVAILABLE SYSAUX 6 /u01/LSC63/data/users01LSC63.dbf AVAILABLE USERS Comment obtenir la liste des tablespaces avec leurs caractristiques principales ? Auteurs : Laurent Schneider , La requte suivante permet d'afficher les tablespaces, avec les proprits suivantes : Type Mode de management d'extent Type d'allocation Mode de management de l'espace segment (9i) Option bigfile (10g) tat Nombre de fichiers Taille Taille maximale (avec autoextend) Espace utilis select a.TABLESPACE_NAME, a.CONTENTS, a.EXTENT_MANAGEMENT, a.ALLOCATION_TYPE, a.SEGMENT_SPACE_MANAGEMENT, a.BIGFILE, a.STATUS, nvl(sum(b.count_files),0) FILES, nvl(sum(b.bytes),0) "SIZE", nvl(sum(b.maxbytes),0) MAX_SIZE, nvl(sum(b.bytes),0)-nvl(sum(c.free_bytes),0) "USED" from DBA_TABLESPACES a, ( select TABLESPACE_NAME, sum(BYTES) bytes, count(*) count_files, FAQ Oracle - 63 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ sum(greatest(MAXBYTES,BYTES)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(BYTES), count(*), sum(greatest(MAXBYTES,BYTES)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME ) b, ( select TABLESPACE_NAME, sum(BYTES) free_bytes from DBA_FREE_SPACE group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(BYTES_FREE) free_bytes from V$TEMP_SPACE_HEADER group by TABLESPACE_NAME ) c where a.TABLESPACE_NAME = b.TABLESPACE_NAME (+) and a.TABLESPACE_NAME = c.TABLESPACE_NAME (+) group by a.TABLESPACE_NAME, a.CONTENTS, a.EXTENT_MANAGEMENT, a.ALLOCATION_TYPE, a.SEGMENT_SPACE_MANAGEMENT, a.BIGFILE, a.STATUS order by a.TABLESPACE_NAME; TABLESPA CONTENTS EXTENT_MAN ALLOCATIO SEGMEN BIG STATUS FILES SIZE MAX_SIZE USED -------- --------- ---------- --------- ------ --- ------ ----- --------- ---------- --------- SYSAUX PERMANENT LOCAL SYSTEM AUTO NO ONLINE 3 397410304 6442450944 395771904 SYSTEM PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 471859200 2147483648 470548480 TEMP TEMPORARY LOCAL UNIFORM MANUAL NO ONLINE 1 20971520 2147483648 17039360 UNDOTBS1 UNDO LOCAL SYSTEM MANUAL NO ONLINE 1 182452224 2147483648 13041664 USERS PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 26214400 2147483648 524288 Concernant les fichiers d'archives, la requte suivante permet de connatre les informations suivantes : Chemin et nom de fichier Numro de thread Numro de squence Taille Identifiant resetlogs (10g) Date tat (9i) select NAME, THREAD#, SEQUENCE#, BLOCKS*BLOCK_SIZE "SIZE", RESETLOGS_ID, COMPLETION_TIME, STATUS from V$ARCHIVED_LOG order by SEQUENCE#; NAME THR SEQ SIZE RESETLOGS COMPLETION S ----------------------------------------- --- ---- ------- --------- ---------- - FAQ Oracle - 64 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ /u01/LSC63/arch/arch_588083500_1_2472.dbf 2472 2081280 588083500 2006-06-30 A Comment lister les tablespaces temporaires (locally managed) ? Auteurs : Laurent Schneider , La requte suivante nous permet d'afficher leurs identifiants, noms et status : select FILE_ID, FILE_NAME, STATUS, TABLESPACE_NAME from DBA_TEMP_FILES order by FILE_ID; FILE_ID FILE_NAME STATUS TABLESPACE_NAME ---------- -------------------------------- --------- --------------- 1 /u01/LSC63/data/temp01LSC63.dbf AVAILABLE TEMP Cela ne liste que les tablespaces temporaires allocation d'extent locale (locally managed). En effet, les tablespace temporaires dictionary managed (qui datent d'Oracle 7) ne seront pas listes, car ils ne contiennent pas de "tempfile" mais des datafiles. Comment vider un tablespace temporaire ? Auteurs : Helyos , Il ne sert rien de vider un tablespace temporaire, car celui-ci est automatiquement vid par le processus SMON. De plus il est important de savoir que les tablespaces temporaires peuvent apparatre pleins lors d'une utilisation normale de la base. En effet les extents sont allous une fois puis grs par le systme. Une fois l'utilisation de l'extent termine il est alors marqu comme libre mais n'est pas libr pour des raisons de tuning. Il n'est donc pas rare de ne pas avoir d'espace temporaire libre lors de l'utilisation d'une base. Les extents seront librs par SMON lors du redmarrage de la base. Comment afficher le nom et l'tat des fichiers de contrle ? Auteurs : Laurent Schneider , Via la requte suivante : select NAME, STATUS from V$CONTROLFILE order by NAME; NAME STATUS ------------------------------------------------- ------- /u01/LSC63/ctrl/ctrl01aLSC63.dbf FAQ Oracle - 65 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ /u01/LSC63/ctrl/ctrl01bLSC63.dbf Comment lister les fichiers Redo Log ainsi que leurs caractristiques principales ? Auteurs : Laurent Schneider , La requte suivante permet d'afficher les fichiers redo Log, avec les proprits suivantes : Groupe Thread Squence Taille Nombre de log dans le groupe Type (9i) tat Nom des fichiers Groupe select l.GROUP#, l.THREAD#, l.SEQUENCE#, l.BYTES, l.MEMBERS, l.STATUS, f.TYPE, f.MEMBER from V$LOGFILE f, V$LOG l where l.GROUP# = f.GROUP# order by GROUP#,MEMBER; GROUP# THR SEQ BYTES MEMBERS STATUS TYPE MEMBER ------ --- ---- ------- ------- ---------- ------ -------------------------------- 1 1 2473 4194304 2 INACTIVE ONLINE /u01/LSC63/redo/redo01aLSC63.dbf 1 1 2473 4194304 2 INACTIVE ONLINE /u01/LSC63/redo/redo01bLSC63.dbf 2 1 2474 4194304 2 ACTIVE ONLINE /u01/LSC63/redo/redo02aLSC63.dbf 2 1 2474 4194304 2 ACTIVE ONLINE /u01/LSC63/redo/redo02bLSC63.dbf 3 1 2475 4194304 2 CURRENT ONLINE /u01/LSC63/redo/redo03aLSC63.dbf 3 1 2475 4194304 2 CURRENT ONLINE /u01/LSC63/redo/redo03bLSC63.dbf Comment afficher les caractristiques de la base de donnes ? Auteurs : Laurent Schneider , La requte suivante nous permet d'obtenir les caractristiques suivantes : Nom Identifiant DBID Mode d'archivage Mode flashback (10g) Mode d'ouverture (RW/RO) Date de cration de la base de donnes SELECT NAME, DBID, LOG_MODE, FLASHBACK_ON, OPEN_MODE, CREATED FAQ Oracle - 66 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ FROM v$database;
NAME DBID LOG_MODE FLASHBACK OPEN_MODE CREATED --------- ------------- ------------ --------- ---------- ---------- LSC63 1119326572 ARCHIVELOG NO READ WRITE 2006-04-18 partir d'Oracle 9i, la requte suivante permet d'afficher le nom et la valeur des proprits de la base de donnes (ex: tablespace properties) : SELECT PROPERTY_NAME, PROPERTY_VALUE, DESCRIPTION FROM DATABASE_PROPERTIES ORDER BY PROPERTY_NAME; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION ------------------------------ --------------- ------------------------------------- DEFAULT_PERMANENT_TABLESPACE USERS Name of default permanent tablespace DEFAULT_TBS_TYPE SMALLFILE Default tablespace type DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace Comment afficher le nom et la version de l'instance ? Auteurs : Laurent Schneider , Via la requte suivante : SELECT INSTANCE_NAME, VERSION FROM V$INSTANCE;
INSTANCE_NAME VERSION ---------------- ----------------- LSC63 10.2.0.2.0 Comment afficher le nom global de la base ? Auteurs : Laurent Schneider , Via la requte suivante : SQL> SELECT GLOBAL_NAME 2 FROM GLOBAL_NAME; GLOBAL_NAME ------------------------------ LSC63.DOMAIN.CH Comment afficher la fonction et le nombre d'utilisations dtectes (ex: Partitioning) ? Auteurs : Laurent Schneider , partir d'Oracle 10g, via la requte suivante : FAQ Oracle - 67 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SELECT NAME, DETECTED_USAGES FROM DBA_FEATURE_USAGE_STATISTICS ORDER BY NAME; NAME DETECTED --------------------- -------- Partitioning (system) 11 Partitioning (user) 0 Comment supprimer une base de donnes sous SQL*Plus ? Auteurs : Jaouad , A partir de la 10g il est possible de supprimer une base de donnes Oracle via une commande sous Sql*Plus : Il faut tre connect en sysdba avec une base de donnes en mode open. Nous vous recommandons bien entendu la plus grande vigilance quant l'utilisation de cette commande, dont la syntaxe est la suivante : SQL> drop database; Comment migrer un tablespace de DICTIONNARY en LOCALLY MANAGED ? Auteurs : Fred_D , Depuis la version 9.2, il est possible d'utiliser la procdure sys.DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL ('NOM_DU_TABLESPACE') SYSTEM ne peut tre migr que si tous les autres tablespaces ont t migr et si la base de donnes n'est pas configure avec SYSTEM comme tablespace temporaire par dfaut. Attention, la migration inverse est impossible ! Nanmoins, je vous rappelle qu'Oracle prconise l'utilisation de LMT. Note : la note Metalink 175434.1 dcrit en dtail cette migration. Comment renommer un Tablespace ? Auteurs : Jaouad , Depuis la version 10g, Il est possible de renommer un Tablespace grce la commande suivante : SQL> alter tablespace Tbs1 rename to Tbs2 ; Il n'est pas possible de renommer les tablespaces System et Sysaux. On peut renommer les tablespaces permanents et temporaires : pour ce faire, le tablespace ou l'un de ses fichiers de donnes ne doit pas tre hors ligne, sinon l'opration de renomage ne peut avoir lieu ! Lorsque l'on modifie le nom d'un tablespace, Oracle met jour les rfrences de ce tablespace : savoir les fichiers de contrle, le dictionnaire de donnes et les en-ttes de fichiers. Si ce Tablespace est en mode Read Only les enttes de fichiers ne sont pas modifis (ils ont besoin pour ce faire d'tre en mode Read Write) : Un message est consign dans le fichier alerte de l'instance. FAQ Oracle - 68 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Si la modification de nom concerne le tablespace d'annulation UNDO et qu'il s'agit du tablespace dsign par le paramtre d'initialisation, la modification affecte le Spfile. Si c'est le Pfile qui est utilis, alors un message d'alerte est consign dans le fichier d'alerte de l'instance Le paramtre compatible doit au moins tre a 10.0.0. Comment supprimer un datafile ? Auteurs : Fred_D , Laurent Schneider , C'est normallement impossible : Au mieux un datafile peut tre renomm, retaill ou dplac. Pour le supprimer d'un tablespace il faut recrer le tablespace sans ce datafile. C'est maintenant possible en 10gR2 : SQL> create tablespace x datafile '/tmp/x1.dbf' size 4m, '/tmp/x2.dbf' size 4m; Tablespace created. SQL> alter tablespace x drop datafile '/tmp/x2.dbf'; Tablespace altered. Comment connatre la taille d'un tablespace et de son espace libre ? Auteurs : LeoAnderson , rouardg , La vue DBA_DATA_FILES va nous permettre de dterminer la taile d'un tablespace, La vue DBA_EXTENTS permet de connaitre la taille de tous les segments dans les diffrents datafiles, La vue DBA_FREE_SPACE qui indique les espaces libres dans les database files. La requte suivante vous permet de rcuprer toutes ces informations : SQL> SELECT A.tablespace_Name, A.Alloue, B.Occupe, C.Libre 2 FROM (select tablespace_name, sum(bytes)/1024/1024 AS ALLOUE from dba_data_files group by tablespace_name) a, 3 (select tablespace_name, Sum(bytes)/1024/1024 AS OCCUPE from dba_segments group by tablespace_name) b, 4 (select tablespace_name, Sum(bytes)/1024/1024 AS LIBRE from dba_free_space group by tablespace_name) c 5 WHERE B.tablespace_Name = A.tablespace_Name 6 AND C.Tablespace_Name = B.Tablespace_Name; Attention : En 10g, le "LIBRE" peut tre diffrent de ("ALLOUE"- "OCCUPE") cause de la recyclebin ! Comment connatre l'occupation du tablespace SYSAUX (10g) ? Auteurs : Jaouad , Le tablespace SYSAUX est apparue avec la version 10g, et a pour but de dcharger le tablespace SYSTEM de certains segments. SQL> select occupant_name, space_usage_kbytes from v$sysaux_occupants ; FAQ Oracle - 69 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ OCCUPANT_NAME SPACE_USAGE_KBYTES ---------------------------------------------------------------- ------------------ LOGMNR 6080 LOGSTDBY 896 STREAMS 512 XDB 49600 AO 21248 XSOQHIST 21248 ... FAQ Oracle - 70 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Systme Comment afficher l'encombrement disque/mmoire des units de traitement ? Auteurs : SheikYerbouti , La place occupe par les units de traitement est interrogeable depuis la vue : USER_OBJECT_SIZE NAME Contient le nom de l'objet TYPE Contient le type de l'objet (TYPE, TYPE BODY, TABLE, VIEW, SYNONYM,SEQUENCE, PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, JAVA SOURCE, JAVA CLASS, JAVA RESOURCE ou JAVA DATA) SOURCE_SIZE Contient la taille en octets du code source PARSED_SIZE Contient la taille en octets du code DIANA (incluant les rfrences aux objets sous-jacents) CODE_SIZE Contient la taille du code charg en mmoire l'excution ERROR_SIZE Contient la taille des messages d'erreur taille des units de traitement SQL> SELECT * 2 FROM USER_OBJECT_SIZE 3 WHERE TYPE IN ('PACKAGE BODY','PACKAGE','FUNCTION','PROCEDURE') 4 ORDER BY TYPE,NAME ; NAME TYPE SOURCE_SIZE PARSED_SIZE CODE_SIZE ERROR_SIZE ------------------------------ ------------- ----------- ----------- ---------- ---------- LIGNESALAIRE FUNCTION 280 261 563 0 PWD_DECODE FUNCTION 459 234 702 0 RETOURNE_PARAM FUNCTION 885 239 990 0 SRV_LECTURE_PARAMETRE FUNCTION 458 342 697 0 TEST_XX FUNCTION 869 269 1119 0 PKG_CORRECTION PACKAGE 414 1493 362 0 TEST_RECORD PACKAGE 233 761 875 0 PKG_CORRECTION PACKAGE BODY 11408 0 12467 0 TEST_RECORD PACKAGE BODY 403 0 1376 0 DEBUG PROCEDURE 1153 475 1343 0 DISPLAY_IMAGE PROCEDURE 894 509 1277 0 ECRITURE_ERREUR PROCEDURE 755 1517 673 0 La premire ligne indique que la fonction LIGNESALAIRE occupe 280 octets de code source et ncessite 563 octets en mmoire l'excution. Comment connatre les bases en cours d'utilisation ? Auteurs : Helyos , Pour connatre les bases de donnes actuellement en cours d'utilisation sur votre poste il vous suffit : Sous Windows d'aller dans le gestionnaire des services : Click droit sur le poste de travail => grer => services et applications => services puis de regarder tous les services commenant par OracleService et qui sont formats de la sorte OracleService<SID> (o SID correspond au nom de l'instance associe) Sous Linux Vous pouvez lancer la commande suivante : ps -ef | egrep pmon_ | grep -v grep Comment afficher l'encombrement mmoire des pools partags ? Auteurs : SheikYerbouti , Voici un script permettant d'afficher la taille alloue, utilise et libre de chaque pool : FAQ Oracle - 71 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ COL "Total octets allous" FORMAT A20 COL "octets utiliss" FORMAT A20 COL "octets libres" FORMAT A20 SELECT a.POOL "Pool" , b.Octets || ' (' || ROUND(b.Octets/1024/1024) || ' Mo)' "Total octets allous" , (b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utiliss" , a.BYTES || ' (' || ROUND(a.BYTES/1024/1024) || 'Mo)' "octets libres" FROM V$SGASTAT a, ( SELECT POOL, SUM(BYTES) Octets, SUM(BYTES/1024/1024) Mo FROM V$SGASTAT WHERE POOL IS NOT NULL GROUP BY POOL ORDER BY POOL) b WHERE NAME = 'free memory' AND a.POOL = b.POOL ORDER BY a.POOL ; Ainsi que le rsultat de l'excution SQL> COL "Total octets allous" FORMAT A20 SQL> COL "octets utiliss" FORMAT A20 SQL> COL "octets libres" FORMAT A20 SQL> SELECT 2 a.POOL "Pool" 3 , b.Octets || ' (' || ROUND(b.Octets/1024/1024) || ' Mo)' "Total octets allous" 4 , (b.Octets-a.BYTES) || ' (' || ROUND((b.Octets-a.BYTES)/1024/1024) || ' Mo)' "octets utiliss" 5 , a.BYTES || ' (' || ROUND(a.BYTES/1024/1024) || 'Mo)' "octets libres" 6 FROM V$SGASTAT a, 7 ( SELECT POOL, SUM(BYTES) Octets, SUM(BYTES/1024/1024) Mo 8 FROM V$SGASTAT 9 WHERE POOL IS NOT NULL 10 GROUP BY POOL 11 ORDER BY POOL) b 12 WHERE NAME = 'free memory' 13 AND a.POOL = b.POOL 14 ORDER BY a.POOL 15 / Pool Total octets allous octets utiliss octets libres ----------- -------------------- -------------------- -------------------- java pool 29360128 (28 Mo) 0 (0 Mo) 29360128 (28Mo) large pool 8404644 (8 Mo) 304668 (0 Mo) 8099976 (8Mo) shared pool 41943040 (40 Mo) 22455544 (21 Mo) 19487496 (19Mo) Comment mesurer les I/O sur les fichiers ? Auteurs : Jaouad , Via le script suivant : set linesize 250 col file_name format a40 select b.file_name, a.file#, a.cnt from (select file#, count(1) cnt from v$bh group by file#) a, dba_data_files b FAQ Oracle - 72 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ where a.file# = b.file_id; Comment afficher le nom du composant, l'tat et la version des lments du registre ? Auteurs : Laurent Schneider , Via la requte suivante, partir de la 9i : SELECT COMP_NAME, STATUS, VERSION FROM DBA_REGISTRY ORDER BY COMP_NAME; COMP_NAME STATUS VERSION ---------------------------------- ------ ----------- JServer JAVA Virtual Machine VALID 10.2.0.2.0 Oracle Database Catalog Views VALID 10.2.0.2.0 Oracle Database Java Packages VALID 10.2.0.2.0 Oracle Database Packages and Types VALID 10.2.0.2.0 Oracle Expression Filter VALID 10.2.0.2.0 Oracle Text VALID 10.2.0.2.0 Oracle Workspace Manager VALID 10.2.0.3.0 Oracle XDK VALID 10.2.0.2.0 Oracle XML Database VALID 10.2.0.2.0 Oracle interMedia VALID 10.2.0.2.0 Comment afficher la date, l'action et la version des patches/upgrades ? Auteurs : Laurent Schneider , partir de la version 10.1.0.5 cpu2006jan, via le requte suivante : SELECT ACTION_TIME, ACTION, VERSION, ID FROM DBA_REGISTRY_HISTORY ORDER BY to_timestamp(ACTION_TIME,'DD.MM.YYYY HH24:MI:SSXFF'); ACTION_TIME ACTION VERSION ID ---------------- -------- ------------ ---------- 14.02.2006 10:28 CPU 4751932 07.03.2006 11:30 UPGRADE 10.2.0.2.0 Quelle est la procdure pour dplacer des objets de SYSAUX (10g) ? Auteurs : Jaouad , Lors d'une rorganisation de base de donnes, si l'on souhaite dplacer certains objets du tablespace SYSAUX vers d'autres tablespaces, comment procder ? Cette requte va nous donner la procdure utiliser pour le dplacement en fonction des objets SQL> SELECT occupant_name, schema_name, move_procedure 2 FROM v$sysaux_occupants ; FAQ Oracle - 73 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ OCCUPANT_NAME SCHEMA_NAME MOVE_PROCEDURE ---------------- --------------- --------------------------------------------------------------- LOGMNR SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE LOGSTDBY SYSTEM SYS.DBMS_LOGSTDBY.SET_TABLESPACE STREAMS SYS XDB XDB XDB.DBMS_XDB.MOVEXDB_TABLESPACE AO SYS DBMS_AW.MOVE_AWMETA XSOQHIST SYS DBMS_XSOQ.OlapiMoveProc ... Comment connatre le systme d'exploitation qui hberge le SGBDR ? Auteurs : Jaouad , Via cette requte : SQL> SELECT dbms_utility.port_string FROM dual; PORT_STRING ----------------------------------------------- IBMPC/WIN_NT-8.1.0 Comment savoir si une base source est valide pour une migration en 10g ? Auteurs : Jaouad , Lors d'une migration vers une base 10g, comment savoir si les pr requis ont t vrifis avant d'effectuer la migration ? Via un nouvel outil d'upgrade ( Upgrade information Tool ) : Prendre le fichier utlu101i.sql ( migration vers une 10gR1 ) prsent dans le dossier $ORACLE_HOME\rdbms\admin \ et le faire tourner sur la base source. Il est possible de faire une migration vers la 10g ( quelque que soit la release ) sans passer par d'autres versions si la base source est 806, 817, 927 Comment dtecter/supprimer les sessions qui sont marqus Killed ? Auteurs : Jaouad , Voici comment dterminer les sessions qui sont killed for ever : sous Unix : SELECT spid FROM v$process WHERE NOT EXISTS ( SELECT 1 FROM v$session WHERE paddr = addr); sous Windows : SVRMGRL> SELECT spid, osuser, s.program FROM v$process p, v$session s WHERE p.addr=s.paddr; FAQ Oracle - 74 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Pour les tuer : c:>orakill sid thread Comment modifier l'emplacement de la rgion de restauration flash (10g) ? Auteurs : bouyao , Il suffit de modifier le parametre DB_RECOVERY_FILE_DEST. Avec ce paramtre, il faut toujours spcifier le paramtre d'initialisation DB_RECOVERY_FILE_DEST_SIZE. Par exemple : ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/disk1' SCOPE=BOTH SID='*' ; Quelles sont les fonction de SMon (System Monitor) ? (en 9i) Auteurs : bouyao , Fusion des extents libre toutes les 5 mn Nettoyage des segments temporaires toutes les 2 h Mise jours de SMON_SCN_TIME toutes les 5 mn Nettoyage des objects inexistants dans OBJ$, toutes les 12 h Nettoyage de IND$ toutes les heure Compactage (shrink) des segments undo toutes les 12 h Restauration des transactions uniquement au dmarrage de la base Il annule les transactions non valides quand c'est post par PMON Comment reveiller le SMON pour nettoyer les segements temporaires ? Auteurs : LeoAnderson , En ralit, SMon (System MONitor) ne s'endort pas rellement, puisqu'il n'est sollicit que de temps autres lorsque la base est en activit. La doc (cf lien au bas de la QR) prcise simplement que : SMON checks regularly to see whether it is needed Mais il peut tre utile parfois de le solliciter manuellement, ce qu'on appelle un wakeup : 1. Excutez d'abord la requte suivante : SQL> SELECT pid FROM v$process 2 WHERE addr = 3 ( 4 SELECT paddr FROM v$bgprocess 5 WHERE name = 'SMON' 6 ); PID ---------- 8 FAQ Oracle - 75 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 2. Puis rcuprez le PID pour excuter la commande suivante (connect en tant que SYSDBA) : En gnral : 6 => 8i, 7 => 9i et 8 => 10g
SQL> ORADEBUG WAKEUP 8 Instruction traite. lien : System Monitor Process (SMON) Comment trouver les sessions qui utilisent la tablespace temporaire ? Auteurs : Aline , Grce la requte suivante : SQL> SELECT se.osuser, se.username, se.sid, 2 su.extents, su.blocks * to_number(rtrim(p.value)) AS Space, 3 tablespace 4 FROM v$sort_usage su, v$parameter p, v$session se 5 WHERE p.name = 'db_block_size' 6 AND su.session_addr = se.saddr 7 ORDER BY se.username, se.sid; FAQ Oracle - 76 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Objets Comment lister les objets invalides ? Auteurs : Laurent Schneider , La requte suivante nous permet de lister les objets invalides, avec les informations suivantes : Schma Type d'objet Date de cration Date de dernire modification/compilation SELECT OWNER, OBJECT_TYPE, OBJECT_NAME, CREATED, LAST_DDL_TIME FROM DBA_OBJECTS WHERE STATUS='INVALID' ORDER BY OWNER, OBJECT_NAME; OWNER OBJECT_TYPE OBJECT_NAME CREATED LAST_DDL_T ------ ----------- -------------------- ---------- ---------- PUBLIC SYNONYM DBA_HIST_FILESTATXS 2006-04-18 2006-06-13 PUBLIC SYNONYM DBA_HIST_SQLBIND 2006-04-18 2006-06-13 PUBLIC SYNONYM DBA_HIST_SQLSTAT 2006-04-18 2006-06-13 Comment lister les objets supprims (10g) ? Auteurs : Laurent Schneider , partir de la version 10g, la requte suivante permet de lister les objets dans la poubelle, avec les proprits suivantes : Nom du tablespace Type d'objet Propritaire Nom original Nom BIN$ SCN Date de cration Date d'effacement des objets dans la poubelle (Recycle bin) SELECT TS_NAME, TYPE, OWNER, ORIGINAL_NAME, OBJECT_NAME, DROPSCN, CREATETIME, DROPTIME FROM dba_recyclebin ORDER BY owner, type, original_name, dropSCN; TS_NAME TYPE OWNER ORIG OBJECT_NAME DROPSCN CREATETIME DROPTIME ------- ----- ----- ---- ------------------------------ ---------- ---------- ---------- FAQ Oracle - 77 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ USERS TABLE SCOTT T BIN$F22M89kvcArgQwow5W1wCg==$0 3537036 2006-06-30 2006-06-30 Comment lister les jobs ? Auteurs : Laurent Schneider , La requte suivante nous permet de lister les jobs, avec les caractristiques suivantes : Schma Numro du job Date de prochaine xecution Code des jobs SELECT SCHEMA_USER, JOB, NEXT_DATE, WHAT FROM DBA_JOBS;
SCHEMA JOB NEXT_DATE WHAT ------ --- ---------- -------- SYS 1 2006-07-01 scott.p; Comment lister les sessions ? Auteurs : Laurent Schneider , La requte suivante permet de lister les sessions, avec les proprits suivantes : Utilisateur DB Utilisateur SE SID SERIAL# Processus OS Type de serveur Status Machine cliente Programme Heure du login Nom du dispatcher Nom du shared server SELECT s.USERNAME, s.OSUSER, s.SID, s.SERIAL#, p.SPID, s.SERVER, s.STATUS, s.MACHINE, s.PROGRAM, TO_CHAR(s.LOGON_TIME, 'hh24:mi:ss') LOGON_TIME, d.name DISP, ss.name SERV FROM V$PROCESS p, V$SESSION s, V$DISPATCHER d, FAQ Oracle - 78 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ V$CIRCUIT c, V$SHARED_SERVER ss WHERE p.ADDR = s.PADDR AND s.SADDR=c.SADDR (+) AND c.DISPATCHER=d.PADDR (+) AND c.SERVER=ss.PADDR (+) AND s.USERNAME IS NOT NULL ORDER BY s.USERNAME, p.SPID;
USERNAME OSUSER SID SERIAL# SPID SERVER STATUS MACHINE PROGRAM LOGON DISP SERV -------- ------ ---- ------- ------------ --------- -------- --------- ------- ----- ---- ---- DBSNMP oracle 129 31 2465846 SHARED ACTIVE pclsc01 emagent 06:17 D000 S003 DBSNMP oracle 122 6 2728088 NONE INACTIVE pclsc01 emagent 06:17 D000 SYS oracle 113 2669 2920628 DEDICATED ACTIVE pclsc01 sqlplus 10:38 Concernant les "longues oprations", la requte suivante vous permettra d'obtenir : Numros de sessions Opration Travail effectu Travail total Temps restant SELECT SID, SERIAL#, OPNAME, SOFAR, TOTALWORK, TIME_REMAINING FROM V$SESSION_LONGOPS WHERE TIME_REMAINING != 0;
SID SERIAL# OPNAME SOFAR TOTAL TIME_REM ----- ------- --------------------------- ------ ------ -------- 120 4001 RMAN: full datafile backup 33692 66496 76 Comment voir toutes les tables qui sont dans le buffer KEEP ? Auteurs : LeoAnderson , Jaouad , Depuis la version 8, le BUFFER CACHE est divis en plusieurs segments : DEFAULT, KEEP et RECYCLE. Contrairement ce que leurs noms peuvent laisser penser, ils sont grs tous les 3 exactement de la mme faon, par les mme rgles LRU (Last Recently Used). En gnral, on utilise le buffer KEEP pour y stocker les blocks des tables que l'on interroge souvent; et le buffer RECYCLE pour des donnes plus volatiles. Par exemple, si on a une table de REFERENCE, une table de COMMANDES et une table IMAGE_PRODUIT, on aura intrt rpartir les tables de la faon suivante : COMMANDES sur le buffer pool DEFAULT REFERENCE dans le buffer pool KEEP IMAGE_PRODUIT dans le buffer pool RECYCLE En effet, si l'on interroge l'image (volume important), cela va ncessiter de sortir du pool de nombreux blocs de REFERENCE qu'il faudra recharger ultrieurement alors que les blocs de l'image auront trs peu de chance de resservir... Les noms des buffers pools ne sont qu'une astuce mnmotechnique, car ils pourraient trs bien s'appeller A, B et C, cela ne changerait rien ! Remarque : depuis la 9i, il est possible de dfinir des buffer pools de taille de block diffrente ( db_nk_cache_size) mais les buffer KEEP et RECYCLE auront forcment comme taille de bloc la taille DEFAULT. FAQ Oracle - 79 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Donc, on a 3 pools de taille par dfault et jusqu' 4 buffers de taille diffrente, ce qui fait 7 zones buffers indpendantes au maximum ! (mais je vous dconseille vivement d'implmenter un tel systme, a deviendra impossible administrer/ tuner !) La requte est la suivante : col object_type format a10 col object_name format a20 SELECT dba_objects.owner,object_name,object_type,object_type FROM dba_objects, dba_indexes,dba_tables WHERE dba_objects.object_name = dba_indexes.index_name AND dba_objects.object_name = dba_tables.table_name AND dba_tables.buffer_pool = 'KEEP' AND dba_indexes.buffer_pool = 'KEEP' ; Comment "Keeper" une table en mmoire : ALTER TABLE TABLE_NAME STORAGE (BUFFER_POOL KEEP) ; Attention : avec les multiples buffers pools, il n'est plus possible de monitorer les ratios par la vue habituellement utilise (v$SysStat) mais Oracle a implment la vue v$Buffer_Pool_Statistics : SQL> SELECT Name, Block_size, Round(100*(CONSISTENT_GETS+DB_BLOCK_GETS-PHYSICAL_READS)/(CONSISTENT_GETS+DB_BLOCK_GETS) ,2) 2 AS HitRatio 3 FROM v$buffer_pool_statistics; NAME BLOCK_SIZE HITRATIO -------------------- ---------- ---------- DEFAULT 8192 97.77
SQL> ALTER system SET db_keep_cache_size=50M scope=SPFILE;
/* ARRET / RELANCE DE LA BASE */
SQL> CREATE TABLE toto (col1 varchar2(30) ) storage (buffer_pool keep);
TABLE created.
SQL> SELECT Name, Block_size, Round(100*(CONSISTENT_GETS+DB_BLOCK_GETS-PHYSICAL_READS)/(CONSISTENT_GETS+DB_BLOCK_GETS) ,2) 2 AS HitRatio 3 FROM v$buffer_pool_statistics;
NAME BLOCK_SIZE HITRATIO -------------------- ---------- ---------- KEEP 8192 100 DEFAULT 8192 89.57 FAQ Oracle - 80 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Archive Log Comment savoir si une base est en mode archivelog ? Auteurs : bouyao , Grce la commande suivante : SQL> ARCHIVE LOG LIST mode Database log mode No Archive Archivage automatique Dsactiv Destination de l'archive USE_DB_RECOVERY_FILE_DEST Squence de journal en ligne la plus ancienne 82 Squence de journal courante 84 Il faut tre connect en tant que SYSDBA, sous peine d'obtenir l'erreur suivante : ORA-01031: insufficient privileges On peut galement utiliser le vue V$DATABASE : SELECT LOG_MODE FROM SYS.V$DATABASE; LOG_MODE ------------ NOARCHIVELOG Comment savoir le volume d'archive log gnr par une instance ? Auteurs : Jaouad , Il est important de monitorer le suivi des archiveLog, afin de dtecter des archives trop importantes par rapport l'activit. Cette requte fontionne sur toutes les versions : SQL> SELECT TO_DATE(TO_CHAR(next_time, 'dd/mm/yyyy'), 'dd/mm/yyyy') Jour, ROUND(SUM(blocks*block_siz e/1024/1024)) Mo 2 FROM v$archived_log 3 GROUP BY TO_DATE(TO_CHAR(next_time, 'dd/mm/yyyy'), 'dd/mm/yyyy') 4 ORDER BY 1 DESC ; JOUR MO --------- ---------- 26-SEP-06 48226 25-SEP-06 25258 24-SEP-06 20438 23-SEP-06 31261 22-SEP-06 17450 21-SEP-06 18811 20-SEP-06 30778 19-SEP-06 36108 18-SEP-06 90508 17-SEP-06 31568 FAQ Oracle - 81 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 16-SEP-06 50283 Comment activer l'archivage dans Oracle ? Auteurs : bouyao , 1. Il faut tout d'abord arrter la base : Sql> SHUTDOWN On ne peut pas modifier le mode ARCHIVELOG en NOARCHIVELOG si la base besoin d'une restauration media. 2. Il faut ensuite sauvegarder la base : En effet, avant de faire des modifications majeures dans la base, il faut toujours la sauvegarder pour se protger pour des raisons de scurit. 3. Editer le fichier d'initialisation pour ajouter les paramtres qui spcifient la destination des archives. 4. Dmarrer la base en mode mount sans l'ouvrir : sql> STARTUP MOUNT 5. Modifier le mode d'archivage et ouvrir la base. sql> ALTER DATABASE ARCHIVELOG; sql> ALTER DATABASE OPEN; Le changement du mode d'archivage mettra jours le fichier de contrle et rendra les anciennes sauvegardes inutilisables. 6. Arrter la base : sql> SHUTDOWN IMMEDIATE 7. Sauvegarde la base : En version 10g, il n'est pas ncessaire de renseigner le paramtre d'initialisation : LOG_ARCHIVE_START = TRUE FAQ Oracle - 82 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > ISqlPlus (10g) Comment dmarrer et arrter Isqlplus ? Auteurs : Jaouad , Isqlplus est install automatiquement partir de la version 10g. Pour le dmarrer et l'arrter, Oracle a prvu un binaire Isqlpluscl ( prsent dans le rpertoire $ORACLE_HOME/bin) : dmarrage : sproerp17-oracle: /oracle/product/102>isqlplusctl start iSQL*Plus 10.2.0.1.0 Copyright (c) 2003, 2005, Oracle. ALL rights reserved. Starting iSQL*Plus ... iSQL*Plus started. Arrt : sproerp17-oracle: /oracle/product/102>isqlplusctl stop iSQL*Plus 10.2.0.1.0 Copyright (c) 2003, 2005, Oracle. ALL rights reserved. Stopping iSQL*Plus ... iSQL*Plus stopped. Comment retrouver les informations de connexions Isqlplus Auteurs : Jaouad , Le fichier contenant les URL de connexions Isqlplus (informations qui sont donnes la fin de l'installation) peut tre retrouv cet emplacement : $ORACLE_HOME/install/readme.txt sproerp17-oracle: /oracle/product/102>more $ORACLE_HOME/install/readme.txt
The following J2EE Applications have been deployed AND are accessible at the URLs listed below.
iSQL*Plus URL: http://sproerp17:5560/isqlplus
iSQL*Plus DBA URL: http://sproerp17:5560/isqlplus/dba Comment changer le port d'Isqlplus ? Auteurs : Jaouad , Voici comment changer le port d'coute d'Isqlplus, en passant par exemple de 5560 80 : arrter Isqlplus avec la commande : isqlplusctl stop Editer le script /$ORACLE_HOME/oc4j/j2ee/isqlplus/config/http-web-site.xml et remplacer 5560 par 80 : FAQ Oracle - 83 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ <web-site port="80" display-name="OC4J Java HTTP Web Site"> Dmarrer Isqlplus avec la commande : isqlplusctl start FAQ Oracle - 84 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Administration > Autres Comment afficher l'espace disque occup par les objets Oracle ? Auteurs : SheikYerbouti , Comment calculer l'espace disque occup par les objets Oracle En interrogeant la vue DBA_SEGMENTS : SQL> COLUMN TABLE FORMAT A30 SQL> COLUMN Taille FORMAT A15 SQL> COLUMN TABLESPACE FORMAT A20 SQL> SQL> SELECT segment_name "TABLE" 2 , SUM(BYTES) /1024 || 'Ko' "Taille" 3 , blocks "Blocs" 4 , tablespace_name "TABLESPACE" 5 FROM dba_segments 6 WHERE segment_type = 'TABLE' 7 AND OWNER = 'FD' 8 GROUP BY segment_name, tablespace_name, blocks 9 ORDER BY segment_name ; TABLE Taille Blocs TABLESPACE ------------------------------ --------------- ---------- -------------------- ADRESSE 64Ko 8 USERS CONTACT 64Ko 8 USERS DEPT 64Ko 8 USERS EMP 128Ko 16 USERS EMPLOYE 64Ko 8 USERS FACTURE 64Ko 8 USERS LOV_BLOCK 64Ko 8 USERS LOV_COLONNE 64Ko 8 USERS LOV_ELEMENT_COLONNE 64Ko 8 USERS LOV_ITEM 64Ko 8 USERS LOV_LOV 64Ko 8 USERS LOV_MODULE 64Ko 8 USERS NOMBRES 64Ko 8 USERS TELEPHONE 64Ko 8 USERS TEST 2048Ko 256 USERS TEST_LOV 4096Ko 512 USERS TEST_TYPES 64Ko 8 USERS TRACE 64Ko 8 SYSTEM UTIL_PREFS 64Ko 8 USERS UTIL_PREFS_ORDER 64Ko 8 USERS UTIL_PREFS_RECORD_ORDER 64Ko 8 USERS 21 ligne(s) slectionne(s). Afficher la place occupe par toutes les tables d'un schma particulier : SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 2 , SUM(blocks) "Blocs" 3 FROM dba_segments 4 WHERE segment_type = 'TABLE' 5 AND OWNER = 'FD' 6 GROUP BY OWNER ; Taille Blocs --------------- ---------- 7,25Mo 928 Afficher le cumul de volumtrie de tous les objets d'un schma particulier : FAQ Oracle - 85 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 2 , SUM(blocks) "Blocs" 3 FROM dba_segments 4 WHERE OWNER = 'FD' ; Taille Blocs --------------- ---------- 12,625Mo 1616 Afficher l'espace occup par l'ensemble des schmas : SQL> SELECT SUM(BYTES) /1024 /1024 || 'Mo' "Taille" 2 , SUM(blocks) "Blocs" 3 FROM dba_segments ; Taille Blocs --------------- ---------- 647,484375Mo 82878 Comment positionner la valeur de certains paramtres la connection? Auteurs : lalystar , Pour fixer la valeur de certains paramtres de sessions automatiquement chaque connection d'un utilisateur donn, le plus simple est d'utiliser un trigger au niveau de la base. Le trigger doit tre cr en tant que SYS ou bien par un utilisateur ayant le privilge ADMINISTER DATABASE TRIGGER. create or replace trigger TG_DB_AFTER_LOGON after logon on database begin if user = 'SCOTT' then execute immediate 'alter session set sort_area_size=100000'; end if; end; Exemple d'utilisation : SQL> connect sys/... as sysdba Connected. SQL> create or replace trigger TG_DB_AFTER_LOGON after logon on database 2 begin 3 if user = 'SCOTT' then 4 execute immediate 'alter session set sort_area_size=100000'; 5 end if; 6 end; 7 8 / Trigger created. SQL> show parameter sort_area_size NAME TYPE VALUE ------------------------------------ ----------- ----------------------------- sort_area_size integer 65536 SQL> connect scott/... Connected. FAQ Oracle - 86 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> show parameter sort_area_size; NAME TYPE VALUE ------------------------------------ ----------- ----------------------------- sort_area_size integer 100000 Ce genre de trigger est utile en particulier pour fixer les paramtres rgionaux (sparateur dcimal, sparateur de milliers...) indpendamment de la plateforme (Windows, Unix...) et de l'outil utilis pour la connection (SQL*Plus, SQL*Loader, ...). Comment crer un DBLink sans Tnsnames.ora ? Auteurs : Jaouad , Create database link dblink_name connect to user identified by password using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = SID) ) )' Comment lire le fichier d'alert de Sql*Plus ? Auteurs : Jaouad , Ici il s'agit d'utiliser les tables externes, fonctionnalit disponible partir de la 9i : create directory BDUMP as 'background_dump_dest' create table alert_log(text varchar2(80)) organization external ( type oracle_loader default directory BDUMP access parameters (records delimited by newline) location ('alert_SID.log') ) reject limit 1000; SQL> select * from alert_log ; Comment lister les Directory ainsi que leurs caractristiques principales ? Auteurs : Laurent Schneider , La requte suivante permet d'afficher les directory, avec les proprits suivantes : Schma Nom Chemin FAQ Oracle - 87 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ select OWNER, DIRECTORY_NAME, DIRECTORY_PATH from DBA_DIRECTORIES order by OWNER, DIRECTORY_NAME;
OWNER DIRECTORY_NAME DIRECTORY_PATH ----- --------------- ---------------------------------------- SYS WORK_DIR /app/oracle/product/10.2.0.2/work SYS TMP /tmp SYS DATA_PUMP_DIR /app/oracle/product/10.2.0.2/rdbms/log/ SYS ADMIN_DIR /app/oracle/product/10.2.0.2/md/admin Comment recompiler des objets en fonction de leurs dpendances ? Auteurs : Pierre Forstmann , Grce au mcanisme de compilation automatique l'excution d'un objet invalide, Oracle va compiler toutes les vues dpendantes pour les excuter lors de l'excution d'une vue. La procdure suivante qui excute " vide" toutes les vues du schma courant qui ne sont pas rfrences dans d'autres vues va donc compiler toutes les vues du schma courant: create or replace procedure ev is comm varchar2(100); res int; begin for lv in (select view_name from user_views where not exists (select referenced_name from user_dependencies where referenced_name = view_name)) loop comm := 'SELECT COUNT(*) FROM ' || lv.view_name || ' WHERE 1=0'; dbms_output.put_line(comm || ' ...'); execute immediate comm into res; dbms_output.put_line('... OK.'); end loop; end; / Voici un exemple : SQL> create table t(x int, y int); Table created. SQL> create view v1 as select x,y from t; View created. SQL> create view v2 as select x,y from v1 where x >= 0; View created. SQL> create view v3 as select x,y from v2 where y >= 0; View created. SQL> SQL> create view v4 as select x from t; View created. FAQ Oracle - 88 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> SQL> -- SQL> -- compiler toutes les vues SQL> -- SQL> create or replace procedure ctv 2 is 3 comm varchar2(100); 4 begin 5 for lv in (select view_name from user_views) 6 loop 7 comm := 'ALTER VIEW ' || lv.view_name || ' COMPILE'; 8 dbms_output.put_line(comm || ' ...'); 9 execute immediate comm; 10 dbms_output.put_line('... OK.'); 11 end loop; 12 end; 13 / Procedure created. SQL> show errors No errors. SQL> SQL> -- SQL> -- lister status des vues SQL> -- SQL> SQL> create or replace procedure lsv(cv out sys_refcursor) 2 is 3 begin 4 open cv for 5 'select object_name, status from user_objects where object_type = ''VIEW'' '; 6 end; 7 / Procedure created. SQL> show errors No errors. SQL> SQL> SQL> -- SQL> -- executer les vues dont aucune autre vue ne dpend SQL> -- SQL> SQL> create or replace procedure ev 2 is 3 comm varchar2(100); 4 res int; 5 begin 6 for lv in (select view_name from user_views where not exists 7 (select referenced_name from user_dependencies where referenced_name = view_name)) 8 loop 9 comm := 'SELECT COUNT(*) FROM ' || lv.view_name || ' WHERE 1=0'; 10 dbms_output.put_line(comm || ' ...'); 11 execute immediate comm into res; 12 dbms_output.put_line('... OK.'); 13 end loop; 14 end; 15 / Procedure created. SQL> show errors No errors. SQL> SQL> FAQ Oracle - 89 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL> var rc refcursor; SQL> column object_name format a15 SQL> SQL> -- SQL> -- execute v1, v4 SQL> -- SQL> set serveroutput on; SQL> alter table t add (z char(3)); Table altered. SQL> exec lsv(:rc); PL/SQL procedure successfully completed. SQL> print :rc OBJECT_NAME STATUS --------------- ------- V1 INVALID V2 INVALID V3 INVALID V4 INVALID SQL> exec ev; SELECT COUNT(*) FROM V4 WHERE 1=0 ... ... OK. SELECT COUNT(*) FROM V3 WHERE 1=0 ... ... OK. PL/SQL procedure successfully completed. SQL> exec lsv(:rc); PL/SQL procedure successfully completed. SQL> print :rc OBJECT_NAME STATUS --------------- ------- V1 VALID V2 VALID V3 VALID V4 VALID SQL> Comment vider les caches Oracle ? Auteurs : Jaouad , Voici la commande pour la Shared Pool : SQL> alter system flush shared_pool 2 ; Systme modifi. Et celle pour vider le cache de donnes (10g) : SQL> alter system flush buffer_cache ; FAQ Oracle - 90 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Systme modifi. elle peut galement recevoir les paramtres suivant : GLOBAL et CONTEXT Comment modifier le mot de passe de l'utilisateur sysman dans Enterprise Manager Grid Control ? Auteurs : bouyao , 1. Il faut tout d'abord arrter OMS : sous Unix : $ emctl stop oms sous Windows : Arrter le service windows Oracle{oracle_home_name}ProcessManger ou, sous la ligne de commande Dos : C> emctl stop oms 2. Vrifier que OMS est arrt : sous Unix : $ emctl status oms sous Windows : Vrifier la status du service Windows Oracle{oracle_home_name}ProcessManager ou, sous la ligne de commande Dos : C> emctl status oms 3. Se connecter la base avec un privilge DBA, puis tapez la commande suivante : SQL> ALTER USER sysman IDENTIFIED BY 'new_password'; 4. Vrifier le nouveau mot de passe : SQL> CONNECT sysman/nouveau_passe[@database_alias] 5. Dans $ORACLE_HOME/sysman/config 5.1. Sauvegarder le fichier emoms.properties dans emoms.properties.orig 5.2. Editer le fichier emoms.properties a. Rechercher la ligne commencant par: oracle.sysman.eml.mntr.emdRepPwd= Remplacer la valeur encrypt par le nouveau mot de passe FAQ Oracle - 91 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ b. Rechercher la ligne : oracle.sysman.eml.mntr.emdRepPwdEncrypted=TRUE Remplacer TRUE par FALSE 6. Redmarrer OMS sous Unix : $ emctl start oms sous Windows : Dmarrer le service Oracle{oracle_home_name}ProcessManager ou, sous la ligne de commande Dos : C> emctl start oms 7. Vrifier que oracle.sysman.eml.mntr.emdRepPwd est encrypt. Comment afficher les paramtres cachs d'Oracle ? Auteurs : bouyao , Fred_D , Pour excuter cette requte, il faut avoir le privilge DBA : SELECT a.ksppinm Parametre, c.ksppstvl Valeur FROM x$ksppi a, x$ksppcv b, x$ksppsv c WHERE a.indx = b.indx AND a.indx = c.indx AND a.ksppinm LIKE '/_%' escape '/' ; Normalement, les paramtres cachs commencent par un underscore ('_'), et dans la 10g, on a en plus les paramtres cachs qui commencent par deux underscore ('__'). Attention : la modification de certains paramtres cachs peuvent corrompre votre base. Il faut les utiliser avec prcautions ! FAQ Oracle - 92 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils FAQ Oracle - 93 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > Rman FAQ Oracle - 94 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > Exp/Imp Comment faire un import/export entre deux bases dans des versions diffrentes ? Auteurs : lalystar , Si vous souhaitez exporter le contenu d'une base 8i pour l'importer dans une base 9i par exemple, il s'agit d'utiliser les versions adaptes des utilitaires import et export. La rgle est d'utiliser l'utilitaire import dans la version de la base de destination et l'utilitaire export dans la version de la base la plus ancienne. Avec notre exemple, l'export doit tre fait avec l'utilitaire export dans sa version 8i et l'import doit tre fait avec l'utilitaire import dans sa version 9i. Pour plus d'informations, voir le lien ci dessous : lien : http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96652/ch01.htm#1012993 FAQ Oracle - 95 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > Dba Studio & OEM FAQ Oracle - 96 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > SQL*Plus Comment sauvegarder mon affichage SQL dans un fichier ? Auteurs : Helyos , Il peut parfois tre utile de sauvegarder le rsultat de la requte dans un fichier texte sur le disque dur. Pour cela SQL*Plus nous offre la possibilit d'utiliser la commande SPOOL qui fonctionne comme dans l'exemple suivant : -- On demande rediriger l'affichage vers le fichier c:\toto.txt SPOOL c:\toto.txt -- On execute notre requete SELECT SYSDATE FROM DUAL; -- On stoppe la redirection SPOOL OFF Voici le contenu de notre fichier : SQL> SELECT sysdate 2 FROM dual; SYSDATE -------- 28/06/04 SQL> SPOOL OFF On pourra facilement supprimer les premires et dernires lignes grce aux commandes de formatages de SQL*Plus. On peut prciser que jusqu' la version 9i incluse, le fichier est cras s'il existe dj. En 10g, les options CREATE/ REPLACE/APPEND apportent un choix en la matire. Comment insrer du texte contenant '&' ? Auteurs : Fred_D , & est un caractre spcial qui permet de prfixer un nom de variable. Or, lorsque l'on veut insrer du texte contenant ce caractre, SQL*Plus demande une valeur insrer. Par exemple : SQL> select 'toi & moi' from dual; Entrez une valeur pour moi : ancien 1 : select 'toi & moi' from dual nouveau 1 : select 'toi ' from dual 'TOI ---- toi Pour viter ce dsagrment il suffit de taper : SET DEFINE OFF Ainsi on obtient : FAQ Oracle - 97 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ SQL > set define off SQL > select 'toi & moi' from dual; 'TOI&MOI' --------- toi & moi Comment viter de voir les lignes de remplacement d'une variable ? Auteurs : Fred_D , Lorsque l'on utilise des variables SQL*Plus de la forme &nom_variable et que l'on excute la requte, Oracle rappelle quelle valeur est remplace de la manire suivante : SQL > select '&texte_a_afficher' from dual; Entrez une valeur pour texte_a_afficher : Bonjour Developpez.com ancien 1 : select '&texte_a_afficher' from dual nouveau 1 : select 'Bonjour Developpez.com' from dual 'BONJOURDEVELOPPEZ.COM ---------------------- Bonjour Developpez.com Pour viter ces lignes disgracieuses dans un log, il faut dsactiver la vrification avec la commande suivante : SET VERIFY OFF Ainsi on obtient le rsultat suivant : SQL > set verify off SQL > select '&texte_a_afficher' from dual; Entrez une valeur pour texte_a_afficher : Bonjour Developpez.com 'BONJOURDEVELOPPEZ.COM ---------------------- Bonjour Developpez.com FAQ Oracle - 98 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > Network Manager Comment diagnostiquer les problmes de connection NET*8 ? Auteurs : Jaouad , Dans le fichier sqlnet.ora du client, ajouter les lignes suivantes : #TRACE_LEVEL_CLIENT = SUPPORT #TRACE_DIRECTORY_CLIENT = d:\oracle\ora92\network\trace #TRACE_TIMESTAMP_CLIENT = TRUE #TRACE_UNIQUE_CLIENT = TRUE Suite l'activation du mode trace partir du sqlnet.ora, voici comment rendre plus lisible le fichier gnr : trcasst fichier >> fichier.txt Comment configurer le mode trace d'un client Oracle des fins de Debug ? Auteurs : Laurent Dardenne , Certaines configurations du client Oracle peuvent tre places sur un lecteur rseaux, voici comment faire pour la modifier provisoirement sous rserve de disposer des droits ncessaires. Ouvrez la base de registre puis slectionnez la cl : HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ALL_HOMES La valeur de la sous-cl LASTHOME rfrence la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE \HOMEnumro Par exemple si la sous-cl LASTHOME vaut 1 alors on utilisera la sous-cl HKEY_LOCAL_MACHINE\SOFTWARE \ORACLE\HOME1 Slectionnez la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1, la sous-cl TNS_ADMIN contient le nom du rpertoire hbergeant les fichiers sqlnet.ora et tnsnames.ora. Mmorisez ce nom de rpertoire. Crez un rpertoire (par exemple C:\config-oracle) et recopiez-y les 2 fichiers sqlnet.ora et tnsnames.ora hbergs dans le rpertoire point par la sous-cl TNS_ADMIN. Placez-vous dans le rpertoire nouvellement cr puis modifiez, l'aide d'un diteur, le fichier sqlnet.ora comme ci- dessous : Placez en commentaire l'ancienne configuration du mode Trace #TRACE_LEVEL_CLIENT = OFF Ajoutez ces 2 lignes : TRACE_LEVEL_CLIENT=SUPPORT TRACE_DIRECTORY_CLIENT=C:\config-oracle La valeur de l'entre TRACE_DIRECTORY_CLIENT contient le rpertoire prcdemment cr et indique o placer les fichiers trace. La valeur de l'entre TRACE_LEVEL_CLIENT indique le niveau de trace souhait, seul SUPPORT permet d'avoir un compte rendu dtaill sur les requtes SQL (en mission et en rception). Enfin slectionnez la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME1 et modifiez le contenu de la sous-cl TNS_ADMIN avec le nom du rpertoire prcdemment cr. En fin de session de Debug replacez, dans la cl HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE \HOME1\TNS_ADMIN, la valeur d'origine. Le mode trace n'est plus activ, sous rserve que le fichier sqlnet.ora d'origine contenait TRACE_LEVEL_CLIENT=OFF FAQ Oracle - 99 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Attention le fichier trace cre est trs verbeux et impacte les performances, veillez donc ne pas le laisser actif sur les postes en production ! Comment paramtrer le TAF (Transparent Application Fail Over) ? Auteurs : Jaouad , Regardez cet exemple : DVP = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOST1)(PORT = 1521)) (CONNECT_DATA = (SID = SID1) ) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOST2)(PORT = 1521)) (CONNECT_DATA = (SID = SID2) ) ) ) Lorsque, via notre chane de connexion, nous souhaitons nous connecter la base nomme DVP, Oracle va tout d'abord essayer de se connecter au SID1 sur le HOST1. Si celui ci ne rpond pas, avant de provoquer l'erreur, Oracle va essayer de se connecter sur le SID2 du Host2. FAQ Oracle - 100 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > Outils > Portal Comment trouver des informations sur l'utilisateur courant ? Auteurs : Helyos , Vous allez tre srement amen, dans le cours de votre dveloppement sur Portal, trouver des informations sur l'utilisateur couramment connect. Les informations les plus utilises sont surtout l'id de l'utilisateur connect, ainsi que son login, voire la langue qu'il utilise actuellement avec son browser sur le Portal. Pour cela vous disposez d'un package Portal qui vous permet d'obtenir ces informations trs facilement : PORTAL.WWCTX_API Ce package dispose d'un grand nombre de fonctions et procdures qui vous permettront de trouver des informations sur l'utilisateur connect. Par exemple vous utiliserez : -- Pour trouver l'id de l'utilisateur declare p_user_id number:=portal.wwctx_api.get_user_id; begin htp.prn('Votre id est '||p_user_id); end; / -- Pour trouver le login de l'utilisateur declare p_user_name varchar2(30):=portal.wwctx_api.get_user; begin htp.prn('Votre login est '||p_user_name); end; / -- Pour trouver la langue utilise par le browser de l'utilisateur declare p_lang varchar2(10):=portal.wwctx_api.get_nls_language; begin htp.prn('La langue actuellement utilise est '||p_user_id); end; / Comment trouver des informations sur un utilisateur prcis ? Auteurs : Helyos , Vous allez tre srement amen, dans le cours de votre dveloppement sur Portal, trouver des informations sur un utilisateur lambda. En rgle gnrale vous allez surtout chercher connatre son id partir de son login ou inversement. Pour cela vous disposez d'un package Portal qui vous permet d'obtenir ces informations trs facilement : PORTAL.WWSEC_API Ce package dispose d'un grand nombre de fonctions et procdures qui vous permettront de trouver des informations sur les utilisateurs. Par exemple vous utiliserez : -- Pour trouver l'id de l'utilisateur declare p_user_name varchar2(30):='HELYOS'; p_user_id number:=portal.wwsec_api.id(upper(p_user_name)); begin htp.prn('L''id de l''utilisateur '||p_user_name||' est '||p_user_id); end; / FAQ Oracle - 101 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ -- Pour trouver le login de l'utilisateur declare p_user_id number:='2003'; p_user_name varchar2(30):=portal.wwsec_api.user_name(p_user_id); begin htp.prn('Le login correspondant l''id '||p_user_id||' est ' || p_user_name ); end; / Comment afficher correctement un CLOB avec le package HTP ? Auteurs : Helyos , Le package htp est soumis certaines limitations induites par le mod_plsql. En effet les procdures d'affichage (htp.p, htp.prn, htp.pint) ne supportent pas le fait d'afficher des chaines de caractres de taille suprieure 32767 caractres). Le rsultat de cette limitation est l'affichage du CLOB en question sous forme de caractres incomprhensibles. Voici une procdure vous permettant de contourner la limitation : CREATE OR REPLACE PROCEDURE write_clob(p_clob CLOB) IS v_buffer VARCHAR2(32000); v_offset PLS_INTEGER DEFAULT 1; v_taille PLS_INTEGER; v_longueur PLS_INTEGER; v_chunk PLS_INTEGER; v_clob CLOB := p_clob; BEGIN v_chunk := dbms_lob.getchunksize(v_clob); v_longueur := dbms_lob.getlength(v_clob); WHILE v_offset < v_longueur LOOP IF v_longueur - (v_offset - 1) > v_chunk THEN v_taille := v_chunk; ELSE v_taille := v_longueur - (v_offset - 1); END IF; v_buffer := NULL; dbms_lob.READ(v_clob, v_taille, v_offset, v_buffer); htp.prn(v_buffer); v_offset := v_offset + v_taille; END LOOP; EXCEPTION WHEN OTHERS THEN htp.print(SQLERRM); END; FAQ Oracle - 102 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > ERP FAQ Oracle - 103 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > ERP > Peoplesoft Qu'est-ce que PeopleSoft ? Auteurs : Jaouad , PeopleSoft est un diteur d'ERP, il dite des solutions "prtes l'emploi" pour divers domaines : Ressources Humaines, Finance, CRM , Paye ... Dcouvrez PeopleSoft : PeopleSoft Overview Dcouvrez les ERP : Administration des ERP FAQ Oracle - 104 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > ERP > Peoplesoft > Administration Comment dterminer les traitements, la description et leur statuts sous la console de traitement ? Auteurs : Jaouad , Grce la requte suivante : SQL> SELECT a.prcsinstance, a.servernamerqst, a.PRCSNAME, b.descr, begindttm, enddttm, XLATLONGNAME 2 FROM PSPRCSRQST a, PS_PRCSDEFNLANG b, PSXLATITEM c 3 WHERE a.PRCSNAME = b.prcsname 4 AND fieldvalue = runstatus 5 AND fieldname = 'RUNSTATUS' 6 ORDER BY 2 DESC ; PRCSINSTANCE SERVERNA PRCSNAME DESCR BEGINDTTM ENDDTTM XLATLONGNAME ------------ -------- ------------ ------------------------------ --------- --------- -------------- 223321 PSUNX BICURCNV Conversion Devise Facturation 25-SEP-06 25-SEP-06 Success Dans les version infrieur (8.43) , il faut remplacer PS_XLATITEM par PS_XLATTABLE Il est galement impratif de tenir compte de la langue si il y a plusieurs langues d'installes Comment voir les diffrents projets qui ont t installs et migrs sur une base ? Auteurs : Jaouad , Grce la requte suivante : SQL> select * from PSPROJECTDEFN ; PROJECTNAME VERSION PROJECTDESCR TGTSERVERNAME TGTDBNAM TGTOPRID
Comment savoir quels sont la release et les modules installs ? Auteurs : Jaouad , Grce la requte suivante : SQL> select * from psrelease ; RELEASEDT RELEASELABEL --------- -------------------------------------------------- 01-JAN-00 Core 6.00.00.000 09-SEP-97 Core 7.00.00.000 10-SEP-97 Core 7.01.00.000 11-SEP-97 Core 7.02.00.000 09-MAY-98 Core 7.50.00.000 10-MAY-98 Core 7.51.00.000 11-MAY-98 Core 7.52.00.000 12-MAY-98 Core 7.53.00.000 17-AUG-00 Financials/SCM 8.00.00.000 30-NOV-00 Financials/SCM 8.00.01.000 FAQ Oracle - 105 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 07-JUN-01 Financials/SCM 8.00.02.000 07-MAR-02 Financials/SCM 8.40.00.000 15-FEB-04 Financials/SCM 8.40.00.000 15-FEB-04 Financials/SCM 8.40.01.000 14 ligne(s) slectionne(s). Comment connatre les dfinitions des process Scheduler ? Auteurs : Jaouad , Grce la requte suivante : SQL> SELECT a.servername, SRVRHOSTNAME host_name, XLATLONGNAME statut, 2 PRCSDISKSPACE espace_disque, sleeptime temps_veille, heartbeat Rythme 3 FROM PSSERVERSTAT a, PSXLATITEM b , PS_SERVERDEFN c 4 WHERE fieldname = 'SERVERSTATUS' 5 AND serverstatus = fieldvalue 6 AND a.servername = c.servername; SERVERNA HOST_NAME STATUT ESPACE_DISQUE TEMPS_VEILLE RYTHME -------- -------------------- ---------- ------------- ------------ ---------- PSUNX sproerp21 Running 6426 15 60 PSNT SPROERP16 Running 3561 15 60 Comment voir la dfinition des traitements ? Auteurs : Jaouad , Grce la requte suivante : SQL> col descrlong format a50 SQL> set linesize 250 SQL> SELECT * FROM PS_PRCSDEFNLANG 2 WHERE language_cd ='FRA' ; PRCSTYPE PRCSNAME LAN DESCR DESCRLONG ------------------------------ ------------ --- -------------------- --------------------- Application Engine 1099_RPT_PST FRA 1099_RPT_PST Prpare les donnes 1099 Application Engine AEBDASSTITEM FRA AEBDASSTITEM Alimente le Catalogue Immos Ici, on suppose que la langue installe est le francais. Comment lister les run control des diffrents AE ? Auteurs : Jaouad , La requte suivante permet de voir les contrle d'xcution en fonction des AE ( Application Engine ) : SQL> SELECT process_instance, oprid, run_cntl_id, ae_applid 2 FROM PS_AERUNCONTROL; PROCESS_INSTANCE OPRID RUN_CNTL_ID AE_APPLID ---------------- ------------------------------ ------------------------------ ------------ FAQ Oracle - 106 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 11178 JHY ARUPDATE_TT_ENTITES_ANT AR_UPDATE 25285 APE Psoft_Access B2_OMC140 Comment lister les run control par Oprid ? Auteurs : Jaouad , Ceci permet de dterminer pour tout utilisateur ( Oprid ) les contrle d'excution (Run contrle ). Les contrle d'excution permettre de stocker les diffrents paramtres d'un traitement et de ne pas avoir les re saisir si on relance le traitement. SQL> SELECT * 2 FROM PS_PRCSRUNCNTL 3 WHERE oprid = 'KBN' ; OPRID RUN_CNTL_ID LAN L ------------------------------ ------------------------------ --- - KBN KBN FRA O KBN KBN_AM FRA O KBN KBN_AP FRA O Comment connatre le droulement d'un traitement ? Auteurs : Jaouad , La requte suivante permet de savoir quelle tape se trouve le traitement, et si celui-ci est en echec ou en succs : SQL> SELECT * 2 FROM PS_PMN_PRCSLIST ; SEQUENCENO PRCSINSTANCE JOBINSTANCE PRCSJOBSEQ PRCSTYPE PRCSNAME RUNCNTLID R R SERVER ---------- ------------ ----------- ---------- ------------ -------------------- - - ------ 227561 227561 0 0 COBOL SQL FSPGJGEN gen 2 0 PSUNX
Comment connatre la frquence d'un traitement ? Auteurs : Jaouad , Voici comment voir la frquence des traitements qui sont scheduls, notamment pour la maintenance ou l'administration : c'est le cas par exemple des traitements de purge : "Daily purge" SQL> SELECT * 2 FROM ps_prcsrecur ; RECURTYPE RECURNAME VERSION DAYOFMONTH RUN1STWEEK RUN2NDWEEK RUN3RDWEEK RUN4THWEEK RUN5THWEEK ---------- ---------- -------- ---------- ---------- ---------- ---------- ---------- ---------- FAQ Oracle - 107 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ 2 Daily 1 0 1 2 3 4 5 Comment lister les squence systme PS ? Auteurs : Jaouad , Utile notamment pour la squence servant affecter le PRCSINSTANCE (identificateur unique des traitements) : SQL> SELECT * 2 FROM PS_PRCSSEQUENCE ; PR SEQUENCENO MIN_SEQ_NBR MAX_SEQ_NBR -- ---------- ----------- ----------- 0 227564 1 9999999 1 121544 1 9999999 2 122265 1 9999999 3 43007 1 9999999 4 7 1 9999999 Comment lister les rapports gnrs ainsi que leurs types et leurs emplacements ? Auteurs : Jaouad , Grce cette requte, nous allons pouvoir allez chercher directement les rapports lorsqu'il ne sont pas disponibles via la consle des traitements : SQL> SELECT a.prcsinstance, a.prcsname, a.prcstype, a.PRCSOUTPUTDIR, b.xlatlongname 2 FROM PS_CDM_LIST a, PSXLATITEM b 3 WHERE a.outdestformat = b.fieldvalue 4 AND b.fieldname = 'OUTDESTFORMAT';
PRCSINSTANCE PRCSNAME PRCSTYPE PRCSOUTPUTDIR
------------ ------------ -------------------- ------------------------------------------ 227399 BF_GL001 SQR Process /psoftsp1/appserv/prcs/INT/log_output/SQR_BF_GL001_227399 Comment dmarrer une session en 4/3 en mode trace ? Auteurs : Jaouad , Il est parfois important de tracer une session en transactionel, pour connaitre notamment les ralentissements. Dans l'url de connexion, il faut ajouter la fin "&trace=y" par exemple : http://serveur/psp/DOMAINE/EMPLOYEE/ERP/?cmd=login&languageCd=FRA&trace=y Le fichier trace est gnr dans : $PS_HOME/appserv/DOMAINE/LOGS/ FAQ Oracle - 108 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ et se dcompose ainsi : OPRID_NomPoste.tracesql Comment dterminer la version des Tools ? Auteurs : Jaouad , La version des tools peut tre dtermine prcisment grce la commande suivante : sproerp17-psoft84: /psoftsp1/appserv>psadmin -v Version 8.46.06 Cette commande doit tre lanc avec l'utilisateur systme PSOFT et dans le rpertoire suivant : $PS_HOME/appserv Comment connatre toutes les installations sur PeopleSoft ? Auteurs : Jaouad , La requte suivante permet de lister toutes les installations de Hotfix, Bundles, patch ... SQL> SELECT * FROM PS_MAINTENANCE_LOG;
UPDATE_ID DESCR DTTM_IMPO FIXOPRID APPLYOPRID PRODUCT_LI RELEASEDT RELEASELABEL MAIN DESCRLONG ----------- -------------------------- --------- ---------- ------------ ---------- --------- ------------------------------- ---- ----------------------------------------- 500787001 PRJ102547 /7-22-02 /C305 21-JUL-03 PPLSOFT GLT 26-JUN-02 Financials/SCM 8.40.00.304 Financials Asset Management Bundle #1 FAQ Oracle - 109 - Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2007 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts. http://oracle.developpez.com/faq/ Sommaire > ERP > Peoplesoft > Scurit Quels sont les diffrents utilisateurs ainsi que les rles qui leur sont affects ? Auteurs : Jaouad , La requte suivante nous donne les rles affects un USER ou OPRID SQL> SELECT * FROM PSROLEUSER ; ROLEUSER ROLENAME D --------------- ------------------- - AMA1 AM_SS_EMPLOYEE N AMA1 ANALYST N AMA1 PAPP_USER N AMA1 PeopleSoft User N Et celle ci les diffrents User ou OPRID : SQL> SELECT * FROM PSOPRDEFN OPRID VERSION OPRDEFNDESC EMPLID EMAILID