mardi 14 mai 2013

Oracle Forms 10g avec Java 7 Update 21.

Après avoir modifier le fichier de configuration de " Oracle Forms 10g " formsweb.cfg et faire toutes les étapes, j'ai constaté que le problème est revenu pour Jinitiator et quand j'exécute la Form avec le browser (Firefox v21), j'ai eu le fameux message d'erreur à l'écran:


FRM-92095: Oracle Jnitiator version too low
 













Après une recherche fructueuse sur le net, j'ai vu sur le blogue d'Oracle qu'il faudrait télécharger le patch (mise à jour) dont le numéro est 14614795. 

Pour plus de détails concernant l'application de la patch, veuillez me contacter à cette adresse: aabed@oraweb.ca
Maintenant, mon problème est résolu et Forms 10g fonctionne à 100% avec Java 7 UP 21.
Testé avec Firefox 21, Windows 7 32 bits et Oracle Forms 10g.


mercredi 17 avril 2013

FLASHBACK Version Query....

Le but de ce billet est d'afficher l'historique des salaires pour un employé d'une session active:
Dans l'exemple suivant, le salaire de l'employé est de 8600.







On va modifier le salaire de cet employé pour 9000.











On va valider le tout avec un COMMIT et on va augmenter le salaire de 30%.
















Ensuite, les différentes versions du salaire sont affichées en spécifiant la clause VERSIONS.
Par défaut, elle peut être spécifiée comme suit: VERSIONS BETWEEN {SCN | TIMESTAMP} MINVALUE ET MAXVALUE.
 
La clause VERSIONS est une extension SQL pour les requêtes. Vous pouvez avoir des opérations DML et DDL qui utilisent une clause de versions dans les sous-requêtes. 












  

On voit bien l'historique du salaire de cet employé.
 

Utilisation de PURGE avec la commande DROP TABLE.

Pour supprimer la table test, c'est vraiment très simple. Il suffit de taper ceci: DROP TABLE test. Si on veut la récupérer, on peut utiliser la syntaxe FLASHBACK, voir le lien sur mon blogue ou en cliquant ici.

On peut vérifier l'objet effacé avec l'instruction suivante:

SELECT original_name, operation, droptime FROM recyclebin;

Oracle Database 10g introduit une nouvelle fonctionnalité pour supprimer des tables. Lorsque vous supprimer une table, Oracle ne libère pas immédiatement l'espace associé à la table. Au contraire, la base de données renomme la table et Oracle le place dans une corbeille, où il peut ensuite être récupéré avec la déclaration  FLASHBACK TABLE tel qu'expliqué dans le lien. 
Si vous voulez libérer immédiatement l'espace associé à la table au moment où vous lancez l'instruction DROP TABLE, puis inclure la clause PURGE comme indiqué comme suit: DROP TABLE test PURGE

Spécifiez PURGE seulement si vous voulez supprimer la table et libérer de l'espace qui lui est associée en une seule étape. Si vous spécifiez PURGE, Oracle ne place pas la table et ses objets dans la corbeille.
Cette clause vous permet d'économiser une étape dans le processus. Il fournit également une sécurité renforcée.


Note: Vous ne pouvez pas annuler une instruction DROP TABLE avec la clause de PURGE, et vous ne pouvez pas récupérer la table si vous spécifiez la clause PURGE. Cette fonctionnalité n'était pas disponible dans les versions antérieures.
C'est nouveau dans la version 10g.

dimanche 17 février 2013

Migration Oracle Database 10.2.0.3 vers 10.2.0.4

J'ai mis un document en ligne qui explique en détail la migration d'Oracle Database 10.2.0.3 vers la version 10.2.0.4. Voici le lien de mon site web pour télécharger la documentation pdf (www.oraweb.ca, aller dans le menu Documentation - Administration BD Oracle 10g ou directement en cliquant ici).

vendredi 15 février 2013

Désinstaller APEX 4.0

Si vous voulez désinstaller Oracle Application Express 4.0, voici les étapes:

  • Positionnez dans le répertoire d'APEX afin de lancer le script.
  • Connectez-vous avec le compte sys as sysdba sous SQL*Plus













  • Exécutez le script APXREMOV.SQL  (sous sqlplus, @apxremov.sql).
  • Le processus de la désinstallation commencera.










 

vendredi 25 janvier 2013

Utilisation de SYS_CONTEXT Oracle 10g.

