DanionРестор с move - всё ок.
Рестор просто - всё ок.
Один и тот же бекап.
Потом был снят новый бекап с db1 и
на db2 уже не восстановился?А, видно, я где то ошибся, восстанавливается.
Значит, дело в GUID, точнее, как заметил Yasha123, в FAMILY_GUID
Вот поправленный скрипт
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 ''