Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 восстановление файловой группы filestream  [new]
erleug
Member

Откуда:
Сообщений: 41
Уже создавал тему, как сделать резервную копию бд без filestream. Разобрался, работает.
Теперь пришло время что бы к базе вернуть хранилище filestream. Тут у меня снова возникли проблемы, в связи не опытности в этом деле.

Базу разбэкапил на новом серве:

restore DATABASE IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc_Data' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_Log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf',
replace 


Сделал бэкап файловой группы filestream:

BACKUP DATABASE [IspolkomPermitProc]
FILEGROUP = 'IspolcomPermitGroup'
TO DISK = 'D:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak' WITH INIT


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

RESTORE DATABASE [IspolkomPermitProc] FILEGROUP='IspolcomPermitGroup' from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolcomPermitGroup.bak' 
WITH MOVE 'IspolkomPermitFiles' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitFiles'


вылетает ошибка:
Msg 3159, Level 16, State 1, Line 1
The tail of the log for the database "IspolkomPermitProc" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Ок, добавляю replace:

RESTORE DATABASE [IspolkomPermitProc] FILEGROUP='IspolcomPermitGroup' from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolcomPermitGroup.bak' 
WITH MOVE 'IspolkomPermitFiles' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitFiles', replace


Теперь такая ошибка:
Msg 5591, Level 16, State 4, Line 1
FILESTREAM feature is disabled.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Почему такая ошибка не пойму, ведь поддержку Filestream я включил
12 фев 20, 12:59    [22078191]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
aleks222
Member

Откуда:
Сообщений: 817
Limitations and Restrictions

•Under the simple recovery model, the file must belong to a read-only filegroup.

•Under the full or bulk-logged recovery model, before you can restore files, you must back up the active transaction log (known as the tail of the log). For more information, see Back Up a Transaction Log (SQL Server).

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-files-and-filegroups-sql-server?view=sql-server-ver15
12 фев 20, 13:10    [22078219]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
Yasha123
Member

Откуда:
Сообщений: 1823
reconfigure with override?
12 фев 20, 13:11    [22078222]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

скрипт выполнило:
RESTORE DATABASE IspolkomPermitProc FILEGROUP='IspolcomPermitGroup'from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolcomPermitGroup.bak'
with move 'IspolkomPermitFiles' to 'C:\BackupSQL\IspolkomPermitProc\IspolcomPermitGroup' reconfigure with override


результат такой:
Processed 2 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Log' on file 1.
Processed 7364921 pages for database 'IspolkomPermitProc', file 'IspolkomPermitFiles' on file 1.
The database can not be brought online because file 'IspolkomPermitProc_Data' is currently restored to LSN 60032000000913100003 but must be restored to LSN 60032000000913100003.
The roll forward start point is now at log sequence number (LSN) 60032000000913100003. Additional roll forward past LSN 60032000000913100003 is required to complete the restore sequence.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE DATABASE ... FILE=<name> successfully processed 7364922 pages in 2367.760 seconds (24.300 MB/sec).


И база в режиме restoring (скрин). В ошибке пишет что файл должен быть восстановлен с такими же параметрами с которыми уже восстановлен. НЕ пойму, что за прикол

К сообщению приложен файл. Размер - 12Kb
12 фев 20, 17:14    [22078588]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1144
erleug,

Прикол в том что у вас база в полной модели восстановления. В таком случае вы должны восстанавливать лог транзакций дополнительно.
12 фев 20, 23:16    [22078867]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
Yasha123
Member

Откуда:
Сообщений: 1823
о боже, reconfigure with override относилось к файлстриму,
который мало включить, надо еще reconfigure сделать.
но все равно проканало.
как видите, ошибка поменялась.
ну и правильно вам дальше ответили, конечно теперь надо лог накатывать.
но это не прикол про полную модель,
это единственный возможный способ восстанавливать только некоторые фг, которые не есть readonly.
это потому, что если фг не ридонли, то нет никакой гарантии для сервера, что восстановленные ранее фг не поменялись на момент бэкапа остальных фг, восстанавливаемых потом

Сообщение было отредактировано: 13 фев 20, 00:12
13 фев 20, 00:09    [22078896]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

RESTORE LOG IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak' WITH NORECOVERY


Результат:

Processed 0 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Data' on file 1.
Processed 9 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Log' on file 1.
RESTORE LOG successfully processed 9 pages in 0.068 seconds (0.933 MB/sec).

База все так же в процессе восстановление, как на прошлом скрине
13 фев 20, 12:31    [22079156]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1144
erleug,

Вы же сами написали with norecovery она и должна остаться в restoring.

У вас сценарий какой? Чего вы хотите доьиться? Поднять на вторую базу бэкап без фс а потом бекап с фс?
13 фев 20, 12:34    [22079160]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

с рековери та же самая проблема.

Принцип такой, есть база с хранилищем, нужно сделать отдельно бэкап группы PRIMARY и отдельно FILESTTREAM (для разных задач). После на другом сервере разбэкапить сначала базу без хранилища, через время к ней подключить уже фг FILESTREAM
13 фев 20, 12:38    [22079163]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

Откуда:
Сообщений: 41
после новых попыток восстановления вылетают такие ошибки

Processed 84128 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Data' on file 1.
Processed 2 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Log' on file 1.
The roll forward start point is now at log sequence number (LSN) 60032000000911800001. Additional roll forward past LSN 60032000000917100001 is required to complete the restore sequence.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE DATABASE ... FILE=<name> successfully processed 84130 pages in 43.178 seconds (15.222 MB/sec).
Processed 0 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Data' on file 1.
Processed 9 pages for database 'IspolkomPermitProc', file 'IspolkomPermitProc_Log' on file 1.
The roll forward start point is now at log sequence number (LSN) 60032000000914200001. Additional roll forward past LSN 60032000000917100001 is required to complete the restore sequence.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE LOG successfully processed 9 pages in 0.123 seconds (0.516 MB/sec).


не совсем понятно, как сделать нужный откат
13 фев 20, 12:42    [22079166]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30415
erleug
не совсем понятно, как сделать нужный откат
Так напишите, что вы делаете. Результат выполнения вы выложили, а то, что выполняется, нет.
13 фев 20, 17:56    [22079480]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

restore DATABASE IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc_Data' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_Log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf', RECOVERY

RESTORE LOG IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak' WITH RECOVERY
13 фев 20, 18:12    [22079490]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30415
erleug
alexeyvg,

restore DATABASE IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
with move 'IspolkomPermitProc_Data' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.mdf',
move 'IspolkomPermitProc_Log' to 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc_log.ldf', RECOVERY

RESTORE LOG IspolkomPermitProc from disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak' WITH RECOVERY
Ага, так ещё требует лога: ". Additional roll forward past LSN 60032000000917100001 is required"

Посмотрите, что там в бакапах, поанализируйте FirstLSN, LastLSN, CheckpointLSN, DatabaseBackupLSN
RESTORE headeronly from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
RESTORE headeronly from disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak'


Сообщение было отредактировано: 13 фев 20, 18:32
13 фев 20, 18:33    [22079505]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1144
erleug,

короче держите пример если я правильно понял что вам нужно:

+
use master;

create database [fs1] 
on primary (name = 'row_data', filename = 'C:\temp\fs1\fs1_row_data.mdf'),
   filegroup fsg contains filestream (name='fs_data', filename= 'C:\temp\fs1\fsg')
log on (name='log', filename = 'C:\temp\fs1\fs1_log.ldf')
with filestream (non_transacted_access=FULL, DIRECTORY_NAME = 'fs1');
go

use [fs1];
--наполнение данными
create table [dbo].[tbl_rows] (
      id int identity(1, 1) primary key clustered,
	  value varchar(255),
	  [uid] uniqueidentifier
) on [PRIMARY];

insert into [dbo].[tbl_rows] with(tablock) ([value], [uid]) 
  select top (1000000) c1.[name], newid() 
  from master.dbo.spt_values c1
      cross join master.dbo.spt_values c2; --наполнение inrow-data

create table [dbo].[tbl_fs] (
      [id] int identity(1,1) primary key,
	  [loc] uniqueidentifier not null rowguidcol  unique default newid(),
	  [data] varbinary(max) filestream null
);


insert into [dbo].[tbl_fs] with(tablock) ([data]) 
  select top (1000)
		   hashbytes('SHA2_512', cast(checksum(c1.[name], c2.[number], c2.[type]) as varchar(max)))
  from master.dbo.spt_values c1
      cross join master.dbo.spt_values c2; --наполнение данных FILESTREAM
--//наполнение данными
go

use master;
backup database [fs1] to disk = 'C:\temp\fs1_full.bak' with init; --создание полного бэкапа
restore filelistonly from disk = 'C:\temp\fs1_full.bak';
go

--создаем пустую бд
create database fs2 
on primary (name = 'fs2_data', filename = 'C:\temp\fs2\fs2_data.mdf')
log on (name = 'fs2_log', filename = 'C:\temp\fs2\fs2_log.ldf'); 
go

--восстанавливаем базу под замену файлов
restore database [fs2] 
from disk = 'C:\temp\fs1_full.bak'
with replace, 
move 'row_data' to 'C:\temp\fs2\fs2_data.mdf',
move 'log' to 'C:\temp\fs2\fs2_log.ldf',
move 'fs_data' to 'C:\temp\fs2\fsg', recovery, filestream (DIRECTORY_NAME='fs2');
go

--частичное восстановление PRIMARY
backup log [fs2] to disk = 'C:\temp\fs2_log1.bak' with norecovery;

restore database [fs2]
filegroup = 'PRIMARY'
from disk = 'C:\temp\fs1_full.bak'
with partial, norecovery;

restore database [fs2] with recovery, filestream (DIRECTORY_NAME='fs2'); --восстановление

use [fs2]
select top (10) * from tbl_rows;
select top (10) * from tbl_fs --даст ошибку
select type_desc, state_desc, name, size from sys.database_files
--//частичное восстановление PRIMARY


use master;
backup database [fs1] filegroup = 'fsg'
to disk = 'C:\temp\fs1_fsg.bak'
with init;

--частичное восстановление FILESTREAM
backup log [fs2] to disk = 'C:\temp\fs2_log2.bak' with norecovery;

restore database [fs2]
filegroup = 'PRIMARY'
from disk = 'C:\temp\fs1_full.bak'
with partial, norecovery;

restore database [fs2]
filegroup = 'fsg'
from disk = 'C:\temp\fs1_fsg.bak'
with norecovery;

backup log [fs1] to disk = 'C:\temp\fs1_log.bak';
restore log [fs2] from disk = 'C:\temp\fs1_log.bak' with filestream (DIRECTORY_NAME = 'fs2');
--//частичное восстановление FILESTREAM

select type_desc, name, state_desc, size from sys.master_files where database_id = db_id('fs1');
select type_desc, name, state_desc, size from sys.master_files where database_id = db_id('fs2');


drop database [fs2];
drop database [fs1];


Сообщение было отредактировано: 13 фев 20, 19:31
13 фев 20, 19:26    [22079536]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

лога: LSN 60032000000917100001 как-то не наблюдаю

К сообщению приложен файл. Размер - 89Kb
14 фев 20, 11:27    [22079828]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

да все верно, спасибо за пример. Если честно только недавно столкнулся с filestream, а чтобы правильно все сделать в бэкапе и разбэкапе, сам черт ногу сломит) Понял в чем была моя ошибка
14 фев 20, 12:25    [22079889]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30415
erleug
alexeyvg,

лога: LSN 60032000000917100001 как-то не наблюдаю

Картинка с другого сайта.
Как раз во втором рекордсете 60032000000917100001 попадает между first и last
14 фев 20, 12:27    [22079890]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

это я так понимаю нужно рестор сделать?
14 фев 20, 13:04    [22079952]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30415
erleug
alexeyvg,

это я так понимаю нужно рестор сделать?
Ну да, сначала базу с norecovery, потом лог с recovery
Посмотрите пример от felix_ff
14 фев 20, 19:27    [22080335]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

не подскажете случаем, если два или больше фг, как при добавлении полей uniqueidentifier и varbinary(max) filestream указать, в какое именно хранилище сохранять файлы? такой инфы не могу найти
18 фев 20, 14:36    [22082215]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1144
erleug,

CREATE TABLE blablabla
...
FILESTREAM_ON [FG1]


Сообщение было отредактировано: 18 фев 20, 14:39
18 фев 20, 14:39    [22082220]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

alter table [dbo].[Table_2]
add
fileGUID uniqueidentifier default newid() unique rowguidcol not null,
fileDATA varbinary(max) filestream,
FILESTREAM_ON [file2]


так?
18 фев 20, 15:01    [22082243]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
msLex
Member

Откуда:
Сообщений: 7600
erleug
felix_ff,

alter table [dbo].[Table_2]
add
fileGUID uniqueidentifier default newid() unique rowguidcol not null,
fileDATA varbinary(max) filestream,
FILESTREAM_ON [file2]



так?


https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql?view=sql-server-ver15

ALTER TABLE with the SET FILESTREAM_ON clause succeeds only if the table has no FILESTREAM columns. You can add FILESTREAM columns by using a second ALTER TABLE statement.


Сообщение было отредактировано: 18 фев 20, 15:04
18 фев 20, 15:03    [22082248]     Ответить | Цитировать Сообщить модератору
 Re: восстановление файловой группы filestream  [new]
erleug
Member

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

спасибо!

получилось как и говорится с двумя альтерами

alter table [dbo].[Table_2] set (FILESTREAM_ON = [gr2])
alter table [dbo].[Table_2]
add
fileGUID uniqueidentifier default newid() unique rowguidcol not null,
fileDATA varbinary(max) filestream
18 фев 20, 15:43    [22082290]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить