Como criar backup do banco de dados firebird com jdbc e como restaurar?(RESOLVIDO)

13 respostas
L

pessoal, como o titulo ja diz:

como criar backup do banco de dados firebird com jdbc e como restaurar?

por favor, me ajudem!

13 Respostas

T

Você pode usar os métodos contidos no proprio jar do firebird.
Utilizo o “jaybird-full-2.1.6.jar”.

Backup

try {
	FBBackupManager backup = new FBBackupManager();
	backup.setUser(usuario);
	backup.setPassword(senha);
	backup.setDatabase(caminhoBanco);
	backup.setPort(porta);
	backup.setHost(ip);
	backup.setBackupPath("c:/teste/arquivo.bkp"); // caminho arquivo backup
	backup.setVerbose(true);
	backup.setLogger(new FileOutputStream("c:/teste/log.rtf")); // caminho log
	backup.backupDatabase();
} finally {
	respostaBKP.close();
}

Restore

try {
	FBBackupManager restore = new FBBackupManager();
	restore.setUser(usuario);
	restore.setPassword(senha);
	restore.setDatabase(caminhoBanco);
	restore.setHost(ip);
	restore.setBackupPath("c:/teste/arquivo.bkp"); // caminho arquivo backup
	restore.setVerbose(true);
	restore.setLogger(new FileOutputStream("c:/teste/log.rtf")); // caminho log
	restore.setRestoreReplace(true);
	restore.restoreDatabase();
} finally {
	respostaRestore.close();
}

Espero que tenha ajudado.

L

so existe essa forma?

try{
               Class.forName(driver); //Carrega o driver

              Connection conn = (Connection) DriverManager.getConnection(url, usuario, senha);

             String sql = "SELECT * FROM membros2 INTO OUTFILE '" + ff + "'";
             java.sql.PreparedStatement stmt = conn.prepareStatement(sql);


               stmt.execute();
               stmt.close();

 }

tipo no MySql eu consigo fazendo backup assim, teria algo parecido para firebird?

L
luizgomaciel:
so existe essa forma?
try{
               Class.forName(driver); //Carrega o driver

              Connection conn = (Connection) DriverManager.getConnection(url, usuario, senha);

             String sql = "SELECT * FROM membros2 INTO OUTFILE '" + ff + "'";
             java.sql.PreparedStatement stmt = conn.prepareStatement(sql);


               stmt.execute();
               stmt.close();

 }

e ai pessoal?

tipo no MySql eu consigo fazendo backup assim, teria algo parecido para firebird?

L

Tchaco:
Você pode usar os métodos contidos no proprio jar do firebird.
Utilizo o “jaybird-full-2.1.6.jar”.

Backup

try {
	FBBackupManager backup = new FBBackupManager();
	backup.setUser(usuario);
	backup.setPassword(senha);
	backup.setDatabase(caminhoBanco);
	backup.setPort(porta);
	backup.setHost(ip);
	backup.setBackupPath("c:/teste/arquivo.bkp"); // caminho arquivo backup
	backup.setVerbose(true);
	backup.setLogger(new FileOutputStream("c:/teste/log.rtf")); // caminho log
	backup.backupDatabase();
} finally {
	respostaBKP.close();
}

Restore

try {
	FBBackupManager restore = new FBBackupManager();
	restore.setUser(usuario);
	restore.setPassword(senha);
	restore.setDatabase(caminhoBanco);
	restore.setHost(ip);
	restore.setBackupPath("c:/teste/arquivo.bkp"); // caminho arquivo backup
	restore.setVerbose(true);
	restore.setLogger(new FileOutputStream("c:/teste/log.rtf")); // caminho log
	restore.setRestoreReplace(true);
	restore.restoreDatabase();
} finally {
	respostaRestore.close();
}

Espero que tenha ajudado.

consegui fazer apenas o backup mas restaurar nao consegui, da problema! esta certo esse codigo?

T

Sim, esta certo.
So que para restaurar, não pode ter ninguem conectado ao banco.
Se estiver uma conexão aberta, da erro mesmo.

L

Tchaco:
Sim, esta certo.
So que para restaurar, não pode ter ninguem conectado ao banco.
Se estiver uma conexão aberta, da erro mesmo.

entendi, so naum entendi essa parte do codigo

finally { respostaRestore.close(); }

finally { respostaBKP.close(); }

me explica isso naum entedi! esse tal de respostaBKP ??? respostaRestore ???

T

Ops, mals. É que quando postei, estava testando o código.

Seria isso:

OutputStream respostaBKP = new FileOutputStream("c:/teste/log.rtf");

try {
   String porta = configBD.getCbd_porta();
   FBBackupManager backup = new FBBackupManager();
   backup.setUser(usuario);
   backup.setPassword(senha);
   backup.setDatabase(pathBanco);
   backup.setPort(porta);
   backup.setHost(ip);
   backup.setBackupPath("c:/teste/arquivo.bkp");
   backup.setVerbose(true);
   backup.setLogger(respostaBKP);
   backup.backupDatabase();
} finally {
   respostaBKP.close();
}

Depois leio o arquivo de log gerado e apresento na tela.

L
Tchaco:
Ops, mals. É que quando postei, estava testando o código. Seria isso:
OutputStream respostaBKP = new FileOutputStream("c:/teste/log.rtf");

