そのため、職場でデータベースサーバーがダウンし、バックアップからデータベースの1つを回復するときに問題が発生しました。 SQL Management Studioを使用してバックアップから復元しようとすると、バックアップが100%になり、最後に次のように失敗します。
An inconsistency was detected during an internal operation. Please contact technical support. Reference number 8
Error Number: 5243
Severity: 22
State: 1
Line Number: 1
ホットフィックスまたはサービスパックのアップデートでこれと同様の問題が解決されると述べた記事がいくつかありましたが、私の場合は解決されませんでした。私が読んだことから、エラー5243と5242は通常、破損の可能性を意味します。私が走った:
RESTORE VERIFYONLY
FROM DISK=N'C:\DataBaseName.bak'
WITH CHECKSUM;
チェックサムが使用されていないことを示したので、次に実行しました。
RESTORE VERIFYONLY
FROM DISK=N'C:\DataBaseName.bak'
そしてそれは正常に完了しました:
Attempting to restore this backup may encounter storage space problems. Subsequent messages will provide details.
Directory lookup for the file "M:\Data\DataBaseName.mdf" failed with the operating system error 3(The system cannot find the path specified.).
Directory lookup for the file "N:\Logs\DataBaseName_log.ldf" failed with the operating system error 3(The system cannot find the path specified.).
The backup set on file 1 is valid.
チェックサムは使用されないので、ヘッダーのみがチェックされます。次に、CONTINUE_AFTER_ERRORを使用して復元を強制的に完了させます。
RESTORE DATABASE DataBaseName
FROM DISK=N'C:\DataBaseName.bak'
WITH CONTINUE_AFTER_ERROR;
これは正常に完了します:
Processed 1453208 pages for database 'DataBaseName', file 'DEFAULTDB' on file 1.
Processed 3 pages for database 'DataBaseName', file 'DEFAULTDB_log' on file 1.
Restore was successful but deferred transactions remain. These transactions can not be resolved because there are data that is unavailable. Either use RESTORE to make that data available or drop the filegroups if you never need this data again. Dropping the filegroup results in a defunct filegroup.
RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 1453211 pages in 457.277 seconds (26.033 MB/sec).
ここで問題が発生します:)この時点で、データベースのステータスは「リカバリ保留中」です。私はこのコマンドを使用してこれを確認しました:
SELECT
[state_desc]
FROM
sys.databases
WHERE
[name] = N'DataBaseName';
私は使用してデータベースをオフラインにすることができます
ALTER DATABASE DataBaseName SET OFFLINE;
ステータスはオフラインを示しています。次に、それをオンラインに戻してみます
ALTER DATABASE DataBaseName SET ONLINE;
そしてそれは失敗します:
Msg 945, Level 14, State 2, Line 1
Database 'DataBaseName' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5243, Level 22, State 1, Line 1
An inconsistency was detected during an internal operation. Please contact technical support. Reference number 8.
状態を確認すると、「復元保留中」です
次に発行します
ALTER DATABASE DataBaseName SET SINGLE_USER;
これは正常に完了します。次に発行します
ALTER DATABASE DataBaseName SET EMERGENCY;
そして、これは正常に完了します...いいですね?私はそれから
USE DataBaseName
メッセージ922、レベル14、状態1、行1のデータベース 'DataBaseName'を回復しています。リカバリが完了するまで待機しています。
私はここでかなり立ち往生しています。走れば
DBCC CHECKDB (DataBaseTable, REPAIR_ALLOW_DATA_LOSS)
そしてまだ受け取る:
Msg 922, Level 14, State 1, Line 1
Database 'DataBaseName' is being recovered. Waiting until recovery is finished.
これ以上先に行けないようです。誰か私に2セントをくれませんか?トンありがとう!ここで何かを学ぶつもりです。
T-SQLコマンドを使用してデータベースファイルを他の場所に復元し、復元を実行できます。
私は次のようなテストを行いました:
CREATE DATABASE TestDB
ON (FILENAME='C:\test\TestDB.mdf', NAME='TestDB')
LOG ON (FILENAME='C:\test\TestDBLog.ldf', NAME='TestLog');
GO
BACKUP DATABASE TestDB TO DISK='C:\Test\TestDB.BAK';
GO
DROP DATABASE TestDB;
GO
RESTORE DATABASE TestDB FROM DISK='C:\Test\TestDB.BAK'
WITH MOVE 'TestDB' TO 'C:\SomeOtherFolder\TestDB.mdf'
, MOVE 'TestLog' TO 'C:\SomeOtherFolder\TestLog.ldf'
, RECOVERY;
これにより、1つのフォルダーにデータベースが作成され、データベースのバックアップが作成され、データベースが削除され、バックアップから新しいフォルダーに復元されます。 RESTORE DATABASE
コマンドを必要に応じて変更できるはずです。