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 :

[H2] Création de Backup


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 19
    Points
    19
    Par défaut [H2] Création de Backup
    Bonjour,

    Je fais face à un gros problème pour créer un fichier de backup d'une base de données.

    Je procède de la manière suivante :
    1) Je crée un Backup dans le dossier source
    2) Je copie ce fichier vers un dossier indiqué par l'utilisateur
    3) Je supprime le fichier dans le dossier source

    Seulement, au moment de la copie ( étape ), le programme ne trouve pas toujours le fichier de backup, crée juste avant avec la ligne en SQL.
    J'ai un exception IOException : "Le fichier 'backupxxxxx.zip' n'a pas été trouvé ".
    Mais le plus étrange, c'est que des fois la copie marche, mais des fois ça plante :/ et je ne sais pas du tout pourquoi.

    Voilà mon code ( j'ai indiqué la ligne d'où l'exception est lancée ) :

    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
     
     
    	// Création du BACKUP dans le dossier source
    	String date = new SimpleDateFormat("dd-MM-yyyy_HH-mm-ss").format( new Date() );
    	String name = "backup" + date + ".zip";
    	this.stat.executeUpdate("BACKUP TO '" + name + "'");	
     
    	// Copie vers le dossier choisi
    	FileInputStream fileInputStream = new FileInputStream(name); // ERREUR ICI
    	FileChannel in = fileInputStream.getChannel();
    	FileOutputStream fileOutputStream = new FileOutputStream( path + "/" + name ); // "path" est le chemin du dossier cible
    	FileChannel out = fileOutputStream.getChannel();	
    	in.transferTo(0, in.size(), out);
    	fileInputStream.close();
    	fileOutputStream.close();
    	in.close();
    	out.close();
     
    	// Suppression dans le fichier source
    	File file = new File(name);
    	file.delete();
    Voilà je ne comprend pas du tout ce qui cloche.

    Merci d'avance

  2. #2
    Candidat au Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour

    Difficile de répondre sans savoir exactement ce que ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.stat.executeUpdate("BACKUP TO '" + name + "'");
    fait exactement, mais a vu de nez je dirai que la création de ton fichier n'est pas toujours terminée au moment ou tu souhaite l'ouvrir.
    Je te conseil d'ajouter un boucle d'attente avec un et une petite tempo pour garantir que le fichier existe bien au moment de l'ouverture

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Premièrement, j'essaierai de mettre un chemin absolu pour le fichier, plutôt que de supposer que la façon de produire le dossier absolu est la même entre H2 et Java. Ensuite, essaye d'executer un "checkpoint" après le "backup" (ce qui force le flush). Par ailleurs, ta connexion est-elle en autocommit ?

    Au passage, pour déplacer un fichier, tu peux utiliser Files.move().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponses !

    MisterHarpagon35 Oui c'est bizarre, on dirait que la création du backup s'exécute en tache de fond :/ Je vais mettre une boucle d'attente comme tu proposes.

    joel.drigo j'ai déjà essayé de mettre un chemin absolu pour le backup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.stat.execute( "BACKUP TO '" + path + "/" + name + "'" );
    Mais le fichier ne se créait pas quand le "path" indiqué était dans un serveur ( le programme n'arrivait pas a accéder à un des sous dossiers du serveur, sans aucune raison ) :/
    Oui la connexion est en autocommit.
    Et je ne peux pas utiliser Files, je suis en Java 1.6

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je doute que BACKUP s'exécute en tâche de fond, enfin, je veux dire rendre la main avant que l'opération soit terminée. On voit dans cette classe de test, qu'on y fait un backup et un restore juste après. Mais entre les deux, il y a bien un checkpoint !

    La tempo c'est pourrie : comment tu vas évaluer cette tempo ? Le temps d'exécution va dépendre du volume de données et de l'occupation de la machine (usages des disques en particulier). Il y a peut-être un moyen avec un DatabaseEventListener sinon.

    Sinon, pourquoi Java 1.6 ? Si c'est pour exécuter sur un serveur, ça passe à la limite, s'il est bien protégé, parce que, sinon, c'est dangereux, vu qu'il n'y a plus de support Oracle depuis février 2013 (plus de mise à jour publique) !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Pour la tempo je comptais faire une boucle while qui boucle tant qu'il ne trouve pas le fichier de backup, avec un timeout de 2-3 secondes.

    J'utilise Java 1.6 car tous les ordinateurs possèdent cette version de java, du cou p j'ai pas le choix pour la version :/

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par Metha_Chemista Voir le message
    J'ai un exception IOException : "Le fichier 'backupxxxxx.zip' n'a pas été trouvé ".
    Mais le plus étrange, c'est que des fois la copie marche, mais des fois ça plante :/ et je ne sais pas du tout pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	FileInputStream fileInputStream = new FileInputStream(name); // ERREUR ICI
    T'es pas sur Windows par hasard?
    J'ai déjà eu ce genre de galère sur un poste windows d'un utilisateur quand le répertoire cible est ouvert dans l'explorateur .

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Oui c'est vrai ! Ça bugge plus souvent quand quelqu'un à ouvert le dossier dans l'explorateur Windows ^^

    Finalement j'ai mis une boucle de tempo entre la création du backup et la copie vers le dossier cible, j'ai pas trouvé d'autres solutions :/

    J'ai été voir du coté du DatabaseEventListener, mais cela permettait de juste de savoir quand la commande 'BACKUP' à été lancé, et non pas quand elle s'est terminé.

    Cependant je n'ai toujours pas compris pourquoi je ne pouvais pas mettre de chemin absolu dans la commande 'BACKUP'

    Merci pour vos réponses en tout cas !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/07/2016, 15h32
  2. Création de script de backup
    Par sofiene dans le forum Administration
    Réponses: 1
    Dernier message: 04/11/2010, 11h07
  3. Création d'un script de backup
    Par Knoxink dans le forum VBScript
    Réponses: 1
    Dernier message: 09/10/2009, 20h46
  4. Création d'une base à partir d'un Backup
    Par big1 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2009, 21h03
  5. [RHEL5] Création backup système -> image iso
    Par Leeloo_Multiboot dans le forum RedHat / CentOS / Fedora
    Réponses: 8
    Dernier message: 15/04/2008, 10h29

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