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

Откуда:
Сообщений: 14
Здравствуйте, уважаемый, All.
Подскажите, пожалуйста, последовательность операций записи данных из базы во время самой операции BACKUP
Что я имею ввиду?
Ниже приведены последовательные во времени записи данных в тестовую табличку:

1. Перед самой операцией BACKUP время=2013-10-17 14:29:03.027
2. Запускается подный BACKUP базы
3. Параллельно в тестовую табличку в этой базе пишутся данные
RowId       Note                             
----------- ---------------------------------
1           UPDATE Oct 17 2013  2:29:04:150PM
2           UPDATE Oct 17 2013  2:29:04:783PM
3           UPDATE Oct 17 2013  2:29:05:400PM
4           UPDATE Oct 17 2013  2:29:06:200PM
5           UPDATE Oct 17 2013  2:29:06:737PM
6           UPDATE Oct 17 2013  2:29:07:250PM
7           UPDATE Oct 17 2013  2:29:07:777PM
8           UPDATE Oct 17 2013  2:29:08:293PM
9           UPDATE Oct 17 2013  2:29:08:807PM
10          UPDATE Oct 17 2013  2:29:09:320PM


4. Процесс BACKUP закончился 2013-10-17 14:29:06.327 ( Время модификации *.BAK файла 14:29:06)

После восстановления, сделанного BACKUP имеем:
RowId       Note                             
----------- ---------------------------------
1           UPDATE Oct 17 2013  2:29:04:150PM
2           UPDATE Oct 17 2013  2:29:04:783PM
3           UPDATE Oct 17 2013  2:29:05:400PM
4           4                                
5           5                                
6           6                                
7           7                                
8           8                                
9           9                                
10          10                               


Спрашивается, где можно взять точное время, до которого данные сохранены в BACKUP?
17 окт 13, 15:00    [14985822]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
Спрашивается, где можно взять точное время, до которого данные сохранены в BACKUP?

В бэкап попадают все _завершенные_ транзакции. А не по времени.
17 окт 13, 15:01    [14985832]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Замечачельно.
По, умолчанию, если не указано "BEGIN TRAN" каждая отдельная операция модификации данных в базе
является завершенной транзакцией.
В приведенном примере данные писались в тестовую табличку при помощи
оператора UPDATE (и все)

На всякий случай укажу версию SQL: Microsoft SQL Server 2012 - 11.0.2383.0 (X64)
17 окт 13, 15:08    [14985881]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
В приведенном примере данные писались в тестовую табличку при помощи
оператора UPDATE (и все)

А откуда вы взяли время завершения транзакции для каждой из команд ?
17 окт 13, 15:10    [14985898]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BOL->Full database backups represent the database at the time the backup finished.

автор
Спрашивается, где можно взять точное время, до которого данные сохранены в BACKUP?


BOL->RESTORE HEADERONLY

поля BackupStartDate, BackupFinishDate


Какую задачу пытаетесь решить?
17 окт 13, 15:19    [14985958]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Так ведь в табличку попали данные, а туда пишутся как раз _завершенные_ транзакции.
Кстати, а где можно взять это время, или с какого то момента уже пошел следующий BACKUP.
И интересно, какой полный BACKUP надо взять, чтобы восстановить базу на момент '20131017 2:29:06:000
17 окт 13, 15:19    [14985961]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
Так ведь в табличку попали данные, а туда пишутся как раз _завершенные_ транзакции.

Вопрос был не о том, как данные попали в таблицу.
А о том, откуда вы взяли точные дату/время завершения транзакции и попадании ее в журнал.
17 окт 13, 15:22    [14985991]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
IK53204
Так ведь в табличку попали данные, а туда пишутся как раз _завершенные_ транзакции.


И Oct 17 2013 2:29:04:150PM это время именно завершения транзакции? Т.е. на этот момент времени соответствующая запись в логе получила признак зафиксированной?

IK53204
Кстати, а где можно взять это время, или с какого то момента уже пошел следующий BACKUP.


msdb..backupset. Зачем это Вам.

IK53204
И интересно, какой полный BACKUP надо взять, чтобы восстановить базу на момент '20131017 2:29:06:000


