Offenbar war bis vor kurzer Zeit die Sektorgröße von Festplatten so fix auf 512 Bytes, dass Microsoft keinen Gedanken daran verschwendete, dass es auch andere Sektorgrößen geben kann. Zur Erinnerung: ein Sektor bestimmt die Größe des Datenblockes, der von der Festplatte bzw. vom Medium gelesen wird. Das wird gerne mit der Cluster-Größe verwechselt, die durch das Dateisystem (und damit durch die Formatierung) festgelegt wird.

Microsoft hat das Schreiben des Transaktionslogs derartig auf Performance optimiert, dass sie in den Datei-Header die Clustergröße schreiben mit der die Datenbank angelegt wurde. Wenn ich nun einen neuen Server anschaffe, dessen Plattensystem (z.B. SAN) eine größere Sektor-Größe hat, z.B. 1024 Bytes, dann kann die Datenbank vom SQL-Server dort weder angehängt werden, noch können alte Datensicherungen dort eingespielt werden. Ganz schön lästig, wenn man das nach einem Systemausfall mit dem neuen Server erst merkt.

Microsoft schreibt das im Artikel "SQL Server I/O Basics, Chapter 2" so:

SQL Server is not designed to dynamically upgrade the database to the larger sector sizes. SQL Server disallows restoring or attaching a database on a system with a larger sector size; it generates an error message and prevents the restore or attach operation. Enabling a database to function by using a smaller formatted sector size than the actual sector size violates the WAL protocol because the sector size variation guarantees the log records will not be correctly aligned with the physical sector size and log records will be rewritten.

Diese Info bezieht sich auf die Versionen 2000 und 2005. Weiß jemand, ob der SQL-Server-2008 damit inzwischen zurecht kommt? Als Lösung für die eigenen Systemdatenbanken erzeugt Microsoft sie auf Festplatten mit der Sektorgröße 4K. Wenn die auf eine Platte mit kleineren Sektoren kopiert werden, dann geht das nämlich, falls die kleinere Sektorgröße ein Teiler der großen ist.

Was könnte es für Anlässe geben, dass die Sektor-Größe anders ist?

  • Moderne SANs sind hier konfigurierbar,
  • manche RAIDs sind konfigurierbar,
  • für Solid-State-Disks bieten sich andere Sektorgrößen an und
  • für USB-Sticks auch.

Wir suchen gerade nach einer Lösung, wie man die Daten in so einer Datenbank noch retten kann, wenn das alte System nicht mehr zur Verfügung steht (also kein Kopieren von A nach B möglich ist). Hat jemand eine Idee? Oder hat jemand schon mal Erfahrungen mit diesem Feature gemacht?