我按书上操作步骤如下测试数据文件的备份还原:--创建包含多个文件组的数据库
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)不支持该语句。请查阅文档以了解所支持的选项。重启服务,刷新也不行,请问各位是哪里问题,有没有遇到过类似的问题。

解决方案 »

  1.   

    --测试删除数据库
    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
      

  2.   

    居然还写错了字!
    ---------到这里都正常
    go  ----这里还差个 go
    --检查
      

  3.   

    sql server版本是什么?
      

  4.   


    加了个go还是不行,sqlserver2000的
      

  5.   


    restore database db
    filegroup=N'primary',
    filegroup=N'db_fg1'
    from disk=N'c:\db_fg1.bak'
    with partial  --加上它2000下,2005可加可不加
      

  6.   

    楼主这个案例,执行以下SQL会报错的喔.
    select count(*) from db.dbo.tb_fg2
      

  7.   


    报错:
    --
    服务器: 消息 3135,级别 16,状态 2,行 1
    文件 'c:\db_fg1.bak' 中的备份集是由 BACKUP DATABASE...FILE=<name> 创建的,无法用于此还原操作。
    服务器: 消息 3013,级别 16,状态 1,行 1
    RESTORE DATABASE 操作异常终止。
      

  8.   

    按照书上的结果返回结果:0《深入浅出 sqlserver 1000 开发、管理与应用实例》P327
      

  9.   

    《深入浅出 sqlserver 2000 开发、管理与应用实例》P327 书名写错了
    顺便问下上面的那种sql code格式怎么编辑的。
      

  10.   

    楼主的目的到底是什么?
    测试数据库部分文件组还原?依代码看,db有3个数据文件组: primary,db_fg1,db_fg2
    备份了primary,db_fg1,删除db数据库.
    然后用primary,db_fg1的备份集进行部分还原.-->结果正常
    此时查询db_fg2上的表会报错. -->这是正常的啊,因为你是部分还原的.
      

  11.   


    对,就是测试数据库部分文件还原,我查询的是db_fg1上的数据,不是db_fg2上的数据,报错了。
      

  12.   

    在SQL2008 R2环境测试正常,代码如下.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')
    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.
      

  13.   

    手头没有SQL2000的环境无法测试,
    建议该学SQL2008 R2了, SQL2000是10年前的东西咯.
      

  14.   


    哦,那可能是我数据库的问题,谢谢各位了,上面那个sql code格式怎么编辑的。
      

  15.   

    换个SQL2000环境试试?
    或执行以下with RECOVERY的再试试.restore database db
    filegroup=N'primary',
    filegroup=N'db_fg1'
    from disk=N'c:\db_fg1.bak'
    with RECOVERY
      

  16.   

    换了个sqlserver2000好像还是一样,就这样了,谢谢楼上的。