Из полного бэкапа невозможно восстановить на момент времени, который находится в "середине" бэкапа.
17 окт 13, 15:24    [14986002]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Время попадания в TRAN LOG в данном случае может быть другим.
Не в этом проблема.
Опишу ситуацию другими словами.
1. Есть некий полный BACKUP
2. Время создания файла *.BAK=time1
3. BackupStartDate=time2
4. BackupFinishDate=time3
5. время завершения работы с файлом *.BAK=time4

Возникает необходимость восстановить базу на момент time5, где time2<time5<time3
Как луше в данном случае поступить?

****************************************
К слову, данные для приведенного вначале примера:
BackupStartDate=2013-10-17 14:29:03.000
BackupFinishDate=2013-10-17 14:29:06.000
Что навоит на грустные размышления, там я указал, что перед началом
BACKUP делается запрос времени, и он=2013-10-17 14:29:03.027.
Или это, действительно, такая дискретность завершенных транзакций?
17 окт 13, 15:51    [14986218]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
Как луше в данном случае поступить?

Никак.
Для восстановления на момент времени нужны бэкапы журнала транзакций.
17 окт 13, 15:52    [14986224]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
автор
Возникает необходимость восстановить базу на момент time5, где time2<time5<time3


pkarklin
Из полного бэкапа невозможно восстановить на момент времени, который находится в "середине" бэкапа.


Для восстановления на момент времени t5 необходим полный бэкап на момент времени до t5 и непрерывная цепочка бэкапов лога (содержащего момент t5) после имеющегося полного бэкапа.

Сообщение было отредактировано: 17 окт 13, 15:57
17 окт 13, 15:56    [14986252]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Да, конечно. Логи транзакций есть.
Но, для восстановления логов, сначала надо восстановить полный BACKUP.
А какой, если часть данных в одном файле, а другая в другом файле
17 окт 13, 15:57    [14986261]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
stavgreengo
Member

Откуда:
Сообщений: 710
IK53204
Да, конечно. Логи транзакций есть.
Но, для восстановления логов, сначала надо восстановить полный BACKUP.
А какой, если часть данных в одном файле, а другая в другом файле

делайте фуллбэкап и тут же бэкап лога и по окончанию его бэкапа отчитывайте ваше T5 время, ну а потом эмпирическим путём экспериментируйте с попаданием того или иного события в фулл бэкап или в бэкап лога в попытках восстановить на заданное время.
17 окт 13, 16:01    [14986294]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
Да, конечно. Логи транзакций есть.
Но, для восстановления логов, сначала надо восстановить полный BACKUP.

Надо. Вам уже вроде бы рассказали это в прошлой теме.
И в хелпе команды RESTORE есть пример восстановления на момент времени
17 окт 13, 16:06    [14986348]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Гость333
Member

Откуда:
Сообщений: 3683
IK53204
Да, конечно. Логи транзакций есть.
Но, для восстановления логов, сначала надо восстановить полный BACKUP.
А какой, если часть данных в одном файле, а другая в другом файле

Создание очередного полного бэкапа не прерывает цепочку бэкапов лога. Если я правильно понял, что именно вас беспокоит.
17 окт 13, 16:09    [14986375]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
IK53204
4. Процесс BACKUP закончился 2013-10-17 14:29:06.327 ( Время модификации *.BAK файла 14:29:06)

После восстановления, сделанного BACKUP имеем:
RowId       Note                             
----------- ---------------------------------
1           UPDATE Oct 17 2013  2:29:04:150PM
2           UPDATE Oct 17 2013  2:29:04:783PM
3           UPDATE Oct 17 2013  2:29:05:400PM
4           4                                
5           5                                
6           6                                
7           7                                
8           8                                
9           9                                
10          10                               

Спрашивается, где можно взять точное время, до которого данные сохранены в BACKUP?
По моему, спуталось время завершения бакапа и время, которое ваша программа пишет в таблицу.

1. Бакап сохраняет данные, которые были закоммичены на момент завершения (не абсолютно точно, не с точностью до одного такта процессора)

2. Когда вы выполнили команду в 2:29:05:400PM, запись попала в TLOG несколько позже. Вот её последнюю и увидел бакап, который завершился в 14:29:06.327.
А команда в 2:29:06:200PM уже попала в лог после 14:29:06.327, поэтому в бакап не попала.

Т.е. время попадания в лог не имеет отношени к времени, которое клиентское приложение записывает в таблицу, это совершенно естественно.

Так что, во первых, не получится точно понять момент последней операции по времени завершения бакапа, во вторых, не получится получить операции на точное время (имея в виду время в поле таблицы), используя логи транзакций.
17 окт 13, 16:09    [14986378]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Эмпирически - дело хорошее, но не подходит.

