Restore de um arquivo GBk

03/03/2006

Boa tarde pessoal,

Pessoal eu tenho um sistema que efetua a geração de do bakup em um arquivo GBK. Porém eu gostaria de desenvolver algo que possa gerar automaticamente este arquivo GBK.... e uma outra aplicação que faça a restauração deste arquivo.

Estive pesquisando mas achei pouca coisa.

Se alguém tiver algo referente poderia postar de que forma eu poderia fazer isso

Abraço

Wagner


Wagnermarrane

Respostas

03/03/2006

Paullsoftware

Qual o delphi que vc usar?
No Delphi 7 Tem os componentes da paleta [b:cc95d0a873]Interbase Admin[/b:cc95d0a873] nela existe dois componentes que uso são eles: [b:cc95d0a873]TIbBackupService[/b:cc95d0a873] e [b:cc95d0a873]TIbRestoreService[/b:cc95d0a873]...

os códigos são +/- assim:
para Criar o backup...
 Try
  with IBBackupService1 do
  begin
    Attach;
    DatabaseName := Edit1.Text;
    BackupFile.Add(Edit2.Text);
    Active := True;
    ServiceStart;
    ShowMessage(´Backup realizado com sucesso´);
  end;
 except
 on msg:exception do
    MessageDlg(´Ocorreu o seguinte erro:´+#10+msg.Message,mtWarning,&91;mbOK&93;,0);
    end;

para restaurar...
  Try
  with IBRestoreService1 do
  begin
    Attach;
    Options := &91;Replace&93;;
    DatabaseName.Add(Edit4.Text);
    BackupFile.Add(Edit3.Text);
    Active := True;
    ServiceStart;
    ShowMessage(´Restore realizado com sucesso´);
  end;
 except
 on msg:exception do
    MessageDlg(´Ocorreu o seguinte erro:´+#10+msg.Message,mtWarning,&91;mbOK&93;,0);
    end  

...
achei um artigo que mostra o uso desses componentes segue o link abaixo: [url]http://www.sqlmagazine.com.br/Colunistas/LucianoPimenta/05_Backup_FB_IB.asp[/url] do [b:cc95d0a873]Luciano Pimenta[/b:cc95d0a873]...

espero ter ajudado! :wink:


Responder Citar

04/03/2006

Wagnermarrane

muito obrigado...

Abraço


Responder Citar

06/03/2006

Wagnermarrane

o código funcionou perfeitamente, porem quando eu peço para ele executar uma compressão após a geração do arquivo de backup ele acusa que o arquivo se encontra em uso

[b:c9a054c304]First chance exception at $77E649D3. Exception class EFOpenError with message ´Cannot open file ´C:\Arquivos de programas\Abcs\Premium\BD\premium.gbk´. O arquivo já está sendo usado por outro processo´. Process FTPSend.exe (3556)[/b:c9a054c304]

o codigo que eu montei é este:

procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
Try

  with IBBackupService1 do
  begin
    active:=true;
   // Attach;
    DatabaseName := arq_DB;
    BackupFile.Add(arq_Backup);
    Active := True;
    ServiceStart;
    TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10);
    active:=false;
  end;
  compactar.Click;
 except
 on msg:exception do
    TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10);
    end;

end;


ele starta o serviço, gera o arquivo, porem eu naum consigo progresseguir com outra operação com o arquivo gerado.

Abraço

Wagner


Responder Citar

06/03/2006

Paullsoftware

certo, aqui eu trabalho numa boa com esses componentes, tenta dar um stop no serviço fazer alguma outra rotina e depois continuar o serviço novamente...


Responder Citar

06/03/2006

Wagnermarrane

certo, aqui eu trabalho numa boa com esses componentes, tenta dar um stop no serviço fazer alguma outra rotina e depois continuar o serviço novamente...


estive pesquisando de que formar eu poderia dar o stop no componente, porém não achei nada relacionado...

Vc sabe qual parametro tenho q passar.


Abraço

Wagner


Responder Citar

06/03/2006

Delphi32

olha, posso estar enganado, mas tenhoa impressão de que no momento que o comando btnCompactar.Click está sendo executado, o arquivo ainda não foi criado totalmente. Isso porque o ServiceStart inicia o processo, mas não aguarda que ele seja terminado para prosseguir.

Faça o seguinte:

IBBackupService1.ServiceStart;
while not IBBackupService1.Eof do //>>Aqui você assegura que o fluxo terminar
begin                             //>>só continua quando o serviço  de criar o arquivo.
   //>>Faça alguma coisa ou nada...
end;
//>>Aqui você coloca os próximos comandos...


t+!


Responder Citar

06/03/2006

Wagnermarrane

olha, posso estar enganado, mas tenhoa impressão de que no momento que o comando btnCompactar.Click está sendo executado, o arquivo ainda não foi criado totalmente. Isso porque o ServiceStart inicia o processo, mas não aguarda que ele seja terminado para prosseguir. Faça o seguinte:
IBBackupService1.ServiceStart;
while not IBBackupService1.Eof do //>>Aqui você assegura que o fluxo terminar
begin                             //>>só continua quando o serviço  de criar o arquivo.
   //>>Faça alguma coisa ou nada...
end;
//>>Aqui você coloca os próximos comandos...
t+!


