Робота з журналом транзакцій

Іноді виникає враження, що журнал транзакцій живе власним життям Простір усередині файлу журналу може розростатися і стискатися, без яких би то не було видимих ​​причин Якщо ви відчули себе втраченим при роботі з журналом, то ви не самотні Справжній розділ проллє деякий світло на внутрішнє життя журналу транзакцій

Внутрішній світ журналу транзакцій

Журнал транзакцій містить всі транзакції бази даних Якщо сервер знищує журнал транзакцій, всі записані в нього транзакції використовуються для відновлення При цьому відкочуються все частково виконані транзакції і завершуються ті, які були підтверджені в журналі транзакцій, але ще не записані у файл даних

Віртуально цей журнал можна уявити собі як послідовний список транзакцій, відсортований по даті і часу У той же час на фізичному рівні SQL Server записує різні частини фізичного журналу у віртуальні блоки без будь-якого певного порядку Деякі його частини можуть знаходитися в експлуатації, в той час як інші частини виявляються доступними для перезапису, подібно перевертиша

Поділ на активні і неактивні частини

Усі транзакції в журналі можна розділити на дві групи (рис 364)

■ Активні транзакції – це ті, які ще не підтверджені і не записані у файл даних

■ Неактивні транзакції – які передують самій ранній активної транзакції

Так як всі транзакції мають різну тривалість і підтверджуються в різний час, ймовірність того, що в активній частині журналу перебуватимуть підтверджені транзакції, досить висока Активна частина журналу не обовязково містить тільки непідтверджені транзакції – вона містить всі транзакції з моменту початку найстарішою непідтвердженою транзакції Всього одна дуже стара непідтверджена транзакція може зробити активною дуже велику частину журналу

Рис 364 Неактивні транзакції передують найстарішою активної

Контрольні точки транзакції

Розуміння того, як SQL Server використовує контрольні точки в журналі транзакцій, винятково важливо для розуміння процесу архівування та очищення журналу Контрольні точки обчислюють обсяг роботи, необхідний для відновлення бази даних

Контрольна точка автоматично встановлюється при виконанні однієї з наведених нижче умов

■ Коли інструкція ALTER DATABASE змінює деякий параметр бази даних

■ Коли сервер завершує роботу

■ Коли кількість записів в журналі перевершує очікуваний обсяг робіт, встановлений в параметрі конфігурації сервера recovery interval

■ Якщо в базі даних встановлено проста модель відновлення або режим стиснення, а журнал транзакцій заповнений на 70%

Контрольні точки можна ініціювати і вручну, за допомогою команди checkpoint При установці контрольної точки виконуються наступні дії

■ У журналі транзакцій маркується зона контрольної точки

■ У журнал заноситься запис про встановлення контрольної точки, що містить наступне:

• найстарішу активну транзакцію

• найстарішу транзакцію, яка ще не була реплицирована в реплікації транзакцій

• список всіх активних транзакцій

• інформацію про обсяг робіт, необхідних для відкату бази даних

■ На диск записуються всі заповнені сторінки даних і журналу

По суті, контрольна точка підводить риску під поточним станом бази даних, а потім записує стан розділової лінії між активною і неактивній частиною журналу

Резервування журналу транзакцій

Виконання резервування журналу транзакцій практично не відрізняється від повного або диференційованого резервного копіювання Існує тільки кілька помітних відмінностей

Інструкція T-SQL має наступний вигляд:

BACKUP LOG СНА2

ТО DISK = e: \ Cha2Backupbak

WITH

NAME = CHA2Backup

Буде отримано наступний результат:

Processed 1 pages for database 1CHA21, file CHA2_log on file 9

BACKUP LOG successfully processed 1 pages in 0060 seconds (0042 MB/sec)

При резервування журналу транзакцій використовуються ті ж параметри, які використовуються при резервному копіюванні бази даних Але доступні і два додаткові параметри, що мають сенс тільки для резервування журналу транзакцій Параметр no_truncate призначений для резервування журналу транзакцій під час виконання операції відновлення параметр norecovery / standby призначений для запуску резервування на припиненому сервері Обидва цих параметра ми розглянемо більш детально в розділі Відновлення за допомогою програмного коду T-SQL.

Журнал транзакцій не може бути зарезервований, якщо виконується будь-яка з наступних умов

■ У базі даних використовується проста модель відновлення

■ У базі даних використовується модель відновлення з неповним протоколюванням, була виконана масова операція, і файли бази даних були пошкоджені

■ Файли бази даних були додані або видалені

У будь-якому з цих випадків слід виконати повне резервування бази даних

Стиснення журналу транзакцій

Операції оновлення та видалення можуть не збільшити розмір файлу даних У той же час в журнал транзакцій дані додає будь-яка операція Журнал транзакцій продовжує збільшуватися з кожною операцією модифікації даних

Рішення даної проблеми полягає в поверненні до неактивної частини журналу і наступному її видаленні За замовчуванням резервування журналу транзакцій призводить до автоматичного його усіканню (тобто стисненню) (Див рис 363)

Якщо, наприклад, диск переповнений, то журнал транзакцій може зажадати усічення без резервування бази даних Однак не існує способу стиснення журналу без резервування У той же час в мові Т-SQL передбачений варіант усічення журналу транзакцій за допомогою команди Backup NoLog або Backup TruncateOnly (ці команди взаємозамінні):

BACKUP LOG СНА2

WITH TRUNCATE_ONLY

Якщо журнал транзакцій усічений вручну, а потім була створена його резервна Увага копія, то в послідовності транзакцій утворюється пролом Будь-які послідовності транзакцій, що знаходяться після цієї проломи, не можуть бути відновлені Щоб заново почати створювати послідовність резервних копій журналу транзакцій, рекомендується виконати повне резервування бази даних

Журнал транзакцій і проста модель

відновлення

Коли в базі даних використовується проста модель відновлення, журнал транзакції гарантує те, що всі підтверджені транзакції будуть записані у файл даних Коли журнал транзакцій заповнюється на 70%, SQL Server встановлює контрольну точку, а потім усікає журнал При цьому розміри вільного простору журналу будуть коливатися, однак мінімальним буде розмір його активної частини

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*