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

Откуда:
Сообщений: 2
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.
9 июн 14, 12:55    [16141781]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
http://technet.microsoft.com/ru-ru/library/ms190440(v=sql.105).aspx
9 июн 14, 13:00    [16141811]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
а, пардон, не так понял
9 июн 14, 13:07    [16141858]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
777ser777
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.

модель восстановления у базы какая была?
9 июн 14, 13:10    [16141879]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
777ser777
Member

Откуда:
Сообщений: 2
msLex
777ser777
Добрый день!
Возможно ли выполнить восстановление базы имея:
1) MDF-файл на начальную дату (месячной давности);
2) LDF-файл на текущую дату.
Бэкап и шринк не делался. Если можно то какими средствами?
Спасибо.

модель восстановления у базы какая была?


Full (полная) конечно!
9 июн 14, 14:31    [16142675]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.
9 июн 14, 16:50    [16144039]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
777ser777
msLex
пропущено...

модель восстановления у базы какая была?


Full (полная) конечно!


Теоретически.

Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.



Перед экспериментом желательно скопировать оба файла, дабы иметь еще одну попытку.
9 июн 14, 17:55    [16144588]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
Владислав Колосов
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.
Дык нету бакапа, в этом и прикол!
9 июн 14, 20:48    [16145145]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
msLex
Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.
База может и подцепится, а вот лог накатываться то уже точно не будет. С таким же успехом можно просто восстановить mdf файл без ldf. Результат скорее всего будет тот же.
9 июн 14, 21:39    [16145293]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
Mind
msLex
Можно попробовать просто приатачить mdf + ldf файл. Если база подцепится (я не знаю, что может помещать), весь непримененный (тот, что после последнего checkpoint-а) лог должен накатиться на базу, а с учетом того, что checkpoint LSN храниться в самой базе, то проблем возникнуть не должно.
База может и подцепится, а вот лог накатываться то уже точно не будет. С таким же успехом можно просто восстановить mdf файл без ldf. Результат скорее всего будет тот же.

по-чему такая уверенность?
по факту эта ситуация (mdf - месячной давности + "современный" ldf) ничем не отличается от ситуации когда месяц не делался чекпоинт а потом пристрелили процесс sql server-а
9 июн 14, 22:03    [16145397]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
msLex
по-чему такая уверенность?
Можно снять tail log backup, но накатить его будет не на что - полного бекапа нету. А если подцепить имеющийся mdf месячной давности и сделать полный бекап, то LSN'ы в нем будут уже совершенно другие.
9 июн 14, 23:42    [16145829]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
invm
msLex
по-чему такая уверенность?
Можно снять tail log backup, но накатить его будет не на что - полного бекапа нету. А если подцепить имеющийся mdf месячной давности и сделать полный бекап, то LSN'ы в нем будут уже совершенно другие.


либо я вас не понимаю, либо вы меня.

предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.

мы производим некое количество изменений, коммитем их которые, они попадают в лог, но из кеша на диск в mdf не сбрасываются, и того у нас получается mdf на момент t1 и ldf на момент времени t2.

в этот момент мы "жестко" ребутаем сервис, sql server по логу повторно накатит все изменения в mdf и принудительно сделает checkpoint

ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
9 июн 14, 23:58    [16145890]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
msLex
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
По сути всё правильно, но сиквел не умеет востанавливать данные на дату ранее, чем сделан бакап.

mdf файл да, старый, но бакап то можно сделать только сейчас, вот и восстановить можно будет на момент "сейчас".

То есть у сиквела маловато возможностей, не предусмотрены операции, которые теоретически можно сделать и даже совсем несложно технически.

Разве что попробовать присоединить файл с включённым аттрибутом read-only, может сиквел не поменяет ему всякие LSN-ы, и сделать бакап...

А вообще это лишний раз напоминает о необходимости делать бакапы. Надеюсь, что 777ser777 из тех специалистов, которые потеряли данные из за отсутствия бакапа единственный раз в жизни, как и положено.
10 июн 14, 01:29    [16146175]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
o-o
Guest
нет, не прокатит.
проверяю так:

create database db8;
go

alter database db8
set recovery full;
go

backup database db8
to disk = 'Z:\Anna\_backups\hp\db8\db8_full.bak';
go

alter database db8
set offline;
go

