Page 1 sur 1

Probleme Dump d'une base oracle

Posté : 01 mars 2011, 15:39
par farow
Bonjour, :D

Je vous explique mon problème, je travaille sur une base de données oracle avec Oracle Database 10g Express Edition.

J’utilise une interface en PHP pour interagir avec ma base de données, mon patron ma demandé de faire un programme qui permet de faire un dump de la base de données.
J’ais donc créée un « Export.bat » qui utilise la commande « exp » et qui fonctionne très bien.

Mais mon patron me demande maintenant d’intégrée un bouton dans la page PHP, qui permet de faire un dump directement a partir de la page PHP.

Mon code :

//-------------------Commande sql la BDD-------------------------------//
$sql = "exp User/Pass directory=C:\Directory dumpfile=Dump_PHP.dmp";
//-----------------------Exécution de la commande SQL-------------//
$stid = oci_parse($connect, $sql );
$execution = oci_execute($stid, OCI_DEFAULT);

Rien ne marche, j’ai voulu exécuter mon « Export.bat » à partir de la page PHP via un bouton mais cela semble impossible.

Si quelqu'un a une idée je suis preneur. #-o

Re: Probleme Dump d'une base oracle

Posté : 01 mars 2011, 17:58
par moogli
salut,

pourquoi impossible d’exécuter le bat depuis php ? a tu essayé exec ?

pour ce qui est de ton code, il faut voir si php et / ou oracle ont le droit d'écrire dans le chemin que tu indique, qui d’ailleurs devrait éviter de contenir des caractères spéciaux dont les espaces :)


@+

Re: Probleme Dump d'une base oracle

Posté : 01 mars 2011, 18:07
par farow
exec ne marche pas, même avec le fichier Export.bat en local dans le dossier, peut-être que je me trompe sur la syntaxe.

Mais si tu a un exemple de exec avec un fichier local je prend.

Le problème est que la commande n'est même pas exécuter et génère une erreurs PHP:

Warning: oci_execute() [function.oci-execute]: ORA-00900: instruction SQL non valide in C:\wamp\www\CG92\ExportCG92.php on line 16

Re: Probleme Dump d'une base oracle

Posté : 01 mars 2011, 18:30
par moogli
heu un exemple tous con wé :
<?php
$x = exec('exec.bat');
var_dump($x);
?>
echo 'test'
(oui très minimal)

à l'affichage : string ''test'' (length=6)

après il est possible de déactiver exec à voir.

pour ce qui est de ta version full php tu à une erreur SQL, ton instruction n'est pas reconnue ...

a priori la commande que tu indique permet l'export d'une base mais en ligne de commande pas "en SQL" .

j'ai trouvé deux trois info grace à google
http://www.developpez.net/forums/d49708 ... -commande/
http://oracle.developpez.com/guide/sauv ... alites/#L1 <= devrait t'aider aussi

a vu de nez va falloir passer par exec :)

tu peut aussi créer ton utilitaire à la main mais s'il y énormément de donnée tu sera surement en dehors du time out :)

@+

Re: Probleme Dump d'une base oracle

Posté : 02 mars 2011, 15:06
par farow
Merci =D> sa marche assez bien, je me suis inspiré de ce que tu ma donner :

Code : Tout sélectionner

$x = exec('exp userid=Usr/Pass file=C:\Exp_BDD\Exp.dump full=y rows=y'); var_dump($x);
Mais 2 problèmes se pose maintenant, j'aimerai donner a l'utilisateur la possibilité de choisir le répertoire de destination.

ceci me crée des erreurs et ne marche pas :

Code : Tout sélectionner

$x = exec('exp userid=Usr/Pass file=C:\Exp_BDD\$_POST['var'].dump full=y rows=y'); var_dump($x);
et le deuxième problème est que le Dump prend pas mal de temps, car la BDD est grande. Donc comment faire une sorte de temps de chargement, pendant que le dump se fait ??

si quelqu'un a une idée sur l'un ou l'autre des 2 problèmes je prend.

Merci.

Re: Probleme Dump d'une base oracle

Posté : 02 mars 2011, 18:29
par moogli
le problème est simple php n'interprete pas les variables dans des simples quote.

je te conseil de voir la concatenation ;)

au passage ne met pas directement $_POST dans le chemin il est préférable de vérifier que le chemin existe et que tu peut y écrire.

Perso je trouve que c'est une très mauvaise idée, car de toute façon ceci sera écrit sur le serveur et ce n'est pas un personnage "lambda" de dire ou doit être écrit ce fichier ;)

a la limite prévoir une console admin pour stocker ça dans un coin, mais n'évitera pas la remarque sur les vérifs ;)

@+