none
Backup Firebird Gbak com PowerShell RRS feed

  • Pergunta

  • Boa tarde.

    Por gentileza, alguém sabe como executar o Gbak do Firebird para fazer backup e restore?

    Ja procurei por todos os lados e nao encontrei.

    Agradeço a atenção.

    Cleber

    quarta-feira, 24 de setembro de 2014 20:45

Respostas

  • Cleber,

    Eu imaginei que se você não tivesse experiência se enrolaria nesta parte, parabéns pelo interesse, é a melhor forma de aprender.

    gci é a abreviatura de get-childitem, é uma espécie de DIR, quando usei este comando no arquivo especificado eu trouxe todos os atributos deste arquivo, veja um exemplo:

    Um dos atributos é o Name, no meu exemplo é facebook.ps1, no seu caso é Ema_dados.fdb.

    Tendo este atributo eu agora queria pegar apenas o nome, sem a extensão (é o que sua .BAT faz, certo?).

    Então usei o split, o split transforma uma string em um array usando um caracter de "corte", se eu usar o split com " "(espaço) na string = "Fábio de Paula Junior" eu vou criar um array com 4 itens(Fábio, de, paula,Junior). Como usei o ponto no nome do arquivo foi criado um array com dois elemento Ema_dados e fdb, como só me interessa o primeiro eu usei o [0] pra pegar apenas o primeiro item.

    Cara, isso é dificil, não se preocupe com isso agora. Mas se quiser aprender tente executar apenas parte dos comandos pra você aprender exemplo:

    Execute primeiro (gci "nome do arquivo"), depois execute (gci "nome do arquivo").name.

    Assim acho que fica mais fácil entender.


    Fábio de Paula Junior

    quinta-feira, 25 de setembro de 2014 18:04
    Moderador

