powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление БД из нескольких .bak
25 сообщений из 65, страница 2 из 3
Восстановление БД из нескольких .bak
    #39888231
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще что-то ваши показания расходятся с тем, что в бэкапах.
сервер-исходник 2005, хотя и в совместимости 80 (2000).
откуда бы ему взять, что исходный сервер 2000?
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888236
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN
Блин, жестяк. Походу реально под каждую территорию физически создана одна база. Это нормальная вообще практика?
Бывает. Особенно раньше. Гениальные программисты, дрожа от предвкушения гигантских объёмов данных (у нас таблицы до МИЛЛИОНА строк, представляете!!!), часто разбивали базу на несколько вот таким образом.

Yasha123
может, вы каждой территории высылаете ее собственную базу раз в неделю,
тогда нормально.
Нет, это такая оптимизация, "что бы быстро работало".


Владислав Колосов,
Да там объёмы мизерные, базы по 300 мегабайт. Не терабайт, и даже не гигабайт.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888237
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
вообще что-то ваши показания расходятся с тем, что в бэкапах.
сервер-исходник 2005, хотя и в совместимости 80 (2000).
откуда бы ему взять, что исходный сервер 2000?
А что не сходится? Да, базы работают(-ли) на 2005, в режиме совместимости с 2000м
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888239
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Yasha123
вообще что-то ваши показания расходятся с тем, что в бэкапах.
сервер-исходник 2005, хотя и в совместимости 80 (2000).
откуда бы ему взять, что исходный сервер 2000?
А что не сходится? Да, базы работают(-ли) на 2005, в режиме совместимости с 2000м


не сходится с вот этим:
авторСоздание резервной копии баз данных производилось на сервере, на котором работала версия 8.00.2055...

бэкапилось на 2005-ом, а не на 2000-ом.
и наплевал он на совместимость базы
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888247
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
alexeyvg
А что не сходится? Да, базы работают(-ли) на 2005, в режиме совместимости с 2000м
не сходится с вот этим:
авторСоздание резервной копии баз данных производилось на сервере, на котором работала версия 8.00.2055...
бэкапилось на 2005-ом, а не на 2000-ом.
и наплевал он на совместимость базыНепонятно, что не сходится.

Да, работал много лет на 2005, базы были при этом в режиме совместимости с 2000-м.
При этом базы переходили с сервера на сервер (минимум 2 раза), и всё это были 2005-е серверы.
А когда то, в 2000-м году (или позже), их создали на 2000-м (и тоже неизвестно сколько раз переносили с одного 2000-го на другой).
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888248
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Да, работал много лет на 2005, базы были при этом в режиме совместимости с 2000-м.
При этом базы переходили с сервера на сервер (минимум 2 раза), и всё это были 2005-е серверы.
И, само собой, много раз делали бакапы на 2005-м. Конкретно этот бакап в сентябре.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888253
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понимаю, при чем тут история вашей жизни,
но бэкапивший сервер был 2005,
а ошибка говорит, что 2000.

и наплевать, на каком сервере база родилась, важно, каков формат данного бэкапа. те. версия бэкапившего сервера. и это 2005, а не 2000
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888293
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
не понимаю, при чем тут история вашей жизни,
Это была история обсуждаемой базы, если вы не поняли.
Yasha123
но бэкапивший сервер был 2005,
а ошибка говорит, что 2000.
А, на ошибку в первом посте я не посмотрел, благо к теме она не относится.

