2009-06-18 3 views
2

Je suis en cours d'exécution de ce code:comment migrer de SQL 2000 à SQL 2008 via la restauration?

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 

Je reçois cette erreur:

Msg 3176, niveau 16, état 1, ligne 1 fichier « C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQL2008 \ MSSQL \ DATA \ MyDB_2009May11.mdf 'est revendiqué par' Archive_Data '(3) et' Data '(1). La clause WITH MOVE peut être utilisée pour déplacer un ou plusieurs fichiers. Msg 3013, niveau 16, état 1, ligne 1 RESTORE DATABASE se termine de manière anormale.

Comment est-ce que je suis migré de sql server 2000 à 2008 quand tout ce que j'ai est le fichier de sauvegarde?

:) Toute aide est appréciée.

Répondre

1

faire un select * from sysaltfiles et regarder les noms de fichiers corrects et puis modifiez les noms dans le mouvement de se séparer en conséquence

cela vous donnera les noms de tous les groupes de fichiers actuellement

select filename from master..sysaltfiles 
where name = 'MyDB_2009May11' 

si vous n'avez pas encore databse scénarisé puis faire en premier. assurez-vous que les dossiers existent, vous pouvez également modifier les filesizes

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 

Maintenant, la restauration devrait être ce, notez l'extension ndf pour l'archive filegroup

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

Mec. C'était une réponse incroyable. Je vais essayer ça le matin quand je serai de retour au bureau. Merci beaucoup! – bitcycle

3

Vous essayez de déplacer Archive_Data et données dans le même fichier - modifier le nom du fichier et vous devriez être bien :)

+0

Merci Aaron, je pense que cela est t La réponse la plus simple. +1 pour vous – Sebastian

+0

C'était en fait la solution pour moi. J'ai parcouru l'interface graphique pour créer mon script de restauration, mais il y avait des noms de fichiers identiques. Alors je les ai changés et ça a marché. +1 –

0

je suis tombé sur ce problème aussi bien et juste un peu ajouter sur je devais utiliser la clause REPLACE parce que la base de données que je restaurait à était différente de celle de la sauvegarde de base de données:

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 
Questions connexes