Имя: Пароль:
IT
 
база MS SQL 2005 висит в режиме (Restoring...) (Восстановление из копии...)
0 MaxS
 
30.09.10
15:35
Есть база для 1С 8.2 на MS SQL 2005. Настроен полный бэкап каждую ночь, бэкап лога транзакций днём каждые 2 часа.
На момент 15 часов потребовалось восстановить базу. Восстановил, Managemeng Studio ответил, что восстановлено.
А база зависла в состоянии восстановления из копии...
1 MaxS
 
30.09.10
15:37
select @@version

Microsoft SQL Server 2005 - 9.00.4262.00 (X64)   Aug 13 2009 17:06:39   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.1 (Build 7600: )
2 Лефмихалыч
 
30.09.10
15:37
а ты думал - в сказку попал?
Скуль последовательно выполняет все запросы с момента полного бэкапа до 15-ти часов
3 упс
 
30.09.10
15:37
(0) обновить список баз в ssms не пробовали?
4 упс
 
30.09.10
15:38
а вообще, restore database [yourdb] with recovery
5 MaxS
 
30.09.10
15:41
(3) это как? можно подробнее
(4) на 2000 сервере аналогичный приём запуска из консоли срабатывал.
А на более продвинутом нужно всё руками делать?  
восстановить полную копию, а потом руками каждый файл лога транзакций - порядка 5 штук.
6 Odin1C
 
30.09.10
15:43
(0) походу ждать
7 АНДР
 
30.09.10
15:44
(5) Ага :)
Или указать на какую точку времени восстанавливать.
8 упс
 
30.09.10
15:45
(5) в (3) - это мое предположение, что база в состоянии нормальном, а в списке отображается как restoring - встаньте на databases и тыркните f5.
Опишите, подробнее, что вы делали. Мож просто забыли при накате последней копии установить галку "recovery", вот оно и ждет, что вы еще что=-нибудь накатывать будете
9 MaxS
 
30.09.10
15:51
(6) 4 часа прошло, база со всеми логами восстановилась минут за 10.
Эта же база, но полный бэкап без логов транзакций восстанавливается и переходит в нормальное состояние.

(8) Пробовал с разных серверов через разные консоли заходить - через английскую и через русскую, ответы однозначные как в subj

use skip
отвечает так:
Database 'skip' cannot be opened. It is in the middle of a restore.
10 упс
 
30.09.10
15:52
(9) вы все резервные копии журналов транзакций накатили?
11 Лефмихалыч
 
30.09.10
15:55
Кстати, а нахрена "бэкап лога транзакций днём каждые 2 часа"?
12 упс
 
30.09.10
15:57
(9) SELECT ost.session_id
    , DB_NAME(ISNULL(s.dbid,1)) AS dbname
    , er.command
    , er.percent_complete
    , er.status
    , osth.os_thread_id
    , ost.pending_io_count
    , ost.scheduler_id
    , osth.creation_time
    , ec.last_read
    , ec.last_write
    , s.text
    , owt.exec_context_id
    , owt.wait_duration_ms
    , owt.wait_type
FROM   master.sys.dm_os_tasks AS ost
JOIN   master.sys.dm_os_threads AS osth ON ost.worker_address = osth.worker_address
AND    ost.pending_io_count > 0 AND ost.session_id IS NOT NULL
JOIN   master.sys.dm_exec_connections AS ec ON ost.session_id = ec.session_id
CROSS  APPLY master.sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS s
JOIN   master.sys.dm_os_waiting_tasks AS owt ON ost.session_id = owt.session_id
AND    owt.wait_duration_ms > 0
JOIN   master.sys.dm_exec_requests AS er ON ost.session_id = er.session_id
AND    er.percent_complete > 0
ORDER BY ost.session_id
GO

Что показывает?
13 MaxS
 
30.09.10
15:57
(2) (11) а как тогда обеспечить оптимальное время восстановления при аварии? нужно было делать разностный бэкап каждые 2 часа?
А лог иначе растёт если не бэкапить.
Activiti Monitor пишет что с этой базой сейчас никто не работает
14 Megas
 