Делов то, пробовал человек разные бакапы, пытался разобраться...
А может, действительно 2005м там и не пахло, был только 2000-й
Это же не имеет отношения к проблеме автора.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888370
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще как относится.
ТС, у вас базы минимум с двух разных серверов.
сделайте restore headeronly и бэкапу "главной базы" тоже.
проверьте колонку server name,
там будет другой сервер.
не знаю, что это означает в вашем случае,
но, например, может оказаться, что из одной базы в другую обращаются через linked server
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888373
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
А может, действительно 2005м там и не пахло, был только 2000-й.
как же не пахло, если restore headeronly показывает версию базы 611.
вам говорю, там минимум 2 сервера, но вы меня упорно не слышите
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888387
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
еще как относится.
может оказаться, что из одной базы в другую обращаются через linked server
Да, тут вы правы, для восстановления баз может оказаться недостаточно просто их все восстановить.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888389
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
вам говорю, там минимум 2 сервера, но вы меня упорно не слышите
Да, про 2 сервера теперь понял :-)
Скорее, так и есть (хотя всё таки ТС мог для главной базы достать какой то старый бакап, а то делать систему на многих серверах как то совсем усложнение, для таких небольших объёмов)
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888393
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN
Критик, так было заявлено админом, когда он покидал нас

Уверен, - сейчас этот админ сидит в темноте и хохочет гомерическим смехом, запрокинув голову :)

Ну прикольнулся человек перед уходом, ну потроллил, ну что уж тут такого :)
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888939
PavelPN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Спасибо большое за помощь, хотя бы представление получили общее о том, как утроено всё.
Получилось посмотреть как это на рабочем сервере лежит.
Вы оказались полностью правы, под каждую территорию отдельно создана БД и похоже эта DBName на 11 гб выступает как агрегатор сведений и содержит всевозможные представления из всех этих 100 баз.
Каким образом они связаны я не знаю. Тут уж просто будем искать специалиста, чтобы всё это поднимал оперативно.
А пока я хочу у себя развернуть территориальные базы, хотя бы для локального доступа к ним. Можете подсказать скрипт как их в автоматическом режиме восстановить? При условии, что некоторые номера почему-то пропущены. Т.е. есть m07.bak, а после него m09.bak
А то все руками поднимать это трата времени, а его не хватает сейчас крайне.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888949
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN
похоже эта DBName на 11 гб выступает как агрегатор сведений и содержит всевозможные представления из всех этих 100 баз.

были бы там одни представления, была бы база размером в мегабайт.
у вас же как раз наоборот, все гигабайты там,
а остальные базы - крошки какие-то.
так что в этой базе своего добра хватает.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888950
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN, писал я такой скрипт, найти не могу, не сохранил, видимо.

1) включаете xp_cmdshell через sp_configure
2) Читаете список файлов во временную таблицу:
Код: sql
1.
2.
3.
4.
5.
declare @files table (ID int IDENTITY, FileName varchar(100))

insert into @files execute xp_cmdshell 'dir c:\ /b'

select * from @files



Далее в курсоре по каждому файлу:
3) Через динамический SQL формируете команду на restore headeronly, чтобы получить название базы.
4) Аналогично - restore filelistonly, для получения списка файлов для базы.
5) Динамическим SQL генерируете команду на восстановление базы, выполняете.

В принципе, все, что нужно.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888962
PavelPN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123, согласен с вами. Учитывая увиденные таблицы и их содержимое, я вообще не понимаю что там хранится.

Minamoto, прошу прощения, но мои знания в t-sql ограничиваются пользовательскими селектами.
И используемые вами понятия "курсора" и "динамического sql" мне, к сожалению, даже не говорят ни о чем.

Если вам не будет напряжно и есть время, могу я попросить вас помочь со скриптом. Понять написанный код я более менее смогу, но написать самому, я думаю у меня займет пару дней.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888968
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto
PavelPN, писал я такой скрипт, найти не могу, не сохранил, видимо.

1) включаете xp_cmdshell через sp_configure
2) Читаете список файлов во временную таблицу:
Код: sql
1.
2.
3.
4.
5.
declare @files table (ID int IDENTITY, FileName varchar(100))

insert into @files execute xp_cmdshell 'dir c:\ /b'

select * from @files




включать xp_cmdshell не обязательно
то же самое можно получить процедурой xp_dirtree
например,
Код: sql
1.
exec xp_dirtree 'c:\temp',1,1
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888972
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad

включать xp_cmdshell не обязательно
то же самое можно получить процедурой xp_dirtree
например,
Код: sql
1.
exec xp_dirtree 'c:\temp',1,1


