Додавання та видалення файлу бази даних між резервування журналу, MS SQL Server, Бази даних, статті

sql.ru

За матеріалами статті Microsofr: «INF: Effect of Database File Additions or Deletions on Database Recovery»
Інформація в цій статті ставиться до Microsoft SQL Server Версій 7.0/2000 (всі видання)

Додавання файлів бази даних SQL Server 7.0 між резервними копіями transaction log порушує послідовність резервування записів transaction log, створених після некоректно доданого файлу.
Якщо Ви спробуєте відновити базу даних, використовуючи повну резервну копію і послідовність резервних копій transaction log, резервні копії transaction log, створені після того, як були додані або видалені файли бази даних, не можна використовувати для відновлення. Спроба відбудова першої резервної копії transaction log, створеної після додавання файлу потерпить невдачу з наступним повідомленням про помилки:


Server: Msg 3155, Level 16, State 1, Line 1
The RESTORE operation cannot proceed because one or more files have been added or dropped from the database since the backup set was created.
Server: Msg 3013, Level 16, State 1, Line 1
Backup or restore operation terminating abnormally.

Тому, Ви повинні створити повну резервну копію бази даних після додавання або видалення файлу до бази даних, щоб почати нову послідовність резервних копій журналу.
Також, аналогічну описаної проблему можна спостерігати при установці Log Shipping. Коли Ви встановлюєте передачу записів журналу між двома SQL Server 7.0, резервні копії записів transaction log будуть безупинно передаватися і відновлюватися на резервному сервері. Якщо з якої – будь-якої причини, до промислової базі даних буде додано журнал, резервні копії transaction log не зможуть бути відновлені на резервному сервері без повторної синхронізації журналу, що передається на резервний сервер.
Наприклад, Ви можете додати файл бази даних через нестачу дискового простору. Після того, як Ви додасте журнал, передача записів журналу не може бути продовжена і записи не будуть відновлені в transaction log другий сервер. Спроби відновлення на резервному сервері transaction log призведуть до збою, з уже показаним тут повідомленням про помилку.
У SQL Server 2000 можна використовувати команду WITH MOVE при відновленні резервної копії transaction log, яка була створена після додавання файлу бази даних. Операція відновлення в SQL Server 2000 може враховувати доповнені файли бази даних. Наприклад, Ви можете відновлює ранній резервну копію transaction log, яка була створена після додавання файлу бази даних, з використанням нижченаведеного запиту:


RESTORE LOG NORTHWIND FROM DISK =’path for the transaction log backup file’
WITH MOVE ‘Logical name of the new data file’
TO ‘physical name of the new data file
(where you want the file to be created on the destination server)’,
NORECOVERY

