通过文件和文件组备份,进行还原时,出现问题,请各位朋友帮忙看一下,是否备份策略也存在问题呢,谢谢(还原FG2为FG2.bak)
create database d5       
on primary
(name=d5_data1,
filename='e:\data\d5_data1.mdf',
size=2MB),
filegroup FG2           --创建数据库时创建filegroup FG2
(name=d5_data2,
filename='e:\data\d5_data2.ndf',    --并将文件d5_data2放到FG2中
size=2Mb)
log on
(name=d5_log1,
filename='e:\data\d5_log1.ldf',
size=2Mb)
use d5
go
alter database d5
add file
(name=d5_data3,
filename='e:\data\d5_data5.ndf',
size=2MB)
to filegroup FG2           --将d5_data3加到文件组FG2中
alter database d5 add filegroup FG3    --增加文件组FG3
alter database d5          --将d5_data4加到文件组FG2中
add file
(name=d5_data4,
filename='e:\data\d5_data4.ndf',
size=2MB)
to filegroup FG3sp_helpdb d5
create table t1(c1 int not null,c2 char(10) not null) on [primary] --将不同表放到不同filegroup中
create table t2(c1 int not null,c2 char(10) not null) on FG2
create table t3(c1 int not null,c2 char(10) not null) on FG3insert into t1 values(1,'t1')
insert into t2 values(2,'t2')
insert into t3 values(3,'t3')alter database d5 set recovery full
backup database d5 to disk='E:\d5.bak' with init,name='d5_full'backup database d5 filegroup='FG2' to disk='E:\FG2.bak' with format
backup log  d5 to disk='E:\log.bak' with format
insert into t2 values(21,'t21')backup database d5 filegroup='primary' to disk='E:\primary.bak' with formatbackup database d5 filegroup='FG2' to disk='E:\FG2New.bak' with formatbackup database d5 filegroup='FG3' to disk='E:\FG3.bak' with format
backup log d5 to disk='E:\log.bak' use master
gorestore database d5 filegroup='primary' from disk='E:\primary.bak' with norecovery,replace
restore database d5 filegroup='FG2' from disk='E:\FG2.bak' with norecovery
restore database d5 filegroup='FG3' from disk='E:\FG3.bak' with norecovery
restore database d5 with recovery

解决方案 »

  1.   


    --以下代码简单地演示了如何进行文件组的备份及还原(在还原时,模拟了丢失第二次文件组备份文件的情况)。
    --创建测试数据库
    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--在文件组db_fg1上创建表,并单独创建该文件组的备份
    CREATE TABLE db.dbo.tb(id int) ON db_fg1
    BACKUP DATABASE db FILEGROUP='db_fg1' TO DISK='c:\db_fg1.bak' WITH FORMAT
    GO在其他文件组上创建表 
    CREATE TABLE db.dbo.ta(id int) ON [PRIMARY]
    CREATE TABLE db.dbo.tc(id int) ON db_fg2
    INSERT db.dbo.tb SELECT id FROM sysobjects
    --备份每个文件组,并且备份事务日志
    BACKUP DATABASE db FILEGROUP='PRIMARY' TO DISK='c:\db_primary.bak' WITH FORMAT
    BACKUP DATABASE db FILEGROUP='db_fg1' TO DISK='c:\db_fg1_new.bak' WITH FORMAT
    BACKUP DATABASE db FILEGROUP='db_fg2' TO DISK='c:\db_fg2.bak' WITH FORMAT
    BACKUP LOG db TO DISK='c:\db_log.bak' WITH FORMAT
    GO--删除数据库
    DROP DATABASE db
    GO--从文件组备份中恢复数据
    RESTORE DATABASE db FILEGROUP='PRIMARY' FROM DISK='c:\db_primary.bak' WITH NORECOVERY,REPLACE
    RESTORE DATABASE db FILEGROUP='db_fg1' FROM DISK='c:\db_fg1.bak' WITH NORECOVERY
    RESTORE DATABASE db FILEGROUP='db_fg2' FROM DISK='c:\db_fg2.bak' WITH NORECOVERY
    RESTORE LOG db FROM DISK='c:\db_log.bak' WITH RECOVERY
    SELECT COUNT(*) FROM db.dbo.tb
    GO--删除测试数据库
    DROP DATABASE db
      

  2.   

    --从文件组备份中恢复数据
    RESTORE DATABASE db FILEGROUP='PRIMARY' FROM DISK='c:\db_primary.bak' WITH NORECOVERY,REPLACE
    RESTORE DATABASE db FILEGROUP='db_fg1' FROM DISK='c:\db_fg1.bak' WITH NORECOVERY
    RESTORE DATABASE db FILEGROUP='db_fg2' FROM DISK='c:\db_fg2.bak' WITH NORECOVERY
    RESTORE LOG db FROM DISK='c:\db_log.bak' WITH RECOVERY
    SELECT COUNT(*) FROM db.dbo.tb
    GO如何恢复的是C:\db_fg1.bak则进行select count(*) from db.dbo.tb应该没有数据的吧,因为,在进行完db_fg1.bak备份之后才进行的数据插入操作,但查询出含有数据.