Todas as Respostas

  • Cleber,

    Recomendo procurar na documentação do Firebird.

    Firebird - Command-line Options

    http://www.firebirdsql.org/manual/gbak-cmdline.html

    Pesquisa

    https://www.google.com.br/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=off&q=gbak%20firebird%20command%20line


    Fábio de Paula Junior


    quinta-feira, 25 de setembro de 2014 13:36
    Moderador
  • Boa tarde Fabio.

    O backup pelo gbak por linha de comando sei fazer. inclusive tenho bat pronta para tal.

    O problema é que preciso adaptar agora para o powershell e parece que é diferente.. nao estou conseguindo.

    Suas sugestoes foram boas, o problema que elas nao envolvem powershell.

    Poderia ajudar alguma coisa nesse sentido?

    obirgado pela atenção.

    quinta-feira, 25 de setembro de 2014 15:34
  • Cleber,

    Pra fazer em PowerShell "puro" seria necessário que alguém desenvolvesse um módulo para interagir com o Firebird.

    Você pode tentar pegar o mesmo código que você usa no .BAT e usar no Powershell, talvez precise de alguma pequena modificação como por exemplo: caminho de arquivos, caminho de executáveis.

    Tente executar desta forma (com o mesmo código do .BAT), caso não funcione envie seu código e mensagens de erro que você recebeu no teste.


    Fábio de Paula Junior

    quinta-feira, 25 de setembro de 2014 15:58
    Moderador
  • Fabio, segue abaixo o codigo .bat que uso. e a seguir os erros.

    ----------

    PS C:\Windows\system32>

    rem Inicio Backup do ERP FireBird
    cls
    Color 1f
    echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
    echo º                                         º
    echo º    PROGRAMA DE SUPORTE A ATUALIZACAO    º
    echo º                                         º
    echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
    echo.
    echo Inicio Verificando Banco de dados ERP FireBird
    if exist "c:\Ema software\banco de dados\Ema_dados.fdb" (
    echo Existe banco de dados ERP FireBird
    echo.
    FOR /F "delims=." %%i in ("EMA_DADOS.FDB") do set NOME_BANCO=%%i
    echo.
    if exist "C:\Ema Software\Ema AV\Backup" (
    if EXIST "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%" ( 
    echo Arquivo a ser deletado: %Bkp_ERP_FBK%
    del "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%"
    echo Deletado arquivo %Bkp_ERP_FBK% com sucesso 
    echo Deletado arquivo %Bkp_ERP_FBK% com sucesso )
    echo.
    if EXIST "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_TXT%" ( 
    echo Arquivo a ser deletado: %Bkp_ERP_TXT%
    del "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_TXT%"
    echo Deletado arquivo %Bkp_ERP_TXT% com sucesso
    echo Deletado arquivo %Bkp_ERP_TXT% com sucesso )
    echo.
    if EXIST "C:\Ema Software\Ema AV\\Backup\%Bkp_ERP_ZIP%" ( 
    echo Arquivo a ser deletado: %Bkp_ERP_ZIP%
    del "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_ZIP%"
    echo Deletado arquivo %Bkp_ERP_ZIP% com sucesso 
    echo Deletado arquivo %Bkp_ERP_ZIP% com sucesso )
    
    echo.
    echo ------------------------------------------------------
    echo Iniciando backup do ERP FireBird. Aguarde o termino...
    echo ------------------------------------------------------
    echo Iniciando backup do ERP FireBird. Aguarde o termino... 
    echo.
    echo.
    echo %GBAK% -b -v -g -user sysdba -pass dbaaccesskey "C:\Ema Software\Banco de Dados\EMA_DADOS.FDB" "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%" -y "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_TXT%" 
    echo .
    %GBAK% -b -v -g -user sysdba -pass dbaaccesskey "C:\Ema Software\Banco de Dados\EMA_DADOS.FDB" "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%" -y "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_TXT%"
    if exist "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%" (
    echo -----------------
    echo Backup concluido!
    echo -----------------
    echo Backup concluido! 
    echo. 
    rem Compacta ERP FireBird
    if exist "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%" (
    cd "C:\Ema Software\Ema AV\Backup"
    7z a -y %Bkp_ERP_ZIP% %Bkp_ERP_FBK% %Bkp_ERP_TXT% )
    if exist "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_ZIP%" (
    7z t -y %Bkp_ERP_ZIP% )
    
    rem Fim Backup ERP FireBird
    
    ) else (
    echo -----------------
    echo Problema ao concluir Backup!
    echo -----------------
    echo Problema ao concluir Backup!
    echo.  )
    echo. 
    ) 
    )
    echo -------------------------------------------- 
    rem Fim Backup do ERP FireBird

    No linha:11 caractere:4
    +     if exist "c:\Ema software\banco de dados\Ema_dados.fdb" (
    +       ~
    '(' ausente após 'if' na instrução if.
    No linha:12 caractere:42
    +         echo Existe banco de dados ERP FireBird
    +                                                ~
    ')' de fechamento ausente na expressão.
    No linha:14 caractere:6
    +         FOR /F "delims=." %%i in ("EMA_DADOS.FDB") do set NOME_BANCO=%%i
    +            ~
    '(' de abertura ausente após a palavra-chave 'for'.
    No linha:16 caractere:5
    +         if exist "C:\Ema Software\Ema AV\Backup" (
    +           ~
    '(' ausente após 'if' na instrução if.
    No linha:18 caractere:47
    +                 echo Arquivo a ser deletado: %Bkp_ERP_FBK%
    +                                                           ~
    ')' de fechamento ausente na expressão.
    No linha:19 caractere:54
    +                 del "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_FBK%"
    +                                                                  ~
    ')' de fechamento ausente na expressão.
    No linha:21 caractere:53
    +                 echo Deletado arquivo %Bkp_ERP_FBK% com sucesso )
    +                                                                 ~
    Token ')' inesperado na expressão ou instrução.
    No linha:23 caractere:6
    +             if EXIST "C:\Ema Software\Ema AV\Backup\%Bkp_ERP_TXT%" (
    +               ~
    '(' ausente após 'if' na instrução if.
    No linha:24 caractere:47
    +                 echo Arquivo a ser deletado: %Bkp_ERP_TXT%
    +                                                           ~
    ')' de fechamento ausente na expressão.
    No linha:27 caractere:53
    +                 echo Deletado arquivo %Bkp_ERP_TXT% com sucesso )
    +                                                                 ~
    Token ')' inesperado na expressão ou instrução.
    Nem todos os erros de análise foram indicados.  Corrija os erros indicados e tente de novo.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingOpenParenthesisInIfStatement

    -----------

    agradeço a atenção.


    • Editado Fábio JrModerator sexta-feira, 26 de setembro de 2014 13:33 Formatação do código
    quinta-feira, 25 de setembro de 2014 16:47
  • Cleber,

    Me expressei um tanto mal, a execução dos comandos devem funcionar sem problemas porém estruturas de IF e alguns comandos como o EXIST não.

    Não parece que está dificil de corrigir.

    Comece trocando as estruturas de IF pelas estruturas próprias do PowerShell.

    Segue um exemplo do inicio do seu script, continue dali em diante e reporte aqui os problemas que você encontrar.

    $Arquivo_Banco = "c:\Ema software\banco de dados\Ema_dados.fdb"
    
    If (Test-Path $Arquivo_Banco){
        "Existe banco de dados ERP FireBird"
    
        $Nome_Banco = (gci $Arquivo_Banco).Name.Split(".")[0]
    
    
    
    }


    Fábio de Paula Junior

    quinta-feira, 25 de setembro de 2014 17:16
    Moderador
  • Fabio, desculpe minha ignorância nesse assunto. É que comecei a mexer com o PowerShell a pouco tempo.

    não entendi essa parte: 

    $Nome_Banco = (gci $Arquivo_Banco).Name.Split(".")[0]

    Não entendi o que é o gci, e o .Name.Split(".")[0]

    Poderias me esclarecer?

    quinta-feira, 25 de setembro de 2014 17:44
  • Cleber,

    Eu imaginei que se você não tivesse experiência se enrolaria nesta parte, parabéns pelo interesse, é a melhor forma de aprender.

    gci é a abreviatura de get-childitem, é uma espécie de DIR, quando usei este comando no arquivo especificado eu trouxe todos os atributos deste arquivo, veja um exemplo:

    Um dos atributos é o Name, no meu exemplo é facebook.ps1, no seu caso é Ema_dados.fdb.

    Tendo este atributo eu agora queria pegar apenas o nome, sem a extensão (é o que sua .BAT faz, certo?).

    Então usei o split, o split transforma uma string em um array usando um caracter de "corte", se eu usar o split com " "(espaço) na string = "Fábio de Paula Junior" eu vou criar um array com 4 itens(Fábio, de, paula,Junior). Como usei o ponto no nome do arquivo foi criado um array com dois elemento Ema_dados e fdb, como só me interessa o primeiro eu usei o [0] pra pegar apenas o primeiro item.

    Cara, isso é dificil, não se preocupe com isso agora. Mas se quiser aprender tente executar apenas parte dos comandos pra você aprender exemplo:

    Execute primeiro (gci "nome do arquivo"), depois execute (gci "nome do arquivo").name.

    Assim acho que fica mais fácil entender.


    Fábio de Paula Junior

    quinta-feira, 25 de setembro de 2014 18:04
    Moderador
  • Legal. Entendi essa parte sim.

    Programo alguma coisa em Delphi, então ficou mais claro essa sua explicação de array.

    Obrigado pelo interesse em me explicar. Me ajudou muito.

    O problema agora é: Onde uso o gbak nesse processo, com os parametros dele.

    quinta-feira, 25 de setembro de 2014 18:35
  • A parte do gbak acho que é a mais fácil, se não me engano você só vai precisar tirar as váriaveis do .BAT (exemplo %Bkp_ERP_TXT%) e substituir por variaveis padrão Powershell.

    Fábio de Paula Junior

    quinta-feira, 25 de setembro de 2014 20:09
    Moderador
  • Tentei assim:

    $Gbak='C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe -b -v -g -user sysdba -pass dbaaccesskey'
    $Banco='C:\Ema Software\Banco de Dados\EMA_DADOS.FDB'
    $Backup='C:\Ema Software\Ema AV\Backup\Bkp_ERP_FBK.fbk -y'
    $Log='C:\Ema Software\Ema AV\Backup\Bkp_ERP_TXT.txt'

    $Gbak $Banco $Backup $Log

    Não consigo executar aplicativo externo.

    Favor não desista de me ajudar.

    quinta-feira, 25 de setembro de 2014 20:44
  • tentei assim tb:

    $Banco='C:\Ema Software\Banco de Dados\EMA_DADOS.FDB'
    $Backup='C:\Ema Software\Ema AV\Backup\Bkp_ERP_FBK.fbk -y'
    $Log='C:\Ema Software\Ema AV\Backup\Bkp_ERP_TXT.txt'
    Function BackupFirebird ([string] $Banco, [string] $Backup,[string] $Log )
    {
        &'C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe -b -v -g -user sysdba -pass dbaaccesskey' + $Banco + $Backup
    }

    quinta-feira, 25 de setembro de 2014 20:55
  • Cleber,

    Tente primeiro executar o comando sem concatenações, assim você primeiro descobre se o comando está certo (caso contrário você pode estar errando na sintaxe e procurando erro no lugar errado).

    Eu não tenho como testar exatamente o gbak, então fiz um exemplo com o Google Chrome.

    & 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' -incognito globo.com
    Veja que é parecido com o seu, o executável está em uma pasta com espaço no nome (o que traz a necessidade de estar entre ' ) e em seguida temos os parametros.


    Fábio de Paula Junior

    sexta-feira, 26 de setembro de 2014 13:31
    Moderador
  • Bom dia

    Mano, deu certo dessa forma:

    & 'C:\Program Files\Firebird\Firebird_2_5\bin\gbak.exe' -b -v -g -user SYSDBA -password dbaaccesskey 'C:\Ema Software\Banco de dados\Ema_Dados.FDB' 'C:\Ema Software\Banco de dados\Ema_Dados.fbk' -y 'C:\Ema Software\Banco de dados\Ema_Dados.txt'

    so nao encerro ainda, pois pode gerar outra dsuvidas ok?

    Obrigado por enquanto.

    sexta-feira, 26 de setembro de 2014 14:41
  • E aí Cleber, como anda o script?

    Fábio de Paula Junior

    terça-feira, 30 de setembro de 2014 20:12
    Moderador