powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / восстановление файловой группы filestream
24 сообщений из 24, страница 1 из 1
восстановление файловой группы filestream
    #39925600
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже создавал тему, как сделать резервную копию бд без filestream. Разобрался, работает.
Теперь пришло время что бы к базе вернуть хранилище filestream. Тут у меня снова возникли проблемы, в связи не опытности в этом деле.

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

Код: sql
1.
2.
3.
4.
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:

Код: sql
1.
2.
3.
BACKUP DATABASE [IspolkomPermitProc]
FILEGROUP = 'IspolcomPermitGroup'
TO DISK = 'D:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak' WITH INIT



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

Код: sql
1.
2.
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:

Код: sql
1.
2.
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 я включил
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39925619
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39925622
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reconfigure with override?
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39925880
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

скрипт выполнило:
Код: sql
1.
2.
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 (скрин). В ошибке пишет что файл должен быть восстановлен с такими же параметрами с которыми уже восстановлен. НЕ пойму, что за прикол
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926042
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug,

Прикол в том что у вас база в полной модели восстановления. В таком случае вы должны восстанавливать лог транзакций дополнительно.
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926056
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о боже, reconfigure with override относилось к файлстриму,
который мало включить, надо еще reconfigure сделать.
но все равно проканало.
как видите, ошибка поменялась.
ну и правильно вам дальше ответили, конечно теперь надо лог накатывать.
но это не прикол про полную модель,
это единственный возможный способ восстанавливать только некоторые фг, которые не есть readonly.
это потому, что если фг не ридонли, то нет никакой гарантии для сервера, что восстановленные ранее фг не поменялись на момент бэкапа остальных фг, восстанавливаемых потом
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926198
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Код: sql
1.
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).

База все так же в процессе восстановление, как на прошлом скрине
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926202
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug,

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

У вас сценарий какой? Чего вы хотите доьиться? Поднять на вторую базу бэкап без фс а потом бекап с фс?
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926204
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

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

Принцип такой, есть база с хранилищем, нужно сделать отдельно бэкап группы PRIMARY и отдельно FILESTTREAM (для разных задач). После на другом сервере разбэкапить сначала базу без хранилища, через время к ней подключить уже фг FILESTREAM
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926206
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после новых попыток восстановления вылетают такие ошибки

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).


не совсем понятно, как сделать нужный откат
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926370
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug
не совсем понятно, как сделать нужный откат
Так напишите, что вы делаете. Результат выполнения вы выложили, а то, что выполняется, нет.
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926379
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Код: sql
1.
2.
3.
4.
5.
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
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926388
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug
alexeyvg,

Код: sql
1.
2.
3.
4.
5.
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
Код: sql
1.
2.
RESTORE headeronly from disk = 'C:\BackupSQL\IspolkomPermitProc\IspolkomPermitProc.bak'
RESTORE headeronly from disk = 'C:\BackupSQL\IspolkomPermitProc\Log.bak'
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926410
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug,

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

Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
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];

...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926601
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

лога: LSN 60032000000917100001 как-то не наблюдаю
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926636
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

да все верно, спасибо за пример. Если честно только недавно столкнулся с filestream, а чтобы правильно все сделать в бэкапе и разбэкапе, сам черт ногу сломит) Понял в чем была моя ошибка
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926637
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug
alexeyvg,

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

Как раз во втором рекордсете 60032000000917100001 попадает между first и last
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926669
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

это я так понимаю нужно рестор сделать?
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39926894
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug
alexeyvg,

это я так понимаю нужно рестор сделать?
Ну да, сначала базу с norecovery, потом лог с recovery
Посмотрите пример от felix_ff
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39927982
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

не подскажете случаем, если два или больше фг, как при добавлении полей uniqueidentifier и varbinary(max) filestream указать, в какое именно хранилище сохранять файлы? такой инфы не могу найти
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39927987
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug,

Код: sql
1.
2.
3.
CREATE TABLE blablabla
...
FILESTREAM_ON [FG1]
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39928006
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

Код: sql
1.
2.
3.
4.
5.
alter table [dbo].[Table_2]
add
fileGUID uniqueidentifier default newid() unique rowguidcol not null,
fileDATA varbinary(max) filestream,
FILESTREAM_ON [file2]



так?
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39928010
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erleug
felix_ff,

Код: sql
1.
2.
3.
4.
5.
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.
...
Рейтинг: 0 / 0
восстановление файловой группы filestream
    #39928039
erleug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,

спасибо!

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

Код: sql
1.
2.
3.
4.
5.
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
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / восстановление файловой группы filestream
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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