Descartar banco de dados no DB2 9.5 - SQL1035N O banco de dados está atualmente em uso

8

Eu nunca trabalhei com isso da primeira vez, mas agora não consigo fazer nada.

Há um pool de conexões em algum lugar usando o banco de dados, portanto, tentar descartá-lo quando um aplicativo estiver usando o banco de dados deve fornecer esse erro. O problema é que não há conexão com o banco de dados quando emito estes comandos:

db2 connect to mydatabase
db2 quiesce database immediate force connections
db2 connect reset
db2 drop database mydatabase

Isso sempre oferece:

SQL1035N  The database is currently in use.  SQLSTATE=57019

a execução deste comando não mostra conexões / aplicativos

DB2 list applications

Posso até desativar o banco de dados, mas ainda não consigo eliminá-lo.

db2 => deactivate database mydatabase
DB20000I  The DEACTIVATE DATABASE command completed successfully.
db2 => drop database mydatabase
SQL1035N  The database is currently in use.  SQLSTATE=57019
db2 =>

Alguém tem alguma pista? Estou executando o cmd-windows como administrador local (windows 2008) e este também é o administrador do DB2. O usuário do conjunto de conexões não pode se conectar durante o estado de quiesce.

Tommy
fonte

Respostas:

9

Apenas como uma dica, se a dica de Arun não funcionar, porque um aplicativo remoto é reconectado instantaneamente ao banco de dados.

db2 force applications all 
db2 terminate 

db2set DB2COMM= 
db2stop 
db2start 

db2 force applications all 
db2 terminate 

... do your stuff here ...

db2set DB2COMM=TCPIP 
db2stop 
db2start 

Não tenho certeza se o db2 forcee o db2 terminateé necessário, no entanto. É apenas a nossa melhor prática.

Peter Schuetze
fonte
Eu não entendo por que as conexões remotas são permitidas quando o banco de dados é "quiesce" 'ed e os usuários remotos não tem essa autoridade ...
Tommy
Na documentação da IBM: publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/… - RESET - Equivalente a uma conexão explícita ao banco de dados padrão, se estiver disponível. Se um banco de dados padrão não estiver disponível, o estado da conexão do processo de aplicativo e os estados de suas conexões permanecerão inalterados. - Parece que você conectados ao banco de dados chamandoDB2 connect reset
Peter Schuetze
Definir DB2COMM = foi a única maneira de eliminar todos os conjuntos de conexões que se conectam ao banco de dados. Eu adoro DB2 ...
Tommy
2

Eu apenas uso 'db2stop force', depois 'db2start' e depois solto db. Dessa maneira, é melhor que o comando quiesce, que é assíncrono por natureza.

Arun Srini
fonte
Preciso corrigir minha resposta aceita. Isso funcionou uma vez, mas deve ter sido sorte. Tive que recorrer ao "truque" de Peter
Tommy
2

Seu problema pode ocorrer devido às diferenças de connect resete terminate. Dê uma olhada nesta discussão . Você também pode dar uma olhada na documentação da IBM. Portanto, pode funcionar para você se você executar um db2 terminate insteadde a db2 connect reset.

Peter Schuetze
fonte
1

O silêncio impedirá que a queda funcione. Estávamos envolvidos em um grande esforço de limpeza e, após executar a revogação / conexão e desativação dos bancos de dados, esperamos alguns meses para eliminar os dbs de teste. Nosso comando drop não funcionaria, a menos que cancelássemos o comando db e depois descartássemos.

Lisa
fonte
0

Execute estas etapas na linha de comando. Isso eliminará o banco de dados:

Forçar todos os aplicativos;

desativar db;

drop db;


fonte
0

Quando um banco de dados é desativado, ele ainda está na cadeia de bancos de dados com o gerenciador de banco de dados, embora marcado como desativado. Quando você tenta soltá-lo, vamos verificar se está nessa cadeia; Nesse caso, ele ainda está em uso ==> Você não pode soltá-lo.

Você precisa emitir um db inativo ou emitir um db2stop e db2start e, em seguida, tenta eliminá-lo. Deveria funcionar.

John
fonte
0

Tenho um problema semelhante, mas não importa como forço a interrupção do aplicativo, ele voltará automaticamente.

No meu caso, é um serviço que está bloqueando o banco de dados.

Consegui resolver isso encerrando o serviço PID do Windows Task Manager com o PID encontrado na Lista de Aplicativos DB2.

Para localizar o PID, abra o DB2 Control Center, Todos os Bancos de Dados, DATABASE (o que você está tentando excluir), Lista de Aplicativos, Mostrar Cadeia de Bloqueio, Mostrar Detalhes de Bloqueio e role para baixo para encontrar o ID do Processo do Cliente e encerrar esse PID e tente novamente.

Espero que isso ajude as pessoas no futuro.

Simon
fonte