IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Sauvegarder ma DB


Sujet :

JDBC Java

  1. #1
    Invité
    Invité(e)
    Par défaut Sauvegarder ma DB
    Bonjour,

    voila d’essai de crée des point de sauvegarde de ma DB en utilisant java j2ee:
    - je liste les table.(show table)
    - j’exécute select * from table que je parcoure pour crée des insert into

    mais le problème c'est que a chaque fois il me fait head dump du coup je doit ajouté la mémoire a la JVM pour qu'il m’exécute tous mon scripte

    est-ce vous avez un autre moyen SVP.
    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Tu as beaucoup de données dans ta base ?
    Ce que tu appelles "head dump" c'est une OutOfMemoryException ?
    En ce qui concerne la sauvegarde de DB pourquoi ne pas utiliser les utilitaires fournis avec les SGBD ?

    Sinon, s'il s'agit d'un problème de volumétrie pour chaque table, essaye de lire les données par petits paquets avec l'opérateur SQL LIMIT

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    Tu as beaucoup de données dans ta base ?
    Oui j'ai beacoup mais vraiment tros de donné

    Citation Envoyé par Mathieu.J Voir le message
    Ce que tu appelles "head dump" c'est une OutOfMemoryException ?
    Oui c ça du coup j'ai ajouter plus de memoir a la JVM pour que ça marche mais en entreprise quand ça va devenir plus gros ça va etre le bordel

    Citation Envoyé par Mathieu.J Voir le message
    En ce qui concerne la sauvegarde de DB pourquoi ne pas utiliser les utilitaires fournis avec les SGBD ?
    j'ai essyer le mysqldump mais ça marche pas tros ( en ligne de commande ) donc je sais pas si ta un truc en java qui marche ça serai archi bien

    Citation Envoyé par Mathieu.J Voir le message
    Sinon, s'il s'agit d'un problème de volumétrie pour chaque table, essaye de lire les données par petits paquets avec l'opérateur SQL LIMIT
    moi ce que je fais dans mon programme c'est que j’exécute select * from puis puis chaque ligne dans chaque enregistrement je met Insert into
    je mais tous dans une variable puis je l’écrit dans le fichier .sql

    Mais ça prend grave du temp pour l'instant ya une table elle prend 148439ms

    Merci pour ton aide
    Dernière modification par Domi2 ; 18/04/2012 à 16h56.

  4. #4
    Invité
    Invité(e)
    Par défaut
    bon la le mysqldump marche mais il y a un problème avec les [ ' ] il met \' au lieux de ' ' comme phpmyadmin

  5. #5
    Invité
    Invité(e)
    Par défaut
    j'ai rencontre un autre probléme je suis sur Windows 7 j’exécute mysqldump sous la console (Admin) ça marche nikel (a part le probléme de l'apostrof) par contre depuis lapplication enfin depuis une jsp où une classe java il veux pas lancer la commande enfin il me donne pas d'erreur mais il crée pas le fichier je me suis dit c'est encore un problème de droit

    que pensez vous ?

    Merci

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Si c'était un problème de droit, tu aurais une exception. Peut-être le fichier se crée-t-il ailleurs que là où tu l'attends.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Normalement voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package test;
     
     
    public class SimplePOJOExample {
     
    	public static void main(String[] args) throws Exception {
    		try{
    		Process p = Runtime.getRuntime().exec(new String[]{
    				//C:\wamp\bin\mysql\mysql5.5.20\bin>mysqldump -u root  dbv2 > c:\dbv2.sql
    				   "C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe",
    				   "-u",
    				   "root",
    				   "dbv2 > c:\\dbv1.sql"
    				});
    		System.out.println(p.getInputStream());
    		}catch (Exception e) {
    			// TODO: handle exception
    			System.out.println(e);
    		}
     
    	}
     
    }
    j’exécute et y a rien dans c:\ a mon avis j'ai un problème quelque part mais je sais pas quoi un aide si possible

    Merci

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    La commande mysqldump semble afficher le dump sur la sortie standard.

    Le ">toto.sql" ne marchera pas parce que ce n'est pas un paramètre de la commande mysqldump mais un élément interprété par le shell pour rediriger la sortie standard dans un fichier.

    Utilise p.getOutputStream() ou p.getInputStream() pour récupérer la sortie standard de ton processus et l'écrire dans un fichier, et p.getErrorStream() pour avoir les erreurs d'exécution.


    /!\ Attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(p.getInputStream());
    N'affichera pas le contenu du stream mais p.getInputStream().toString()

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci Mathieu j'ai trouver maintenant je récupère le résultat, mais ça reste aussi un peux long, je me demander si y a pas une autre solution pour sauvegarder ma base de donnée Mysql parce que je veux rendre mon application autonome don que pouvoir sauvegarder la DB a la demande puis la restaurer a la demande.
    voici ce que j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    package test;
     
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
     
     
    public class SimplePOJOExample {
     
    	public static void main(String[] args) throws Exception {
    		try{
    			long start = System.currentTimeMillis();
    			Process p = Runtime.getRuntime().exec(new String[]{
    					//C:\wamp\bin\mysql\mysql5.5.20\bin>mysqldump -u root  dbv2 > c:\dbv2.sql
    					"C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump",
    					"-u",
    					"root",
    					"dbv2"
    			});
    			//p.waitFor();
    			StringBuffer condition = new StringBuffer();
    			BufferedReader in
    			   = new BufferedReader(new InputStreamReader(p.getInputStream()));
    			String s;
    			while ((s = in.readLine()) != null) {
    				condition.append(s);
    				condition.append("\n");
    			}
    			System.out.println(condition.toString());
    			long endTime = System.currentTimeMillis();
    			System.out.println("Total elapsed time in execution of method Insert is :"
    					+ (endTime - start));
    			//System.out.println(p.getOutputStream());
    			//System.out.println(p.getErrorStream());
    		}catch (Exception e) {
    			// TODO: handle exception
    			System.out.println(e);
    		}
     
    	}
     
    }

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Le mieux serait de copier directement le flux de la commande mysqldump dans un fichier plutôt que de passer par un StringBuffer qui va devenir énorme.
    Et d'utiliser au maximum l'api NIO qui est bien plus rapide pour ça.

    http://thomaswabner.wordpress.com/20...anio-channels/

    Après une sauvegarde de base de données ce sera toujours long, surtout si tu as une forte volumétrie.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Merci mathieu ta raison c plus rapide avec ça , ça marche trés bien par contre j'ai penser a un truc et je sais pas si ça change quelque chose ou pas ?

    exécuté un fichier bat depuis java avec la commande mysqldum?

    que pense tu ?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    essaye, tu verra bien :-)

    Tu peux effectivement faire un .bat qui contient l'appel à mysqldump et la redirection >monFic.sql, et appeler ce fichier .bat de la même manière que tu l'as fait pour mysqldump.

  13. #13
    Invité
    Invité(e)
    Par défaut
    ben finalement ces la même chose mais bon je l'utilise pour restaurer youpi ça marche :p merci Mathieu bon la faux que refais toute ma connexion a la db en utilisant le pool de tomcat

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55
  2. Sauvegardes
    Par tastalian dans le forum DirectX
    Réponses: 12
    Dernier message: 15/10/2002, 01h30
  3. [ADO] Sauvegarde / lecture de recordset
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/09/2002, 16h54
  4. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo