powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скрипт восстановления БД
2 сообщений из 27, страница 2 из 2
Скрипт восстановления БД
    #39751490
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DanionРестор с move - всё ок.
Рестор просто - всё ок.
Один и тот же бекап.

Потом был снят новый бекап с db1 и
на db2 уже не восстановился?А, видно, я где то ошибся, восстанавливается.

Значит, дело в GUID, точнее, как заметил Yasha123, в FAMILY_GUID

Вот поправленный скрипт
Код: 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.
--	Для выполнения скрипта нужно 
--	сделать папки C:\tmp\db1 и C:\tmp\db2

use master
go
if exists(select * from sys.databases where name = 'db1')
	drop database db1
if exists(select * from sys.databases where name = 'db2')
	drop database db2
go
create database db1
ON   
( NAME = db1_data,  
    FILENAME = 'C:\tmp\db1\db.mdf') 
LOG ON  
( NAME = db1_log,  
    FILENAME = 'C:\tmp\db1\db.ldf');  
GO
create database db2
ON   
( NAME = db1_data,  
    FILENAME = 'C:\tmp\db2\db.mdf') 
LOG ON  
( NAME = db1_log,  
    FILENAME = 'C:\tmp\db2\db.ldf');  
GO

backup database db1 to disk='C:\tmp\db1.bak' with INIT
backup database db2 to disk='C:\tmp\db2.bak' with INIT
print '' 
GO

--	Тут будет куча ошибок !!!
--	потому что FAMILY_GUID не совпадает с db2, 
--	и пути берутся из бакапа
print 'restore database db2 from db1.bak' 
restore database db2 from disk='C:\tmp\db1.bak' 
WITH REPLACE;
print '' 
go

--	Тогда восстанавливаем db2 из db1, то есть делаем их "идентичными"
print 'restore database db2 from db1.bak with move' 
restore database db2 from disk='C:\tmp\db1.bak' 
WITH MOVE 'db1_data' TO 'C:\tmp\db2\db.mdf',
MOVE 'db1_log' TO 'C:\tmp\db2\db.ldf',
REPLACE;
print '' 
go

--	А вот тут всё нормально !
--	потому что после первого восстановления у неё поменялся FAMILY_GUID,
--	теперь он такой же, как у db1
--	и при восстановлении используются её пути, которые, заметим, 
--	отличаются от тех, которые в бакапе
print 'restore database db2 from db1.bak' 
restore database db2 from disk='C:\tmp\db1.bak' 
WITH REPLACE;
print '' 

--	Но мы ещё сделаем бакап db1
backup database db1 to disk='C:\tmp\db1.bak' with INIT;
print '' 
go

--	И опять попытаемся восстановить его в db2
--	всё нормально!
print 'restore database db2 from db1.bak' 
restore database db2 from disk='C:\tmp\db1.bak' 
WITH REPLACE;
print '' 
...
Рейтинг: 0 / 0
Скрипт восстановления БД
    #39752058
Danion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тайна раскрыта:) Всем спасибо за участие!
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скрипт восстановления БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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