Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1018 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  PERL SQLPLUS encapsulé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PERL SQLPLUS encapsulé

n°2148025
grulles
Posté le 04-07-2012 à 10:22:19  profilanswer
 

Bonjour,
 
Voila, j'ai un petit souci. je m'explique
Je me connecte en ssh sur un serveur, dans ce shell, je fais un su - grid pour executer un script SQL.  
Quand j'execute tout ma commande depuis un shell standard pas de problème, par contre depuis un script perl, rien ne se passe. Enfin il se connecte correctement sous l'utilisateur grid lance la commande sqlplus mais je n'obtient aucun résultat.
Voici un bout de mon script.  
my $command = 'sqlplus / as sysdba << EOF
 set heading off  
 set pages 1000  
 set lines 300
 col path format a50
 col instance_name format a20
 select v\$asm_diskgroup.name,v\$asm_disk.PATH from v\$asm_diskgroup,v\$asm_client,v\$asm_disk where v\$asm_client.GROUP_NUMBER=v\$asm_disk.GROUP_NUMBER and v\$asm_disk.GROUP_NUMBER=v\$asm_diskgroup.GROUP_NUMBER;
 EOF';
 
print $command ."\n";  # ici pas de problème
 
my @lines= () ;  
 my $cmd ;
 $cmd='ssh -q -o stricthostkeychecking=no -o batchmode=yes root@'.$server.' \'echo "1" | su - grid -c \''.$command; # Je pense que le problème vient d'ici.
 print "Commande executée : ". $cmd . "\n";    
 open (SHELLCMD,"$cmd |" );
  while (<SHELLCMD> ){
   s/^\s+//g;
   s/\s+$//g;
   if (defined($_)){
    my ($line)=$_ ;
    print "line = " . $line ."\n";
    $lines[$i]= $line;
    $i++;
   }
  }
 
Et voici le résultat de tout ça  
line =
line = 1) - +ASM1 - Oracle Grid and ASM Environment
line =
line = --->
line =
line = SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 4 10:08:46 2012
line =
line = Copyright (c) 1982, 2011, Oracle.  All rights reserved.
line =
line = Enter user-name: logout  
 
J'ai modifié le script pour le faire tourner en local, pas de souci.  
 
Si vous avez une idée.
Merci pour votre aide.  
Grulles  
 
 
 

mood
Publicité
Posté le 04-07-2012 à 10:22:19  profilanswer
 

n°2148050
gilou
Modérateur
Modzilla
Posté le 04-07-2012 à 12:49:06  profilanswer
 

Citation :

$cmd='ssh -q -o stricthostkeychecking=no -o batchmode=yes root@'.$server.' \'echo "1" | su - grid -c \''.$command; # Je pense que le problème vient d'ici.


Il y a pas un ' qui manque quelque part?
'ssh -q -o stricthostkeychecking=no -o batchmode=yes root@' OK
.$server. OK
' \'echo "1" | su - grid -c \''.$command; je ne vois pas la ' fermant celle de départ
EDIT ah! ça se termine par deux simple quotes
 
A+,


Message édité par gilou le 04-07-2012 à 12:49:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2148053
grulles
Posté le 04-07-2012 à 13:14:34  profilanswer
 

Merci pour ta réponse gilou  
Non pas mieux. c'est comme si la commande sqlplus n'arrivait pas à me renvoyer le résultat .  
Je vois bien le header du sqlplus ..
 
line FROM PARENT = SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 4 13:06:24 2012
line FROM PARENT =
line FROM PARENT = Copyright (c) 1982, 2011, Oracle.  All rights reserved.
line FROM PARENT =
line FROM PARENT = Enter user-name: logout  
Mais cette dernière ligne me parait etrange ...  

n°2148068
gilou
Modérateur
Modzilla
Posté le 04-07-2012 à 14:26:49  profilanswer
 

Avec
my $command =<<EOF
 'sqlplus / as sysdba
 set heading off
 set pages 1000
 set lines 300
 col path format a50
 col instance_name format a20
 select v\$asm_diskgroup.name,v\$asm_disk.PATH from v\$asm_diskgroup,v\$asm_client,v\$asm_disk where v\$asm_client.GROUP_NUMBER=v\$asm_disk.GROUP_NUMBER and v\$asm_disk.GROUP_NUMBER=v\$asm_diskgroup.GROUP_NUMBER;'  
EOF
;
ça marcherait pas mieux?
Il y avait plusieurs pbs:
Un blanc entre le << et le EOF ce qui en faisait une séquence pas reconnue ('deprecated')
les ' avant le <<EOF ce qui fait qu'ils étaient pris en compte en premier
le ; juste après le EOF alors qu'il doit figurer seul sur la ligne.
 
Bref, si  
$command doit contenir

'sqlplus / as sysdba
 set heading off
 set pages 1000
 set lines 300
 col path format a50
 col instance_name format a20
 select v$asm_diskgroup.name,v$asm_disk.PATH from v$asm_diskgroup,v$asm_client,v$asm_disk where v$asm_client.GROUP_NUMBER=v$asm_disk.GROUP_NUMBER and v$asm_disk.GROUP_NUMBER=v$asm_diskgroup.GROUP_NUMBER;'


ce qui à priori me semble logique au vu du $cmd='ssh -q -o stricthostkeychecking=no -o batchmode=yes root@'.$server.' \'echo "1" | su - grid -c \''.$command;  
alors ça devrait coller avec ce que je vous ai modifié.
 
Peut être que pour la première ligne, un  'sqlplus "/ as sysdba" est meilleur, au vu de certains exemples trouvés sur le web (qui ont aussi un exit final en fin de commande).
 
A+,


Message édité par gilou le 04-07-2012 à 14:30:14

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2151100
grulles
Posté le 26-07-2012 à 10:16:42  profilanswer
 

Salut Gilou
Désolé pour ma réponse tardive, mais j'étais en vacances et qui dit vacances dit pas d'internet, merci encore pour ton aide...  
Sinon, j'ai essayé mais ça ne fonctionne pas dans mon environnement, le problème c'est la commande ssh qui encapsule un "su" puis un sqlplus. J'ai pallié au problème en créant un fichier sql que je dépose  sur les serveurs et après je peux l’exécuter sans pb.  
 
FYI : voici ce que cela donne en espérant que cela puisse aider quelqu'un d'autre :  
my $transfert='scp -q -o stricthostkeychecking=no asm_diskgroup.sql root@'.$server.':/home/grid/';
 system($transfert);  
 $cmd='ssh -q -o stricthostkeychecking=no -o batchmode=yes root@'.$server.' \' echo "1" | su - grid -c  "sqlplus -S / as sysdba @asm_diskgroup.sql" \' ';  
 
 
Grulles


Message édité par gilou le 26-07-2012 à 11:43:49

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  PERL SQLPLUS encapsulé

 

Sujets relatifs
[PERL] Lire un paragrapheCGI perl
Win32 invalide en executant 1 script perl via Eclipse[PERL] problème avec variable de session PHP
Help comparaison de deux fichier perl[Perl] Mail avec MIME::lite
[Perl] Script de transfert FTP[Perl] Can't call method "Open" on an undefined value
Script PerlPerl , Problème /
Plus de sujets relatifs à : PERL SQLPLUS encapsulé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR