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

И правильный ответ 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
Вопрос по восстановлению БД в MSSQL.
    #39628286
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
With norecovery ?
...
Рейтинг: 0 / 0
Вопрос по восстановлению БД в MSSQL.
    #39628289
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДедушкаWith norecovery ?
Всяко пробовал стопицот вариантов - пока не нашел ни одного рабочего
...
Рейтинг: 0 / 0
Вопрос по восстановлению БД в MSSQL.
    #39628294
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
Вопрос по восстановлению БД в MSSQL.
    #39628322
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по восстановлению БД в MSSQL.
    #39628339
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-ПапыхтетНе совсем понятен смысл бэкапа и восстановления лога... последнего
Sql Server не знает, были ли изменения в файле sales_1 между последним бэкапом лога и моментом начала восстановления.
А когда уже начато восстановление, и файл перешел в состояние recovering, изменения принципиально невозможны.
Поэтому приходится снимать дополнительный бэкап лога уже в recovering состоянии.
...
Рейтинг: 0 / 0
Вопрос по восстановлению БД в MSSQL.
    #39628342
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eleanor,

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

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

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

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

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

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

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

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

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

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

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


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