Serveur d'impression

Script simple pour sauvegarder toutes les bases de données SQL Server – Serveur d’impression

Par Titanfall , le 3 mai 2019 - 11 minutes de lecture

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.

Click to rate this post!
[Total: 0 Average: 0]

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.