我需要在sql中没有特定表的情况下进行计划备份。因为如果我使用该表进行备份,则需要很长时间。我需要从备份中排除一个表。可能吗?没有该表,所有表和数据都应该存在于数据库中。
答案 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,在创建文件组之后,您只需将聚簇索引移动到另一个文件组。如果您没有聚集索引,则可以创建一个只是为了帮助您完成此过程。如果您还有非聚簇索引,也可以移动它们。完成后,所有数据都将自动在文件组之间移动。
因此,如果要从备份例程中排除此大表,请执行以下操作:
创建一个新文件组。
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
将新文件添加到此文件组。
DROP_EXISTING
通过使用旧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
移动其他索引。
BACKUP DATABASE MyDatabase
FILEGROUP = 'PRIMARY',
TO DISK = 'C:\Backups\MyBackup.bak'
备份引用PRIMARY文件组的数据库。
<pagination total-items="totalItems" ng-model="currentPage" ng-change="pageChanged()"></pagination>
答案 2 :(得分:0)
您无法从备份中排除表格。这是一种定义备份,整个事情,而不是它的一部分。但是你可以找到一些解决方法。 可以 执行此操作的一种方法是创建第二个数据库,并将数据库中除该表之外的所有数据复制到此数据库并备份副本。您可以使用复制来复制数据并排除表并备份复制的数据库。问题是,由于数据库其余部分的数据量,这些中的任何一个实际上可能需要更长的时间。