173.数据库部分还原案例

--下面的示例创建名为db的示例数据库,并在该数据库中演示部分还原操作。db使用的是完全恢复模型。示例中演示了把文件组db_fg1还原为数据库db_a。

USE master

--创建测试数据库
CREATE DATABASE db
ON PRIMARY(
	NAME='db_data',
	FILENAME= 'c:\db_data.mdf'),
FILEGROUP db_fg1(
	NAME = 'db_fg1_data',
	FILENAME = 'c:\db_fg1_data.ndf'),
FILEGROUP db_fg2(
	NAME = 'db_fg2_data',
	FILENAME = 'c:\db_fg2_data.ndf')
LOG ON(
	NAME='db_log',
	FILENAME ='c:\db.ldf')
GO

--备份数据库
BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT
GO

--在文件组 db_fg1 上创建表 ta
CREATE TABLE db.dbo.ta(id int) ON db_fg1
--在文件组 db_fg2 上创建表 tb
CREATE TABLE db.dbo.tb(id int) ON db_fg2
GO

--备份事务日志
BACKUP LOG db TO DISK ='c:\db_log.bak' WITH FORMAT
GO

--如果因为某些要求只还原ta表,则使用RESTORE DATABASE语句配合WITH PARTIAL和NORECOVERY选项以另一个名称还原数据库和文件组db_fg1,另外,还将主文件和文件组primary、事务日志和已还原的文件组中的所有文件移到新位置。日志即得到恢复
RESTORE DATABASE db_a 
	FILEGROUP='db_fg1' 
	FROM DISK='c:\db.bak' 
	WITH NORECOVERY,PARTIAL,
	MOVE 'db_data' TO 'c:\db_data_a.mdf',
	MOVE 'db_log' TO 'c:\db_log_a.ldf',
	MOVE 'db_fg1_data' TO 'c:\db_fg1_data_a.ndf'

--恢复日志
RESTORE LOG db_a FROM DISK='c:\db_log.bak' WITH RECOVERY
--显示恢复结果
SELECT COUNT(*) FROM db_a.dbo.ta
/*--结果
----------- 
0

(所影响的行数为 1 行)
--*/
GO

--因为只恢复了文件组db_fg1,位于文件组db_fg2上的表tb无法被访问
SELECT COUNT(*) FROM db_a.dbo.tb
/*--将收到错误信息
警告: 查询处理器无法生成计划,因为表 'db_a.dbo.tb' 已标记为 OFFLINE。
--*/
GO

--删除测试
DROP DATABASE db,db_a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值