Back up em java

Galera, eu estou usando o baco derby, e preciso fazer um back up dos dados, como se faz isso em java,

como funciona este processo, será que alguém sabe???

Meu aplicativo é desktop, e o backup precisa ser diário e auomático.

Não tenho a menor idéia de por onde começar.

Valeu galera!!

Você vai encontrar a informação de como fazer Backup do Derby neste documento “Derby Server and Administration Guide.”

Na verdade você não deve fazer isso através de Java… Faça um script que rode todos os dias em uma determinada hora e execute o comando para backup.

Não sei qual o comando pois não abri o documento, mas no site do apache derby você encontra o seguinte texto:

http://db.apache.org/derby/manuals/develop/develop13.html

cara se voce quer fazer isso da aplicação java voce
pode executar um script dessa forma:

Runtime.getRunTime().exec("path do script");

voce pode fazer isso em uma thread que irra rodar e executarar o script nos intervalos de
tempos desejavel em hora e hora se for diario uma vez por dia realmente e melhor por um script
para executar nas rotinas do sistema operacional.

no windows serias nas tarefas agendadas.
no ubuntu e outras distribuições linux voce pode usar o cron.

mas se for necessario fazer da aplicação voce pausa a execução da thread assim pelo tempo passado em milisegundos.

Thread.sleep(100000);//tempo em milisegundos

voce pode executar uma thread assim:

new Thread( new Runnable() {
     public void run() {
          //aqui entra o codigo
          //que executa o script no tempo 
          //que voce quiser
     }
}
).start();

Cara honestamente eu não entendi…
Não tem como me passar a estrutura de como eu faria isso e por onde eu devo começar???

Ainda estou aprendendo, nuca usei Thread…

Não sei o que é…

ahuahauha

Valeu galera!

Thread é uma linha d comunicação, pra “executar” varias tarefas ao mesmo tempo…

Antes da uma lida aki :

http://www.dcc.ufrj.br/~comp2/TextosJava/Threads%20em%20Java.pdf

e quase isso so que não são executadas ao mesmo tempo ao não ser que o computador tenha
varios processadores. o que realmente acontece e que a thread filha executa em concorrencia
com as outras thread do programa dando uma impressão de que são executadas ao mesmo tempo.

certo Jefries voce realmente vai fazer os backup pela aplicação???

como falei antes isso serria otimo se o backup for executado por exemplo em hora e hora ou um tempo
menor isso pode ser ate configurado pelo usuario é como se fosse um backup altomatico executado pelo
programa e realmente isso que voce quer.

ja fiz isso uma vez depois vou postar algo relacionado a isso quando tiver tempo de procurar o projeto que
no momento não to com ele.

certo chapa descupa a demora mas la vai, esse primeiro codigo declaro alguns metodos utilitarios para geração dos scripts
de backup e restore.

