Subscrever um arquivo que esta sendo usado

Olá Gujer`s,
Eu to quebrando a cabeça aqui para tentar fazer a restauração do backup do mesmo sistema, já fiz varias pesquisas e ainda não axei nada que possa resolver meu problema, o que eu preciso fazer é apenas substituir o arquivo do banco de dados que esta sendo usado pelo arquivo do backup, mais toda vez que eu faço isso da a mensagem que o arquivo esta usado sendo, e esta mesmo, o problema é, como eu fexo todas minhas conexões do banco de dados, estou usando hibernate, já usei os session.close() mas sem sucesso, parece que ele ainda fica aberto.
Existem alguma maneira de eu estar fazendo isso dentro do meu próprio sistema? ou eu vou ter que criar uma programa a parte o que eu nao acho correto, para fazer a restauração?

Pessoal, me de pelo menos uma dica, pra eu poder tentar fazer isso, meu prazo de entrega ta acabando, e a unica coisa que falta é a restaurção do backup.

que banco está usando? Já pensou em usar as próprias funções de backup e restore do banco? (um import/export)

Cara, não é minha praia, mas acho que uma dica é primeiro descobrir o processo que ta não te deixa sobrescrever o arquivo.

Se você tiver usando windows, abra o gerenciado de tarefas e vá matando processo por processo ate conseguir copiar o bendito arquivo.

Outra coisa que pode ser é verificar se o programa que ta tentando restaurar arquivo tem permissaõ do SO neste diretório

[quote=venomtotal]Cara, não é minha praia, mas acho que uma dica é primeiro descobrir o processo que ta não te deixa sobrescrever o arquivo.

Se você tiver usando windows, abra o gerenciado de tarefas e vá matando processo por processo ate conseguir copiar o bendito arquivo.

Outra coisa que pode ser é verificar se o programa que ta tentando restaurar arquivo tem permissaõ do SO neste diretório[/quote]A ideia não é essa, é que se você está usando uma base de dados, por exemplo, MySQL, vc faz os backups através dos dump’s, pois o server precisa gravar outras coisas nos arquivos, por exemplo, em uma tabela innoDB, você pode ter foreign key’s para outras tabelas, inclusive as de permissões de usuário do mysql, que acabaria corrompendo os dados caso a tabela tenha registros diferentes.

Claro, se for uma base de dados access, por exemplo, você pode trocar o arquivo físico, mas aí provavelmente a sua própria aplicação está bloqueando esse arquivo.

[quote]evefuji wrote:
que banco está usando? Já pensou em usar as próprias funções de backup e restore do banco? (um import/export) [/quote]

Já tentei sim, mas simplesmente não acontece nada, nem mensagem de erro exibe.

[quote]evefuji wrote:
A ideia não é essa, é que se você está usando uma base de dados, por exemplo, MySQL, vc faz os backups através dos dump’s, pois o server precisa gravar outras coisas nos arquivos, por exemplo, em uma tabela innoDB, você pode ter foreign key’s para outras tabelas, inclusive as de permissões de usuário do mysql, que acabaria corrompendo os dados caso a tabela tenha registros diferentes.

Claro, se for uma base de dados access, por exemplo, você pode trocar o arquivo físico, mas aí provavelmente a sua própria aplicação está bloqueando esse arquivo.[/quote]

É entao exatamente isso, minha aplicação que esta bloqueando o arquivo, o banco de dados que eu uso é o firebird, o arquivo do banco de dados é apenas um arquivo, o que eu preciso é somente substituir o arquivo que o sistema esta usando por este outro do backup.

Tem algum comando via DOS que eu posso estar usando pra matar os processos que estão usando o arquivo, mesmo que este comando feche minha aplicação, isso já seria de grande ajuda.

via DOS, você pode usar, sabendo quais os nomes dos processos que estão bloqueando um arquivo

taskkill -f -im explorer.exe (no caso, esse comando mata o explorer.

Você, para analisar, pode usar o unlocker (no windows mesmo, procura no baixaki), para saber quais processos estão bloqueando um arquivo.

Uma vez usei o InterBase, e o IBExpress tinha uma ferramenta de backup, tentou usar ela? de qualquer forma, tenta usar o kettle (sempre recomendo ele, hauhauha) para backup, acho ele bem prático. Vc pode chamar ele por linha de comando (através do batch ou do shellscript kitchen, na raíz do software.)

[quote=evefuji]via DOS, você pode usar, sabendo quais os nomes dos processos que estão bloqueando um arquivo

taskkill -f -im explorer.exe (no caso, esse comando mata o explorer.

Você, para analisar, pode usar o unlocker (no windows mesmo, procura no baixaki), para saber quais processos estão bloqueando um arquivo.

Uma vez usei o InterBase, e o IBExpress tinha uma ferramenta de backup, tentou usar ela? de qualquer forma, tenta usar o kettle (sempre recomendo ele, hauhauha) para backup, acho ele bem prático. Vc pode chamar ele por linha de comando (através do batch ou do shellscript kitchen, na raíz do software.)[/quote]

Opa valeu, é esse comando mesmo que eu precisava, eu dei uma pesquisada aqui, e até consegui usar ele, eu finalizado minha aplicação pelo numero do PID dela, para pegar o PID eu usei o código abaixo que eu encontrei aqui no guj mesmo:

public long getPID() { String processName = java.lang.management.ManagementFactory.getRuntimeMXBean().getName(); System.out.println(processName); return Long.parseLong(processName.split("@")[0]); }
Com esse código pega o nome de quem esta usando o processo e o numero do PID o interessando mesmo é só o PID do processo, mas enfim, vamos supor que o numero do PID do meu processo seja 4593, se eu executar o comando:

 Runtime.getRuntime().exec("tskill " + getPID());

ele realmente finaliza a minha aplicação até ai tudo bem, o problema é que eu quero executar dois comando de uma só vez, dei uma pesquisa e vi que basta eu separar os comando com && que funciona e realmente funciona, eu testei pelo proprio CMD e funcionou, mas quando eu fui usar isso dentro do meu programa não funcionou e eu digite a mesma coisa comandos identicos nos CMD funcionou e no meu programa não comando que completo que eu usei para fazer o backup e aconteceu isso foi:

tskill 4593 && COPY /Y /Z "C:/Users/Vinicius/Desktop/bkp.fdb" "D:/Meus Documentos/NetBeansProjects/MIC CENTER/Archives/DB/DBMC.FDB"

Ondeu eu primeiro finalizo meu programa, e depois faço a cópia do backup pra dentro da pasta do programa, mas quando eu faço isso simplemente não acontece nada, nem o programa fecha ele continua aberto.

O será que deve estar acontecendo?

ao invés de fechar seu programa, tenta fechar o server interbase.

Uma coisa, fazer esse tipo de coisa pode (e provavelmente vai) corromper sua base de dados.