web-dev-qa-db-fra.com

Restaurer la sauvegarde SQL Server 2012 dans une base de données SQL Server 2008?

Existe-t-il un moyen de restaurer une sauvegarde de base de données SQL Server 2012 sur un serveur SQL Server 2008?

J'ai essayé de joindre un fichier, cela ne fonctionne pas.

41
urlreader

Vous avez deux options:

Option A: Scriptez la base de données en mode de compatibilité en utilisant l'option Générer le script:

Remarque: Si vous scriptez la base de données avec un schéma et des données, selon la taille de vos données, le script sera massif et ne sera pas géré par SSMS, sqlcmd ou osql (peut également être en Go).

enter image description here

Option B:

Commencez par écrire les tables en premier avec tous les index, FK, etc. et créez des tables vides dans la base de données de destination - option avec SCHEMA UNIQUEMENT (aucune donnée).

Utiliser BCP pour insérer des données

  1. bcp sortir les données en utilisant le script ci-dessous. définissez SSMS en mode texte et copiez la sortie générée par le script ci-dessous dans un fichier bat.

    -- save below output in a bat file by executing below in SSMS in TEXT mode
    
    -- clean up: create a bat file with this command --> del D:\BCP\*.dat 
    
    select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
        +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
        +  QUOTENAME(name)  
        +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
        +  REPLACE(name,' ','') 
        + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
    from sys.tables
    where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
    /*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
    order by schema_name(schema_id)
    
  2. Exécutez le fichier bat qui générera les fichiers .dat dans le dossier que vous avez spécifié.

  3. Exécutez à nouveau le script ci-dessous sur le serveur de destination avec SSMS en mode texte.

    --- Execute this on the destination server.database from SSMS.
    
    --- Make sure the change the @Destdbname and the bcp out path as per your environment.
    
    declare @Destdbname sysname
    set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
    select 'BULK INSERT ' 
    /*Remember Tables must be present on destination database */ 
    + QUOTENAME(@Destdbname) + '.' 
    + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
    + '.' + QUOTENAME(name) 
    + ' from ''D:\BCP\' /* Change here for bcp out path */ 
    + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
    + '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
    + char(10) 
    + 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
    + char(10) + 'go'
       from sys.tables
       where is_ms_shipped = 0
    and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
    and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
        order by schema_name(schema_id) 
    
  4. Exécutez la sortie à l'aide de SSMS pour réinsérer les données dans les tables.

C'est une méthode bcp très rapide car elle utilise le mode natif.

31
Kin Shah

Non, vous ne pouvez pas reculer, seulement avancer. Vous pouvez créer une base de données vide sur 2008, puis utiliser l'assistant Générer des scripts dans Management Studio pour écrire le schéma et les données (ou des outils de comparaison tiers de Red Gate et autres). Assurez-vous de définir la bonne version cible pour 2008, et vous devrez étoffer les éléments incompatibles (par exemple, OFFSET ou FORMAT) que vous auriez pu utiliser en 2012.

23
Aaron Bertrand

Il n'existe aucun moyen pris en charge pour ce faire car SQL Server n'autorise pas ce type de compatibilité.

Ce que vous pouvez faire, c'est

  1. restaurer la base de données sur SQL 2012

  2. générer des scripts pour les objets et les données

  3. nettoyer les scripts de tous les détails qui sont uniques pour SQL 2012
  4. exécuter des scripts en 2008

Si vous ne disposez pas de SQL Server 2012, vous pouvez utiliser des outils tiers pour lire la sauvegarde et extraire les données et la structure.

Dans ce cas, créez simplement une base de données vide sur SQL 2008 et utilisez des outils tels que ApexSQL Diff et ApexSQL Data Diff pour synchroniser les objets et les données. Vous pouvez également les trouver chez d'autres grands fournisseurs tels que Red-Gate ou Idera.

8
David Smithers