Как перейти с SQL 2000 на SQL 2008 через восстановление?
-
06-07-2019 - |
Вопрос
Я использую этот код:
RESTORE DATABASE [MyDB_2009May11]
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak'
WITH
MOVE N'Archive_Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf',
MOVE N'Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf',
MOVE N'Log'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf',
NOUNLOAD,
STATS = 10
GO
Я получаю эту ошибку:
Msg 3176, уровень 16, состояние 1, строка 1 Файл 'C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQL2008 \ MSSQL \ DATA \ MyDB_2009May11.mdf' заявлен как 'Archive_Data' (3) и 'Data' (1). Предложение WITH MOVE может использоваться для перемещения одного или нескольких файлов. Сообщение 3013, уровень 16, состояние 1, строка 1 ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ завершается ненормально.
Как, черт побери, я могу перейти с SQL Server 2000 на 2008, когда у меня есть только файл резервной копии?
:) Любая помощь приветствуется. Р>
Решение
сделайте select * from sysaltfiles и посмотрите правильные имена файлов, а затем измените имена при перемещении на части соответственно
Это даст вам имена всех файловых групп в настоящее время
select filename from master..sysaltfiles
where name = 'MyDB_2009May11'
если у вас еще нет скриптов базы данных, сделайте это в первую очередь. убедитесь, что папки существуют, вы также можете изменить размеры файлов
CREATE DATABASE [MyDB_2009May11] ON (NAME = N'Data',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf'
, SIZE = 12, FILEGROWTH = 10%),
(NAME = N'Archive_Data',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf'
, SIZE = 12, FILEGROWTH = 10%)
LOG ON (NAME = N'Log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf'
, SIZE = 21, FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
Теперь восстановление должно быть таким, обратите внимание на расширение ndf для архивной файловой группы
RESTORE DATABASE [MyDB_2009May11]
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak'
WITH
MOVE N'Archive_Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf',
MOVE N'Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf',
MOVE N'Log'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf',
NOUNLOAD,
STATS = 10
GO
Другие советы
Вы пытаетесь переместить Archive_Data и Data в один и тот же файл - измените имя файла, и все будет в порядке:)
Я тоже столкнулся с этой проблемой, и немного добавил, что мне пришлось воспользоваться предложением REPLACE
, потому что база данных, к которой я восстанавливал, отличалась от той, что была в резервной копии базы данных:
RESTORE DATABASE [MyDB_2009May11]
FROM DISK = N'C:\DB Copy\MyDB_2009May11.bak'
WITH
MOVE N'Archive_Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.mdf',
MOVE N'Data'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ndf',
MOVE N'Log'
TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\MyDB_2009May11.ldf',
**REPLACE**,
NOUNLOAD,
STATS = 10
GO