try {
   String porta = configBD.getCbd_porta();
   FBBackupManager backup = new FBBackupManager();
   backup.setUser(usuario);
   backup.setPassword(senha);
   backup.setDatabase(pathBanco);
   backup.setPort(porta);
   backup.setHost(ip);
   backup.setBackupPath("c:/teste/arquivo.bkp");
   backup.setVerbose(true);
   backup.setLogger(respostaBKP);
   backup.backupDatabase();
} finally {
   respostaBKP.close();
}

Depois leio o arquivo de log gerado e apresento na tela.

funcionou, so que com uma excessao , se eu uso o banco de dados, exemplo: select... bla bla bla conectado pelo FBDriver , ele depois para de funcionar , foi o caso que vc mencionou , naum pode ter nenhuma conexao aberta com o banco , e ai naum tem alguma coisa que fecha todas a conexoes com o banco antes de fazer o restore? pq o backuo funfou!

esse e o meu codigo!

try {
                                   
                     OutputStream respostaRestore;

                     respostaRestore = new FileOutputStream(log);

     FBBackupManager restore = new FBBackupManager();

    restore.setUser(usuario);
    restore.setPassword(senha);
    restore.setDatabase(caminhoBanco);
    restore.setPort(porta);
    restore.setHost(ip);
    restore.setBackupPath(ff); // caminho arquivo backup
    restore.setVerbose(true);
    restore.setLogger(respostaRestore); // caminho log
    restore.setRestoreReplace(true);
    restore.restoreDatabase();
    
    respostaRestore.close();

    JOptionPane.showMessageDialog(null,"Restaurado com sucesso!","Restaurado com sucesso!",JOptionPane.CANCEL_OPTION);

            }
                catch (SQLException ex) {
                JOptionPane.showMessageDialog(null,"Problema com o banco de dados","Problema com o banco de dados",JOptionPane.CANCEL_OPTION);
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
            catch (FileNotFoundException ex) {
                JOptionPane.showMessageDialog(null,"file","file",JOptionPane.CANCEL_OPTION);
                    JOptionPane.showMessageDialog(null,"Problema com o arquivo","Problema com o arquivo",JOptionPane.CANCEL_OPTION);
                }
            catch (IOException ex) {
                JOptionPane.showMessageDialog(null,"ex","ex",JOptionPane.CANCEL_OPTION);
                    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
                }
T

Como vc está sendo feita a sua conexão?

Utilizando algum pool?

Teria como postar a classe?

L
Tchaco:
Como vc está sendo feita a sua conexão?

Utilizando algum pool?

Teria como postar a classe?

to usando JDBC para comunicação com o firebird! quando uso o codigo naum funciona a restauração, quando naum uso funciona.

String driver = "org.firebirdsql.jdbc.FBDriver"; //Classe do driver JDBC
    String url = "jdbc:firebirdsql:localhost/3050:C:\\Program Files\\Sistema de Igreja\\bd\\IGREJA.GDB";
    String usuario = "SYSDBA"; //Usuário do banco
    String senha = "masterkey"; //Senha de conexão

        try {
                Class.forName(driver); //Carrega o driver
                
                //Obtém a conexão com o banco
                Connection conn;

                conn = (Connection) DriverManager.getConnection(url, usuario, senha);
                
                String sql = "select max(codigo) from cadastromembros";
               java.sql.Statement rec = conn.createStatement();
               ResultSet rs = rec.executeQuery(sql);
               
                if (rs.next()){

                int vl = rs.getInt(1);
                int x = vl + 1;

                cpCodigo.setText(Integer.toString(x));

                rs.close();
                    
                }
               
                }
        catch (ClassNotFoundException ex) {
             JOptionPane.showMessageDialog(null,"Não foi possível carregar o driver.","Não foi possível carregar o driver.",JOptionPane.CANCEL_OPTION);
             ex.printStackTrace();
        }
        catch (SQLException ex) {
             JOptionPane.showMessageDialog(null,"Problema com o banco de dados","Problema com o banco de dados",JOptionPane.CANCEL_OPTION);
             ex.printStackTrace();
        }
T

Pelo que vi, está faltando vc fechar a conexao após a consulta.

...
     //Obtém a conexão com o banco
    Connection conn;

    conn = (Connection) DriverManager.getConnection(url, usuario, senha);

   ...
    
    rs.close();

    conn.close();
...
L
Tchaco:
Pelo que vi, está faltando vc fechar a conexao após a consulta.
...
     //Obtém a conexão com o banco
    Connection conn;

    conn = (Connection) DriverManager.getConnection(url, usuario, senha);

   ...
    
    rs.close();

    conn.close();
...

ah ta, entaum vou fazer os teste ai encerro esse assunto funcionado, provavelmente funcione!, valew!

L
luizgomaciel:
Tchaco:
Pelo que vi, está faltando vc fechar a conexao após a consulta.
...
     //Obtém a conexão com o banco
    Connection conn;

    conn = (Connection) DriverManager.getConnection(url, usuario, senha);

   ...
    
    rs.close();

    conn.close();
...

ah ta, entaum vou fazer os teste ai encerro esse assunto funcionado, provavelmente funcione!, valew!

blz, resolvido valew!

Criado 22 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 13
Participantes 2