web-dev-qa-db-ja.com

SQLサーバーファイルとファイルグループのバックアップと復元

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

SSMSを使用したファイルのバックアップ enter image description here

ここでどういうわけか私のsec_fileは削除されますので、最新のNDFバックアップを復元したいのですが、どのように復元できますか?

復元ヘッダーのみの出力

enter image description here

Restore filelistonly from disk = 'D:\sec_file_ndf.bak'

enter image description here

2
Bhuvanesh

でバックアップファイルをクエリする

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ファイルの最新のバックアップを復元します。

1

データベースが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;
1
sepupic