Adminというデータベースがあります。プライマリと呼ばれるデフォルトのファイルグループは1つだけです。
File group: primary
files in the file group: Admin_data.mdf
これで、完全なファイルグループのバックアップが作成されました。
Backup file name: fg_full.bak
次に、sec_file.ndfという同じファイルグループに新しいndfを作成し、いくつかのテーブルを作成して、各テーブルに1000行を挿入しました。
1時間後、私のMDFとNDFファイルのファイルバックアップをとった
MDF backup: Admin_Data.bak
NDF backup: sec_file_ndf.bak
ここでどういうわけか私のsec_fileは削除されますので、最新のNDFバックアップを復元したいのですが、どのように復元できますか?
復元ヘッダーのみの出力
Restore filelistonly from disk = 'D:\sec_file_ndf.bak'
でバックアップファイルをクエリする
RESTORE HEADERONLY FROM DISK = 'D:\sec_file_ndf.bak'
そして
RESTORE FILELISTONLY FROM DISK= 'D:\sec_file_ndf.bak'
...D:\sec_file_ndf.bak
ファイルの内容を確認します。
1つの* .BAKファイルに複数のバックアップがある場合があります。その場合、FILE = 2
オプションをRESTOREコマンドに追加して、*.NDF
ファイルの最新のバックアップを復元します。
データベースがFULL
復旧モデルであると想定すると(コメントで確認したとおり)、2番目のファイルだけを復元することが可能です。
シーケンスはこれです:
ログ管理者をディスクにバックアップ= '...\tailofthelog.trn' with norecovery;
norecoveryでデータベース管理ファイル= 'sec_file'をディスク= '...'から復元します。
データベース管理者をディスクから復元= '...\tailofthelog.trn' with recovery;
[〜#〜]更新[〜#〜]
これが私の再現コードです:
if db_id('test') is not null drop database test;
go
CREATE DATABASE test ON PRIMARY
( NAME = N'prime1',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test.mdf' ,
SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'test_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test_log.ldf' ,
SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%);
go
alter database test set recovery FULL;
go
backup database test filegroup = 'PRIMARY'
to disk = 'Z:\backups\default\test_primaryFG1.bak';
go
alter database test add file
( NAME = N'prime2',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test_prime2.ndf' ,
SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB );
go
-- second connection:
use test;
go
create table dbo.t(id int);
go
-- first connection:
backup database test file = 'prime1'
to disk = 'Z:\backups\default\test_prime1.bak';
go
-- second connection:
create table dbo.t1(id int);
insert into dbo.t1(id) values(1);
go
-- first connection:
backup database test file = 'prime2'
to disk = 'Z:\backups\default\test_prime2.bak'
-----------------------------------
backup log test
to disk = 'Z:\backups\default\test_tail.trn' with norecovery;
restore database test file = 'prime2'
from disk = 'Z:\backups\default\test_prime2.bak'
with norecovery;
restore database test
from disk = 'Z:\backups\default\test_tail.trn' with recovery;
-----------------------------------
-- just another restore starting with FD restore as OP did:
restore database test
from disk = 'Z:\backups\default\test_primaryFG1.bak' with replace, norecovery;
restore database test file = 'prime2'
from disk = 'Z:\backups\default\test_prime2.bak' with norecovery
restore database test
from disk = 'Z:\backups\default\test_tail.trn' with recovery;