Да, но я помню, что перешел именно на xp_cmdshell для большего удобства - в утилите dir там можно более гибко управлять набором возвращаемых файлов, использовать маски, фильтровать и т.п.
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888984
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN
мои знания в t-sql ограничиваются пользовательскими селектами.
И используемые вами понятия "курсора" и "динамического sql" мне, к сожалению, даже не говорят ни о чем.

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

вот именно.
вам проще скидать результаты restore filelistonly в одну таблицу
и копипастом сделать скрипт для всех баз.
на все про все макс. 10 минут на все 100 баз.

у вас же все пути, куда будете складывать файлы баз, одни и те же.
остается размножить 1 скрипт 100 раз и позаменять имя базы и имена файлов
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39888989
PavelPN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
USE [master];
go

RESTORE DATABASE [flnst01] FROM  DISK = N'E:\BackUp\m01.bak' WITH  FILE = 1,  MOVE N'flnst_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\flnst01.mdf',  MOVE N'munst_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\flnst01_1.ldf',  NOUNLOAD,  STATS = 5
GO

RESTORE DATABASE [flnst02] FROM  DISK = N'E:\BackUp\m02.bak' WITH  FILE = 1,  MOVE N'flnst_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\flnst02.mdf',  MOVE N'munst_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\flnst02_1.ldf',  NOUNLOAD,  STATS = 5
GO



Таким образом вы имеете в виду?
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39889000
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN,
у вас снова что-то не то с версиями.
если вы на 2017-ый сервер восстанавливаете,
почему в путях MSSQL 12 .MSSQLSERVER?

да и не кладите файлы на системный диск,
на другой сложите.

так-то да, должно быть типа такого:

Код: sql
1.
2.
3.
4.
restore database [flnst01] 
from disk = N'E:\BackUp\m01.bak' with
move N'flnst_Data' to N'F:\DATA\flnst01.mdf',  
move N'munst_Log'  to N'F:\DATA\flnst01_log.ldf'
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39889001
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN,

а какая версия сервера куда базы надо восстановить?
покажите
select @@version
...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39889003
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelPN, типа того...

Только я таки не поленился, написал скрипт.

Используйте на свой страх и риск :)

ЗЫ: Не забудьте правильные директории указать, для отладки замените последний "EXEC sp_executesql @sql" на "PRINT @sql"
Если не будет выполняться с ошибкой, что возвращаемый набор данных не соответствует описанному в таблицах @header и @filelist - приведите их описание к тому набору полей, которое возвращается вашими командами.

Код: 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.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
SET NOCOUNT on
DECLARE 
    @cmd varchar(8000), 
    @sql nvarchar(MAX), 
    @folder_bak varchar(max) = 'D:\Backups', 
    @folder_files varchar(max)= 'D:\SQLData', 
    @bak_name nvarchar(max);

declare @files table (ID int IDENTITY, FileName nvarchar(max) NULL)

declare @header table (
	BackupName nvarchar(128),
	BackupDescription nvarchar(255),
	BackupType tinyint,
	ExpirationDate datetime,
	Compressed tinyint,
	Position smallint,
	DeviceType tinyint,
	UserName nvarchar(128),
	ServerName nvarchar(128),
	DatabaseName nvarchar(128),
	DatabaseVersion int,
	DatabaseCreationDate datetime,
	BackupSize bigint,
	FirstLSN decimal(25,0),
	LastLSN decimal(25,0),
	CheckpointLSN decimal(25,0),
	DatabaseBackupLSN decimal(25,0),
	BackupStartDate datetime,
	BackupFinishDate datetime,
	SortOrder smallint,
	CodePage smallint,
	UnicodeLocaleId int,
	UnicodeComparisonStyle int,
	CompatibilityLevel tinyint,
	SoftwareVendorId int,
	SoftwareVersionMajor int,
	SoftwareVersionMinor int,
	SoftwareVersionBuild int,
	MachineName nvarchar(128),
	Flags int,
	BindingID uniqueidentifier,
	RecoveryForkID uniqueidentifier,
	Collation nvarchar(128),
	FamilyGUID uniqueidentifier,
	HasBulkLoggedData bit,
	IsSnapshot bit,
	IsReadOnly bit,
	IsSingleUser bit,
	HasBackupChecksums bit,
	IsDamaged bit,
	BeginsLogChain bit,
	HasIncompleteMetaData bit,
	IsForceOffline bit,
	IsCopyOnly bit,
	FirstRecoveryForkID uniqueidentifier,
	ForkPointLSN decimal(25,0),
	RecoveryModel nvarchar(60),
	DifferentialBaseLSN decimal(25,0),
	DifferentialBaseGUID uniqueidentifier,
	BackupTypeDescription nvarchar(128),
	BackupSetGUID uniqueidentifier,
	CompressedBackupSize bigint,
	Containment tinyint)

