Translate

lundi 9 mars 2015

La bonne technique de récupération ( "Recovery" )

Bonjour à tous.

       L'autre jour on m'a posé une question que j'aimerais partager avec vous. On m'a demandé de savoir quelles sont les meilleures techniques de récupération selon la situation.

Voici ce que j'ai peux vous dire  :


  • Media Recovery
    • Si vous avez perdu du matériel, soit les disques ou les datafiles. La meilleure alternative c'est d'utiliser RMAN, mais encore là cela dépendra de la situation.
    • À ne pas confondre avec le Crash Recovery qui se fait tout seul par Oracle lorsque un arrêt non planifié est survenu et au moment de repartir il commence à récupérer ses transactions. 

  • Flashback ou Point-in-time Recovery
    • Si jamais la situation dans laquelle un utilisateur à commis une erreur, comme la suppression de données ou des objets de la base de données ou une mise à jour accidentelle de données.
    • Bien sûr cela dépend de la situation, si quelqu'un a supprimé une table laquelle n'a pas changé depuis un dernier export, probablement cela serait une bonne alternative aussi.
    • Flashback Table
      • En cas des dommages limités à une ou quelques tablesen se servant de l'information contenue dans les UNDO
      • Avec 12c, il y a maintenant un "Recover table", lequel vous donne aussi la possibilité de récupérer  la table comme un fichier "dump" lequel vous pouvez importer ultérieurement avec "impdp".
    • Flashback Database 
      • En cas qu'un modification accidentelle ait été faite sur une grande partie de la bases de données. 
    • Bien sûr il y a d'autres flashback mais chacun aide pour une situation particulière mais cela sera un bon sujet pour une autre publication :)

  • Block Media Recovery
    • Si jamais vous retrouvez quelques blocs de données corrompus. Dans ce cas, effectuer juste la récupération des blocs serait conseillé plutôt que recouvrir la base de données au complet.  


A+

jeudi 5 mars 2015

Script DDL pour la définition des comptes - DBMS_METADATA

Des fois on a besoin de recréer les comptes des utilisateurs lorsqu'on a besoin de déplacer ou migrer nos données d'une base de données vers une autre. 
Dans ce cas, c'est toujours nécessaire de vérifier les comptes existants et de vérifier les privilèges et quotas existants pour pouvoir les reproduire sur la destination.

Bien sûr existe le DBMS_METADATA.GET_DDL, ce qui représente la façon élégant et pratique de le faire :

Par exemple pour le compte "xyz" :

SET LONG 2000
SELECT DBMS_METADATA.GET_DDL('USER','xyz') FROM DUAL;
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT','xyz') FROM DUAL;
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT','xyz') FROM DUAL;
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT','xyz') FROM DUAL;


Sinon, si vous vous sentez plus à l'aise avec les requêtes ou si la nostalgie est plus puissante que vous, vous pouvez toujours aller chercher les données à l'ancienne façon -qui reste toujours efficace- :

SET SERVEROUTPUT ON ;
SET FEEDBACK OFF
DECLARE
CURSOR C_USER IS 

