Comment créer un script de sauvegarde pour chaque base de données sur SQL Engine?

Nous devons faire une sauvegarde 40 Bases de données à l'intérieur MS SQL Server Engine. Nous effectuons une copie de sauvegarde de chaque base de données à l'aide du script suivant:

BACKUP DATABASE [dbname1] TO  DISK = N'J:\SQLBACKUPS\dbname1.bak' WITH NOFORMAT, INIT,  NAME = N'dbname1-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'dbname1' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'dbname1' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''dbname1'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'J:\SQLBACKUPS\dbname1.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO

Nous souhaitons ajouter au script la possibilité de prendre chaque base de données et de la remplacer dans le scénario ci-dessus. En substance, le script qui créera et vérifiera chaque sauvegarde de la base de données du moteur.

Je cherche quelque chose comme ça:

For each database in database-list
sp_backup(database) // this is the call to the script above.
End For

Des idées?
Invité:

Dominique

Confirmation de:

Vous pouvez le faire en utilisant une procédure de boucle de base de données non documentée.

use [master]
go

set quoted_identifier off

exec sp_MSforeachdb "
if ( '?' not in ( 'master', 'msdb', 'model', 'tempdb' ) )
begin

BACKUP DATABASE [?] TO DISK = N'J:\SQLBACKUPS\?.bak' WITH NOFORMAT, INIT, NAME = N'?-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

declare @backupSetId as int

select @backupSetId = position from msdb..backupset where database_name=N'?' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'?' )

if ( @backupSetId is null )
begin
raiserror(N'Verify failed. Backup information for database ''?'' not found.', 16, 1)
end

RESTORE VERIFYONLY FROM DISK = N'J:\SQLBACKUPS\?.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND

end
"

Dominique

Confirmation de:

Je sais que ce n'est pas une réponse directe à votre question, puisque vous voulez quelque chose avec votre script spécifique, mais je pensais que je le choisirais là-bas.

Si vous avez une version complète MS SQL, mais non MS SQL Express, Vous pouvez exécuter la route du plan de service. Voici un fichier PDF de Sunbelt Software, Ce qui donne une très bonne idée de la façon de l'utiliser, vous pouvez choisir ici les bases de données pour lesquelles vous souhaitez sauvegarder:
http://www.sunbeltsoftware.com ... n.pdf

Catherine

Confirmation de:

Sorte de:

Créer un curseur pour `SELECT name FROM master..sysdatabases WHERE name NOT IN ('list', 'of', 'dbs', 'to', 'skip')

Nous passons dans chaque cycle:

Créez votre script comme chaîne spéciale SQL

(Avoir le journal spécial ci-dessus SQL, Tous les résultats dans une petite base de données de journaux quelque part)

Exécuter-le en utilisant EXEC (@sql)

Imprimer un rapport simple basé sur les résultats enregistrés aux performances de test

Doit faire votre entreprise.

Il existe également un certain nombre de produits sur le marché offrant des options de sauvegarde très flexibles pour SQL Server, qui peut être mieux pour une utilisation de la production si le scénario devient plus compliqué (Bien qu'ils soient sans aucun doute silence).

Giselle

Confirmation de:

J'aurais amélioré votre script:

:: copyonlybackup.bat
IF EXIST "%1_COPYONLY.BAK" (
sqlcmd -U sa -P xxxxxxx -S SQL-DB -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY,INIT;"
echo Overwriting previous COPY_ONLY backup of %1 .
) ELSE (
sqlcmd -U sa -P xxxxxxx -S SQL-DB -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY;"
echo Creating new COPY_ONLY backup of %1 .
)

Et puis nommez-le

:: RUNSCRIPTS.bat
F:
CD "F:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup"

@REM Doing simple copies just in case
call COPYONLYBACKUP.bat db1
call COPYONLYBACKUP.bat db2
call COPYONLYBACKUP.bat db3
...

Enfin, si vous avez besoin d'un cycle, faites-le dans le fichier RUNSCRIPTS.bat, Ce que je montre ci-dessus, en utilisant quelque chose comme ça:

for /f %%a IN (myfile.txt) do call copyonlybackup.bat %%a

Générer myfile.txt, Vous pouvez probablement forcer SQL En quelque sorte pour le générer:

EXEC sp_msForEachDB 'PRINT ''?'''

Pour répondre aux questions, connectez-vous ou registre