Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по восстановлению БД в MSSQL. / 20 сообщений из 20, страница 1 из 1
11.04.2018, 10:41
    #39628285
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Дрюкаю теорию дампами, наткнулся на вопрос. В общем есть БД с несколькими файловыми группами и файлами, один файл испорчен, какое восстановление нужно сделать
- из полного бэкапа
- еще чота
- из бэкапа файла

И правильный ответ 3. Ок. Хочу воспроизвести это на практике - и чота не получается. Подскажите что не так делаю:
создаем БД и бэкапы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE DATABASE [sales]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'sales', FILENAME = N'D:\MSSQL\Data\sales.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB ), 
 FILEGROUP [archives] 
( NAME = N'SalesArch_1', FILENAME = N'D:\MSSQL\Data\SalesArch_1.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ),
( NAME = N'SalesArch_2', FILENAME = N'D:\MSSQL\Data\SalesArch_2.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ), 
 FILEGROUP [xactions] 
( NAME = N'sales_1', FILENAME = N'D:\MSSQL\Data\sales_1.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ),
( NAME = N'sales_2', FILENAME = N'D:\MSSQL\Data\sales_2.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB ),
( NAME = N'sales_3', FILENAME = N'D:\MSSQL\Data\sales_3.ndf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'sales_log', FILENAME = N'D:\MSSQL\Data\sales_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO


create table sales.dbo.t1 (id int identity primary key) on [xactions]
go
insert sales.dbo.t1 default values
go 10

backup database sales file = 'sales' to disk = 'D:\MSSQL\backup\sales.bak' with format, init
backup database sales file = 'SalesArch_1' to disk = 'D:\MSSQL\backup\SalesArch_1.bak' with format, init
backup database sales file = 'SalesArch_2' to disk = 'D:\MSSQL\backup\SalesArch_2.bak' with format, init
backup database sales file = 'sales_1' to disk = 'D:\MSSQL\backup\sales_1.bak' with format, init
backup database sales file = 'sales_2' to disk = 'D:\MSSQL\backup\sales_2.bak' with format, init
backup database sales file = 'sales_3' to disk = 'D:\MSSQL\backup\sales_3.bak' with format, init
backup log sales to disk = 'D:\MSSQL\backup\sales.trn' with format, init
go
insert sales.dbo.t1 default values
go 10
backup log sales to disk = 'D:\MSSQL\backup\sales.trn'
go


А теперь хочу восстановить:
пробую так
Код: sql
1.
2.
restore database sales file = 'sales_1' from disk = 'D:\MSSQL\backup\sales_1.bak' with norecovery
restore log sales from disk = 'D:\MSSQL\backup\sales.trn' with norecovery


Все проходит, но вот таблица созданная не селектится
Код: plaintext
1.
Msg 8653, Level 16, State 1, Line 58
The query processor is unable to produce a plan for the table or view 't1' because the table resides in a filegroup that is not online.
Все файлы в файловой группе [XACTIONS] в состоянии RESTORING
Код: sql
1.
select name,state_desc from sales.sys.database_files



И вопрос - каким образом мне их вывести из этого состояния в онлайн?
...
Рейтинг: 0 / 0
11.04.2018, 10:49
    #39628286
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
With norecovery ?
...
Рейтинг: 0 / 0
11.04.2018, 10:53
    #39628289
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
ДедушкаWith norecovery ?
Всяко пробовал стопицот вариантов - пока не нашел ни одного рабочего
...
Рейтинг: 0 / 0
11.04.2018, 11:08
    #39628294
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Дед-Папыхтет,

Вам в сообщении пишут, в чем ошибка - нужно снять еще один бэкап и накатить его:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
RESTORE DATABASE [sales] FILE = N'sales_1' FROM  DISK = N'D:\MSSQL\backup\sales_1.bak' WITH  FILE = 1,  NORECOVERY
GO
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 1,  NORECOVERY
GO
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 2
GO
---
BACKUP LOG sales TO DISK = 'D:\MSSQL\backup\sales.trn'
go
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 3
GO
...
Рейтинг: 0 / 0
11.04.2018, 12:05
    #39628322
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
EleanorДед-Папыхтет,

Вам в сообщении пишут, в чем ошибка - нужно снять еще один бэкап и накатить его:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
RESTORE DATABASE [sales] FILE = N'sales_1' FROM  DISK = N'D:\MSSQL\backup\sales_1.bak' WITH  FILE = 1,  NORECOVERY
GO
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 1,  NORECOVERY
GO
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 2
GO
---
BACKUP LOG sales TO DISK = 'D:\MSSQL\backup\sales.trn'
go
RESTORE LOG [sales] FROM  DISK = N'D:\MSSQL\backup\sales.trn' WITH  FILE = 3
GO


Получилось, спасибо большое Запомню как делать нужно. Не совсем понятен смысл бэкапа и восстановления лога... последнего
...
Рейтинг: 0 / 0
11.04.2018, 12:47
    #39628339
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Дед-ПапыхтетНе совсем понятен смысл бэкапа и восстановления лога... последнего
Sql Server не знает, были ли изменения в файле sales_1 между последним бэкапом лога и моментом начала восстановления.
А когда уже начато восстановление, и файл перешел в состояние recovering, изменения принципиально невозможны.
Поэтому приходится снимать дополнительный бэкап лога уже в recovering состоянии.
...
Рейтинг: 0 / 0
11.04.2018, 12:50
    #39628342
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Его можно снимать сразу после того как файл ушел в offline, в него уже и так ничего не запишется, не обязательно в процессе.
Поэтому Backup Log можно было в самом начале поставить.
...
Рейтинг: 0 / 0
11.04.2018, 12:57
    #39628350
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
aleksrov,

Но ТС в своем тесте файл не испортил, он оставался online, поэтому ему пришлось дожидаться состояния recovering.
...
Рейтинг: 0 / 0
11.04.2018, 13:01
    #39628352
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Я думал он у него битый.
Но тогда можно было бы как раз таки отправить его в Offline и дальше его мучать.
...
Рейтинг: 0 / 0
11.04.2018, 13:21
    #39628363
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
aleksrov,

Попробуйте сами. Переводим файл в offline и снимаем бэкап лога:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
insert sales.dbo.t1 default values
go 10
alter database sales modify file (name = 'sales_1', offline)
go
select name,state_desc from sales.sys.database_files --дает offline
go
backup log sales to disk = 'C:\MSSQL\backup\sales.trn'
go


Выполняем команды ТС на восстановление и получаем то же самое сообщение
"Additional roll forward is required to complete the restore sequence", и файл остается в состоянии restoring
...
Рейтинг: 0 / 0
11.04.2018, 13:23
    #39628367
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
aleksrov,

На имя диска в командах не обращайте внимания - у меня только C есть, забыла на D изменить.
...
Рейтинг: 0 / 0
11.04.2018, 13:59
    #39628387
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
CREATE DATABASE [Tes] 
 CONTAINMENT = NONE 
 ON  PRIMARY  
( NAME = N'Tes', FILENAME = N'C:\Data\Tes.mdf' , SIZE = 5120KB , FILEGROWTH = 5120KB ), 
Filegroup T_Off 
( NAME = N'Tes_Off', FILENAME = N'C:\Data\Tes_off.ndf' , SIZE = 5120KB , FILEGROWTH = 5120KB ) 
 LOG ON  
( NAME = N'Tes_log', FILENAME = N'C:\Data\Tes_log.ldf' , SIZE = 5120KB , FILEGROWTH = 10240KB ) 
GO 
Use [Tes] 
Create Table T  
(id int null) 
on T_Off 
go 
insert into [T] 
values (1) 
go 
Backup database [Tes] to disk = 'C:\Data\Backup\Full_Tes.bak' 
insert into [T] 
values (2) 
go  
Backup Log [Tes] to disk = 'C:\Data\Backup\Log1_Tes.bak' 
go 
insert into [T] 
values (3) 
go 
Alter Database [Tes] modify file (name = 'Tes_Off', offline) 
--Файл в offline 
go 
Backup Log [Tes] to disk = 'C:\Data\Backup\Log2_Tes.bak'  
go 
use [master] 
restore database [Tes] File  = N'Tes_Off' from disk = 'C:\Data\Backup\Full_Tes.bak' with norecovery 
restore log [Tes] from disk =  'C:\Data\Backup\Log1_Tes.bak' with norecovery 
restore log [Tes] from disk =  'C:\Data\Backup\Log2_Tes.bak' 



Все прекрасно работает.
...
Рейтинг: 0 / 0
11.04.2018, 14:42
    #39628420
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
aleksrov,

Поправьте свой код, чтобы он соответствовал примеру ТС-а:
Код: sql
1.
2.
3.
Filegroup T_Off 
( NAME = N'Tes_Off', FILENAME = N'C:\MSSQL\Data\Tes_off.ndf' , SIZE = 5120KB , FILEGROWTH = 5120KB)
, (NAME = N'Tes_Off2', FILENAME = N'C:\MSSQL\Data\Tes_off2.ndf' , SIZE = 5120KB , FILEGROWTH = 5120KB )


И теперь у вас все прекрасно не работает.
...
Рейтинг: 0 / 0
12.04.2018, 07:20
    #39628821
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Оу, тут два файла. Тогда отправьте второй файл в Offline и все также заработает.
Я думаю дело в том что второй файл остается онлайн. Да, мы ничего не можем делать с данными в этой FG, то sys.database_files и sys.master_files показывает что второй файл онлайн, видимо это и смущает SQL.
...
Рейтинг: 0 / 0
12.04.2018, 10:39
    #39628917
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
aleksrov,

Какими командами потом переводить второй файл в online?
Сейчас вы придете к тому, что все файлы из файловой группы придется в итоге восстановить из бэкапа.

На самом деле если хоть один файл в группе переведен в offline, вся файловая группа становятся недоступна для доступа пользователей (BOL: OFFLINE Sets the file offline and makes all objects in the filegroup inaccessible).
Но Sql Server при восстановлении бэкапа этим фактом не пользуется.
...
Рейтинг: 0 / 0
12.04.2018, 11:12
    #39628940
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Я знаю, я об этом писал выше. Также естетсвенно второй файл придется восстанавливать из Backup после перевода в offline. Но я не об этом говорю, а о том что Backup лога можно сделать сразу, тогда уточню, при определенных ситуациях.
...
Рейтинг: 0 / 0
12.04.2018, 11:45
    #39628959
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Резюмирую:

Если нужно восстановить только один файл, то придется дожидаться состояния recovering и снимать доп. бэкап лога.
Или можно вместо одного файла восстановить целую файловую группу, предварительно переведя все файлы в ней в offline. Зато не придется снимать доп. бэкап лога.
...
Рейтинг: 0 / 0
12.04.2018, 12:02
    #39628972
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Eleanor,

Спасибо большое ещё раз за примеры - подтянул пробелы )))
...
Рейтинг: 0 / 0
25.04.2018, 09:14
    #39635811
Jasonclark03
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Прежде чем приступить к восстановлению базы данных, проверьте и проверьте носитель. Если ваш файл базы данных поврежден, вы можете восстановить его с помощью SQL Backup Recovery Tool.
...
Рейтинг: 0 / 0
25.04.2018, 09:30
    #39635820
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению БД в MSSQL.
Jasonclark03,

Вы считай в каждом сообщении ее рекламируете. За 150$ неудивительно что такая хрень плохо продается и надо в каждой более или менее связанной теме орать какая класная штука.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по восстановлению БД в MSSQL. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]