a esses codigos foram implementados e testados em SGBD`s MySQL, PostgreSQL.
não estam adequados para derby.

[code] /*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package db.admin.backup.sql.auto;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

  • @author antoniel
    */
    public class ManageBackup {

    public static void createScriptBackup() {

     File file = null;
     StringBuffer buffer = null;
    
     if(File.separator.compareTo("/") == 0 ) {
         file = new File( "backup.sh" );
         buffer = new StringBuffer("#!/bin/bash\n\n");
     } else {
         file = new File( "backup.bat" );
         buffer = new StringBuffer();            
     }
     
     buffer.append("");//CODIGO DO BACKUP
    
     try {
    
         BufferedWriter saida = new BufferedWriter(new PrintWriter(file));
         saida.write(buffer.toString());
         saida.close();
         
     } catch (FileNotFoundException ex) {
         Logger.getLogger(ManageBackup.class.getName()).log(Level.SEVERE, null, ex);
     }
     catch (IOException ex) {
         Logger.getLogger(ManageBackup.class.getName()).log(Level.SEVERE, null, ex);
     }
    

    }

    public static void createScriptRestore() {

     File file = null;
     StringBuffer buffer = null;
    
     if(File.separator.compareTo("/") == 0 ) {
         file = new File( "restore.sh" );
         buffer = new StringBuffer("#!/bin/bash\n\n");
     } else {
         file = new File( "restore.bat" );
         buffer = new StringBuffer();
     }
    
     buffer.append("");//CODIGO DO RESTORE DO BANCO DE DADOS
    
     try {
    
         BufferedWriter saida = new BufferedWriter(new PrintWriter(file));
         saida.write(buffer.toString());
         saida.close();
    
     } catch (FileNotFoundException ex) {
         Logger.getLogger(ManageBackup.class.getName()).log(Level.SEVERE, null, ex);
     }
     catch (IOException ex) {
         Logger.getLogger(ManageBackup.class.getName()).log(Level.SEVERE, null, ex);
     }
    

    }

    /*Retorna o tempo em milisegundos/
    public static int getTime(String time) {

     int ponto = time.indexOf(":");//captura o indice do caractere delimitador
     if (ponto == -1) {
         throw new IllegalArgumentException("Tempo invalido forneça o tempo no formato \"hh:mm\"");
     }
     int hora = Integer.parseInt(time.substring(0, ponto));//recupera o numero de horas
     int min = Integer.parseInt(time.substring(ponto + 1,time.length()));//
    
     return ( ( ( (hora * 60 ) + min ) *  60 ) * 1000 );//retorna o tempo em milisegundos
    

    }

    /Retorna o path de onde o script de restore estar salvo/
    public static String getScriptBackup() {

     if ( File.separator.compareTo("/") == 0 ) {
         return "backup.sh";
     }
    
     return "backup.bat";
    

    }

    /Retorna o path de onde o script de restore estar salvo/
    public static String getScriptRestore() {

     if ( File.separator.compareTo("/") == 0 ) {
         return "restore.sh";
     }
    
     return "restore.bat";
    

    }

}

[/code]

nesse codigo aqui e que entra a ação do backup.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package db.admin.backup.sql.auto;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author antoniel
 */
public class Backup {

    public Backup(long time) {
        this.time = time;
    }

    /*Executa o backup em concorrencia com a aplicação.*/
    public void createBackup(String shell) {        
        thread = new Thread(new RunBackup(shell));        
    }

    /**Executa restore do banco de dados apartir de um backup.*/
    public void createRestore(String shell) {
        try {
            processo = Runtime.getRuntime().exec(shell);
            printErrorExecucao();
        } catch (IOException ex) {
            Logger.getLogger(Backup.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void stop() {
        thread.stop();
    }

    public void start() {
        thread.start();
    }

    public long getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }
    
    public class RunBackup implements Runnable {

        private RunBackup(String shell) {
            this.shell = shell;
        }

        @Override
        public void run() {
            
            try {
                while(true) {
                    Thread.sleep(time);
                    processo = Runtime.getRuntime().exec(shell);
                    printErrorExecucao();
                }

            } catch (InterruptedException ex) {
                Logger.getLogger(Backup.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Backup.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        private String shell;
    }

    private void printErrorExecucao() {

        BufferedReader entrada = new BufferedReader(new InputStreamReader(processo.getErrorStream()));
        String linha = null;
        try {

            while ((linha = entrada.readLine()) != null) {
                System.out.println(linha);
            }

            entrada.close();
            
        } catch (IOException ex) {
            Logger.getLogger(Backup.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private long time;
    private Thread thread;
    private Process processo;
    
}

aqui e apenas exemplo de utilização.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package db.admin.backup.sql.auto;

/**
 *
 * @author antoniel
 */
public class RunBackup {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        ManageBackup.createScriptBackup();
        
        Backup backup = new Backup(ManageBackup.getTime("01:00"));//executa o backup de hora em hora

        backup.createBackup(ManageBackup.getScriptBackup());

        backup.start();//inicia a thread

        
        
    }

}

rapaz da uma olhada nisso aqui:

http://www.ibm.com/developerworks/db2/library/techarticle/dm-0502thalamati/index.html

Aeee ajinfotec, você poderia me explicar como adaptar esse código para fazer bakcup e restore em mysql??

desde já agradeço! :thumbup:

Com postgre vc faz assim:


   1. public class Backup {  
   2.     public void realizaBackup(){  
   3.         Runtime r = Runtime.getRuntime();              
   4.         try{  
   5.             Process p = r.exec(" \"C:\\Arquivos de programas\\PostgreSQL\\8.0\\pgAdmin III\\pg_dump.exe\" -i -h localhost -p 5432 -U user -F c -b -v -f \"C:\\backup\\bancodados.backup\" seubanco");  
   6.             if(p != null){  
   7.                 OutputStream outputStream = p.getOutputStream();  
   8.                 outputStream.write("suasenha\r\n".getBytes());  
   9.                 outputStream.flush();  
  10.                 outputStream.close();  
  11.                 InputStreamReader streamReader = new InputStreamReader( p.getErrorStream() );  
  12.                 BufferedReader reader = new BufferedReader( streamReader );  
  13.                 String linha;  
  14.                 while( (linha = reader.readLine()) != null )  
  15.                     System.out.println(linha);  
  16.             }  
  17.         } catch(IOException ioe){  
  18.             ioe.printStackTrace();  
  19.         }  
  20.     }  
  21. }  

Já no caso de agendamento diario seria interessante vc criar um Timer e agendar o backup para um determinado horario.

Procure Timer em Java no google.

Valeu por responder lgWeb…
Eu utilizei o exemplo que o ajinfotec mostrou… juntamento com arquivos .bat, tanto para bckup como para restore… resolveu meu problema…

desde já obrigado!!!

ostreicher foi mal ai mano to vendo agora a tua solicitação.

cara tu e de fortaleza morro em beberibe em breve pretendo ir
marra em fortaleza.

qualquer coisa to ai.

rapas ja pesquisei muito isso e agora do nada descobri a resposta
o meu unico erro erra isso na string.

"\r\n"

valeu mano foi muito bom esse poste.

Beleza ajinfotec, vou testar aqui dessa forma, apesar de já ter conseguido resolver com o lance do arquivo .bat

Vou tentar afinal conhecimento nunca é demais…

Pois é cara moro em Fortaleza, cara qualquer coisa pega ai o meu msn e me add, ai trocamos conhecimentos… afinal de que adianta o conhecimento senão for para todas?!

Vlw…

certo mano o meu e esse aqui

ajsoftdeveloping@hotmail.com