{"id":3988,"date":"2009-12-16T22:56:42","date_gmt":"2009-12-16T21:56:42","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/?p=3988"},"modified":"2009-12-16T22:57:22","modified_gmt":"2009-12-16T21:57:22","slug":"festplatten-mit-4-kbyte-sektorgroesse-und-sql-server","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2009\/12\/16\/sql-talk\/sql-server\/festplatten-mit-4-kbyte-sektorgroesse-und-sql-server","title":{"rendered":"Festplatten mit 4 KByte Sektorgr&#246;&#223;e und SQL Server"},"content":{"rendered":"<p>Wenn man eine SQL-Server-Datenbank auf einem Festplattensystem mit einer Sektor-Gr&#246;&#223;e von 512 Bytes, das ist die derzeit &#252;bliche Gr&#246;&#223;e, angelegt hat, dann kann man diese Datenbanken nicht einfach dateiweise auf eine Festplatte mit einer anderen Sektorgr&#246;&#223;e verschieben und dann dort erneut anh&#228;ngen.<\/p>\n<p>Disclaimer: Ich meine hier nicht die &quot;logische&quot; <a href=\"http:\/\/en.wikipedia.org\/wiki\/Data_cluster\">Cluster-Size<\/a>, die beim Formatieren der Laufwerke angegeben wird, sondern die physische <a href=\"http:\/\/en.wikipedia.org\/wiki\/Disk_sector\">Sector-Size<\/a>, die vom Hersteller festgelegt wird.<\/p>\n<p>Bisher hatten Festplatten eigentlich immer eine Sektor-Gr&#246;&#223;e von 512 Bytes. Aber das wird sich bald &#228;ndern, weil bestimmte Gr&#246;&#223;en damit nicht mehr machbar sind. Angek&#252;ndigt sind die neuen Festplatten von der <a href=\"http:\/\/www.heise.de\/newsticker\/meldung\/Festplatten-mit-grossen-Sektoren-112571.html\">IDEMA ja schon lange<\/a>. Aber <a href=\"http:\/\/www.heise.de\/newsticker\/meldung\/Festplatten-mit-4-KByte-Sektorgroesse-887759.html\">heute las ich erstmals<\/a> von Festplatten, die nun tats&#228;chlich mit der neuen Sektor-Gr&#246;&#223;e von 4096 Bytes produziert werden. Bisher hatte man nur mit SAN und manchen NAS die M&#246;glichkeit eine andere Sektor-Gr&#246;&#223;e zu konfigurieren.<\/p>\n<p>Wo ist nun das Problem? <\/p>\n<p>In den Dateien der SQL-Server-Datenbank ist festgehalten mit welcher Sektor-Gr&#246;&#223;e die Datenbank angelegt wurde. Verschiebt man die Dateien auf eine Festplatte mit der Sektor-Gr&#246;&#223;e 4096, dann weiter sich der SQL-Server die Datenbank anzuh&#228;ngen. F&#228;llt also beispielsweise die Festplatte aus und dann f&#252;hrt auf einer Neuen (mit abweichender Sektor-Gr&#246;&#223;e) eine R&#252;cksicherung durch, dann kann man die Datenbanken nicht mehr in Betrieb nehmen. Es gibt laut Microsoft keine M&#246;glichkeit die Daten da wieder herauszuholen.<\/p>\n<p>Das gilt leider auch, wenn man eine Sicherung mittels BACKUP anlegte, weil der RESTORE die Seiten genauso wiederherstellt. Daher hat die so wiederhergestellte Datenbank wieder eine Sektorgr&#246;&#223;e von 512 Bytes. Microsoft empfiehlt von irgendwoher eine alte Platte zu besorgen, die Datenbank dort anzuh&#228;ngen, eine neue Datenbank auf der neuen Platte (leer) anzulegen und die Daten dann von der alten in die neue zu kopieren. Die Datenbanken erhalten den Stempel beim Anlegen und behalten ihn auf Lebenszeit. Die Sektor-Size wird dabei von der des Festplattensystem bestimmt. Das ist leider nicht konfigurierbar.<\/p>\n<p>Der umgekehrte Fall ist hingegen unproblematisch: Wurde eine Datenbank auf einer Festplatte mit 4K Sektor-Gr&#246;&#223;e angelegt, dann kann sie einfach auf Festplatten mit 512Bytes betrieben werden. <a href=\"http:\/\/support.microsoft.com\/kb\/926930\/en\">Microsoft kennt das Problem<\/a> und hat daher schon beim SQL Server 2005 die Systemdatenbanken mit der Sektor-Gr&#246;&#223;e 4096 Bytes angelegt.<\/p>\n<p>Warum muss der der SQL Server diese Infos speichern? Ich fand bisher nur konkrete Hinweise darauf, dass das Transaktionslog sektorweise geschrieben wird. Die Datenseiten werden immer gemeinsam behandelt, hier w&#228;re das daher vermutlich nicht n&#246;tig, aber ich fand noch keinen Weg das zu umgehen. Das leigt aber vermutlich auch daran, dass ich noch kein Festplattensystem mit 4096 Bytes habe. Details zum Hintergrund finden sich im Artikel &quot;<a href=\"http:\/\/support.microsoft.com\/kb\/917047\/en\">Microsoft SQL Server I\/O subsystem requirements for the tempdb database<\/a>&quot;.<\/p>\n<p>Zu dem Thema g&#228;be es noch viel zu sagen, falls Interesse besteht bitte einen Kommentar reinstellen&#8230; <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man eine SQL-Server-Datenbank auf einem Festplattensystem mit einer Sektor-Gr&#246;&#223;e von 512 Bytes, das ist die derzeit &#252;bliche Gr&#246;&#223;e, angelegt hat, dann kann man diese Datenbanken nicht einfach dateiweise auf eine Festplatte mit einer anderen Sektorgr&#246;&#223;e verschieben und dann dort erneut anh&#228;ngen. Disclaimer: Ich meine hier nicht die &quot;logische&quot; Cluster-Size, die beim Formatieren der Laufwerke [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[41,16],"tags":[651,650],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3988"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=3988"}],"version-history":[{"count":4,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3988\/revisions"}],"predecessor-version":[{"id":3992,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3988\/revisions\/3992"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=3988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=3988"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=3988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}