Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Всем привет.

Есть большая БД (10Тб), есть её новая копия на другом сервере, на исходнике делаю бэкап лога транзакций и этот лог разворачиваю на получателе. Но при первом развертывании лога транзакций на получателе процесс затянулся, я вижу сессию вот в таком виде:

автор
80 SUSPENDED NT SERVICE\SQLSERVERAGENT V-BGS01 . Blogans RESTORE LOG 1188 2 10/31 10:15:00 SQLAgent - TSQL JobStep (Job 0x9CF084BFBB1F6E4D9BF7F16BD5989581 : Step 1) 80 0
80 SUSPENDED V-BGS01 . Blogans RESTORE LOG 509219 1 10/31 10:15:00 SQLAgent - TSQL JobStep (Job 0x9CF084BFBB1F6E4D9BF7F16BD5989581 : Step 1) 80 0


Размер первого тран лога 114гб, процесс длится уже час. Ну собственно понятно, что архив большой, времени нужно больше чем обычно. Но есть ли возможность "заглянуть" и посмотреть, действительно ли лог применяется на БД или же сессия просто зависла?
31 окт 19, 11:21    [22006920]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
teCa
Но есть ли возможность "заглянуть" и посмотреть, действительно ли лог применяется на БД или же сессия просто зависла?
Ресурс-монитором посмотрите, есть ли трафик по файлам бакапа, и файлам базы.
31 окт 19, 11:28    [22006933]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 797
Этот запрос покажет в столбце "percent_complete" прогресс restore
select
    qs.session_id, 
    qs.start_time,
    datediff(s, qs.start_time, getdate()) as duration_sec,
    qs.status, qs.wait_type, qs.command, qs.last_wait_type, 
    qs.percent_complete, 
    qt.text, qs.total_elapsed_time/1000 as [total_elapsed_time, сек],
    qs.wait_time/1000 as [wait_time, сек], (qs.total_elapsed_time - qs.wait_time)/1000 as [work_time, сек]
from sys.dm_exec_requests as qs
    cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
31 окт 19, 11:35    [22006947]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Тяп-ляп,

автор
80 2019-10-31 10:15:00.507 5867 running NULL RESTORE LOG PAGEIOLATCH_EX 100 RESTORE LOG [Blogans] FROM DISK = '\\Blogans\20191030\Blogans_tlog_20191030_1532.BTL' WITH REPLACE, STATS = 20, NORECOVERY 5866 0 5866


Судя по этому столбцу 100%, но что-то продолжает выполнятся в задании.
31 окт 19, 11:55    [22006978]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
teCa
Тяп-ляп,

автор
80 2019-10-31 10:15:00.507 5867 running NULL RESTORE LOG PAGEIOLATCH_EX 100 RESTORE LOG [Blogans] FROM DISK = '\\Blogans\20191030\Blogans_tlog_20191030_1532.BTL' WITH REPLACE, STATS = 20, NORECOVERY 5866 0 5866


Судя по этому столбцу 100%, но что-то продолжает выполнятся в задании.

на винты посмотрите, возможно выделяет место если было расширение на оригинале
31 окт 19, 11:56    [22006982]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
msLex
Member

Откуда:
Сообщений: 7724
teCa
Тяп-ляп,

автор
80 2019-10-31 10:15:00.507 5867 running NULL RESTORE LOG PAGEIOLATCH_EX 100 RESTORE LOG [Blogans] FROM DISK = '\\Blogans\20191030\Blogans_tlog_20191030_1532.BTL' WITH REPLACE, STATS = 20, NORECOVERY 5866 0 5866


Судя по этому столбцу 100%, но что-то продолжает выполнятся в задании.

100% = файл бекапа лога записан в лог сервера, теперь идет реду этого лога

где-то были способы посмотреть, до какой даты отресторен лог через дамп процесса рестора.
31 окт 19, 11:58    [22006986]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
msLex,

