Existe-t-il un moyen de restaurer une sauvegarde de base de données SQL Server 2012 vers un serveur SQL Server 2008?
J'ai essayé de joindre un fichier, cela ne fonctionne pas.
Existe-t-il un moyen de restaurer une sauvegarde de base de données SQL Server 2012 vers un serveur SQL Server 2008?
J'ai essayé de joindre un fichier, cela ne fonctionne pas.
Réponses:
Vous avez deux options:
Option A : Script de base de données en mode de compatibilité en utilisant l'option Générer un script:
Remarque: Si vous écrivez une base de données avec un schéma et des données en sortie de script, en fonction de la taille de vos données, le script sera volumineux et ne sera pas géré par SSMS, sqlcmd ou osql (éventuellement en Go).
Option B:
Commencez par rédiger en script les tables avec tous les index, les FK, etc., puis créez des tables vides dans la base de données de destination - option avec SCHEMA ONLY (pas de données).
Utiliser BCP pour insérer des données
bcp sur 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)
Exécutez le fichier bat qui générera les fichiers .dat dans le dossier que vous avez spécifié.
Exécutez le script ci-dessous sur le serveur de destination avec SSMS en mode texte à nouveau.
--- 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)
Exécutez la sortie à l'aide de SSMS pour insérer des données dans les tables.
C'est une méthode très rapide, car elle utilise le mode natif.
Some SSIDs and linked servers didn't go across properly
. Les serveurs liés doivent être scriptés manuellement. Les SSID peuvent être transférés à l'aide de sp_helprevlogin. Les tâches SQLAgent, les packages ssis, etc. doivent être déplacés selon vos besoins. Le but de cette méthode est d’obtenir les données aussi rapidement que possible lorsque vous rétrogradez ou fusionnez 2 bases de données.
Non, vous ne pouvez pas revenir en arrière, mais en avant. Vous pouvez créer une base de données vide en 2008, puis utiliser l'assistant de génération de scripts de Management Studio pour créer un script du schéma et des données (ou des outils de comparaison tiers de Red Gate et d'autres). Assurez-vous de définir la bonne version cible en 2008 et vous devrez préciser les éléments incompatibles (par exemple, OFFSET ou FORMAT) que vous auriez peut-être utilisés en 2012.
Il n'y a pas de moyen supporté pour cela, car SQL Server n'autorise pas ce type de compatibilité.
Ce que tu peux faire c'est de
restaurer la base de données sur SQL 2012
générer des scripts pour les objets et les données
Si vous ne possédez pas SQL Server 2012, vous pouvez utiliser des outils tiers pour lire les sauvegardes 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 les trouver chez d'autres grands fournisseurs tels que Red-Gate ou Idera.