/* copy .mdf to Z:\Anna\_backups\hp\db8, rename .ldf 

test it on another server:
USE [master]
GO
CREATE DATABASE [db8] ON 
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8.mdf' )
 FOR ATTACH
GO

------------
File activation failure. The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db8_log.LDF" may be incorrect.
New log file 'Z:\Anna\_backups\hp\db8\db8_log.LDF' was created.

drop database db8;
go

re-copy .mdf to Z:\Anna\_backups\hp\db8, rename .ldf
*/

alter database db8
set online;
go

use db8;
go

with cte as(
select number as n
from master..spt_values
where type = 'p' and number between 0 and 999)

select c1.n * 1000 + c2.n + 1  as n
into dbo.num1
from cte c1 cross join cte c2;
go

alter database db8
set offline;
go


/* copy .ldf to Z:\Anna\_backups\hp\db8*/

/* go to another server */
USE [master]
GO
CREATE DATABASE [db8] ON 
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8.mdf' ),
( FILENAME = N'Z:\Anna\_backups\hp\db8\db8_log.LDF' )
 FOR ATTACH
GO


-----------------------------------
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 3328 KB but actual size is 2304 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:122:54). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


не могу сейчас объяснить, на какой момент он требует .mdf,
но файл не обрезан.
опыт был проведен 2 раза, файл копируется нормально.
для проверки в третий раз просто пробую сразу же приаттачить этот .mdf без .ldf,
и все с ним ok.

к концу выполнения заполнения таблицы чисел .mdf становится 18.688 Кб,
сервер же требует .mdf размером в 3328 KB
10 июн 14, 01:29    [16146176]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
o-o
Guest
стукнуло мне, что он хочет файл .mdf на момент после его первого автоприращения (былo 1 Мб в первом опыте),
повторяю эксперимент, задаю нач. размер для .mdf 5 Мб, автоприращение 2 Мб.
проделываю все вышеописанное, вылазит ошибка:

Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 6144 KB but actual size is 5120 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:123:186). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


ну не знаю я, почему он на мегабайт больше ждет, нету идей, завтра еще подумаю,
а может кто-то знает и поделится соображениями.

судя по ошибке, он все же начинает накатывать,
что такое log record ID, что ему соответствует в выводе fn_dblog?
а то можно посмотреть в исходной базе в fn_dblog, что там за операция, на к-ой спотыкается
10 июн 14, 02:04    [16146218]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
o-o
стукнуло мне, что он хочет файл .mdf на момент после его первого автоприращения (былo 1 Мб в первом опыте),
повторяю эксперимент, задаю нач. размер для .mdf 5 Мб, автоприращение 2 Мб.
проделываю все вышеописанное, вылазит ошибка:

Msg 1813, Level 16, State 2, Line 1
Could not open new database 'db8'. CREATE DATABASE is aborted.
Msg 5125, Level 24, State 1, Line 1
File 'Z:\Anna\_backups\hp\db8\db8.mdf' appears to have been truncated by the operating system. Expected size is 6144 KB but actual size is 5120 KB.
Msg 3313, Level 21, State 2, Line 1
During redoing of a logged operation in database 'db8', an error occurred at log record ID (30:123:186). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.


ну не знаю я, почему он на мегабайт больше ждет, нету идей, завтра еще подумаю,
а может кто-то знает и поделится соображениями.

судя по ошибке, он все же начинает накатывать,
что такое log record ID, что ему соответствует в выводе fn_dblog?
а то можно посмотреть в исходной базе в fn_dblog, что там за операция, на к-ой спотыкается

Log rec id очень похож на обычный lsn (hex или dec непонятно), а каким образом отцеплялся mdf? Останавливался сервер или база детачилась?
10 июн 14, 08:47    [16146516]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
msLex
предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.
...
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
Очень даже отличается - чекпоинты были. Так что если гипотетически предположить, что удалось присоединить БД из старого mdf и нового ldf, накат лога пойдет с момента последнего чекпоинта.
10 июн 14, 09:30    [16146706]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
в порядке эксперимента можно попробовать всякие разные сторонние тулзы
сам, правда, никогда не пользовался
10 июн 14, 09:34    [16146721]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
invm
msLex
предположим у нас есть база на момент времени t1, mdf и ldf "согласованны", "грязных" страниц нет, checkpoint lsn = последнему lsn в логе.
...
ситуация автора по сути ничем не отличается, только между t1 и t2 прошел месяц.
Очень даже отличается - чекпоинты были. Так что если гипотетически предположить, что удалось присоединить БД из старого mdf и нового ldf, накат лога пойдет с момента последнего чекпоинта.