Ну процесс монитором вижу что сиквел что-то пишет в файлы этой БД, хотя это тоже не показатель типичного процесса восстановления.
31 окт 19, 12:07    [22007001]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
msLex
Member

Откуда:
Сообщений: 7724
DBCC stackdump(-1,<SPID>)

где spid - это SPID процесса рестора лога

в папке с логами скуля появятся несколько dump файлов, найдите текстовый и в нем будет что-то типа last redo lsn date
31 окт 19, 12:08    [22007007]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
msLex
Member

Откуда:
Сообщений: 7724
teCa
Ну процесс монитором вижу что сиквел что-то пишет в файлы этой БД, хотя это тоже не показатель типичного процесса восстановления.

Это как раз показатель типичного процесса redo, т.е. применения транзакций.
31 окт 19, 12:09    [22007009]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
msLex
DBCC stackdump(-1,<SPID>)

где spid - это SPID процесса рестора лога

в папке с логами скуля появятся несколько dump файлов, найдите текстовый и в нем будет что-то типа last redo lsn date


Не нашел в дампе last redo lsn date, но в целом процесс понятен, 8996 секунд накатывался этот лог, смотрел ресурс монитором и предложенным запросом.

Спасибо за новые знания!
31 окт 19, 12:49    [22007054]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
И еще вопрос, после восстановления бэкапа на базу, можно как то узнать, какой lsn тран лога продолжает цепочку?
31 окт 19, 12:53    [22007063]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
teCa
И еще вопрос, после восстановления бэкапа на базу, можно как то узнать, какой lsn тран лога продолжает цепочку?

сделайте restore headeronly последнему восстановленному бэкапу лога.
там будет LastLSN.
с него и начнется следующий бэкап лога в этой цепочке
31 окт 19, 14:03    [22007150]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Yasha123,

У меня логи транзакций бэкапятся ежеминутно допустим. Я делаю полный бэкап исходника, восстанавливаю его на сервере получателе. Те у меня есть восстановленная БД из полного бэкапа и множество бэкапов логов транзакций которые создавались на источнике. Сейчас мне приходится примерно по времени угадывать, когда полный бэкап начался делать, и я перебираю эти логи пока не найду нужный. Думаю, что есть более "цивилизованный" способ сразу выяснить какой лог транзакций следующий в цепочке после восстановления из полного бэкапа. Сиквел ведь как то понимает, тот это лог или не тот.
31 окт 19, 14:14    [22007164]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
teCa,

очень много слов :)
вас чем мой ответ не устроил,
вам надо после восстановления полного бэкапа найти нужный лог?
у полного бэкапа в Header-e тоже есть FirstLSN, LastLSN.
нужный вам LSN находится между этими двумя.

если вы даты хотите получить, в том же Header-е есть BackupStartDate/ BackupFinishDate
31 окт 19, 14:43    [22007213]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Yasha123,

Спасибо, просто вы написали, что у бэкапа лога это посмотреть нужно)
31 окт 19, 14:57    [22007245]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
teCa
Yasha123,

Спасибо, просто вы написали, что у бэкапа лога это посмотреть нужно)

у бэкапа лога уж точно надо смотреть, иначе как понять, с какого LSN он начинается.
а ваш вопрос, в том виде как он задан, намекает именно восстановление бэкапа лога,
а не полного:
"после восстановления бэкапа на базу, можно как то узнать, какой lsn тран лога продолжает цепочку?"
точный LSN находится как раз в бэкапе лога,
каждый последующий бэкап лога начинается ровно с того LSN, который указан в LastLSN предыдущего бэкапа лога.

а в полном бэкапе о "LSN, продолжающем цепочку" нет ни слова.
полный бэкап вообще ничего не знает о бэкапах лога
31 окт 19, 15:14    [22007266]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
teCa
Спасибо, просто вы написали, что у бэкапа лога это посмотреть нужно)
В бакапе лога тоже.

Вы же цепочку восстанавливаете. Один полный бакап, потом стотыщ бакапов лога.
И в каждом бакапе есть FirstLSN, LastLSN

teCa
Сиквел ведь как то понимает, тот это лог или не тот.
Сиквел это записывает в sys.database_files
См. поля redo_start_lsn, redo_target_lsn, redo_start_fork_guid, redo_target_fork_guid

Проще посмотреть в бакапе (полном, а потом в логах), но можно и в самой базе.
31 окт 19, 15:16    [22007268]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
alexeyvg,

Вижу, что sys.database_files не работает когда база в состоянии Restoring
31 окт 19, 16:28    [22007348]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Подскажите еще на счет RESTORE HEADERONLY

Собственно я просматриваю RESTORE HEADERONLY того бэкапа, из которого восстанавливал БД.
В поле LastLSN я вижу значение, дальше, информация о каждом новом бэкапе логов у меня сохраняется в табличку, в том числе и lsn бэкапа. Но полученный lastlsn FULL бэкапа отсутствует в этой таблице.
31 окт 19, 16:42    [22007360]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
teCa
Подскажите еще на счет RESTORE HEADERONLY

Собственно я просматриваю RESTORE HEADERONLY того бэкапа, из которого восстанавливал БД.
В поле LastLSN я вижу значение, дальше, информация о каждом новом бэкапе логов у меня сохраняется в табличку, в том числе и lsn бэкапа. Но полученный lastlsn FULL бэкапа отсутствует в этой таблице.

еще бы.
вам же уже написали, полному бэкапу нет никакого дела до бэкапов лога.
и его LastLSN никаким боком не совпадет с FirstLSN/LastLSN бэкапа лога.
FirstLSN/LastLSN это еги личные LSN,
минимум и максимум LSN записей лога, которые вошли в данный полный бэкап.
---
еще раз: бэкапы лога связаны друг с другом непосредственно:
где остановился предыдущий, там (с того LastLSN) начнется следующий.

полный бэкап делается вообще в любой модели и ни о каких бэкапах лога понятия не имеет.
его FirstLSN/LastLSN никак с бэкапами логов не связаны.

зато не каждый бэкап лога можно накатить на данный полный бэкап.
в частности, нельзя накатить бэкап лога, где FirstLSN больше LastLSN полного бэкапа.
31 окт 19, 17:07    [22007389]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
Yasha123,

Еще больше запутался. Вот на конкретном примере. Сейчас у меня есть БД в режиме Restoring, есть таблица где перечислены все созданные логи транзакций с их lastlsn. Как мне узнать, с какого именно бэкап лога транзакций продолжится цепочка после фулл бэкапа?
31 окт 19, 17:23    [22007405]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
msLex
Member

Откуда:
Сообщений: 7724
teCa
Yasha123,

Еще больше запутался. Вот на конкретном примере. Сейчас у меня есть БД в режиме Restoring, есть таблица где перечислены все созданные логи транзакций с их lastlsn. Как мне узнать, с какого именно бэкап лога транзакций продолжится цепочка после фулл бэкапа?


у того, где
full_backup_last_lsn between log_backup_first_lsn и log_backup_last_lsn
31 окт 19, 17:27    [22007415]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
msLex,

Получается lastlsn должен быть в таблице c информацией о бэкапах логов транзакций?
31 окт 19, 18:19    [22007486]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
msLex
Member

Откуда:
Сообщений: 7724
teCa,


log_backup_first_lsn и log_backup_last_lsn из RESTORE HEADERONLY бекапов лога

full_backup_last_lsn из RESTORE HEADERONLY уже восстановленного фул бекапа
31 окт 19, 18:27    [22007492]     Ответить | Цитировать Сообщить модератору
 Re: Опять вопросы по восстановлению transaction logs.  [new]
teCa
Member

Откуда:
Сообщений: 581
msLex,
Благодарю. Написал запрос, который берет lastlsn полного бэкапа, и по списку проверяет все созданные ранее бэкапы логов транзакций и проверяет попадает ли @LastLSNFULL в диапазон @FirstLSN и @LastLSN
31 окт 19, 19:29    [22007526]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить