备份文件组并恢复到较早的备份

Dun*_*amb 4 sql-server-2008 backup restore

我有一个任务:我创建了一个lamb包含几个表的文件组的数据库。

我需要将 csv 提取到命名的文件组中的表中lamb并备份该文件组。

然后再次提取另一个 csv 文件并再次备份。

但我需要能够恢复第一个备份。

什么是备份和恢复方法?是否可以仅恢复lamb文件组?

Kin*_*hah 9

什么是备份和恢复方法? 它被称为Piece Meal Restore,未恢复的文件组可以在以后恢复。

是否可以仅恢复 Lamb 文件组? 是的,可以只恢复 Lamb 文件组。

下面将向您展示 - 如何做到这一点。

  1. 创建一个名为“FGTest”的数据库

    create database [FGTest] on primary (
    name = N'FGTest'
    ,FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\FGTest.mdf'
    ,SIZE = 3072 KB
    ,FILEGROWTH = 1024 KB
    )
    ,FILEGROUP [lamb] (
    name = N'lamb'
    ,-- fileGroup1
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\FGTest_2.ndf'
    ,SIZE = 3072 KB
    ,FILEGROWTH = 1024 KB
    )
    ,FILEGROUP [lamb1] (
    name = N'lamb1'
    ,-- fileGroup2
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\FGTest_3.ndf'
    ,SIZE = 3072 KB
    ,FILEGROWTH = 1024 KB
    ) LOG on (
    name = N'FGTest_log'
    ,FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\FGTest_log.ldf'
    ,SIZE = 1024 KB
    ,FILEGROWTH = 10 %
    )
    
    Run Code Online (Sandbox Code Playgroud)

  2. 现在在不同的文件组上创建表 - 羔羊和羔羊1

    create table TAB1 (
    TAB1_ID int IDENTITY(1, 1)
    ,TAB1_NAME varchar(100)
    ,constraint PK_TAB1 primary key (TAB1_ID)
    ) on lamb -- Filegroup we created.
    go
    
    create table TAB1_lamb1 (
    TAB1_ID int IDENTITY(1, 1)
    ,TAB1_NAME varchar(100)
    ,constraint PK_TAB1_lamb1 primary key (TAB1_ID)
    ) on lamb1 -- 2nd Filegroup we created.
    go
    
    Run Code Online (Sandbox Code Playgroud)
  3. 进行基本备份

    -- Take a base backup
    BACKUP DATABASE [FGTest] to 
    DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_basebackup.bak'
    with init, stats = 10
    go 
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在插入一些值....此时您可以加载 CSV

    INSERT INTO FGTest..TAB1(TAB1_NAME)
    select ('TAB1')
    union all
    select ('TAB2')
    
    Run Code Online (Sandbox Code Playgroud)
  5. 备份文件组羊肉 -- 有 2 条记录

    -- backup filegroup lamb - with 2 records
    
    BACKUP DATABASE [FGTest] FILEGROUP = N'lamb' 
    TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_2Records.bak' 
    WITH  INIT,  NAME = N'FGTest-Full Filegroup Backup', 
    STATS = 10
    GO
    
    -- log backup filegroup lamb - with 2 records
    
    BACKUP LOG [FGTest] TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_2records.trn' WITH INIT 
    
    Run Code Online (Sandbox Code Playgroud)
  6. 现在在lamb 和lamb1 文件组中插入更多值

    INSERT INTO FGTest..TAB1(TAB1_NAME)
    select ('TAB3')
    union all
    select ('TAB4')
    
    INSERT INTO FGTest..TAB1_lamb1(TAB1_NAME)
    select ('TAB3')
    union all
    select ('TAB4')
    
    Run Code Online (Sandbox Code Playgroud)
  7. 现在备份lamb和lamb1文件组以及T-logs

    -- -- backup filegroup lamb - with 4 records
    
    BACKUP DATABASE [FGTest] FILEGROUP = N'lamb' 
    TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_4Records.bak' 
    WITH  INIT,  NAME = N'FGTest-Full Filegroup Backup', 
    STATS = 10
    GO
    
    -- log backup filegroup lamb - with 4 records
    
    BACKUP LOG [FGTest] TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_4records.trn' WITH INIT 
    
    
    -- -- backup filegroup lamb1 - with 2 records
    
    BACKUP DATABASE [FGTest] FILEGROUP = N'lamb1' 
    TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_lamb1.bak' 
    WITH  INIT,  NAME = N'FGTest-Full Filegroup Backup', 
    STATS = 10
    GO
    
    Run Code Online (Sandbox Code Playgroud)

    -- 日志备份文件组lamb1 - 有2条记录

    BACKUP LOG [FGTest] TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_lamb1_log.trn' WITH INIT 
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在是恢复部分:

  1. 使用 PARTIAL 和 NORECOVERY 恢复数据库

     use master
     go
    
     -- restore the base backup with PARTIAL and NORECOVERY
    
     restore database [FGTest]
     filegroup = 'Primary'
     from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_basebackup.bak'
     with REPLACE, PARTIAL, NORECOVERY
     go
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在与 T-log 一起恢复 Lamb 文件组

     RESTORE DATABASE [FGTest] FILE = N'lamb' FROM  
     DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_2Records.bak' 
     WITH  FILE = 1, REPLACE,  STATS = 10
     GO
    
     RESTORE LOG [FGTest] FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\Backup\FGTest_2records.trn'
     WITH FILE = 1, NORECOVERY
    
    Run Code Online (Sandbox Code Playgroud)

-- 由于您想将数据库恢复到第 1 个备份并且您已经恢复了序列,因此是时候将数据库恢复为 2 条记录了。

使用恢复恢复数据库 [FGTest] 在此处输入图片说明

既然你没带其他文件组联机,当您尝试查询TAB1_lamb1驻留在lamb1文件组表,查询处理器将抛出一个错误。

在此处输入图片说明