Думаю, что в данном случае надо сделать так:
1. Дождаться завершения полного BACKUP
2. Дождаться завершения ближайшего лога транзакций
3. восстановить базу из созданного бэкапа и накатить тран.логи, остановив в нужный момент.

To [Гость333]
Да, Вы все правильно поняли.

To [alexeyvg]
В данном случае все делалось на одном сервере, клиентские приложения сдесь не участвовали.
Работа велась с одним и тем же таймером. Скорее всего сдесь сыграла роль дискретность _завершенных_
транзакций. Это несколько иной вопрос.
17 окт 13, 16:21    [14986499]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
3. восстановить базу из созданного бэкапа и накатить тран.логи, остановив в нужный момент.

А вы уверены, что получите то, что хотите ?
По-моему, для вас и для сервера понятие "состояние базы на час Х" все таки различается
17 окт 13, 16:24    [14986524]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
Наверняка различаются.
Для меня = это точный момент X
Для сервера восстанавливаются все завершенные транзакции не подзнее X
17 окт 13, 16:27    [14986557]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
IK53204
1. Дождаться завершения полного BACKUP
2. Дождаться завершения ближайшего лога транзакций
3. восстановить базу из созданного бэкапа и накатить тран.логи, остановив в нужный момент.


Это как то противоречит Вашему же:

автор
Возникает необходимость восстановить базу на момент time5, где time2<time5<time3
17 окт 13, 16:27    [14986560]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
опа
Guest
alexeyvg
2. Когда вы выполнили команду в 2:29:05:400PM, запись попала в TLOG несколько позже.


а как же Write-Ahead Logging?
разве можно подтвердить клиенту коммит, не записавши сперва в лог?
17 окт 13, 16:28    [14986561]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Glory
Member

Откуда:
Сообщений: 104751
IK53204
Для меня = это точный момент X

Т.е. состоение базы - это точный момент времени ? Оригинально
Мне казалось, что состояние базы - это состояние данных в ее объектах
17 окт 13, 16:29    [14986574]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
IK53204
Member

Откуда:
Сообщений: 14
To [pkarklin]

нисколько не противоречит.
Ведь указанный моент T5, был во время выполнеия полного BACKUP
Я же предложил дождаться завершения этого BACKUP и завершения BACKUP логов
Правда тут есть некоторый нюанс - если есть время дождаться их завершения. :)

To [Glory]
Не следует путать определения.
Для меня - это для человека.
Для базы, как я уже сказал, несколько другое определения
17 окт 13, 16:39    [14986671]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
IK53204,

автор
Ведь указанный моент T5, был во время выполнеия полного BACKUP
Я же предложил дождаться завершения этого BACKUP и завершения BACKUP логов
Правда тут есть некоторый нюанс - если есть время дождаться их завершения. :)


В третий раз повторяю, Вам нужен предыдущий полный бэкап, который завершился до наступления момента времени Т5 и непрерывная цепочка бэкапов лога с моментом времени T5.
17 окт 13, 16:43    [14986701]     Ответить | Цитировать Сообщить модератору
 Re: Какие данные пишутся в BACKUP  [new]
Гость333
Member

Откуда:
Сообщений: 3683
опа
alexeyvg
2. Когда вы выполнили команду в 2:29:05:400PM, запись попала в TLOG несколько позже.


а как же Write-Ahead Logging?
разве можно подтвердить клиенту коммит, не записавши сперва в лог?

Именно из-за коммита и возникает некоторый лаг между временем, записанным в таблице, и временем окончания команды.

1) Начала выполняться команда. Как я понимаю, что-то вроде INSERT Таблица VALUES(GETDATE()).
2) Открылась транзакция.
3) Сервер вычислил значение GETDATE() = 2:29:05:400PM.
4) Это значение записалось в таблицу, сначала в виде грязной страницы в Buffer Cache.
5) Выполнение команды INSERT подошло к концу. Сервер обнаруживает, что надо выполнить COMMIT.
6) Головки HDD позиционируются, данные записываются, сервер получает сигнал о завершении записи.
7) Выполнение команды INSERT завершено.

То есть видите, что после вычисления GETDATE() до попадания записи в лог совершаются некоторые не совсем моментальные действия (п.6).
17 окт 13, 16:45    [14986716]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить