vendredi 9 novembre 2012

Rappeler une requête dans SQL*Plus en remplaçant les paramètres

Vous utilsez une requête SQL dans laquelle vous passez des valeurs en paramètre dans la clause WHERE.

Dans SQL*PLUS vous voulez rappeler la même requête tout en remplaçant la valeur passée en paramètre par une autre valeur.

Utiliser la syntaxe:

c/ancien_valeur/nouvelle_valeur

Exemple:

Créer une table:

SQL> create table test (num number, libelle varchar2(5));

Table creee.


Insérer des données dans la table:


SQL> insert into test values (1, 'NY');

1 ligne creee.

SQL> insert into test values (2,'NY');

1 ligne creee.

SQL> insert into test values (3,'CA');

1 ligne creee.

SQL> insert into test values (4,'NY');

1 ligne creee.

SQL> insert into test values (5,'PA');

1 ligne creee.

SQL> commit;

Validation effectuee.



Rechercher les enrégistrements dont le libellé est PA.

SQL> select * from test where libelle='PA';

       NUM LIBELLE
---------- -------------------------
         5 PA


Rappeler la même requête sql en remplaçant PA par NY.


SQL> c/PA/NY
  1* select * from test where libelle='NY'
SQL> /

       NUM LIBELLE
---------- -------------------------
         1 NY
         2 NY
         4 NY
SQL>

 

Hope it helps.

jeudi 8 novembre 2012

Clusterware PRC-1302: The "OCR", has an invalid IP address format

J'ai rencontré un problème avec un cluster 11.2.0.3 de 2 noeuds (zones solaris 11) sur lequel on essayait d'installer Oracle Database 11.2.0.3. Je souligne que le grid infrastructure n'a pas été installé par votre serviteur. 
A un moment donné de l'installation on a rencontré l'erreur:

An internal error occurred within cluster verification framework
Unable to obtain network interface list from oracle
Clusterware PRC-1302: The "OCR", has an invalid IP address format

Une vérification de la configuration des interfaces réseaux avec la commande "oifcfg" montre que la configuration des interfaces dans le cluster n'est pas correct:

oifcfg iflist -p
aggr2  10.53.228.0  PUBLIC
net7  192.168.101.0  PRIVATE
net7  169.254.0.0  PUBLIC

oifcfg getif
aggr2  10.53.228.0  global  public
*  192.168.101.0  global  cluster_interconnect
PRIF-29: Warning: wildcard in network parameters can cause mismatch among GPnP profile, OCR, and system

Pour corriger le problème, utiliser la commande "oifcfg":

oifcfg setif -global net7/192.168.101.0:cluster_interconnect
oifcfg delif -global */192.168.101.0 

Une autre vérification montre que les interfaces réseaux utilisées pour l'interconnect ne portent pas le même nom (net7 sur le noeud 1 et net13 sur le noeud 2). Même si ce n'est pas une contrainte d'avoir le même nom (pour ce qui est du réseau privé), c'est tout de même une recommandation d'oracle.

Nous allons tout de même faire la modification pour avoir 2 noms différents le temps que les noms des interfaces soient homologués.

oifcfg setif -node rac1-lab net7/192.168.101.0:cluster_interconnect
oifcfg setif -node rac2-lab net13/192.168.101.0:cluster_interconnect
oifcfg delif -global net7/192.168.101.0


Après cette modification, l'on rencontre un autre message d'erreur:

oifcfg getif
net7  192.168.101.0  rac1-lab  cluster_interconnect
net13  192.168.101.0  rac2-lab  cluster_interconnect
aggr2  10.53.228.0  global  public
Only in OCR: aggr2  10.53.228.0  global  cluster_interconnect,public
PRIF-51: interface [aggr2] is set to both public and cluster_interconnect
PRIF-30: Network information in OCR and GPnP profile differs

Un dump de l'OCR (avec la commande OCRDUMP) montre qu'il y a une incohérence dans l'OCR, d'où le message ci-dessus:

Voici un extrait du dump de l'OCR:
[SYSTEM.css.interfaces.global.aggr2.10|d53|d228|d0.1]
ORATEXT : cluster_interconnect,public
SECURITY : {USER_PERMISSION : PROCR_ALL_ACCESS, GROUP_PERMISSION : PROCR_ALL_ACCESS, OTHER_PERMISSION : PROCR_READ, USER_NAME : grid, GROUP_NAME : oinstall}

Pour corriger:

oifcfg setif -node rac1-lab aggr2/10.53.228.0:public
oifcfg setif -node rac2-lab aggr2/10.53.228.0:public
oifcfg delif -global aggr2/10.53.228.0


Vérification:

oifcfg getif
net7  192.168.101.0  rac1-lab  cluster_interconnect
aggr2  10.53.228.0  rac1-lab  public
net13  192.168.101.0  rac2-lab  cluster_interconnect
aggr2  10.53.228.0  rac2-lab  public


Une fois que les interfaces ont été nommées comme il se doit, c'est à dire le même nom pour les interfaces publiques sur les 2 noeuds, et le même nom pour les interfaces privées sur les 2 noeuds, corriger comme suit:

oifcfg setif -global aggr2/10.53.228.0:public
oifcfg delif -node rac1-lab aggr2/10.53.228.0

oifcfg delif -node rac2-lab aggr2/10.53.228.0

oifcfg setif -global net7/192.168.101.0:cluster_interconnect
oifcfg delif -node rac1-lab net7/192.168.101.0
oifcfg delif -node rac2-lab net13/192.168.101.0


Et le résultat final devra être:

oifcfg getif
aggr2  10.53.228.0  global  public
net7  192.168.101.0  global  cluster_interconnect


Hope it helps.