首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >备份和还原SQL server文件和文件组

备份和还原SQL server文件和文件组
EN

Database Administration用户
提问于 2017-08-23 09:30:52
回答 2查看 1.7K关注 0票数 2

我有一个叫做Admin的数据库。它只有一个名为主文件的默认文件组。

代码语言:javascript
复制
File group: primary
files in the file group: Admin_data.mdf

现在我已经采取了完整的文件组备份。

代码语言:javascript
复制
Backup file name: fg_full.bak

然后在同一个名为sec_file.ndf的文件组中创建一个新的ndf,并创建几个表,在每个表中插入1000行。

一个小时后,对MDF和NDF文件进行了文件备份。

代码语言:javascript
复制
MDF backup: Admin_Data.bak
NDF backup: sec_file_ndf.bak

使用SSMS进行文件备份

在这里,我的sec_file被删除了,所以我想恢复最新的NDF备份,我如何恢复它?

单头恢复输出

代码语言:javascript
复制
Restore filelistonly from disk = 'D:\sec_file_ndf.bak'
EN

回答 2

Database Administration用户

发布于 2017-08-23 10:11:04

查询备份文件

代码语言:javascript
复制
RESTORE HEADERONLY FROM DISK = 'D:\sec_file_ndf.bak'

代码语言:javascript
复制
RESTORE FILELISTONLY FROM DISK= 'D:\sec_file_ndf.bak' 

...to验证D:\sec_file_ndf.bak文件的内容。

您可能在一个*.BAK文件中有多个备份。如果是这样的话,将选项FILE = 2添加到RESTORE命令中,以恢复最新的*.NDF文件备份。

票数 1
EN

Database Administration用户

发布于 2017-08-23 10:26:03

假设您的数据库处于FULL恢复模型中(正如您在注释中所确认的那样),那么只恢复第二个文件是可能的。

顺序是这样的:

  • 备份日志管理到磁盘= '...\tailofthelog.trn‘与无恢复;
  • 从磁盘=‘.’还原数据库管理文件= 'sec_file‘没有恢复;
  • 用恢复从磁盘= '...\tailofthelog.trn‘恢复数据库管理;

更新

这是我的复制代码:

代码语言:javascript
复制
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
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/184151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档