DECLARE @filelist table (
	LogicalName nvarchar(128),
	PhysicalName nvarchar(260),
	Type nchar(1),
	FileGroupName nvarchar(128),
	Size bigint,
	MaxSize bigint,
	FileId bigint,
	CreateLSN decimal(25,0),
	DropLSN decimal(25,0),
	UniqueId uniqueidentifier,
	ReadOnlyLSN decimal(25,0),
	ReadWriteLSN decimal(25,0),
	BackupSizeInBytes bigint,
	SourceBlockSize int,
	FileGroupId int,
	LogGroupGUID uniqueidentifier,
	DifferentialBaseLSN decimal(25,0),
	DifferentialBaseGUID uniqueidentifier,
	IsReadOnly bit,
	IsPresent bit,
	TDEThumbprint varbinary(20))

SET @cmd = 'dir ' + @folder_bak + ' /b | findstr /i "\.bak$"'

insert into @files execute xp_cmdshell @command_string = @cmd

DECLARE cur CURSOR FOR
SELECT FileName
FROM @files
WHERE FileName IS NOT NULL

OPEN cur
FETCH FROM cur INTO @bak_name
        
WHILE @@FETCH_STATUS = 0
BEGIN

    DELETE FROM @header;
    DELETE FROM @filelist;

    BEGIN TRY
        SET @sql = 'RESTORE HEADERONLY FROM DISK=''' + @folder_bak + '\' + @bak_name + ''';'
        INSERT INTO @header EXEC sp_executesql @sql
        SET @sql = 'RESTORE FILELISTONLY FROM DISK=''' + @folder_bak + '\' + @bak_name + ''';'
        INSERT INTO @filelist EXEC sp_executesql @sql
    END TRY
    BEGIN CATCH

        
        PRINT 'Backup ' + @bak_name + ' cannot be restored'

    END CATCH

    IF EXISTS (SELECT * FROM @header) AND EXISTS (SELECT * FROM @filelist)
    BEGIN
    
        SELECT @sql = 'RESTORE DATABASE ' + QUOTENAME(DatabaseName) + ' FROM  DISK = N''' +  @folder_bak + '\' + @bak_name + 
                ''' WITH FILE = 1, NOUNLOAD,  STATS = 5' + 
                (SELECT ', MOVE N''' + QUOTENAME(LogicalName) + 
                        ''' TO N''' + @folder_files + '\' + 
                        SUBSTRING(PhysicalName, LEN(PhysicalName) - CHARINDEX('\', REVERSE(PhysicalName)) + 2, LEN(PhysicalName)) + 
                        '' AS 'data()'
                FROM @filelist
                FOR XML PATH ('')
                )
        FROM @header

        EXEC sp_executesql @sql

    END


    FETCH FROM cur INTO @bak_name
END

CLOSE cur
DEALLOCATE cur

...
Рейтинг: 0 / 0
Восстановление БД из нескольких .bak
    #39889010
PavelPN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yasha123
PavelPN,
у вас снова что-то не то с версиями.
если вы на 2017-ый сервер восстанавливаете,
почему в путях MSSQL 12 .MSSQLSERVER?


Блин, это я дурак. Версию SSMS вместо версии sql server вам назвал.
Версия sql server: Microsoft SQL Server 2014 - 12.0.4100.1 (X64) Apr 20 2015 17:29:27 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Восстановление БД из нескольких .bak
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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