|
--下面的示例创建名为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
|
|