Резервне копіювання декількох баз даних в один і той же час


10

Зазвичай, коли ми запускаємо резервну копію, ми не дозволяємо вносити зміни або база даних не буде доступною. Я маю на увазі, база даних буде в режимі одного користувача, але я хочу запустити резервну копію та випустити db для використання. Крім того, коли я запускаю резервну копію, я не хочу, щоб постійні зміни записувались у файл резервної копії. Я хочу знати, як я можу досягти цього в Microsoft SQL Server 2012. Будь ласка, допоможіть мені.

Ну, дозвольте спочатку пояснити свою проблему. Наразі я встановлюю базу даних в єдиний користувальницький режим, поки резервне копіювання не завершиться. Цей режим буде служити моїй меті уникнути змін даних під час резервного копіювання. Але моя програма пов'язана з безліччю баз даних (кожна база даних взаємопов'язана між собою, і є різні dbs, які продовжують створювати щомісяця). Таким чином, резервне копіювання всіх цих баз даних стало втомливим процесом, і що ще важливіше, я повинен утримувати користувачів поза системою, коли відбувається резервне копіювання.

Тому я шукаю механізм резервного копіювання, який буде відповідати нижче зазначеним вимогам.

  1. Запустіть резервну копію всіх dbs одночасно і відпустіть db для використання.
  2. Оскільки бази даних пов'язані між собою, я хочу, щоб у файлах резервного копіювання підтримувалася узгодженість даних. Тому через цю вимогу щодо узгодженості даних я не хочу, щоб зміни вносилися до файлу резервної копії.

Все, що я хочу - резервне копіювання всіх dbs в даний момент часу.


2
Не потрібно встановлювати базу даних на однокористувацький режим під час створення резервних копій. SQL Server ніколи не буде включати в резервну копію неспроможні транзакції. Щоб отримати більш повну відповідь, відредагуйте свою публікацію, щоб вона містила детальну інформацію про вашу модель відновлення, чи маєте ви на увазі резервне копіювання журналу транзакцій, повне чи додаткове резервне копіювання, а також проблему, з якою у вас виникли проблеми. На сьогоднішній день ваше запитання трохи незрозуміле.
Даніель Хатмахер

1
Чого ви хочете досягти за допомогою цього резервного копіювання? Повна відновлюваність до цього моменту - чи щось інше? Іншими словами ... Якщо вам доведеться відновити з цієї резервної копії, що слід відновити --- будь-які зміни DDL? Зміни в даних, чи що?
сімдесятикласниця

Те, що ви хочете, неможливо в SQL 2012. Ще в SQL 7.0 днів набір резервних копій бази даних був використаний для відновлення бази даних, як це було в момент запуску оператора BACKUP. Починаючи з SQL 2000 і далі, набір резервних копій бази даних використовується для відновлення бази даних, як це було на момент завершення оператора BACKUP.
stacylaray

@DanielHutmacher Я шукаю повні резервні копії.
Praveen

Відповіді:


13

Я припускаю, що ваше завдання - створити набір резервних копій, де ви зможете відновити їх до однієї статичної (без відкритих транзакцій) точки (все синхронізовано). Аналогічно тому, що точка спокою зробить вас у DB2. На жаль, немає нічого в SQL Server, що б саме це зробило. Однак, якщо ваші бази даних перебувають у повному режимі відновлення, ви можете зробити щось подібне.

Ви можете створити одну MARKEDтранзакцію за всіма базами даних одночасно . Потім ви берете резервну копію журналу транзакцій кожної бази даних. Якщо припустити, що ви стежите за своїми резервними копіями журналів (якими ви все одно повинні бути), резервне копіювання журналу не займе багато часу. І не потрібно нікому перешкоджати перебуванню в системі (за винятком, можливо, достатньо довгого часу, щоб ви створили марковану транзакцію).

У цей момент, якщо вам потрібно відновити, ви робите дані RESTORE STOPBEFOREMARKна кожній зі своїх баз даних. Це відновить усі бази даних в одній точці (на основі вашої транзакції). Примітка. Якщо ви хочете включити цю транзакцію, також є STOPATMARK.

