Резервное копирование базы данных MSSQL без определенной таблицы


Мне нужно сделать резервную копию расписания без конкретной таблицы в sql. Потому что если я возьму резервную копию с этой таблицей, это займет много времени. Мне нужно исключить одну таблицу из резервной копии. Возможно ли это? Без этой таблицы все таблицы и данные должны быть в базе данных.

3 6

3 ответа:

Для этой таблицы можно настроить отдельную группу файлов, кроме основной группы файлов. Это даст вам возможность создать резервную копию, в которой не будет вашей большой таблицы. Ниже приведен пример, который шагает из этого процесса.

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) первичная резервная копия, которая теперь исключает таблицу, находящуюся в группе файлов "EXAMPLEFG1".
BACKUP DATABASE EXAMPLE
   FILEGROUP = 'PRIMARY',
   TO DISK = '<Your Directory>'
GO

Если вы решите сделать резервную копию EXAMPLEFG1 просто измените значение файловой группы на "EXAMPLEFG1" в приведенном выше запросе.

Проверьте этот сайт Microsoft для получения дополнительной информации о резервных копиях файловых групп.

Надеюсь, это поможет!

Ответ Майка почти верен, за исключением того, что вамне нужно создавать другую таблицу для перемещения данных.

Согласно этому ответу, который я проверил сам, после создания файловой группы вам просто нужно переместить кластеризованный индекс в другую файловую группу. Если у вас нет кластеризованного индекса, вы можете создать его только для того, чтобы помочь вам в этом процессе. Если у вас также есть некластеризованные индексы, переместите их тоже. После того, как вы закончите, все данные будут перемещены между файловые группы автоматически.

Итак, если вы хотите исключить эту большую таблицу из своей процедуры резервного копирования, сделайте следующее:

  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. Резервное копирование базы данных, ссылающейся на основной файл группа.

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

Нельзя исключить таблицу из резервной копии. Это своего рода определяет резервную копию, все дело, а не часть его. Однако вы можете найти некоторые способы обойти это. В одну сторону ты мог бы сделать это можно, создав вторую базу данных и скопировав все данные из вашей базы данных, кроме этой таблицы, в эту базу данных и сделав резервную копию копии. Вы можете использовать репликацию для копирования данных, исключения таблицы и резервного копирования реплицируемой базы данных. Проблема в том, что любой из них может на самом деле занять дольше из-за количества данных в остальной части базы данных.