Script simple pour sauvegarder toutes les bases de données SQL Server – Serveur d’impression
Salut greg,
Merci encore et ma machine est un sql2008r2 ent.
Je regarde ces liens et je ne suis pas sûr que ce soit ce que je voudrais faire pour cette configuration. J'ai également trouvé deux scripts supplémentaires qui semblaient avoir été écrits pour des versions antérieures de SQL Server et je me demandais si vous pouviez y apporter des modifications. Je ne sais pas non plus s'il faut poser cette question ici ou sur votre page de conseil de restauration.
Restaurer toutes les bases de données d'un répertoire
SET QUOTED_IDENTIFIER OFF
ALLER
SET ANSI_NULLS ON
ALLER
si existe (sélectionnez * à partir de dbo.sysobjects où id = object_id (N '[dbo].[sp_CSS_RestoreDir]') et OBJECTPROPERTY (id, N'IsProcedure') = 1)
procédure de largage [dbo].[sp_CSS_RestoreDir]
ALLER
/ ************************************************ *************************************** /
– Nom de la procédure: sp_CSS_RestoreDir
– Objectif: restaurer une ou plusieurs sauvegardes de base de données à partir d'un seul répertoire. Ce script lit tout
– sauvegardes de bases de données trouvées dans le paramètre @restoreFromDir.
–Toute sauvegarde de base de données correspondant au formulaire% _db_% sera restaurée.
– les emplacements de fichier spécifiés dans le (s) paramètre (s) RestoreTo …. La base de données
– sera restauré sous un nom de base de données basé sur la sauvegarde de la base de données
–nom de fichier. Par exemple, Insurance_db_200305212302.BAK sera restauré dans
–une base de données nommée Assurance. Les caractères précédant le texte '_db_' déterminent
–le nom.
–
– Paramètres d'entrée: @restoreFromDir – Le répertoire où se trouvent les sauvegardes de la base de données
[email protected] – Le répertoire dans lequel les fichiers de données (à savoir, MDF) seront restaurés
[email protected] – Le répertoire dans lequel les fichiers journaux (c'est-à-dire LDF) seront restaurés. Si
–Ce paramètre n'est pas fourni, puis les fichiers journaux sont restaurés dans @restoreToDataDir.
– @MatchFileList – défini sur 'Y' pour restaurer la même structure de répertoires que celle contenue dans la sauvegarde,
– permet également aux fichiers de données secondaires 'ndf' d'être dans un répertoire différent de celui des fichiers mdf
– @DBName – Ne restaurez que cette base de données – sélectionne le dernier fichier bak
–
– Paramètres de sortie: Aucun
–
– Valeurs de retour:
–
– Rédigé par: Chris Gallelli – 8/22/03
— Modifié par:
– Modifications: Bruce Canaday – 10/20/2003
– Ajout des paramètres facultatifs @MatchFileList et @DBName
– Bruce Canaday – 24/10/2003
– Récupère le nom de la base de données en tant que caractères à gauche du plus à droite '_db_' dans le nom de fichier
– Ceci est destiné à gérer des bases de données telles que ALIS_DB
– Bruce Canaday – 28/10/2003
– Lors de l’utilisation de @MatchFileList = 'Y', essayez de créer un répertoire qui n’existe pas
– Bruce Canaday – 11/04/2003
– Autoriser les espaces dans le nom du répertoire @restoreFromDir
–
– Exemple d'exécution: exec sp_CSS_RestoreDir 'C: sqldb sql_backup', 'C: sqldb sql_data', 'C: sqldb sql_log'
–
– Exécution alternative: exec sp_CSS_RestoreDir 'C: sqldb sql_backup', @MatchFileList = 'Y'
–
— Revu par:
–
/ ************************************************ *************************************** /
CREATE proc sp_CSS_RestoreDir
@restoreFromDir varchar (255),
@restoreToDataDir varchar (255) = null,
@restoreToLogDir varchar (255) = null,
@MatchFileList char (1) = 'N',
@OneDBName varchar (255) = null
comme
–Si un répertoire pour le fichier journal n'est pas fourni, utilisez le répertoire de données
Si @restoreToLogDir est null
set @restoreToLogDir = @restoreToDataDir
mettre nocount sur
declare @filename varchar (40),
@cmd varchar (500),
@ cmd2 varchar (500),
@DataName varchar (255),
@LogName varchar (255),
@LogicalName varchar (255),
@PhysicalName varchar (255),
@Type varchar (20),
@FileGroupName varchar (255),
@Size varchar (20),
@MaxSize varchar (20),
@restoreToDir varchar (255),
@searchName varchar (255),
@DBName varchar (255),
@PhysicalFileName varchar (255)
create table #dirList (nomfichier varchar (100))
create table #filelist (nom_videntiel (255), nom_variable (255), nom_variable (255), nom_variable (255), nom de groupe_variable (255), taille varchar (20), taille_variable (20))
–Obtenir la liste des sauvegardes de base de données qui se trouvent dans le répertoire restoreFromDir
si @OneDBName est null
sélectionnez @cmd = 'dir / b / on "' [email protected]+ '"'
autre
sélectionnez @cmd = 'dir / b / o-d / o-g "' [email protected]+ '"'
insère #dirList exec master..xp_cmdshell @cmd
select * from #dirList où filename comme '% _db_%' – ordre par nom de fichier
si @OneDBName est null
déclarer le curseur BakFile_csr pour
sélectionnez * à partir de #dirList où nom_fichier ressemble à '% _db_% bak', ordre par nom_fichier
autre
begin – une seule base de données, ne pas classer par nom de fichier, prendre par défaut la dernière date / o-d parm dans la commande dir ci-dessus
select @searchName = @OneDBName + '_db_% bak'
déclarer le curseur BakFile_csr pour
sélectionnez top 1 * from #dirList où filename est comme @searchName
fin
ouvrir BakFile_csr
récupère BakFile_csr dans @filename
tandis que @@ fetch_status = 0
commencer
select @cmd = "RESTORE FILELISTONLY FROM disk = '" + @restoreFromDir + "" + @filename + "'"
insert #filelist exec (@cmd)
si @OneDBName est null
select @dbName = left (@ nomfichier, datalength (@nomfichier) – patindex ('% _bd _%', inverser (@nomfichier)) – 3)
autre
select @dbName = @OneDBName
select @cmd = "RESTORE DATABASE" + @dbName +
"FROM DISK = '" + @restoreFromDir + "" + @filename + "' WITH"
IMPRESSION ''
IMPRESSION 'BASE DE DONNEES DE RESTAURATION' + @dbName
déclarer le curseur DataFileCursor pour
Sélectionnez LogicalName, PhysicalName, Type, FileGroupName, Size, MaxSize.
de #filelist
ouvrir DataFileCursor
récupérer DataFileCursor dans @LogicalName, @PhysicalName, @Type, @FileGroupName, @Size, @MaxSize
tandis que @@ fetch_status = 0
commencer
if @MatchFileList! = 'Y'
commencer – option RESTORE with MOVE
select @PhysicalFileName = reverse (sous-chaîne (reverse (rtrim (@PhysicalName))), 1, patindex ('% %', reverse (rtrim (@PhysicalName)) – 1))
si @Type = 'L'
sélectionnez @restoreToDir = @restoreToLogDir
autre
select @restoreToDir = @restoreToDataDir
sélectionnez @cmd = @cmd +
"MOVE" "+ @LogicalName +" 'TO "" + @restoreToDir + "" + @PhysicalFileName + "',"
fin
autre
begin – Correspond à la liste de fichiers, tente de créer tout répertoire manquant
sélectionnez @restoreToDir = left (@ PhysicalName, datalength (@PhysicalName) – patindex ('% %', reverse (@PhysicalName)))
sélectionnez @ cmd2 = "s'il n'existe pas" [email protected]+ "md" [email protected]
exec master..xp_cmdshell @ cmd2
fin
récupérer DataFileCursor dans @LogicalName, @PhysicalName, @Type, @FileGroupName, @Size, @MaxSize
end – boucle DataFileCursor
fermer DataFileCursor
désallouer DataFileCursor
sélectionnez @cmd = @cmd + 'REPLACE'
–select @cmd 'commande'
EXEC (@CMD)
tronquer la table #filelist
récupère BakFile_csr dans @filename
fin – boucle BakFile_csr
fermer BakFile_csr
libère BakFile_csr
déposer table #dirList
revenir
ALLER
SET QUOTED_IDENTIFIER OFF
ALLER
SET ANSI_NULLS ON
ALLER
Restaure automatiquement tous les fichiers .BAK de la base de données
/ ************************************************ ************
Scénario écrit par: Lester A. Policarpio
Adresse électronique : [email protected]
Date de création: 3 septembre 2007
– = UPDATES = –
17 janvier 2008
– Valeur sortie résolue de la variable @restoredb
– Résolution du problème "paramètre de longueur non valide"
6 mai 2008
– Suppression des variables inutilisées
– Ajoutez la commande headeronly pour accepter le format de sauvegarde autre que SQL
(dbname_db_YYYYYMMDDHHMM.BAK)
– Ajouter plus de commentaires
12 mai 2008
– Accepter les fichiers de sauvegarde avec plusieurs NDF
23 mai 2008
– Résolution du problème lorsque RESTORE HEADERONLY génère plusieurs valeurs.
– = LIMITATIONS = –
– Ce script est testé pour les fichiers de sauvegarde ".BAK" uniquement
– Le script doit être modifié si l'extension de sauvegarde n'est pas ".bak"
************************************************* *********** /
SET NOCOUNT ON
–Drop Tables s'il existe dans la base de données
s'il existe (sélectionnez name dans sysobjects où name = 'migration_lester')
DROP TABLE migration_lester
s'il existe (sélectionnez name dans sysobjects où name = 'header_lester')
DROP TABLE header_lester
s'il existe (sélectionnez name dans sysobjects où name = 'cmdshell_lester')
DROP TABLE cmdshell_lester
–Créer des tables
– (table cmdshell_lester pour la commande cmdshell)
– (table migration_lester pour la commande restore filelistonly)
– (table header_lester pour la commande restore headeronly)
CREATE TABLE cmdshell_lester (fentry varchar (1000))
CREATE TABLE migration_lester (LogicalName varchar (1024),
PhysicalName varchar (4000), tapez char (1), FileGroupName varchar (50),
taille réelle, taille réelle)
CREATE TABLE header_lester (BackupName varchar (50),
BackupDescription varchar (100), BackupType int,
ExpirationDate nvarchar (50), Compressed int, Position int,
DeviceType int, nom d'utilisateur varchar (30), nom de serveur varchar (30),
DatabaseName varchar (50), DatabaseVersion int,
DatabaseCreationDate datetime, BackupSize bigint, binaire FirstLsn,
Binaire LastLsn, binaire CheckpointLsn, binaire DifferentialBasLsn,
BackupStartDate datetime, BackupFinishDate datetime, SortOrder int,
CodePage int, UnicodeLocaleid int, UnicodeComparisonStyle int,
CompatibilityLevel int, SoftwareVendorId int, SoftwareVersionMajor int,
SoftwareVersionMinor int, SoftwareVersionBuild int,
Nom de la machine varchar (50), Flags int, BindingId nvarchar (50),
RecoveryForkId nvarchar (50), collation nvarchar (50))
–Déclare les variables
DECLARE @path varchar (1024), @ restore varchar (1024)
DECLARE @restoredb varchar (2000), @ extension varchar (1024), @ newpath_ldf varchar (1024)
DECLARE @pathension varchar (1024), @ newpath_mdf varchar (1024), @ en-tête varchar (500)
–Définir les valeurs sur les variables
SET @newpath_mdf = 'C: ' – nouveau chemin dans lequel vous placerez le mdf
SET @newpath_ldf = 'D: ' –nouveau chemin dans lequel vous placerez le ldf
SET @path = 'D: ' –Path du fichier de sauvegarde
SET @extension = 'BAK'
SET @pathension = 'dir / OD'[email protected]+ '*.'[email protected]
–Insérer la valeur du shell de commande dans la table
INSERT INTO cmdshell_lester exec master..xp_cmdshell @pathension
–Supprimer les données des fichiers de sauvegarde, supprimer les valeurs nulles
SUPPRIMER DE cmdshell_lester WHERE FEntry NE AIME PAS '% .BAK%'
DELETE DE cmdshell_lester WHERE FEntry est NULL
–Créez un curseur pour analyser tous les fichiers de sauvegarde nécessaires à la génération du script de restauration
DECLARE @migrate varchar (1024)
DÉCLARER la migration du CURSEUR POUR
sélectionnez la sous-chaîne (FEntry, 40,50) sous le nom 'FEntry' dans cmdshell_lester
OPEN migrer
FETCH NEXT FROM migrate INTO @migrate
PENDANT QUE (@@ FETCH_STATUS = 0) COMMENCE
– Ajout de la fonctionnalité pour obtenir le nom de base du fichier de sauvegarde.
SET @header = 'RESTORE HEADERONLY FROM DISK =' + '' ''[email protected][email protected]+ '' ''
INSERT INTO exec_lester exec (@header)
–Obtenir les noms des mdf et ldf
set @restore = 'RESTORE FILELISTONLY FROM DISK =' + '' ''[email protected][email protected]+ '' ''
INSERT INTO migration_lester EXEC (@restore)
–Mise à jour de la table pour ajouter le nouveau chemin + noms mdf / ldf
UPDATE migration_lester SET nom physique = inversion (nom physique)
UPDATE migration_lester SET nom physique =
sous-chaîne (nom physique, 1, charindex ('', nom physique) -1)
UPDATE migration_lester SET nom physique = @ newpath_mdf + reverse (nom physique) où type = 'D'
UPDATE migration_lester SET nom physique = @ newpath_ldf + reverse (nom physique) où type = 'L'
[email protected]@@@@@@@@@@@@@@@@@@@
– Attribuez une valeur à la variable @restoredb pour contenir le script de base de données de restauration
IF (select count (*) from migration_lester) = 2
COMMENCER
SET @restoredb = 'RESTORE DATABASE' + (sélectionnez top 1 DatabaseName dans header_lester)
+ 'FROM DISK =' + '' ''[email protected][email protected]+ '' '' + 'WITH MOVE' + '' ''
+ (sélectionnez le nom logique de migration_lester où type = 'D') + '' ''
+ 'TO' + '' '+ (sélectionnez le nom physique dans migration_lester WHERE nom physique tel que'% mdf% ')
+ '' '' + ', MOVE' + '' '' + (sélectionnez le nom logique de migration_lester où type = 'L')
+ '' '' + 'TO' + '' '' + (sélectionnez le nom physique dans migration_lester
WHERE nom physique comme '% ldf%') + '' ''
print (@restoredb)
FIN
IF (sélectionnez le nombre (*) dans migration_lester)> 2
COMMENCER
SET @restoredb =
'RESTORE DATABASE' + (sélectionnez top 1 DatabaseName dans header_lester) +
'FROM DISK =' + '' ''[email protected][email protected]+ '' '' + 'WITH MOVE'
DECLARE @multiple varchar (1000), @ physical varchar (1000)
DÉCLARER PLUSIEURS CURSEURS POUR
Sélectionnez un nom logique, un nom physique dans le fichier migration_lester.
OUVERT multiple
FETCH NEXT FROM multiple INTO @ multiple, @ physical
PENDANT (@@ FETCH_STATUS = 0)
COMMENCER
ENSEMBLE @[email protected]+ '' ''[email protected]+ '' '' + 'TO' + '' ''[email protected]+ '' '' + ',' + 'MOVE' + ''
FETCH NEXT FROM multiple INTO @ multiple, @ physical
FIN
Fermer plusieurs
DEALLOCATE multiple
SET @restoredb = sous-chaîne (@ restoreb, 1, len (@restoredb) -5)
print (@restoredb)
FIN
[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
– Lancez print @restoredb pour voir les bases de données à restaurer
– Lorsque vous êtes prêt, exécutez exec (@restoredb)
– EXEC (@restoredb)
[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
– Effacer les données à l'intérieur des tables pour laisser la place à la prochaine
–set d'informations à mettre dans la variable @restoredb
TRUNCATE TABLE migration_lester
TRUNCATE TABLE header_lester
FETCH NEXT FROM migrate INTO @migrate
FIN
FERMER la migration
DEALLOCATE migrate
[email protected]@@@@@@@@@@@@@@@@@@@
–Drop Tables
DROP TABLE migration_lester
DROP TABLE cmdshell_lester
DROP TABLE header_lester
=====================================
Je reçois des erreurs sur ce second … Msg 213, niveau 16, état 7, ligne 1
Le nom de colonne ou le nombre de valeurs fournies ne correspond pas à la définition de la table.







Commentaires
Laisser un commentaire