30.09.10
16:03
(11) Да кстати... я вот тоже думаю, у меня тут упала база... а бекап только ночной, кое что нужное потерялось.
Бекап лога делать не хочтеся, наверное то что очень нужно буду писать в MySQL в процессе дня.
15 MaxS
 
30.09.10
16:03
(10) указал момент времени и выбрал всё из предложенного списка - полный бэкап и все логи...

(12) 0 строк, с десяток колонок.
16 упс
 
30.09.10
16:04
(15) restore database [your] with recovery
оно (gui), похоже, само базу в это состояние не перевело. Юзайте православные скрипты.
17 MaxS
 
30.09.10
16:11
(16) ну так в том и цель топика.
Меня бы устроил такой порядок - восстановил из gui потом дополнительно запустил бы скрипт, чтобы вывести базу из ступора...
18 упс
 
30.09.10
16:15
(17) ну так запустите... я че-т не понимаю что вас останавливает.. попробуйте посмотреть на скрипт, генерируемый gui - в окне восстановления сверху нажмите script-> to new window (или как-то так). И посмотрите что там в самой последней команде restore - with recovery или with norecovery..
19 MaxS
 
30.09.10
16:23
(18) почему gui не работает? Зачем он тогда нужен?
Допустим потрачу время, найду способ восстановления с помощью скриптов.
Через какой-то время забуду или в отпуск уеду, другой человек так же должен мучатся?
в gui в раздере параметры в группе окна Состояние восстановления по умолчанию выбран флаг restore with recovery

Попробую пока скриптом и отпишусь. Но мне не нравится такой способ.

(11) можно в 2-х словах сказать как правильно обеспечить возможность восстановления базы с максимальной потерей времени 2 часа?
20 MaxS
 
30.09.10
16:38
(18) спасибо  виден конец... ))
Как последнюю строку записать? Так?
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009301500.trn' WITH  FILE = 1,  RECOVERY


RESTORE DATABASE [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009300425.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009300700.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009300900.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009301100.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009301300.trn' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO
RESTORE LOG [МояБаза] FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009301500.trn' WITH  FILE = 1,  NOUNLOAD,  STATS = 10,  STOPAT = N'2010-09-30T15:24:36'
GO
21 Defender aka LINN
 
30.09.10
16:50
Только что проверил - база висит в Restoring после восстановления полного бэкапа с "RESTORE WITH NORECOVERY", она, собссно, ждет журналов транзакций.
З.Ы. А сколько база весит-то, что бэкап журнала каждые 2 часа делается?
22 MaxS
 
30.09.10
17:01
(21) 8Гб SQL база, 10Гб лог
через день сжатие базы данных

+(20) первая и последние строки, соответственно так:
WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10
WITH  FILE = 1,  RECOVERY,  NOUNLOAD,  STATS = 10

База восстановилась, подключу её обратно к 1С-ке, проверю.

А как gui заставить не на момент времени восстанавливать, а... чтобы как в этом ручном скрипте? Неужели всегда руками подправлять?
23 Defender aka LINN
 
30.09.10
17:04
(22) лог 10Гб при бэкапе каждые 2 часа? О_о
24 упс
 
30.09.10
17:15
(20) все ясно, gui нормально отработал. Смотрите:
В последней команде стоит STOPAT = N'2010-09-30T15:24:36'
И там же: FROM  DISK = N'F:\BackUp_sql\МояБаза_backup_201009301500.trn', т.е. время создания бэкапа: 201009301500. Т.е. вы пытаетесь восстановиться на несуществующую в ваших бэкапах точку времени. SQL Server понимает, что такого времени нет и оставляет базу данных в состоянии restoring, чтобы вы могли накатить следующие бэкапы, содержащие в себе это время.
25 MaxS
 
30.09.10
19:20
(24) а если это последний бэкап, как сказать об этом? смотреть время последнего лога и устанавливать это время? Или дату начала или дату окончания(Start date Finish Date)?
26 MaxS
 
30.09.10
19:24
Перед тем как делать восстановление из бэкапа, сделал полный бэкап, поэтому пришлось в gui вводить время чуть больше чем последний лог транзакций и меньше чем последний полный бэкап.
27 упс
 
30.09.10
19:45
(26) MaxS почитайте в BOL про цепочку восстановления. Вы всегда начинаете восстановление с полного бэкапа, а затем, последовательно, "накатываете" резервные копии журналов транзакций. В 2005-м sql server'e полный бэкап не прерывает цепочку журналов (т.е. после снятия последнего полного бэкапа надо было сделать еще одну резервную копию журнала транзакций и использовать ее в своей, "использованной" цепочке) и не поддерживает восстановление на момент времени. Из полного бэкапа вы можете восстановиться только на момент создания бэкапа.
Т.е., чтобы вам восстановиться на указанный вами момент времени надо снять еще одну копию журнала транзакций (после полной резервной копии) и проделать все тоже самое, что вы уже делали, но в качестве последней копии указать последнюю копию журнала транзакций. Фух.. надеюсь, понятно :)
28 dk
 