Lsn последнего чекпоинта храниться в странице 1:9 (boot page) самой базы. В mdf месячной давности и LSN чекпоинта месячной давности. Т.е. по идее, именно с этого lsn и должно начаться применения лога
Сейчас попробую провести эксперемент.
10 июн 14, 09:59    [16146840]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
msLex
Member

Откуда:
Сообщений: 7724
Проверил.

1. Создал базу с полной моделью восстановления.
2. Сделал полный бекап (до этого база по факту в simple )
3. Сделал detach.
4. Скопировал mdf
5. Сделал attach
6. Внес изменения в данные.
7. Сделал checkpoint
8. Сделал detach.
9. Подменил mdf на скопированную в 4-том пункте
10. Сделал attach

база подцепилась, но изменений пункта 6 нет, в checkpoint lsn в странице 1:9 храниться lsn завершения последнего checkpoint-а из лога.

видимо, либо в логе также где-то храниться информация о последнем checkpoint lsn, либо sql сканирует лог находит lsn последнего checkpoint-а.
можно "поизвращаться" дальше, найти место хранения checkpoint lsn в логе и в базе и подменить.
10 июн 14, 11:27    [16147486]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Владислав Колосов
Восстанавливаете полный бэкап с norecovery, восстанавливаете бэкап журнала с recovery. Ваш LDF должен принадлежать той забэкапленной базе, разумеется, и иметь резервную копию.


здравствуйте. у меня проблема аналогичная что и у топикстартера. а именно шифровальщик покушал MDF а последний актуальный бекап 3 недельной давности. но есть нетронутый шифровальщиком LDF

сервер мускула не поднимается, вероятно пожрано что то из системного
не могли бы вы подробнее описать вами вышеуказанный порядок действий на новом экземпляре сервера?

---Восстанавливаете полный бэкап с norecovery--- это мне относительно понятно
---восстанавливаете бэкап журнала с recovery--- я так понимаю, речь идет об отдельном бекапе LDF, если да как его получить из оригинального LDF?
18 мар 20, 11:30    [22101189]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Владислав Колосов
Member

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

у Вас должна быть резервная копия журнала при условии, что база имеет полную модель восстановления.
18 мар 20, 12:18    [22101253]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
База данных в какой модели восстановления?
18 мар 20, 12:25    [22101262]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Гавриленко Сергей Алексеевич,

полная, файл журнала около 90гб, при том что сама база +-2гб. Шринк не производился ни разу.
19 мар 20, 16:03    [22102305]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Если базу не отсоединили от сервера, выполните Log tail backup. Это и будет ваш бэкап лога.
19 мар 20, 16:28    [22102337]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Гавриленко Сергей Алексеевич,
в этом и проблема- сервер не поднимается, видимо потому что master.mdf тоже зашифрован. служба запускается и отключается сразу
19 мар 20, 16:45    [22102368]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Бэкапа базы master тоже нет?
19 мар 20, 18:02    [22102496]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
sirsyslik
в этом и проблема- сервер не поднимается
Восстанавливайте на другом
+ Пример как подменить файл ЖТ, сделать log tail бекап и восстановить БД
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_full.bak', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.trn', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.ldfcopy', no_output;
go

-- Подготавливаем ситуацию "БД нет. Есть только файл ЖТ и полный бекап. Модель восстановления полная"
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

alter database Test001 set recovery full;
backup database Test001 to disk = 'C:\Windows\TEMP\Test001_full.bak' with init;
go

use Test001;
go

create table dbo.t (id int);
insert into dbo.t values (1), (2), (3);
select * from dbo.t;
go

use master;
alter database Test001 set offline;
drop database Test001;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_data.mdf';
exec xp_cmdshell 'ren C:\Windows\TEMP\Test001_log.ldf Test001_log.ldfcopy';
-- Итого имеем полный бекап Test001_full.bak и файл журнала Test001_log.ldfcopy
go

-- Создаем одноименную новую БД
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

-- Переводим ее в оффлайн и подменяем файл ЖТ на сохраненный исходный
alter database Test001 set offline;
exec xp_cmdshell 'copy /b /y C:\Windows\TEMP\Test001_log.ldfcopy C:\Windows\TEMP\Test001_log.ldf';
go

-- Попытка перевести БД в онлайн, котороя закончится неудачей
alter database Test001 set online;
go

-- Делаем tail-бекап ЖТ, БД будет переведена в состояние restoring
backup log Test001 to disk = 'C:\Windows\TEMP\Test001_Log.trn' with init, norecovery, no_truncate;
go