Результат виконання запиту, це база даних разом з доданим файлом. Операція відновлення створить і новий файл, що дозволить почати в нього запис даних. Ви можете використовувати команду RESTORE без опції MOVE. Якщо файл бази даних видалено з бази даних SQL Server 2000, операція відновлення продовжиться без любs [змін, і SQL Server самостійно дізнається про видалення файлів і відповідно відкоригує базу даних.
Нижче, в двох розділах, розглядається послідовність кроків, які описують поведінку в SQL Server 7.0 і його більш досконалого продовження SQL Server 2000.

SQL Server 7.0

Розглянемо випадок, коли використовується промислова база даних SQL Server 7.0, що працює в режимі 24х7 (цілодобово весь тиждень). При спробі відновити її з backup, Ви повинні спочатку відновити останню, повну резервну копію (використовуючи WITH NORECOVERY), а потім, все n-1 резервні копії transaction log (використовуючи WITH NORECOVERY) і останню резервну копію transaction log (використовуючи
WITH RECOVERY).
Наступні кроки описують послідовність, що припускає додавання файлу бази даних між резервуванням записів transaction log на промисловій базі даних і закінчується помилкою, яка відбувається при спробі подальшого відновлення з резервної копії, описане вище.
ЗВЕРНІТЬ УВАГА: зводяться нижче кроки були застосовані до активно використовуваної базі даних.

1. Виконайте резервне копіювання бази даних SQL Server 7.0.
2. Створіть резервну копію transaction log в файл tran_log1.trn.
3. Додайте файл до бази даних, використовуючи поданий нижче скрипт:

ALTER DATABASE northwind
ADD FILE
( NAME = northwind_data1,
   FILENAME =’E:\MSSQL7\DATA\northwnd_data1.ndf’,
   SIZE = 5MB,
   MAXSIZE = 15,
   FILEGROWTH = 10%
)
GO

4. Виконайте резервне копіювання transaction log в файл tran_log2.trn.

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

1. Відновіть базу даних SQL Server 7.0, використовуючи:

WITH NORECOVERY
Restore Successful

Processed 360 pages for database ‘northwind’, file ‘Northwind’ on file 1. Processed 1 pages for database ‘northwind’, file ‘Northwind_log’ on file 1.
Backup or restore operation successfully processed 361 pages in 0.810 seconds (3.642 MB/sec)

2. Відновіть резервну копію transaction log, використовуючи WITH NORECOVERY з tran_log1.trn:

Restore Successful

Processed 1 pages for database ‘northwind’, file ‘Northwind_log’ on file 1. Backup or restore operation successfully processed 1 pages in 0.004
seconds (1.664 MB/sec).

3. Відновіть transaction log, використовуючи WITH NORECOVERY з tran_log2.trn:

Операція відновлення потерпить невдачу з повідомленням про помилку:

Server: Msg 3155, Level 16, State 1, Line 1 The RESTORE operation cannot proceed because one or more files have been added or dropped from
the database since the backup set was created. Server: Msg 3013, Level 16, State 1, Line 1 Backup or restore operation terminating abnormally.

Оскільки повідомлення про помилку вказує, що відновлення transaction log не може бути продовжено із заданої резервної копії transaction log (tran_log2.trn). Така поведінка відповідає дизайну SQL Server 7.0 і не дозволяє додавати або видаляти файли між резервними копіями журналу.
Щоб запобігти цю помилку, створіть повну резервну копію після того, як Ви додасте або видаліть один або більше файлів бази даних, після чого почнеться нова послідовність резервування записів журналу. Якщо послідовність резервування, створена попередньо, є єдино доступною для відновлення, відновіть tran_log1.trn, використовуючи опцію WITH RECOVERY, яка дозволить відновити базу даних до не суперечливого станом безпосередньо перед тим, як файли бази даних були додані або видалені.

SQL Server 2000

Для SQL Server 2000, додавання або видалення файлів обробляється без необхідності створення нової послідовності резервування. Після додавання файлу до бази даних в середину послідовності резервного копіювання записів transaction log, наступне резервне копіювання transaction log повинно бути запущено вручну, з використанням опції WITH MOVE.

Розглянемо сценарій, подібний використовуваному для SQL Server 7.0. Після додавання файлу до промислової базі даних, виконайте:

ALTER DATABASE Northwind
ADD FILE
(
   NAME = northwind_data1,
   FILENAME =’E:\MSSQL7\DATA\northwnd_data1.ndf’,
   SIZE = 5MB,
   MAXSIZE = 15,
   FILEGROWTH = 10%
)
GO

Якщо резервне копіювання transaction log бази даних виконано після додавання файлу, спробуйте відновити першу, після додати файл, резервну копію transaction log (tran_log2.trn), що призведе до наступного повідомлення про помилку:

Processed 1 pages for database ‘northwind’, file ‘Northwind_log’ on file 1.
Server: Msg 5123, Level 16, State 1, Line 1
CREATE FILE encountered operating system error 3(The system cannot find
the path specified.) while attempting to open or create the physical file
‘E:\Program Files\Microsoft SQL Server\MSSQL\DATA\nwnd_d2.ndf’.
Server: Msg 5183, Level 16, State 1, Line 1
File ‘northwind_data2’ cannot be created. Use WITH MOVE to specify a usable physical file name.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE LOG is terminating abnormally.

Повідомлення про помилку видається тому, що команда RESTORE не запускалася з опцією, що створює новий файл (відповідний файлу, додається до промислової базі даних) і дозволяє записати дані у файл.
Щоб уникати появи повідомлення про помилку 5123, скористайтеся наступним сценарієм поведінки:

1. Вручну відновите першому резервному копію transaction log, створену після додавання файлу (для SQL Server Query Analyzer або SQL Server Enterprise Manager) використовуйте наступний код:

RESTORE LOG NORTHWIND FROM
DISK=’e:\filemgt\nwind_log2.trn’
WITH MOVE ‘northwind_data1’
TO ‘c:\Program Files\Microsoft SQL server\MSSQL$SQL2K1\Data\northwnd_data1.ndf’,
NORECOVERY

Тепер Ви створили новий файл бази даних, такий же, як існує в промисловій базі даних сервера, на якому створювалася резервна копія transaction log.
Після того, як Ви виконаєте команди з пункту 1, можна продовжити відновлення transaction log, причому, без використання опції
MOVE.

SQL Server 2000 Log Shipping Сценарій

Якщо Ваш SQL Server 2000 використовує Log Shipping, і якщо додається файл бази даних до промислової базі і завданням на завантаження в резервний сервер (безупинно виконувати в заданих інтервалах часу), виконання завантаження на резервний сервер буде перервано збоєм з повідомленням про помилку 5105.
Для таблиці log_shipping_plan_history на резервному сервері з’явиться таке повідомлення про помилки, додавати кожного разу, коли буде виконуватися завдання на завантаження:

[Microsoft SQL-DMO (ODBC SQLState: 42000)] Error 5105: [Microsoft][ODBC SQL Server Driver][SQL Server]Device activation error.
The physical file name ‘C:\Program Files\Microsoft SQL Server\MSSQL$SQL2K1\data\northwnd_data2.NDF’ may be incorrect. [Microsoft][ODBC
SQL Server Driver][SQL Server]File ‘northwnd_data2’ cannot be created. Use WITH MOVE to specify a usable physical file name. [Microsoft][ODBC
SQL Server

Це повідомлення про помилки з’являється тому, що не визначено нове розташування файлу в опції відновлення, а SQLMAINT НЕ запрограмований на визначення нового розташування файлу. Щоб уникнути появи цієї помилки на резервному сервері, для першого резервного копіювання transaction log, створеного після додавання файлу до бази даних SQL Server, в Query Analyzer, використовуйте опцію WITH MOVE і визначте розташування, в якому доданий файл повинен бути створений на резервному сервері.
Наприклад, якщо northwind _tlog_200101270220.trn – це перша резервна копія transaction log, створеного після додавання в базу даних northwind файлу northwnd_data2, виконайте наступну команду, яка дозволить уникнути помилок при виконанні завдання на завантаження:

restore log pubs2 from disk =’C:\Program Files\Microsoft SQL Server\MSSQL$SQL2K1\BACKUP\northwind_tlog_200101270219.TRN’
with move ‘northwnd_data2’ to ‘C:\Program Files\Microsoft SQL Server\MSSQL$SQL2K1\data\northwnd_data2.ndf’,
standby =’c:\Program Files\Microsoft SQL Server\MSSQL$SQL2K1\Backup\Northwind.TUF’

Після того, як Ви виконаєте цю команду, подальше відновлення transaction log буде проходити без повідомлення про помилку 5105. Вам, імовірно, доведеться зробити деякі виправлення в залежності від установки load_all для Log Shipping пари.
Якщо стовпець load_all для Log Shipping пари в таблиці log_shipping_plan_databases встановлений в 0, перевірте стовпець last_loaded_file в тієї ж самої таблиці, і встановіть його на резервне копіювання transaction log, яке було виконано вручну. У попередньому прикладі файл – northwind _tlog_200101270219.trn.
Якщо опція стовпця load_all встановлена ​​в 1, Ви можете безпечно виконувати завдання на завантаження в заплановані інтервали часу.

Додаткову інформацію можна отримати у статті Microsoft Knowledge Base:

Q281122 INF: Restore File and Filegroup Backups in SQL Server

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


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

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

Ваш отзыв

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

*

*