Как перейти с SQL 2000 на SQL 2008 через восстановление? - PullRequest
2 голосов
/ 18 июня 2009

Я использую этот код:

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

Я получаю эту ошибку:

Сообщение 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, когда у меня есть только файл резервной копии?

:) Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 18 июня 2009

Вы пытаетесь переместить Archive_Data и Data в один и тот же файл - измените имя файла, и все будет в порядке:)

1 голос
/ 18 июня 2009

сделайте выбор * из 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
0 голосов
/ 17 мая 2012

Я тоже столкнулся с этой проблемой, и просто добавив немного, мне пришлось воспользоваться предложением 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 
...