-- Восстанавливаем БД
restore database Test001 from disk = 'C:\Windows\TEMP\Test001_full.bak' with replace, norecovery;
restore log Test001 from disk = 'C:\Windows\TEMP\Test001_Log.trn' with recovery;
go

-- Проверяем
use Test001;
select * from dbo.t;
go

use master;
alter database Test001 set single_user with rollback immediate;
drop database Test001;
go
19 мар 20, 18:49    [22102515]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
invm
sirsyslik
в этом и проблема- сервер не поднимается
Восстанавливайте на другом
+ Пример как подменить файл ЖТ, сделать log tail бекап и восстановить БД
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_full.bak', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.trn', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.ldfcopy', no_output;
go

-- Подготавливаем ситуацию "БД нет. Есть только файл ЖТ и полный бекап. Модель восстановления полная"
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

alter database Test001 set recovery full;
backup database Test001 to disk = 'C:\Windows\TEMP\Test001_full.bak' with init;
go

use Test001;
go

create table dbo.t (id int);
insert into dbo.t values (1), (2), (3);
select * from dbo.t;
go

use master;
alter database Test001 set offline;
drop database Test001;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_data.mdf';
exec xp_cmdshell 'ren C:\Windows\TEMP\Test001_log.ldf Test001_log.ldfcopy';
-- Итого имеем полный бекап Test001_full.bak и файл журнала Test001_log.ldfcopy
go

-- Создаем одноименную новую БД
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

-- Переводим ее в оффлайн и подменяем файл ЖТ на сохраненный исходный
alter database Test001 set offline;
exec xp_cmdshell 'copy /b /y C:\Windows\TEMP\Test001_log.ldfcopy C:\Windows\TEMP\Test001_log.ldf';
go

-- Попытка перевести БД в онлайн, котороя закончится неудачей
alter database Test001 set online;
go

-- Делаем tail-бекап ЖТ, БД будет переведена в состояние restoring
backup log Test001 to disk = 'C:\Windows\TEMP\Test001_Log.trn' with init, norecovery, no_truncate;
go

-- Восстанавливаем БД
restore database Test001 from disk = 'C:\Windows\TEMP\Test001_full.bak' with replace, norecovery;
restore log Test001 from disk = 'C:\Windows\TEMP\Test001_Log.trn' with recovery;
go

-- Проверяем
use Test001;
select * from dbo.t;
go

use master;
alter database Test001 set single_user with rollback immediate;
drop database Test001;
go



ой спасибо, буду теперь пытаться понять как этим пользоваться)
xp_cmdshell как минимум надо включить где то в настройках скуля, но думаю это простенько гуглится)
19 мар 20, 20:07    [22102565]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
sirsyslik
xp_cmdshell как минимум надо включить где то в настройках скуля, но думаю это простенько гуглится)
xp_cmdshell тут просто для демонстрации действий прямо в скрипте.
Вы можете эти действия сделать мышкой в проводнике.
19 мар 20, 22:55    [22102614]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
invm
sirsyslik
в этом и проблема- сервер не поднимается
Восстанавливайте на другом
+ Пример как подменить файл ЖТ, сделать log tail бекап и восстановить БД
use master;
set ansi_nulls, quoted_identifier, xact_abort on;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_full.bak', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.trn', no_output;
exec xp_cmdshell 'del C:\Windows\TEMP\Test001_log.ldfcopy', no_output;
go

-- Подготавливаем ситуацию "БД нет. Есть только файл ЖТ и полный бекап. Модель восстановления полная"
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

alter database Test001 set recovery full;
backup database Test001 to disk = 'C:\Windows\TEMP\Test001_full.bak' with init;
go

use Test001;
go

create table dbo.t (id int);
insert into dbo.t values (1), (2), (3);
select * from dbo.t;
go

use master;
alter database Test001 set offline;
drop database Test001;
go

exec xp_cmdshell 'del C:\Windows\TEMP\Test001_data.mdf';
exec xp_cmdshell 'ren C:\Windows\TEMP\Test001_log.ldf Test001_log.ldfcopy';
-- Итого имеем полный бекап Test001_full.bak и файл журнала Test001_log.ldfcopy
go

-- Создаем одноименную новую БД
create database Test001
on primary (name = 'Test001_data', filename = 'C:\Windows\TEMP\Test001_data.mdf')
log on (name = 'Test001_log', filename = 'C:\Windows\TEMP\Test001_log.ldf');
go

-- Переводим ее в оффлайн и подменяем файл ЖТ на сохраненный исходный
alter database Test001 set offline;
exec xp_cmdshell 'copy /b /y C:\Windows\TEMP\Test001_log.ldfcopy C:\Windows\TEMP\Test001_log.ldf';
go

-- Попытка перевести БД в онлайн, котороя закончится неудачей
alter database Test001 set online;
go

-- Делаем tail-бекап ЖТ, БД будет переведена в состояние restoring
backup log Test001 to disk = 'C:\Windows\TEMP\Test001_Log.trn' with init, norecovery, no_truncate;
go

-- Восстанавливаем БД
restore database Test001 from disk = 'C:\Windows\TEMP\Test001_full.bak' with replace, norecovery;
restore log Test001 from disk = 'C:\Windows\TEMP\Test001_Log.trn' with recovery;
go

-- Проверяем
use Test001;
select * from dbo.t;
go

use master;
alter database Test001 set single_user with rollback immediate;
drop database Test001;
go



ВО ПЕРВЫХ СПАСИБО!

одна база из 3х по этому рецепту полностью вылечилась


а вот вторая база на последнем этапе (restore log Test001 from disk = 'C:\Windows\TEMP\Test001_Log.trn' with recovery;) ругается.

Сообщение 4305, уровень 16, состояние 1, строка 2
Журнал в этом резервном наборе данных начинается с номера LSN 2095000002781600001, который еще не может применяться к базе данных. Может быть восстановлена более ранняя резервная копия журналов, включающая номер LSN 2014000004067400001.
Сообщение 3013, уровень 16, состояние 1, строка 2
RESTORE LOG прервано с ошибкой.


подскажите, с чем оно может быть связано, я так понимаю что в сформированном из LDF файла TRN файле отсутствует некоторый кусок?
20 мар 20, 14:30    [22102970]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
sirsyslik
подскажите, с чем оно может быть связано
C тем, что после полного бекапа делались резервные копии журнала.
20 мар 20, 14:51    [22102987]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
invm
sirsyslik
подскажите, с чем оно может быть связано
C тем, что после полного бекапа делались резервные копии журнала.

средствами сервера? очень странно, никто такого не настраивал... да и журнал по объему - 17ГБ
20 мар 20, 15:01    [22102997]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
invm
sirsyslik
подскажите, с чем оно может быть связано
C тем, что после полного бекапа делались резервные копии журнала.
Добавлю для sirsyslik-ка - нужно найти эти резервные копии, потом восстанавить полный бакап с norecovery, потом по очереди найденные бакапы журналов лога тоже с norecovery, и потом последний бакап лога (сделанный, как в примере вышке), уже с recovery
20 мар 20, 15:02    [22102998]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
sirsyslik
invm
пропущено...
C тем, что после полного бекапа делались резервные копии журнала.

средствами сервера? очень странно, никто такого не настраивал... да и журнал по объему - 17ГБ
Любыми средствами, может, у вас работала какая то система бакапирования. Может, кто то лог "обрезал".
20 мар 20, 15:04    [22103001]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
alexeyvg
sirsyslik
пропущено...

средствами сервера? очень странно, никто такого не настраивал... да и журнал по объему - 17ГБ
Любыми средствами, может, у вас работала какая то система бакапирования. Может, кто то лог "обрезал".


обрезки исключены, никто этим не занимался. системы бекапирования на были. единственное грешу на саму 1с:БП3.0. не могла ли она как то сама инициализировать бекап?
20 мар 20, 15:07    [22103003]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
sirsyslik,

Чудес не бывает.
Если жива msdb исходного сервера или есть ее бекап, то восстановитепо другим именем и посмотрите что там в истории резервного копирования - https://datajoe.blog/2019/06/05/view-sql-server-backup-history/
20 мар 20, 15:15    [22103011]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

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

от старой msdb только лог, даже полного бекапа нет
20 мар 20, 16:23    [22103052]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
Усекание лога могло произойти в том числе и при переводе базы в простую модель восстановления, а потом обратно. Этого в msdb не будет.
20 мар 20, 16:45    [22103071]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление базы данных из ldf-файла  [new]
sirsyslik
Member

Откуда:
Сообщений: 9
Гавриленко Сергей Алексеевич
Усекание лога могло произойти в том числе и при переводе базы в простую модель восстановления, а потом обратно. Этого в msdb не будет.


вот такого совсем точно не было
20 мар 20, 16:57    [22103082]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить