Як виконати відновлення з журналу транзакцій у SQL Server - Програмні продукти
Наявність плану резервного копіювання – половина застави успіху у піднятті вашого SQL Server та збереженні його функціонування. Інша половина – це процес відновлення. Вам необхідно відновити SQL Server після збою (коли Ви повинні виконати відновлення на резервному сервері) або оновлення звітності або середовища розробки. Кожен із цих сценаріїв може вимагати відновлення резервних копій журналу транзакцій.
Складність, яку привносять резервні копії журналів, полягає в тому, що вони вимагають від Вас відновлення численних файлів, а не лише одного великого резервного файлу. Щоб успішно відновити базу даних, Ви повинні мати всі резервні копії журналу транзакцій, які були створені, і вони повинні відновлюватися в тому порядку, в якому були створені. Якщо будь-які резервні копії журналу транзакцій виявляються пошкодженими, Ви не можете відновити жодні резервні копії журналу транзакцій, що настають після пошкодження. Вони повинні відновлюватися по порядку, і Ви не можете пропустити жодного файлу.
Тут ми докладно розглянемо, що відновлювати та як відновлювати резервні копії журналу транзакцій.
Якщо в разі збою Ви повинні відновити дані на іншому сервері, Ви повинні спочатку зробити резервну копію активної частини журналу транзакцій, щоб отримати транзакції, що залишилися, які ще не були записані в існуючу резервну копію журналу транзакцій. Щоб створити цю останню резервну копію журналу транзакцій, використовуйте щось подібне до наступної команди:
BACKUP LOG Northwind TO DISK= 'C:SQLBackupNorth.bak' WITH NO_TRUNCATE
Цим створюється ще одна резервна копія журналутранзакцій, які потім будуть використовуватися у вашому відновлювальному процесі.
Наступний крок повинен визначити, які файли потрібно відновити. Сподіваюся, Ви вже знаєте, які резервні копії потрібно відновити. В іншому випадку Ви можете зробити запит до таблиць SQL Server у msdb; ці таблиці покажуть Вам усі резервні копії, зроблені на вашому сервері, включаючи резервні копії, створені за допомогою Maintenance Plans (Плани Обслуговування), майстра в Enterprise Manager, команд T-SQL та інструментарію третіх фірм, який використовує вбудовані функції SQL Server для створення резервних копій копій.
У msdb є такі таблиці:
- backupfile - Містить по одному рядку на кожен файл даних або файл журналу, для якого створювалася резервна копія
- backupmediafamily - Містить по рядку на кожну родину середовищ
- backupmediaset - Містить рядок на кожен набір середовищ резервного копіювання
- backupset - Містить по рядку на кожен набір резервного копіювання
RESTORE HEADERONLY
Ця команда дозволяє побачити інформацію заголовка резервної копії для всіх наборів резервних копій на конкретному пристрої резервного копіювання. Ця команда корисна, коли працюєте з численними файлами або якщо ви отримуєте файл резервної копії з сервера, яким не керуєте. Щоб визначити, що знаходиться в резервних файлах, можна виконати цю команду в Query Analyzer.
RESTORE FILELISTONLY
Ця команда дозволяє Вам побачити список файлів бази даних та журналу, які містяться в наборі резервування, у якій файловій групі вони знаходяться, а також розмір файлів даних та журналів. LogicalName і PhysicalName - ключові елементи даних, яківикористовуються протягом процесу відновлення.
RESTORE FILELISTONLY FROM DISK = 'C:SQLBackupNorth.bak'
Існує кілька опцій, які можна використовувати для відновлення резервних копій, включаючи відновлення резервних копій журналу транзакцій. Ось деякі з цих опцій:
NORECOVERY
Ця опція дозволяє відновити додаткові файли резервних копій. Ви можете використовувати її для відновлення повної, диференціальної резервної копії або резервної копії журналу транзакцій.
RESTORE DATABASE NORTH FROM DISK = 'C:SQLBackupNorth.bak' WITH NORECOVERY
Ця опція використовується за замовчуванням, якщо жодна опція не вказана. Її слід використовувати на останній стадії відновлення. Після використання Ви не можете вже відновити додаткові резервні копії; щоб це зробити, Ви повинні почати процес відновлення з самого початку. Ця опція може використовуватися для відновлення повних, диференціальних резервних копій або резервної копії журналу транзакцій.
RESTORE LOG NORTH FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH RECOVERY
Ця опція дозволяє Вам перевести базу даних в режим "тільки для читання", але це все ж таки дозволяє відновити додаткові журнали транзакцій. Ця опція може використовуватися для відновлення повних, диференціальних резервних копій або резервної копії журналу транзакцій.
RESTORE LOG NORTH FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH STANDBY = 'c:undo.ldf'
Відновлюючи бази даних на іншому сервері, Вам ймовірно буде потрібна опція MOVE, якщо сервери не налаштовані так само. Вище я згадував про використання LogicalName та PhysicalName з команди RESTORE FILELISTONLY. Опція MOVE дозволяє Вам переміщати фізичні файлиінше місце на вашому сервері. Вам потрібно використовувати опцію MOVE для всіх ваших відновлень, включаючи Повне (Full), Диференціальне (Differential) та Журналу Транзакцій (Transaction Log).
RESTORE LOG NORTH FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH RECOVERY, MOVE 'Northwind_Data' TO 'c:dataNorthwind.mdf', MOVE 'Northwind_Log' TO ' _log.ldf'
Крім виконання повного відновлення журналу транзакцій, SQL Server також надає варіанти зупинитися в конкретний момент часу або на транзакційній мітці. Якщо Ви знаєте, коли або де виникла проблема з базою даних, цей спосіб може відновити транзакцію вашої бази даних до конкретної точки до моменту виникнення проблеми з базою даних, яку ви намагаєтеся уникнути. Наприклад, якщо хтось видалив усі записи з таблиці, то Вам можливо захочеться повернути вашу базу даних до точки, що передувала цій операції.
RESTORE LOG Northwind FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH RECOVERY, STOPAT = 'Dec 31, 2005 12:00 AM'
Наступні дві команди дозволяють Вам відновлювати ваші транзакції, використовуючи транзакційні позначки, які мають бути іменованими транзакціями, що використовуються в межах вашої програми. Якщо Ви не використовуєте іменовані транзакції, то ця опція не працюватиме.
STOPATMARK
За допомогою цієї опції можна відновити всі зафіксовані транзакції, які відбулися аж до транзакційної мітки Invoice1024.
RESTORE LOG Northwind FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH RECOVERY, STOPATMARK = 'Invoice1024'
STOPBEFOREMARK
Ця опція дозволяє Вам повторити всі зафіксовані транзакції, що відбулися до транзакційної позначки Invoice1024.
RESTORE LOG Northwind FROM DISK = 'C:SQLBackupNorth_Log.bak' WITH RECOVERY, STOPBEFOREMARK = 'Invoice1024'
Як можна побачити, кілька варіантів відновлення можуть бути використані для всіх ваших резервних файлів, при цьому деякі опції застосовні тільки для резервних копій журналу транзакцій. Не шкодуйте часу, щоб вивчити різні варіанти і тоді Ви зможете віддати перевагу одному варіанту іншому. Переконайтеся, що Ви знаєте, де зберігаються ваші резервні копії, і намагайтеся використовувати угоду про іменування, яка полегшить визначення того, що знаходиться в резервних файлах. RESTORE HEADERONLY та RESTORE FILELISTONLY - чудові інструменти, які можуть допомогти Вам у цьому, проте використання гарної угоди про іменування зробить цей крок значно швидшим та надійнішим.