30.09.10
19:52
сколько делается полный бэкап? может есть смысл делать полные копии вместо бэкапа лога?
---
хотя к текущей ситуации это отношения не имеет
29 упс
 
30.09.10
20:11
(28) только резервное копирование журнала транзакций дает вам возможность восстановиться на ЛЮБОЙ момент времени, начиная от времени создания первой резервной копии журнала транзакций и заканчивая временем создания последней копии..
Вот, нашел-таки ссылку http://sp-who.livejournal.com/2332.html
30 dk
 
30.09.10
20:17
ну и нафига оно надоть?
симпл работает шустрее, чем фулл
31 упс
 
30.09.10
20:18
(30) Да неужели? В чем это проявляется?
32 dk
 
30.09.10
20:20
доказывать и спорить нет настроения
33 MaxS
 
30.09.10
20:20
(27) понятно, нужно будет потренироваться пока база не перешла на полную нагрузку ;) Можно было поступить так. сделать бэкап лога транзакций, потом полный бэкап, а потом восстановить на нужное время до момента возникновения проблем.

Но попробовал глянуть на скрипт для другой базы. Логов там до конца дня, я задал момент времени 13 часов, вот последняя строка:

_backup_201009301400.trn' WITH  FILE = 1,  NOUNLOAD,  STATS = 10,  STOPAT = N'2010-09-30T13:16:19'

RECOVERY там нет

(28) не проверял время, проверил объем.  полный бэкап порядка 4Гб, все логи за весь день порядка 600Мб в сумме. А диск для бэкапов не резиновый ))
34 упс
 
30.09.10
20:22
(32) слив защитан
(33) RECOVERY можно не указывать, оно по-умолчанию. Восстановилось нормально?
35 dk
 
30.09.10
20:23
(33) 20 гб база бэкапится в онлайн режиме 51 сек
потом 40 минут сжимается до 1,5 гб
но я не навязываю свою точку зрения
36 MaxS
 
30.09.10
20:31
(34) не пробовал ещё ))
(29) спасибо за ссылку. давно подобное читал, но потерял ссылки. во времена 2000 серверов даже держал в голове ;)

(35) самым важным будет время восстановления после сбоя. В течение дня  все сервера загружены делом, сжимать и разжимать нужно время и ресурсы.
37 Megas
 
30.09.10
20:37
(35) Распаковывается база примерно в 20 раз быстрее чем сжимается... (хотя зависит от сервера)
38 Megas
 
30.09.10
20:39
(37) + На восстоновление после сбоя , больше всего времени ушло на загрузку бекаппа... на тупом серваке 3 часа 30минут... против 30 минут на нормальном серваке... база 80 гб
39 dk
 
30.09.10
20:48
(37) а чего ты мне-то объясняешь, я в курсе )
40 Admin_Net_1C
 
01.10.10
11:01
закладка