none
ALTER DATABASE failed because a lock could not be placed on database RRS feed

  • Frage

  • Hallo,

    ich  habe folgendes Problem. Ich wollte ein Datenbank Offline setzen und bekam folgende Fehlermeldungen.

    Cannot drop database "mediatrixdb01" because it is currently in use.

    Ich habe das dann versucht das zu lösen mit.

    ALTER DATABASE mediatrixdb01
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE mediatrixdb01
    GO

    aber dort bekomme ich auch eine Fehlermeldung.

    Msg 5061, Level 16, State 1, Line 1 ALTER DATABASE failed because a lock could not be placed on database 'mediatrixdb01'. Try again later. Msg 5069, Level 16, State 1, Line 1 ALTER DATABASE statement failed. Msg 3702, Level 16, State 4, Line 3 Cannot drop database "mediatrixdb01" because it is currently in use.

    Den Versuch die Conncection heraus zu finden habe ich

    EXEC sp_who2

    ausgeführt, ABER DAS FUNKTIONIERT NICHT :(

    Database 'mediatrixdb01' is in transition. Try the statement later.

    bekomme ich jedes mal. Kann mir einer verraten, wie ich das lösen kann?

    Vielen Dank!

    Freitag, 25. Oktober 2013 06:54

Antworten

  • Hallo,

    hast Du zuvor den Datenbankkontext gewechselt - vorzugsweise auf master?

    USE master;
    GO
    ALTER DATABASE mediatrixdb01 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    GO
    DROP DATABASE mediatrixdb01;
    GO

    (Der letzte Befehl löscht die Datenbank und setzt sie nicht etwa offline)

    Gruß Elmar

    • Als Antwort markiert BCCsql Freitag, 25. Oktober 2013 09:06
    Freitag, 25. Oktober 2013 07:10
  • Hallo,

    wie Elmar schon sagte, kann der Wechsel auf die master-DB Wunder wirken. Grundsätzlich benutze ich dies so:

    use master
    go
    
    --statement--
    
    use master
    go

    Wobei das obere wechseln nur bei CREATE DB oder DROP DB ein wenig Sinn macht.

    Das DROP kannst du auch so verwenden (erspart oft lebensmühe):

    IF NOT DB_ID('mediatrixdb01') IS NULL
    DROP DATABASE mediatrixdb01
    GO

    Dies überprüft dir ob diese überhaupt existiert - damit verhindert man die Fehlermeldung, dass DB nicht gelöscht werden kann. Selbiges kann man, ohne NOT, auch bei CREATE benutzen.

    Weiters, DROP löscht die DB - setzt sie aber NICHT offline. Du kannst sie eventuell noch vom Server AUSHÄNGEN:

    use master
    go
    
    EXEC sp_detach_db 'mediatrixdb01';
    


    Damit ist die DB nicht mehr am Server Verfügbar aber die .mdf und .ldf File existiert natürlich noch im Stammdatenverzeichnis und kann jederzeit wieder am Server EINGEHÄNGT bzw. angelegt werden. Das kommt dem OFFLINE setzen am nähesten.

    LG Dave



    • Bearbeitet David Stockinger Freitag, 25. Oktober 2013 07:51
    • Als Antwort markiert BCCsql Freitag, 25. Oktober 2013 09:06
    Freitag, 25. Oktober 2013 07:38
  • schau doch mal im ActivityMonitor oder mit

    USE master
    select * from sys.dm_tran_locks
    	where resource_database_id = db_id('mediatrixdb01')

    wer und was da für ein Lock hält

    inwiefern "sp_who nicht funktioniert", wird hieraus leider nicht ersichtlich


    Andreas Wolter | Microsoft Certified Master SQL Server

    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com


    Freitag, 25. Oktober 2013 08:50

Alle Antworten

  • Hallo,

    hast Du zuvor den Datenbankkontext gewechselt - vorzugsweise auf master?

    USE master;
    GO
    ALTER DATABASE mediatrixdb01 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    GO
    DROP DATABASE mediatrixdb01;
    GO

    (Der letzte Befehl löscht die Datenbank und setzt sie nicht etwa offline)

    Gruß Elmar

    • Als Antwort markiert BCCsql Freitag, 25. Oktober 2013 09:06
    Freitag, 25. Oktober 2013 07:10
  • Hallo,

    wie Elmar schon sagte, kann der Wechsel auf die master-DB Wunder wirken. Grundsätzlich benutze ich dies so:

    use master
    go
    
    --statement--
    
    use master
    go

    Wobei das obere wechseln nur bei CREATE DB oder DROP DB ein wenig Sinn macht.

    Das DROP kannst du auch so verwenden (erspart oft lebensmühe):

    IF NOT DB_ID('mediatrixdb01') IS NULL
    DROP DATABASE mediatrixdb01
    GO

    Dies überprüft dir ob diese überhaupt existiert - damit verhindert man die Fehlermeldung, dass DB nicht gelöscht werden kann. Selbiges kann man, ohne NOT, auch bei CREATE benutzen.

    Weiters, DROP löscht die DB - setzt sie aber NICHT offline. Du kannst sie eventuell noch vom Server AUSHÄNGEN:

    use master
    go
    
    EXEC sp_detach_db 'mediatrixdb01';
    


    Damit ist die DB nicht mehr am Server Verfügbar aber die .mdf und .ldf File existiert natürlich noch im Stammdatenverzeichnis und kann jederzeit wieder am Server EINGEHÄNGT bzw. angelegt werden. Das kommt dem OFFLINE setzen am nähesten.

    LG Dave



    • Bearbeitet David Stockinger Freitag, 25. Oktober 2013 07:51
    • Als Antwort markiert BCCsql Freitag, 25. Oktober 2013 09:06
    Freitag, 25. Oktober 2013 07:38
  • ja ich benutze den befehl

    USE master

    hab das nur vergessen einzufügen.

    ich möchte die datenbank löschen, das ist schon richtig. Aber es lässt mich nicht.

    use master
    go
    
    EXEC sp_detach_db 'mediatrixdb01';

    Msg 3703, Level 16, State 2, Line 1
    Cannot detach the database 'mediatrixdb01' because it is currently in use.

    Egal welchen Befehl ich absetze. Das bekomme ich als Meldung.

    • Als Antwort markiert BCCsql Freitag, 25. Oktober 2013 09:06
    • Tag als Antwort aufgehoben BCCsql Freitag, 25. Oktober 2013 09:06
    Freitag, 25. Oktober 2013 08:33
  • schau doch mal im ActivityMonitor oder mit

    USE master
    select * from sys.dm_tran_locks
    	where resource_database_id = db_id('mediatrixdb01')

    wer und was da für ein Lock hält

    inwiefern "sp_who nicht funktioniert", wird hieraus leider nicht ersichtlich


    Andreas Wolter | Microsoft Certified Master SQL Server

    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com


    Freitag, 25. Oktober 2013 08:50
  • Hallo,

    welche SQL Server Version / Service Pack?

    Hilft es evtl. wenn Du das SQL Server Management Studio schließt - vereinzelt findet man Probleme, die durchs SSMS verursacht werden. Siehe z. B.: SQL - Error 952 and 8 ways to solve it

    Gruß Elmar

    Freitag, 25. Oktober 2013 08:51
  • das mit dem activity monitor habe ich schon versucht und sobald ich die prozesse öffnen will bekomme ich die Meldung

    Database 'mediatrixdb01' is in transition. Try the statement later.

    Wenn ich folgenden Befehl absetze ist die liste LEER.

    USE master
    select * from sys.dm_tran_locks
    	where resource_database_id = db_id('')

    Nix einfach nix. Ich habe keine Ahnung warum....

    Freitag, 25. Oktober 2013 08:52
  • Ja, ein Neustart von SSMS wenn noch nicht geschehen auf jeden Fall mal durchführen.

    Schlimmstenfalls auch mal den ganzen Server ...


    Andreas Wolter | Microsoft Certified Master SQL Server

    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    Freitag, 25. Oktober 2013 09:01
  • ENDLICH es hat geklappt.... ENDLICH. Ich habe das SSMS NOCHMALS neu gestartet und alles NOCHMAL ausgeführt. Irgendwann hat sich das System dann eingekriegt und die Befehle abgesetzt so wie es es  sollte.

    Viele Dank für die Hilfe.

    Freitag, 25. Oktober 2013 09:06