Cette fonction est très utile pour déterminer par exemple le nom de la machine, l'adresse IP ainsi que d'autres fonctions (système d'exploitation utilisé, problème de connexion à la BD, audit, etc...).

Pour voir des exemples de l'usage de SYS_CONTEXT (audit de la BD), on va créer deux objets (une table et un trigger ).

La création de la table est comme suit:






 Et la création d'un trigger:






















create or replace trigger logon_succes_bd
AFTER LOGON ON DATABASE

begin
    begin
     -- Insertion dans la table audit_logon
     insert into v$audit_logon (
     audit_date    ,
     db_user_name  ,
     os_user_name  ,
     computer_name ,
     ip_address    ,
     module        ,
     comments )
     values  (
     sysdate       ,
     user          ,
     sys_context('USERENV','OS_USER'),
     sys_context('USERENV','HOST'),
     sys_context('USERENV','IP_ADDRESS'),
     sys_context('USERENV','MODULE'),
     ' Connexion avec succès à la BD ' || sys_context('USERENV','DB_NAME'));
     exception
          when others then null;
    end;
end;
 Lorsqu'on fait une connexion avec la BD, il y aura une insertion dans la table. Voici les résultats:

















Une interrogation da la table v$audit_logon permet d'afficher les informations de la connexion à la BD.




















Voici la liste de tous les paramètres de SYS_CONTEXT:











Exemple d'utilisation de cette fonction:
select sys_context('USERENV','NLS_DATE_FORMAT') from DUAL;

jeudi 20 décembre 2012

Utilisation de SET UNUSED en Oracle.

Une suppression de colonne dans une table existante et possédant de nombreuses lignes (données volumineuses) peut s'avérer une opération très longue. Dans ce cas, il est souhaitable de rendre la colonne inutilisable à l'aide de la clause SET UNUSED. Cette option de permet pas de libérer l'espace disque occupé par la colonne, mais elle permet de planifier l'opération de suppression de la colonne à un moment.

Exemple:
Rendre inutilisable la colonne TEL de la table EMPLOYEES. Dans un premier temps, la colonne est masquée comme inutilisée.

SQL> ALTER TABLE EMPLOYEES SET UNUSED (TEL);
Table altered

Pour connaître les tables qui contiennent des colonnes inutilisées, il faut interroger la vue du dictionnaire de données DBA_UNUSED_COL_TABS.

Connecter avec le compte sys as sysdba:
select * from dba_unused_col_tabs;












Dans un deuxième temps, il faut supprimer toutes les colonnes inutilisées de la table EMPLOYEES. Lors de cette opération, on demande à Oracle de réaliser un point de synchronisation (CHECKPOINT) toutes les 100 suppressions.

SQL> ALTER TABLE EMPLOYEES DROP UNUSED COLUMNS CHECKPOINT 100;
Table altered


mardi 18 décembre 2012

Connect By Prior Oracle.

En utilisant le schéma SCOTT fourni par Oracle, voici une requête hiérarchique de la fonction CONNECT BY PRIOR:

    SELECT lpad(' ',2*level)||ename as "Arbre"
    FROM emp
    CONNECT BY PRIOR empno=mgr
    START WITH ename = 'KING'


 Ça nous donne le résultat suivant:

Arbre
-------------------------------------------
  KING
    JONES
      SCOTT
        ADAMS
      FORD
        SMITH
    BLAKE
      ALLEN
      WARD
      MARTIN
      TURNER
      JAMES
    CLARK

Il y a une autre fonction Oracle qui  permet d'afficher la concaténation du chemin hiérarchique pour chaque élément listé (SYS_CONNECT_BY_PATH).

    SELECT SYS_CONNECT_BY_PATH(ename, ' * ')
    FROM emp
    CONNECT BY PRIOR empno=mgr
    START WITH ename = 'KING'

Ce qui nous donne le résultat suivant:
SYS_CONNECT_BY_PATH(ENAME,'*')
-------------------------------------------
 * KING
 * KING * JONES
 * KING * JONES * SCOTT
 * KING * JONES * SCOTT * ADAMS
 * KING * JONES * FORD
 * KING * JONES * FORD * SMITH
 * KING * BLAKE
 * KING * BLAKE * ALLEN
 * KING * BLAKE * WARD
 * KING * BLAKE * MARTIN
 * KING * BLAKE * TURNER
 * KING * BLAKE * JAMES
 * KING * CLARK

13 rows selected

On constate que KING est le président, et par exemple le superviseur de SCOTT est JONES.

Récupérer les données effacées.

En faisant des tests à l'instant avec une table TELEPHONE et par erreur je ne sais pas ce qu'il est se passer avec l'outil PL/SQL Developer 8, les données ont été effacées sans faire le DELETE FROM TELEPHONE (quand je fais un ordre de SELECT * from TELEPHONE, il me donne rien).












J'ai vérifié les objets effacés dans la corbeille d'oracle avec la vue dba_recyclebin, mais aucune trace. Alors, j'étais obligé de manipuler les requêtes avec FLASHBACK, dont voici toutes les étapes:


SQL> flashback TABLE telephone TO timestamp (systimestamp - interval '1' minute);
Done
SQL> select * from telephone;

jeudi 1 novembre 2012

Comment configurer Oracle Forms 10g avec Java 7 ?

Étant donné que Jinitiator n'est plus supporté par Oracle pour l'exécution des formulaires de Oracle Forms 10g , voici toutes les étapes pour configurer ce dernier avec Java, en téléchargeant le document sur mon site web à cette url: http://www.oraweb.ca/doc/Config_OracleForms10g_Java.pdf

Un problème survient avec la version 7 du java lors de l'exécution de la Form:


Pour régler ce problème, suivre les instructions dans le guide.
Testé sous Windows 7, Oracle Forms 10g avec une BD 10g et Firefox comme navigateur internet.