cara eu monte este código, pelo o q eu entendi, porém estou outro erro:

procedure TSendFTP.BackupClick(Sender: TObject);
var Arq_DB, Arq_Backup : string;
begin
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´;
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´;
while not eof do
begin
Try
  with IBBackupService1 do
   begin
     DatabaseName := arq_DB;
     BackupFile.Add(arq_Backup);
     Active := True;
     ServiceStart;

     TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10);
  end;
 except
 on msg:exception do
    TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10);
    end;
end;
  compactar.Click;
end;


[b:125406b08f]First chance exception at $77E649D3. Exception class EInOutError with message ´I/O error 6´. Process FTPSend.exe (3108)[/b:125406b08f]


Responder Citar

06/03/2006

Delphi32

Você colou o código no lugar errado. Use o seguinte:

procedure TSendFTP.BackupClick(Sender: TObject); 
var Arq_DB, Arq_Backup : string; 
begin 
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´; 
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´; 
Try 

  with IBBackupService1 do 
  begin 
    active:=true; 
   // Attach; 
    DatabaseName := arq_DB; 
    BackupFile.Add(arq_Backup); 
    Active := True; 
    ServiceStart; 
    while not eof do
    begin
        //
    end;
    TrayIcon.ShowBalloonHint(´FTP´,´Backup realizado com sucesso´, bitInfo, 10); 
    active:=false; 
  end; 
  compactar.Click; 
 except 
 on msg:exception do 
    TrayIcon.ShowBalloonHint(´FTP´,´Ocorreu um erro na geração de backup´, bitError, 10); 
    end; 

end;


t+!


Responder Citar

07/03/2006

Wagnermarrane

Você colou o código no lugar errado. Use o seguinte:
procedure TSendFTP.BackupClick(Sender: TObject); 
var Arq_DB, Arq_Backup : string; 
begin 
Arq_DB:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gdb´; 
Arq_Backup:=´C:\Arquivos de programas\abcs\Premium\BD\premium.gbk´; 
Try 

  with IBBackupService1 do 
  begin 
    active:=true; 
   // Attach; 
    DatabaseName := arq_DB; 
    BackupFile.Add(arq_Backup); 
    Active := True; 
    ServiceStart; 
    while not eof do
    begin
        //
    end;

Cara o problemas é que trava e não sai t+!



Responder Citar

08/03/2006

Wagnermarrane

sobe - up


Responder Citar

08/03/2006

Delphi32

O banco é muito grande? porque acho que não está travado, mas sim fazendo o backup. Vou colocar a seguir o código que eu uso para fazer backup e você pode adaptá-lo para sua situação:

ps.: Troquei o nome dos componentes para facilitar. No código abaixo também coloquei o usuário e senha padrão do interbase/firebird.

   Screen.Cursor := crHourGlass;
   try
      Memo1.Lines.Clear;
      Memo1.Lines.Add(´Iniciando o backup do banco de dados...´);
      Application.ProcessMessages;
      with IBBackupService1 do
      begin
         ServerName := ´localhost´;
         LoginPrompt := False;
         Params.Add(´user_name=SYSDBA´);
         Params.Add(´password=masterkey´);
         Active := True;
         try
            Verbose := True;
            Options := [&93;;
            //if CheckBox1.Checked then Options := Options + &91;MetadataOnly&93;;
            //if not CheckBox2.Checked then Options := Options + [NonTransportable&93;;
            //if CheckBox3.Checked then Options := Options + &91;IgnoreLimbo&93;;
            DatabaseName := ´C:\CAMINHO_DO_SEU_BANCO.FDB´;
            BackupFile.Clear;
            BackupFile.Add(´C:\NOME_DO_ARQUIVO_DE_BACKUP.FBK´);
            ServiceStart;
            while not Eof do
            begin
               Memo1.Lines.Add(GetNextLine);
               Application.ProcessMessages;
            end;
         finally
            Active := False;
         end;
      end;
      Memo1.Lines.Add(´Backup finalizado...´);
      Application.ProcessMessages;
      ShowMessage(´O Backup foi concluído com sucesso!´);
   except
      ShowMessage(´Erro ao tentar fazer backup do banco de dados!´);
   end;
   Screen.Cursor := crDefault;


Repare que eu coloco um Memo que mostra as mensagens do progresso do backup. Faça isso também para saber se está realmente travando ou não.

t+!


Responder Citar

08/03/2006

Delphi32

cara, viajei... coloquei o código para fazer backup.... e o que você quer é restaurar, certo? aqui vai o código correto:

   with IBRestoreService1 do
   begin
      ServerName := ´localhost´;
      LoginPrompt := False;
      Params.Add(´user_name=SYSDBA´); 
      Params.Add(´password=masterkey´);
      Application.ProcessMessages;
      Active := True;
      try
         Verbose := True;
         Options := [Replace&93;;
         PageBuffers := 3000;
         PageSize := 4096;
         DatabaseName.Add(´C:\NOME_DO_BANCO.FDB´);
         BackupFile.Add(´C:\NOME_DO_ARQUIVO_DE_BACKUP.FBK´);
         ServiceStart;
         while not Eof do
         begin
            Memo1.Lines.Add(GetNextLine);
            Application.ProcessMessages;
         end;
      finally
         Active := False;
      end;
   end;


t+!


Responder Citar