我按书上操作步骤如下测试数据文件的备份还原:--创建包含多个文件组的数据库
create database db
on primary(
name=N'db_data',
filename=N'c:\db_data.mfd'
),
filegroup db_fg1(
name=N'db_fg1_data',
filename=N'c:\db_fg1_data.ndf'
),
filegroup db_fg2(
name=N'db_fg2_data',
filename=N'c:\db_fg2_data.ndf'
)
Log on(
name=N'db_log',
filename=N'c:\db.ldf'
)
go--在不同的文件组db_fg1上创建表
create table db.dbo.tb_primary(
id int
)on [primary]
create table db.dbo.tb_fg1(
id int
) on db_fg1
create table db.dbo.tb_fg2(
id int
)on db_fg2
go--备份文件组db_fg1(文件组还原必须同时还原primary文件,故需同时备份)
alter database db set recovery full--or bulk_logged
go--这是我自己加的,如果没改revovery模式,将会提示simple模式下,备份失败backup database db
filegroup=N'primary',
filegroup=N'db_fg1'
to disk=N'c:\db_fg1.bak'
with format--重写
go
--测试删除数据库
drop database db
go--从文件组备份中恢复数据库
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'---------到这里都正常
--检查
select count(*) from db.dbo.tb_fg1
go---------问题在最后,查询时时提示:
服务器: 消息 927,级别 14,状态 2,行 1
无法打开数据库 'db'。该数据库正处于还原操作中途。查看企业管理器时数据库为灰色,(正在装载)还原改为:
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'
with recovery
提示:
服务器: 消息 3032,级别 16,状态 2,行 1
一个或多个选项(recovery)不支持该语句。请查阅文档以了解所支持的选项。重启服务,刷新也不行,请问各位是哪里问题,有没有遇到过类似的问题。
create database db
on primary(
name=N'db_data',
filename=N'c:\db_data.mfd'
),
filegroup db_fg1(
name=N'db_fg1_data',
filename=N'c:\db_fg1_data.ndf'
),
filegroup db_fg2(
name=N'db_fg2_data',
filename=N'c:\db_fg2_data.ndf'
)
Log on(
name=N'db_log',
filename=N'c:\db.ldf'
)
go--在不同的文件组db_fg1上创建表
create table db.dbo.tb_primary(
id int
)on [primary]
create table db.dbo.tb_fg1(
id int
) on db_fg1
create table db.dbo.tb_fg2(
id int
)on db_fg2
go--备份文件组db_fg1(文件组还原必须同时还原primary文件,故需同时备份)
alter database db set recovery full--or bulk_logged
go--这是我自己加的,如果没改revovery模式,将会提示simple模式下,备份失败backup database db
filegroup=N'primary',
filegroup=N'db_fg1'
to disk=N'c:\db_fg1.bak'
with format--重写
go
--测试删除数据库
drop database db
go--从文件组备份中恢复数据库
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'---------到这里都正常
--检查
select count(*) from db.dbo.tb_fg1
go---------问题在最后,查询时时提示:
服务器: 消息 927,级别 14,状态 2,行 1
无法打开数据库 'db'。该数据库正处于还原操作中途。查看企业管理器时数据库为灰色,(正在装载)还原改为:
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'
with recovery
提示:
服务器: 消息 3032,级别 16,状态 2,行 1
一个或多个选项(recovery)不支持该语句。请查阅文档以了解所支持的选项。重启服务,刷新也不行,请问各位是哪里问题,有没有遇到过类似的问题。
drop database db
go--从文件组备份中恢复数据库
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'---------到这里都正常
go ----这是还差个 go
--检查
select count(*) from db.dbo.tb_fg1
go
---------到这里都正常
go ----这里还差个 go
--检查
加了个go还是不行,sqlserver2000的
restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'
with partial --加上它2000下,2005可加可不加
select count(*) from db.dbo.tb_fg2
报错:
--
服务器: 消息 3135,级别 16,状态 2,行 1
文件 'c:\db_fg1.bak' 中的备份集是由 BACKUP DATABASE...FILE=<name> 创建的,无法用于此还原操作。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。
顺便问下上面的那种sql code格式怎么编辑的。
测试数据库部分文件组还原?依代码看,db有3个数据文件组: primary,db_fg1,db_fg2
备份了primary,db_fg1,删除db数据库.
然后用primary,db_fg1的备份集进行部分还原.-->结果正常
此时查询db_fg2上的表会报错. -->这是正常的啊,因为你是部分还原的.
对,就是测试数据库部分文件还原,我查询的是db_fg1上的数据,不是db_fg2上的数据,报错了。
on primary(name=N'db_data',filename=N'c:\db_data.mfd'),
filegroup db_fg1(name=N'db_fg1_data',filename=N'c:\db_fg1_data.ndf'),
filegroup db_fg2(name=N'db_fg2_data',filename=N'c:\db_fg2_data.ndf')
Log on(name=N'db_log',filename=N'c:\db.ldf')
gocreate table db.dbo.tb_primary(id int)on [primary]create table db.dbo.tb_fg1(id int)on db_fg1create table db.dbo.tb_fg2(id int)on db_fg2alter database db set recovery fullbackup database db
filegroup=N'primary',filegroup=N'db_fg1'
to disk=N'c:\db_fg1.bak'
with formatdrop database dbrestore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'--打开数据库正常
use db--查询db_fg1上的表正常
select count(*) n from db.dbo.tb_fg1
n
-----------
0--查询db_fg2上的表则报错,但是意料中的.
select count(*) n from db.dbo.tb_fg2 Msg 8653, Level 16, State 1, Line 1
The query processor is unable to produce a plan for the table or view 'tb_fg2' because the table resides in a filegroup which is not online.
建议该学SQL2008 R2了, SQL2000是10年前的东西咯.
哦,那可能是我数据库的问题,谢谢各位了,上面那个sql code格式怎么编辑的。
或执行以下with RECOVERY的再试试.restore database db
filegroup=N'primary',
filegroup=N'db_fg1'
from disk=N'c:\db_fg1.bak'
with RECOVERY