没有特定表的MSSQL DataBase Backup

时间:2015-11-19 17:25:49

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

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

3 个答案:

答案 0 :(得分:15)

除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

希望这有帮助!

答案 1 :(得分:4)

迈克的answer几乎是正确的,除非您需要创建另一个表来移动数据。

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

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

  1. 创建一个新文件组。

    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
    
  2. 将新文件添加到此文件组。

    DROP_EXISTING
  3. 通过使用旧CREATE UNIQUE CLUSTERED INDEX CIX_MyBigTable ON MyDatabase.dbo.MyBigTable (ID) WITH DROP_EXISTING, ONLINE ON FG_MYBIGTABLE 创建另一个索引来移动聚集索引。

    CREATE NONCLUSTERED INDEX [IX_OtherTable] 
    ON MyDatabase.dbo.MyBigTable (OtherTable_ID)
    WITH DROP_EXISTING, ONLINE
    ON FG_MYBIGTABLE
    
  4. 移动其他索引。

    BACKUP DATABASE MyDatabase
    FILEGROUP = 'PRIMARY',
    TO DISK = 'C:\Backups\MyBackup.bak'
    
  5. 备份引用PRIMARY文件组的数据库。

    <pagination total-items="totalItems" ng-model="currentPage" ng-change="pageChanged()"></pagination>
    

答案 2 :(得分:0)

您无法从备份中排除表格。这是一种定义备份,整个事情,而不是它的一部分。但是你可以找到一些解决方法。 可以 执行此操作的一种方法是创建第二个数据库,并将数据库中除该表之外的所有数据复制到此数据库并备份副本。您可以使用复制来复制数据并排除表并备份复制的数据库。问题是,由于数据库其余部分的数据量,这些中的任何一个实际上可能需要更长的时间。