Datenbank in DB2 9.5 löschen - SQL1035N Die Datenbank wird derzeit verwendet


8

Ich habe das noch nie zum ersten Mal zum Laufen gebracht, aber jetzt kann ich es anscheinend gar nicht mehr tun.

Irgendwo in der Datenbank befindet sich ein Verbindungspool. Wenn Sie also versuchen, die Datenbank zu löschen, wenn eine Anwendung die Datenbank verwendet, sollte dieser Fehler auftreten. Das Problem ist, dass keine Verbindung zur Datenbank besteht, wenn ich folgende Befehle ausführe:

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

Dies gibt immer:

SQL1035N  The database is currently in use.  SQLSTATE=57019

Wenn Sie diesen Befehl ausführen, werden keine Verbindungen / Anwendungen angezeigt

DB2 list applications

Ich kann die Datenbank sogar deaktivieren, aber immer noch nicht löschen.

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 =>

Hat jemand irgendwelche Hinweise? Ich führe die cmd-Windows als lokaler Administrator aus (Windows 2008) und dies ist auch der Administrator für DB2. Der Verbindungspool-Benutzer kann im Ruhezustand keine Verbindung herstellen.

Antworten:


9

Nur als Tipp, wenn Aruns Tipp nicht funktioniert, da eine Remote-App sofort wieder eine Verbindung zur Datenbank herstellt.

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 

Ich bin mir jedoch nicht sicher, ob das db2 forceund das db2 terminatenotwendig ist. Es ist nur unsere beste Praxis.


Ich verstehe nicht, warum Remoteverbindungen zulässig sind, wenn die Datenbank "still" ist und die Remotebenutzer diese Berechtigung nicht haben ...
Tommy

Aus der IBM Dokumentation: publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/… - RESET - Entspricht einer expliziten Verbindung zur Standarddatenbank, falls verfügbar. Wenn keine Standarddatenbank verfügbar ist, bleiben der Verbindungsstatus des Anwendungsprozesses und die Status seiner Verbindungen unverändert. - Sieht so aus, als hätten Sie sich telefonisch mit der Datenbank verbundenDB2 connect reset
Peter Schuetze

Das Festlegen von DB2COMM = war die einzige Möglichkeit, alle mit der Datenbank verbundenen Verbindungspools zu entfernen. Ich liebe DB2 ...
Tommy

2

Ich benutze nur 'db2stop force', dann 'db2start' und lasse dann db fallen. Dieser Weg ist besser als ein von Natur aus asynchroner Ruhebefehl.


Ich muss meine akzeptierte Antwort korrigieren. Das hat einmal funktioniert, aber es muss Glück gewesen sein. Musste mich an Peters "Trick" wenden
Tommy

2

Ihr Problem kann aufgrund der Unterschiede von connect resetund auftreten terminate. Schauen Sie sich diese Diskussion an . Sie können sich auch die IBM Dokumentation ansehen. Es könnte also für Sie funktionieren, wenn Sie a db2 terminate insteadvon a ausführen db2 connect reset.


1

Die Ruhe verhindert, dass der Tropfen funktioniert. Wir waren in einen großen Aufräumaufwand verwickelt und nachdem wir revoke / connect ausgeführt und die Datenbanken stillgelegt hatten, warteten wir einige Monate, um die Test-Datenbank zu löschen. Unser Befehl drop würde nicht funktionieren, wenn wir die Datenbank nicht in den Ruhezustand versetzt und dann gelöscht hätten.


0

Führen Sie diese Schritte über die Befehlszeile aus. Dadurch wird die Datenbank gelöscht:

Alle Anwendungen erzwingen;

db deaktivieren;

drop db;


0

Wenn eine Datenbank stillgelegt wird, befindet sie sich immer noch in der Datenbankkette mit dem Datenbankmanager, obwohl sie als stillgelegt markiert ist. Wenn Sie versuchen, es fallen zu lassen, prüfen wir, ob es sich in dieser Kette befindet. Wenn ja, dann wird es immer noch verwendet ==> Sie können es nicht fallen lassen.

Sie müssen eine unquiesce-Datenbank oder db2stop und db2start ausgeben und dann versuchen, sie zu löschen. Es sollte funktionieren.


0

Ich habe ein ähnliches Problem, aber egal wie ich die Anwendung zum Stoppen zwinge, sie wird automatisch wieder angezeigt.

In meinem Fall ist es ein Dienst, der die Datenbank sperrt.

Ich konnte dieses Problem lösen, indem ich den PID-Dienst im Windows Task-Manager mit der in der DB2-Anwendungsliste gefundenen PID beendete.

Um die PID zu finden, öffnen Sie das DB2 Control Center, Alle Datenbanken, DATENBANK (diejenige, die Sie löschen möchten), Anwendungsliste, Sperrkette anzeigen, Sperrdetails anzeigen und scrollen Sie nach unten, um die Client-Prozess-ID zu finden, beenden Sie diese PID und versuchen Sie es erneut.

Hoffe das hilft den Menschen in der Zukunft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.