マスターデータベースファイル(MDF)は、MS SQL Serverの主要なデータベースファイルであり、ビュー、テーブル、ストアドプロシージャ、外部キー、および主キーを含むすべてのデータを格納しています。MDFファイルを開こうとすると、SQL Serverデータベースが開かれない場合や、以下のようなエラーが発生することがあります:
- SQL Serverエラー5171: MDFが主要なデータベースファイルではありません
- ファイルxxxxx.mdfを開けません。オペレーティングシステムエラー5:(アクセスが拒否されました)”
- イベントID824: SQL Serverが論理整合性ベースのI/Oエラーを検出しました
- Msg 8114、レベル16、ステート5、行2: varcharをnumericに変換する際のエラー
このようなエラーは、MDFファイルに破損がある場合に発生することが一般的です。この記事では、MDFファイルの破損の可能性について説明し、破損したMDFファイルを修復して問題を解決する方法を示します。
MDFファイルの破損の原因
SQL Serverデータベース(MDF)ファイルの破損につながるさまざまな理由があります。一般的なものをいくつか以下に示します:
MS SQL Serverまたはシステムのクラッシュ
MS SQL Serverまたはシステムは、オペレーティングシステム、ハードウェア、またはソフトウェアの問題によりクラッシュすることがあります。MDFファイルで作業中にサーバーまたはシステムがクラッシュすると、ファイルが損傷したり破損したりする可能性があります。
突然のシステムシャットダウン
システムが動作中に突然の停電や強制シャットダウンが発生すると、システムに保存されているMDFファイルが破損する可能性があります。
マルウェアやウイルスの攻撃
マルウェアやウイルスによってもMDFファイルが損傷し、アクセスできなくなることがあります。通常、システムにウイルス対策ソフトウェアや対マルウェアソフトウェアがない場合に発生します。
ストレージドライブの問題
ストレージドライブの不良セクタやファイルシステムエラーがSQLデータベースファイルを破損させる可能性があります。ドライブが損傷している場合は、MDFファイルの破損も引き起こす可能性があります。
MDFファイルの破損による「データベースを開けません」の問題を解決する方法
MDFファイルが破損している場合は、以下の方法に従って破損したMDFファイルを修復および回復し、「データベースを開けません」の問題を解決できます。
方法1:バックアップからMDFファイルを復元する
MDFファイルのバックアップを作成している場合は、バックアップからファイルを復元できます。ただし、復元する前にバックアップが完全かつ読み取り可能かどうかを確認する必要があります。これには、RESTORE VERIFY ONLYコマンドを使用できます。このコマンドが成功メッセージを表示した場合は、バックアップの復元に進むことができます。このためには、以下のTransact SQLコマンドを使用します:
BACKUP DATABASE [AdventureWorks2019] TO DISK = N’C:\backups\AdventureWorks2019.bak’ WITH NOFORMAT, NOINIT, NAME = N’AdventureWorks2019-Full Database Backup’, SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
代わりに、SQL Server Management Studio(SSMS)を使用して、バックアップを復元することができます。
方法2: DBCC CHECKDBコマンドを使用する
バックアップが更新されていない場合や、バックアップファイルの復元中に問題が発生した場合は、DBCC CHECKDBコマンドを使用して破損したMDFファイルを修復できます。データベースファイルを修復するには、データベースに管理者権限があることを確認する必要があります。修復する前に、以下のコマンドを使用してデータベースを単一ユーザーモードに設定してください:
ALTER DATABASE Dbtesting SET SINGLE_USER
データベースをSINGLE_USER
モードに設定できない場合は、AUTO_UPDATE_STATISTICS_ASYNCオプションがOFF
に設定されていることを確認してください。
次に、以下のようにDBCC CHECKDB
コマンドを実行してデータベース(MDF)ファイルを修復します:
DBCC CHECKDB (N ’Dbtesting’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS
GO
データベースが修復されたら、以下のコマンドを使用して再度MULTI_USER
モードに設定します:
ALTER DATABASE Dbtesting SET MULTI_USER
注意: DBCC CHECKDB
コマンドを使用してMDFファイルを修復できます。ただし、ファイルを修復する際にページや行が非割り当てになる可能性があり、データ損失を引き起こすことがあります。
方法3: プロフェッショナルSQL修復ツールを使用する
REPAIR_ALLOW_DATA_LOSS
オプションを使用してDBCC CHECKDB
コマンドでSQLデータベースを修復すると、データの損失が発生する可能性があります。データ損失を回避するためには、Stellar Repair for MS SQLのような強力なMS SQL修復ソフトウェアを使用できます。このソフトウェアは、壊れたMDFファイルを修復し、元の構造を変更せずに主キー、テーブル、トリガー、ビューなどのすべてのファイルオブジェクトを復元できます。修復されたファイルデータは、新しいMDFファイルおよびCSV、HTML、XLSなどのさまざまな形式で保存されます。このソフトウェアは、WindowsおよびLinuxシステムで作成されたSQLデータベース(MDFおよびNDF)ファイルをサポートしています。
まとめ
MS SQL Serverの「データベースを開くことができません」という問題は、MDFファイルの破損による可能性があります。この問題を解決する最も簡単な方法は、最後のバックアップからMDFファイルを復元することです。バックアップファイルが古くなっているか機能していない場合は、DBCC CHECKDB
コマンドを使用して壊れたMDFファイルを修復できます。もしDBCC CHECKDB
コマンドがデータベースを修復できない場合は、Stellar Repair for MS SQLのような強力なSQL修復ツールを使用してください。このツールを使用すると、壊れたMDFファイルを修復し、すべてのデータを完全な整合性を保った新しいMDFファイルに復元できます。Stellar Repair for MS SQLの無料バージョンをインストールして、壊れたMDFファイルをスキャンし、回復可能なデータをプレビューすることができます。
Source:
https://dzone.com/articles/resolve-sql-server-database-cannot-be-opened-mdf-issue