<f{"id":211,"date":"2013-02-20T09:34:56","date_gmt":"2013-02-20T08:34:56","guid":{"rendered":"http:\/\/www.bernhard-krenz.de\/?p=211"},"modified":"2013-02-20T09:35:12","modified_gmt":"2013-02-20T08:35:12","slug":"offene-verbindungen-zu-einer-sql-datenbank-trennen","status":"publish","type":"post","link":"https:\/\/www.bernhard-krenz.de\/?p=211","title":{"rendered":"Offene Verbindungen zu einer SQL-Datenbank trennen"},"content":{"rendered":"<p>Ab und zu steht man vor der Herausforderung eine SQL-Datenbank wiederherzustellen oder sonstwie zur\u00fcck zu setzen. Dann wird man schnell mit dem Problem konfrontiert, dass offene Verbindung zur Datenbank diese Aufgabe verhindern.<\/p>\n<p>Nun kann man entweder mit den \u00fcblichen Tools, wie dem SQL-Management-Studio, die Verbindungen trennen, oder man bastelt sich dazu ein kleines Skript. Da ich selber haupts\u00e4chlich skriptbasiert arbeite, habe ich daf\u00fcr folgenden Algorithmus entwickelt:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nUSE master\r\n\r\nDECLARE @databaseName VARCHAR(15)\r\nSET @databaseName = 'name_of_your_database'\r\n\r\nDECLARE @kill_id INT\r\nDECLARE @disconnectQuery NVARCHAR(255)\r\nDECLARE killprocess_cursor CURSOR FOR SELECT a.spid FROM sysprocesses a JOIN sysdatabases b ON a.dbid = b.dbid WHERE b.name = @databaseName\r\nOPEN killprocess_cursor\r\n\r\nFETCH NEXT FROM killprocess_cursor INTO @kill_id\r\nWHILE @@FETCH_STATUS = 0\r\nBEGIN\r\n\tSET @disconnectQuery = 'KILL '+ CONVERT(VARCHAR, @kill_id)\r\n\tRAISERROR ('EXECUTING: %s', 1, 1, @disconnectQuery) WITH NOWAIT\r\n\tEXEC (@disconnectQuery)\r\n\tFETCH NEXT FROM killprocess_cursor INTO @kill_id\r\nEND\t\r\n\r\nCLOSE killprocess_cursor\r\nDEALLOCATE killprocess_cursor\r\n<\/pre>\n<p>Das Skript durchl\u00e4uft mit einem Cursor s\u00e4mtliche offenen Prozesse der festgelegten Datenbank und schlie\u00dft diese mit Hilfe des &#8222;Kill&#8220;-Befehls und der zugeh\u00f6rigen Prozess-Id.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ab und zu steht man vor der Herausforderung eine SQL-Datenbank wiederherzustellen oder sonstwie zur\u00fcck zu setzen. Dann wird man schnell<a href=\"https:\/\/www.bernhard-krenz.de\/?p=211\" class=\"searchmore\">Weiterlesen&hellip;<\/a><\/p>\n<div class=\"clr\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[11],"_links":{"self":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/211"}],"collection":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=211"}],"version-history":[{"count":3,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/211\/revisions"}],"predecessor-version":[{"id":214,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/211\/revisions\/214"}],"wp:attachment":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}