SELECT USERNAME, 'CREATE USER '||USERNAME||' '|| DECODE(PASSWORD, 'EXTERNAL', 'IDENTIFIED EXTERNALLY','IDENTIFIED BY VALUES '''||PASSWORD||''' ')||--CHR(10)||
' DEFAULT TABLESPACE '||DEFAULT_TABLESPACE ||--CHR(10)||
' TEMPORARY TABLESPACE '||TEMPORARY_TABLESPACE||';' LNE
FROM DBA_USERS
ORDER BY USERNAME ;

CURSOR C_QUOTA (V_USER DBA_USERS.USERNAME%TYPE) IS
SELECT 'ALTER USER '||USERNAME||' QUOTA '|| DECODE(MAX_BYTES, -1, 'UNLIMITED', TO_CHAR(ROUND(MAX_BYTES/1024))||'K') ||' ON '||TABLESPACE_NAME||';' LN_QUOTA
FROM DBA_TS_QUOTAS
WHERE USERNAME = V_USER ;

CURSOR C_PRIVS (V_USER DBA_USERS.USERNAME%TYPE) IS
SELECT 'GRANT '||GRANTED_ROLE||' TO "'||GRANTEE||'"'||DECODE(ADMIN_OPTION, 'Y', ' WITH ADMIN OPTION;', ';') LN_PRIVS
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = V_USER ;

CURSOR C_PRIVSSYS (V_USER DBA_USERS.USERNAME%TYPE) IS
SELECT 'GRANT '||PRIVILEGE||' TO "'||GRANTEE||'"'|| DECODE(ADMIN_OPTION, 'Y', ' WITH ADMIN OPTION;', ';') LN_PRIVSSYS
FROM DBA_SYS_PRIVS
WHERE GRANTEE = V_USER ;

CURSOR C_PRIVSTAB (V_USER DBA_USERS.USERNAME%TYPE) IS 
SELECT 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO "'||GRANTEE||'"'|| DECODE(GRANTABLE, 'YES', ' WITH GRANT OPTION;', ';') LN_PRIVSTAB
FROM DBA_TAB_PRIVS
WHERE GRANTEE = V_USER
ORDER BY OWNER;

BEGIN 
   FOR REG1 IN C_USER LOOP
      DBMS_OUTPUT.PUT_LINE('-----------------------------') ;
      DBMS_OUTPUT.PUT_LINE('--User : '||REG1.USERNAME) ;
      DBMS_OUTPUT.PUT_LINE('-----------------------------') ;
      DBMS_OUTPUT.PUT_LINE(REG1.LNE) ; 
      FOR REG2 IN C_QUOTA(REG1.USERNAME) LOOP
         DBMS_OUTPUT.PUT_LINE(REG2.LN_QUOTA) ; 
      END LOOP; 
      FOR REG3 IN C_PRIVS(REG1.USERNAME) LOOP
         DBMS_OUTPUT.PUT_LINE(REG3.LN_PRIVS) ; 
      END LOOP; 
      FOR REG4 IN C_PRIVSSYS(REG1.USERNAME) LOOP
         DBMS_OUTPUT.PUT_LINE(REG4.LN_PRIVSSYS) ; 
      END LOOP; 
      FOR REG5 IN C_PRIVSTAB(REG1.USERNAME) LOOP
         DBMS_OUTPUT.PUT_LINE(REG5.LN_PRIVSTAB) ; 
      END LOOP; 
   END LOOP ;
END ; 
/

mardi 3 mars 2015

Installation PSU WebLogic 10.3.6.0.8 - Discoverer 11

Bonjour

    Si vous travaillez avec l'OFM (Oracle Fusion Middleware)  et vous avez une configuration de Discoverer sur vos serveurs, voici la façon de mettre à jour votre Weblogic et garantir que Discoverer continuera à travailler.

Tout d'abord je vous recommande une sauvegarde de vos binaires.

En suite, suivre les étapes indiqués dans le "Readme" du patch 18040640 (Patch 18040640: SU Patch [T5F1]: WLS PATCH SET UPDATE 10.3.6.0.8)


Si vous n'avez pas accès à la note, voici un petit résumé des étapes à exécuter:

  • Le patch nécessaire est le patch :
    • PATCH_ID - T5F1 ( Patch number - 18040640 )


  • Une fois téléchargé le patch, décompressez-le.


  • Arrêtez vos applications

  • Assignez les variables d'environnement ci-dessous si vous ne les avez pas avant :
    export MW_HOME=$ORACLE_BASE/fmw
    export WLS_HOME=$MW_HOME/wlserver_10.3
    . $WLS_HOME/server/bin/setWLSEnv.sh



  • Vérifiez votre version actuelle :
    java weblogic.version


       Vous allez voir probablement une chose qui ressemble à : 

    WebLogic Server 10.3.6.0  Tue Nov 15 08:52:36 PST 2011 1441050
    Use 'weblogic.version -verbose' to get subsystem information
    Use 'weblogic.utils.Versions' to get version information for all modules

  • Aller vers le répertoire  {MW_HOME}/utils/bsu


  • Installez le patch : 
    • bsu.sh -install -patch_download_dir={MW_HOME}/utils/bsu/cache_dir -patchlist={PATCH_ID} -prod_dir={MW_HOME}/{WL_HOME}
    Exemple :
    ./bsu.sh -install patch_download_dir=/xxx/Patchs/Discoverer/WebLogic/p18040640 -patchlist=T5F1 -prod_dir=$WLS_HOME

      Le résultat de l'exécution devrait ressembler à : 

   Checking for conflicts..
   No conflict(s) detected
   Installing Patch ID: T5F1..
   Result: Success

  • Vérifiez la version une autre fois
    java weblogic.version

      Vous devez voir une modification, laquelle ressemble à : 

    WebLogic Server 10.3.6.0.8 PSU Patch for BUG18040640 THU MARCH 27 15:54:42 IST 2014
    WebLogic Server 10.3.6.0  Tue Nov 15 08:52:36 PST 2011 1441050
    Use 'weblogic.version -verbose' to get subsystem information
    Use 'weblogic.utils.Versions' to get version information for all modules


  • Et voici la partie la plus importante, il faut ajouter la ligne suivante dans le fichier "weblogic.policy", ce fichier se trouve dans le répertoire "$ORACLE_BASE/fmw/wlserver_10.3/server/lib/" 
    grant codeBase "file:$ORACLE_BASE/fmw/patch_wls1036/patch_jars/-" {permission java.lang.RuntimePermission "oracle.discoverer.connections", "read";};



  • En suite, vous pouvez repartir vos applications.



Vous allez trouver cette dernière partie dans la note :  
Oracle WebLogic Server Patch Set Update 10.3.6.0.8 Fixed Bugs List (Doc ID 1645823.1) 

Et voilà, cela doit corriger les problèmes d'affichage de votre page d'accueil de Discoverer Viewer ou Plus.

J'espère que cela sera vraiment utile pour vous.


Bonne journée


lundi 2 mars 2015

Password File - 12c

Bonjour

     Si jamais vous ne l'avez pas encore vu, une des nouveautés de la version 12c vient aussi du côté de son "Password File". Ce fichier comme vous le savez sert originalement à entreposer le mot de passe de sys, ainsi que pour les comptes qui effectueront des travaux administratifs.

En principe, pour créer ce fichier on doit se servir de la commande "orapwd" 

Voici la syntaxe de la commande : 

orapwd FILE=filename [ENTRIES=numusers] [FORCE={y|n}] [ASM={y|n}] 
[DBUNIQUENAME=dbname] [FORMAT={12|legacy}] [SYSBACKUP={y|n}] [SYSDG={y|n}] [SYSKM={y|n}] [DELETE={y|n}] [INPUT_FILE=input-fname]



Arguments
Description
FILE
Si l’argument clé DESCRIBE n’est pas inclus donc vous devez spécifier le nom du fichier à créer. Vous devriez indiquer le chemin au complet sinon le fichier sera créé sous le répertoire actuel.
PASSWORD
Il parle évidemment du mot de passe pur SYS. Si vous n’avez pas spécifié l’argument il vous sera demandé. Ce mot de passe en enregistré dans le fichier à créer.
Note : C’est toujours mieux de n’est pas ajouter l’argument afin de ne pas écrire le mot de passe dans la commande, laquelle pourrait être récupérée pour d’autres fins moins honnêtes..
ENTRIES
Cette valeur est optionnelle et elle indique le nombre maximale d’entrées (comptes d’utilisateurs) permis dans le fichier.
FORCE
Optionnel, permet de remplacer le fichier existant.
ASM
Optionnel, si la valeur est à “y”, le fichier sera créée dans un « diskgroup» ASM.
Si la valeur est plutôt à “n” –ce qui est la valeur par défaut- le fichier sera créé dans un file system.
Quand DBUNIQUENAME est spécifié, le « password file » sera un « database password file ».
Quand DBUNIQUENAME n’est pas spécifié, le « password file » peut être un « database password file» ou un « Oracle ASM password file ».
DBUNIQUENAME
Le nom unique de la bases de données qui sert à identifier le nom des « database password files » qui se trouvent dans un disk group ASM.
Cet argument est necessaire si le « database password file » est place dans une diskgroup ASM.
FORMAT
Optionnel, Si 12, la valeur par défaut le “password file » sera créée avec le format de Oracle Database 12c. Ce format supporte les privilèges administratifs SYSBACKUPSYSDG, et SYSKM.
SYSBACKUP
Optionnel, Si y, il va ajouter une entrée SYSBACKUP dans le « password file ». Un mot de passe vous sera demandé, lequel sera conservé dans le « password file ».
SYSDG
Optionnel, Si y, il va ajouter une entrée SYSDG dans le « password file ». Un mot de passe vous sera demandé, lequel sera conservé dans le « password file »..
SYSKM
Optionnel, Si y, il va ajouter une entrée SYSKM dans le « password file ». Un mot de passe vous sera demandé, lequel sera conservé dans le « password file ».
DELETE
Optionnel et evident. Si y, il va supprimer le « password file » spécifié.
Si “n”, -la valuer par défaut-  il va permettre la creation du « password file ».
INPUT_FILE
Optionnel, Il parle d’un « password file » existant. Dans ce cas le « orapwd » va migrer les entrées au nouveau fichier.
DESCRIBE
Décrit les propriétés d’un “password file”, y compris la valeur du format et la valeur IGNORECASE.


Mais...qu'est-ce qui s'est passé avec l'argument "ignorecase" ?  
Il a été déprécié depuis la version 12c, mais conservé par compatibilité. Oracle recommande fortement de ne pas s'en servir ou de l'assigner la valeur "n"

Un exemple de la création :

orapwd FILE='+DATA01/mybd/orapwmybd' ENTRIES=10 DBUNIQUENAME='mybd' FORMAT=12



Bonne journée