У мене є ситуація, яку нелегко розібратися, і я подумав, що на цьому форумі я б запитав, чи можуть інші запропонувати пропозиції.
Я запускаю SQL Server 2008 R2 Standard SP3 у Windows Server 2008R2 Enterprise.
Базі даних потрібне було певне обслуговування, і після цього мені потрібно було відновити на іншому сервері. У мене є повноцінне резервне копіювання db, виконане за допомогою COPY_ONLY плюс набір із 4-х резервних копій.
- перед запуском створіть tlogbackup1
- перехід від
FULL
доBULK_LOGGED
моделі відновлення - додати нову групу файлів
- додати файл у новуфайлгрупу
- встановити новугрупу за замовчуванням
- виберіть у таблицю (у новійфайлгрупі)
- падіння оригінальний стіл
- видалити вихідний файл
- видалити оригінальну файлову групу
- змінити назву нової таблиці, щоб вона відповідала оригінальній таблиці
- змінити ім'я файлу newfilegroup відповідно до оригінальної файлової групи
- змінити ім'я файлу в каталозі, щоб воно відповідало іменному файлу
- змінити ім’я файлу на рівні ОС, щоб відповідати оригінальному імені файлу
- встановити групу файлів за замовчуванням як оригінал
- принести db в Інтернеті
- перехід від
BULK_LOGGED
доFULL
моделі відновлення - Після завершення всіх кроків створіть tlogbackup2
Відновлення всіх резервних копій повинно використовуватись З MOVE, внаслідок зміни літер диска на сервері відновлення.
Етапи відновлення:
RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup1.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
RESTORE LOG SomeDB FROM DISK = 'D:\REPRO\tlogbackup2.trn'
WITH
MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf'
,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf'
,MOVE 'SystemData_log' TO 'D:\SQLLogs\SomeDB.LDF'
,NORECOVERY
,stats = 1
Остаточне відновлення tlog доходить до 100%, а потім не вдається з помилкою 3456:
Оброблено 368 сторінок для бази даних 'SomeDB', файл 'SystemData' у файлі 1.
Оброблено 7656520 сторінок для бази даних 'SomeDB', файл 'SystemDataPDS' у файлі 1.
Оброблено 172430 сторінок для бази даних 'SomeDB', файл 'SystemData_log' у файлі 1.
Msg 3456, рівень 16, стан 1, рядок 1
Не вдалося повторити запис журналу (210388: 123648: 232) для ідентифікатора транзакції (0: 1016710921), на сторінці (4: 8088), бази даних 'SomeDB' (ідентифікатор бази даних 6) . Сторінка: LSN = (0: 0: 1), тип = 11. Журнал: OpCode = 4, контекст 11, PrevPageLSN: (210388: 122007: 1). Відновити з резервної копії бази даних або відновити базу даних. Повідомлення 3013, рівень 16, стан 1, рядок 1 LOG RESTORE закінчується аномально.
Просто щоб переконатися, що резервна копія повного db була в порядку, я відновив її запуск CHECKDB
, і помилок не було.
Всі відгуки вітали.
Спасибі заздалегідь,
Нед Оттер