Додавання і видалення файлу бази даних між резервування журналу

Додавання файлів бази даних 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 can not 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.

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

Створіть резервну копію transaction log в файл tran_log1.trn.

Додайте файл до бази даних, використовуючи поданий нижче скрипт:

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

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

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:

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 can not 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 7.0. Після додавання файлу до промислової базі даних, виконайте:

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

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 can not 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' can not 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.

Схожі статті