【问题标题】:MSSQL DataBase Backup without a specific table没有特定表的 MSSQL 数据库备份
【发布时间】:2015-11-19 17:25:49
【问题描述】:

我需要在 sql 中没有特定表的情况下进行计划备份。因为如果我使用该表进行备份,则需要很长时间。我需要从备份中排除一张表。是否可以?如果没有该表,所有表和数据都应该存在于数据库中。

【问题讨论】:

  • 这一表的数据不重要吗?为什么会有这么多不重要的数据?备份(一般来说)的目的是在db出现问题的情况下使用,以便您可以恢复。如果您不备份整个数据库,则无法恢复整个数据库。如果它是一个足够大的表来包含这么多数据,我认为它对某些过程很重要。

标签: sql-server sql-server-2008 database-backups


【解决方案1】:

您可以为这个表设置一个单独的文件组,除了 PRIMARY 文件组。这将使您能够创建省略大表的备份。下面是一个逐步完成该过程的示例。

1) 为您的数据库创建一个新文件组。

USE [master]
GO
ALTER DATABASE [EXAMPLEDB] ADD FILEGROUP [EXAMPLEFG1]
GO

2) 在新文件组上创建一个名称稍有不同的相同表。

CREATE TABLE [dbo].[example]
(
    [e] [int] NOT NULL
)
ON [EXAMPLEFG1]

GO

3) 将原始表中的记录插入到新表中。

4) 删除旧表并更正新表的名称以匹配旧表的名称。

5) 备份 PRIMARY,现在不包括现在位于文件组“EXAMPLEFG1”上的表。

BACKUP DATABASE EXAMPLE
   FILEGROUP = 'PRIMARY',
   TO DISK = '<Your Directory>'
GO

如果您决定备份EXAMPLEFG1 只需在上述查询中将 FILEGROUP 值更改为“EXAMPLEFG1”即可。

查看此Microsoft site 了解有关文件组备份的更多信息。

希望这会有所帮助!

【讨论】:

  • 我需要备份整个数据库而没有一个表可以这样吗?
  • 是的,您将 PRIMARY 文件组之外的大表放置到辅助文件组中,并且只备份忽略大表的 PRIMARY 文件组。这是我的建议,如果您不确定并想确保自己做对了,我会使用您最近的数据库备份并将其还原到不同的实例;这样,您可以练习这些步骤并确保一切都按预期工作。另外,请务必阅读我提供的链接,尤其是“Microsoft Link”站点。希望这会有所帮助!
  • @MikeZalansky 很棒,帮了我很多。但是您错过了,在创建文件组后,您需要将文件添加到该文件组中。 :)
【解决方案2】:

Mike 的answer 几乎是正确的,只是您不需要需要创建另一个表来移动数据。

根据我自己测试的this answer,创建文件组后,只需将聚集索引移动到另一个文件组即可。如果您没有聚集索引,则可以创建一个以帮助您完成此过程。如果您还有非聚集索引,也请移动它们。完成后,所有数据将自动在文件组之间移动。

因此,如果您想从备份例程中排除这个大表,请执行以下操作:

  1. 创建一个新的文件组。

    USE [master]  
    ALTER DATABASE [MyDatabase] ADD FILEGROUP [FG_MYBIGTABLE]
    
  2. 将新文件添加到此文件组。

    ALTER DATABASE [MyDatabase]
    ADD FILE
    (
        name = MyDatabase_MyBigTable,
        filename = 'C:\DB_Files\MyDatabase_MyBigTable.ndf',
        size = 1024MB,
        maxsize = unlimited,
        filegrowth = 100MB
    ) 
    TO FILEGROUP FG_MYBIGTABLE
    
  3. 通过使用旧的 DROP_EXISTING 创建另一个来移动聚集索引。

    CREATE UNIQUE CLUSTERED INDEX CIX_MyBigTable
    ON MyDatabase.dbo.MyBigTable (ID)
    WITH DROP_EXISTING, ONLINE
    ON FG_MYBIGTABLE
    
  4. 移动其他索引。

    CREATE NONCLUSTERED INDEX [IX_OtherTable] 
    ON MyDatabase.dbo.MyBigTable (OtherTable_ID)
    WITH DROP_EXISTING, ONLINE
    ON FG_MYBIGTABLE
    
  5. 备份引用 PRIMARY 文件组的数据库。

    BACKUP DATABASE MyDatabase
    FILEGROUP = 'PRIMARY',
    TO DISK = 'C:\Backups\MyBackup.bak'
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多