Как сохранить архив из SQL базы данных сервера - PullRequest
0 голосов
/ 04 мая 2020

У меня есть база данных на SQL сервере. По сути, таблица состоит из нескольких XML документов, которые представляют одни и те же данные таблицы в данный момент времени (например, историю резервного копирования). Каков наилучший способ обрезать все старые (3 месяца) резервные копии, удалить из БД и сохранить их в архиве?

Table structure

1 Ответ

0 голосов
/ 04 мая 2020

На сервере SQL нет экспорта из коробки.

Предположим,

  • Ваш стол может быть довольно большим, поскольку он выглядит как вы и изображение стола каждую минуту.
  • Если вы хотите сделать все это изнутри SQL Сервер.

Тогда я предлагаю сделать уборку кусками. Обычный процесс в SQL для удаления кусками - это использование DELETE в сочетании с оператором OUTPUT. Тогда самым простым способом архивации и удаления было бы использование ВЫХОДА в таблицу в другой базе данных для этой единственной цели.

, поэтому ваши шаги будут:

  1. Создать новую базу данных ( ArchiveDatabase )
  2. Создать таблицу архива в ArchiveDatabase (ArchiveTable) с той же структурой таблицы, которую вы хотите удалить.
  3. Через некоторое время l oop выполнить УДАЛЕНИЕ / ВЫХОД
  4. Резервное копирование ArchiveDatabase
  5. TRUNCATE ArchiveTable таблицы в ArchiveDatabase

Циклы DELETE / OUTPUT будут выглядеть примерно так:

declare @RowsToDelete int = 1000 
declare @DeletedRowsCNT int = 1000 

while @DeletedRowsCNT = @RowsToDelete 
begin 
    delete top (@RowsToDelete) 
    from MyDataTable
    output deleted.* into ArchiveDatabase.dbo.ArchiveTable
    where dt < dateadd(month, 3, getdate())
    set @DeletedRowsCNT = @@ROWCOUNT
end 
...