FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Exécuter une SP en background dans php
 

Exécuter une SP en background dans php

Il y a 263 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Exécuter une SP en background dans php
 
Plus d'informations

Bonjour,
 
J'ai une application php où j'exécute une procédure stockée contenant un package DTS (SQL Server). J'ai réussis à faire démarrer ce package DTS avec xp_cmdshell. Pour lancer le tout, j'utilise la commande suivante :
 
$DTS_result = $dbj->Execute(mssql_query("EXECUTE Run_DTS_Packages" ));
 
Mon problème : L'importation des tables prend un temps fou et je n'aimerais pas que ma page "plante" à cause d'un time out... Y a-t-il une solution plus "user friendly" ???
 
Merci
 
 
CFGilles

Profil : Pointeur
Plus d'informations

supprimer le timeout de la page...

Plus d'informations

Non..... Ce n'est pas une solution... Le package DTS va prendre des heures à rouler (plusieurs millions de lignes de données à importer d'une BD Oracle à SQL Server).
 
Lorsque chaque table effectue son importation, deux fichiers textes sont générés (table_debut.txt au début de l'importation et table_fin.txt à la fin de l'importation). Je veux rafraichir la page à tous les 30 secondes pour vérifier quel fichier a été créé et ainsi afficher un "Table importée avec succès" après chaque importation de tables.
 
Pour faire cela, il faut que la page soit complètement lue, donc que la store proc roule en background et que le résultat ne soit pas directement dépendant de la page.
 
Est-ce qu'appeller une store proc qui appelle ma store proc générale ferait la job ?? Est-ce que ma 1ere store proc va attendre le résultat de la 2e pour compléter l'affichage de la page php ?
 
Merci
 
CFGilles

Inside my own Second Life

Je passe dans ce topic un peu comme un cheveu sur la soupe en ne connaissant pas vraiment le sujet (en même temps, j'ai envie de me coucher un peu moins bête ce soir :D), mais tu ne pourrais pas "découper" l'importation de chaque table par tronçons, ce qui rendrait PHP moins "sensible" au timeout avec une page qui rapporterait non pas "table importée avec succès", mais plutôt un truc du genre "enregistrements x à y de la table machin importés avec succès" ?
 
:jap:


---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/
Plus d'informations

Oui mais ça règle en partie le problème car j'ai une table de 6.3 millions d'enregistrements....
 
De plus, je veux donner la possibilité à l'usager de cocher ses tables à importer et rentrer à la maison pour la nuit...
 
Merci !

Inside my own Second Life

Effectivement.. Le calcul du timeout se faisant entre le moment où la requête est lancée et le moment où la page résultante est affichée, c'est un peu plus complexe que je ne l'imaginais sans trop connaître..
 
Ou alors, une bidouille dans le genre homme des cavernes : un traitement par lots de 1000 enregistrements, la page résultante qui s'affiche et un JavaScript qui quelque secondes après relance tout seul la suite du traitement par une URL que le traitement précédent à généré.. Basique, pas professionnel et pas non plus très fiable, mais bon.. Je crois surtout que je vais continuer à suivre ce topic : il m'intéresse, en serait-ce que pour ma culture personnelle ;)..
 
:jap:


---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/
Plus d'informations

Bon, j'ai trouvé pas mal de trucs sur l'exécution asynchrone de packages DTS sur le net..
 
En gros, c'est d'utiliser une SP system comme sp_start_job pour lancer l'exécution du package.
 
J'en suis encore aux balbutiements... Je te tiens au courant

zeb
Profil : Modérateur libre
Plus d'informations

(Tu nous tiens tous au courant ;) tu es lu par plus de monde que tu ne crois)

Profil : Pointeur
Plus d'informations

j'allais justement te proposer de faire un job...

Plus d'informations

OK, le problème est réglé !! Voici la solution.
 
1) SQL Server -> Management -> SQL Server Agent -> Jobs
Vous devez créer une nouvelle Job avec, dans l'onglet Steps, votre commande "xp_cmdshell" que vous voulez exécuter. Dans mon cas, mon code ressemblait à ceci (sans, pour l'exemple, les username/password):
exec master.dbo.xp_cmdshell 'C:\Progra~1\Micros~3\80\Tools\Binn\ISQL.EXE -S MyServer -U MyUserName -P MyPassword -Q "ISQL_Batch ''My Package and variables''" -n -d MyDataSource'
J'ai appellé ma nouvelle Job: Run_DTS_Packages
 
2) Vous devez créer une Stored Procedure pour appeller cette Job:
CREATE PROCEDURE Call_DTS_Packages AS
SET NOCOUNT ON
EXEC msdb.dbo.sp_start_job @job_name = 'Run_DTS_Packages', @server_name = 'MyServer'
GO
 
3) Pour les adeptes de PHP, voici l'appel de la fonction :
$DTS_result = $dbj->Execute(mssql_query("EXECUTE Call_DTS_Packages" ));
 
Et voilà !!!
 
J'espère que ce tranfert de connaissance vous aidera dans votre traval ;o)))
 
CFGilles

Profil : Pointeur
Plus d'informations

ca va pas m'aider meme si ce satané SQL serveur va me pourrir mes journée les prochains jours :D

Plus d'informations

Ça ne va pas t'aider ???
 
Par expérience et pour avoir cherché la réponse à mon problème depuis les 2-3 derniers jours, je te dirais que ma réponse est très bien étoffée !!!
 
Un peu plus et je vous prends par la main... ;o))
 
CFGilles

Profil : Pointeur
Plus d'informations

non, ca va pas m'aider parce que j'en ai pas l'utilité, simplement...

Inside my own Second Life

Moi non plus je n'en ai pas l'utilité, mais ne connaissant quasiment rien dans ce domaine des BDDs (surtout MS SQL), la soluce m'aura au moins éclairé sur ce qu'il est possible de faire, du moins sur le principe (et même si je connais un peu la technique des jobs en Unix)..
 
Donc merci de l'avoir postée et surtout détaillée ;)..
 
:jap:


---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » Exécuter une SP en background dans php
 

Annonces Google
Publicité