Якщо ви хочете прикладу, я отримав його за посиланням вище, а також додатковим читанням.

Я розумію, що це не точно відповідає вашому запитанню, але, сподіваємось, це вирішить вашу проблему.


2
Ось таким чином BizTalk управляє поточними резервними копіями декількох баз даних. Якщо він працює для Microsoft BizTalk, це вже досить добре перевірена функція.
Макс Вернон

Ми використовуємо його для баз даних TFS в логшипінгу, який ми змінили на завждиOn.
Кін Шах

1
Один (мається на увазі, але невимовлений) деталь, щоб привести відповідь Кена додому: Ви не можете мати ПОВНУЮ резервну копію для декількох БД. Найближче до вас може підійти раунд повних резервних копій, одразу слідом за ними помічена транзакція, потім раунд резервного копіювання журналу. Цей перший раунд резервного копіювання журналу "доповнить" послідовність до моменту часу.
AMtwo

@AMtwo технічно ви могли, використовуючи метод ОП. Вимкніть усіх із системи, переконайтеся, що немає активних з'єднань (можливо, позначте бази даних як лише прочитані / обмежені), а потім виконайте повні резервні копії кожної бази даних. Однак, як заявила ОП, це не найкращий метод у світі.
Кеннет Фішер

7

Ваше запитання схоже на те, на що я відповів - Резервне копіювання та відновлення 10-20 баз даних SQL Server до ~ синхронного стану?

Якщо припустити, що модель відновлення вашої бази даних є ПОВНОЮ, вам слід зробити повне резервне копіювання, а потім використовувати Позначені транзакції .

Давайте розвінчати ваші міфи ...

Запустіть резервну копію всіх dbs одночасно і відпустіть db для використання.

З резервних міфів (Настійно раджу прочитати всі резервні міфи) :

Операції резервного копіювання не беруть блокування на об’єкти користувача. Резервні копії викликають дуже велике навантаження для зчитування підсистеми вводу / виводу, так що це може виглядати, як завантаженість завантажується, але насправді це не так. Це просто сповільнюється. Існує особливий випадок, коли резервна копія, яка повинна підбирати масові розширення, займе блокування файлів, яке може блокувати операцію контрольної точки - але DML ніколи не блокується.

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

Позначені транзакції допоможуть вам прийняти послідовне резервне копіювання LOG, і ви зможете відновити його їх за допомогою RESTORE ... WITH STOPBEFOREMARK = '<mark_name>'

Пам'ятайте, що Позначені транзакції для всіх баз даних в екземплярі також записуються в dbo.logmarkhistoryтаблицю в MSDBбазі даних.


-1
--]---- Begin Code ----[
--–declaring variables
DECLARE @dbname VARCHAR(100) -- database name
DECLARE @bupath VARCHAR(100) -- path for backup location
DECLARE @filename VARCHAR(100) -- filename used for backup files
DECLARE @datestamp VARCHAR(25) -- date used for backup file timestamp
-- specify database backup directory
SET @bupath = 'D:\DB Bkp\'
-- file date formatting
SELECT @datestamp = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE
(CONVERT(VARCHAR(20),GETDATE(),108),':','')
--specify databases to backup
DECLARE db_cursor CURSOR for
SELECT name
FROM master.dbo.sysdatabases
WHERE name not IN ('tempdb') -- excludes these databases, if excluding multiple databases, seprate them by a comma
--backup process
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @filename = @bupath + @dbname + '_' + @datestamp + '.bak'
   BACKUP DATABASE @dbname TO DISK = @filename WITH INIT,
   CHECKSUM; --init overwrites existing files with the same name, and checksum verifies the backup
       FETCH NEXT from db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor

для більш детальної інформації: https://blogs.technet.microsoft.com/letsdothis/2013/11/06/backup-multiple-sql-databases-in-a-single-swoop/


Це не гарантує однакове резервне копіювання часу. Це просто послідовність послідовних резервних копій.
vonPryz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.