web-dev-qa-db-ja.com

異なるセクターサイズのHDDにデータベースをバックアップする

開発環境では、さまざまなSQL Serverバージョンとさまざまな環境構成を使用して、問題なく各製品に特定のバックアップおよび復元スクリプトを使用してきました。

最近、レガシシステムのサポートを維持するために、SQL互換性レベル2005(90)を備えた標準開発サーバーとしてSQL Server 2012にアップグレードしました。特定の開発者のマシンで、データベースをバックアップしようとすると次のエラーが発生することがわかりました。

バックアップファイル 'D:\ MyDB.bak'は元はセクターサイズ512でフォーマットされていたため、セクターサイズ4096のデバイス上にあるため、バックアップファイルを使用できません。BACKUPDATABASEは異常終了します。

コマンドは次のとおりです。

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT

興味深いのは、その開発者のマシンのハードウェアもパーティションも変更されていないことです。たとえセクターサイズが異なっていても、これは以前は問題ではありませんでした。

私の研究(つまりグーグル)から、WITH BLOCKSIZEオプションを使用するアドバイスを除いて、この問題に関する多くのことはありませんが、同じエラーメッセージが表示されます。

私のクエリで:

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  NOSKIP ,  STATS = 10,  NOFORMAT, BLOCKSIZE = 4096

セクターサイズが異なるHDDにデータベースをバックアップおよび復元する方法を教えてください。

20
codemonkeh

この問題は、さまざまなドライブで使用されるさまざまなセクターサイズが原因で発生します。

元のバックアップコマンドを次のように変更することで、この問題を修正できます。

BACKUP DATABASE MyDB TO  DISK = N'D:\MyDB.bak' WITH  INIT , NOUNLOAD ,  NAME = N'MyDB backup',  STATS = 10,  FORMAT

NOFORMATをFORMATに変更し、NOSKIPを削除したことに注意してください。

MSDNの次のブログ投稿のコメントセクションで、この問題を解決するためのヒントを見つけました。 SQL Server–Storage Spaces/VHDx and 4K Sector Size

4kセクタードライブに関する詳細情報: http://blogs.msdn.com/b/psssql/archive/2011/01/13/sql-server-new-drives-use-4k-sector-size。 aspx

22
Will L

必要なことは、別の名前でバックアップすることだけです。

28
Michael

既存の.bakファイルを削除して再実行するだけです。

6

2005年から2008年にかけても同じ問題が発生しました。問題は、2005年に使用したのと同じバックアップファイルを2008年に使用しようとしていたことです(バックアップを1つのファイルに追加)。

スクリプトを別のファイルにバックアップするように変更し、問題を解決しました。古いファイルを移動/削除しても同じ影響があると思います

4
Greg

私はOPと同じ問題に遭遇しました。開発マシンでは、リモートデータベースサーバーからデータベースをバックアップし、バックアップファイルをローカルに保存するPowerShellスクリプトがありました。このスクリプトは同じバックアップファイルを何度も上書きし、数年間は正常に機能していました。次に、回転するメディアドライブを開発マシンのSSDにクローンしました。突然、OPと同じエラーが表示されました。

Backup-SqlDatabase:System.Data.SqlClient.SqlError:バックアップファイル '\ DevMachine\Back-Up\Demo.bak'は使用できません。元はセクターサイズ4096でフォーマットされていたため、現在セクターサイズ512のデバイス上にあります。

もちろん、既存の.bakファイルをすべて削除して問題を解決できます。しかし、もしそれが起こったらどうなるでしょうか?一貫して機能するコマンドラインソリューションが必要でした。

元のコードは次のとおりです。

Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -ErrorAction Stop

少しいじってから、問題を修正するために次のように変更しました。

Backup-SqlDatabase -ServerInstance "DBServer1" -Database "Demo" -BackupFile "\\DevMachine\Back-Up\Demo.bak" -BackupAction Database -CopyOnly -CompressionOption On -ConnectionTimeout 0 -Initialize -Checksum -FormatMedia -SkipTapeHeader -ErrorAction Stop

基本的に、問題を修正するために次のオプションが追加されました。

-FormatMedia -SkipTapeHeader

Backup-SqlDatabaseコマンドレットのドキュメントを読むと、-FormatMediaはディスクバックアップではなくテープのみに適用されるものとしてリストされることに注意してください。ただし、ディスクにバックアップするときに既存のバックアップファイルを削除するジョブを実行するようです。
- https://docs.Microsoft.com/en-us/powershell/module/sqlps/backup-sqldatabase

-FormatMediaオプションを単独で使用すると、次のエラーが生成されることがわかりました。

Backup-SqlDatabase:FormatMediaプロパティとSkipTapeHeaderプロパティの設定が競合しています。

追加オプション-SkipTapeHeaderを追加して、2番目のエラーを修正しました。明らかに、これもテープバックアップを目的としていますが、うまくいきました。

3
Van Vangor

私は同じ問題を抱えていましたが、復元だけでした。 Management Studioでこのエラーが発生しました: "指定されたキャストは無効です。(SqlManagerUI)"...そしてクエリのこのエラー: "SQL Serverはこのメディアファミリを処理できません。"

その後、簡単なことを行いました。バックアップセットを既定のバックアップフォルダーに対処しました。例:C:\ Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\Backup\bckup.bakこの場所から復元しました。 :-S SQLはセクターサイズに敏感なようです

0
etveszprem