diff --git a/PMDB.Create_Database_Backup.sql b/PMDB.Create_Database_Backup.sql index abbee4f..430c3da 100644 --- a/PMDB.Create_Database_Backup.sql +++ b/PMDB.Create_Database_Backup.sql @@ -1,6 +1,6 @@ /*-------------------------------------------------------------------------------+ -| Purpose: Create a backup of a database -| Example: EXEC admin.Create_Database_Backup 'PMDB1_TEST' +| Purpose: Create a backup of a database +| Example: EXEC admin.Create_Database_Backup 'PMDB1_TEST' +--------------------------------------------------------------------------------*/ :setvar _server "Server1" @@ -12,67 +12,83 @@ USE [$(_database)]; GO +-- Create procedure to backup a database CREATE PROCEDURE [admin].[Create_Database_Backup] ( -@DatabaseName VARCHAR(50) + @DatabaseName NVARCHAR(50) -- Use NVARCHAR for Unicode support ) -AS +AS BEGIN + SET NOCOUNT ON; -PRINT '=====================================================================' -PRINT 'set the name of the database...' -PRINT '=====================================================================' -DECLARE @SourceDB VARCHAR(50) -SET @SourceDB = @DatabaseName --DB_NAME() + BEGIN TRY + -- Variable declarations + DECLARE @SourceDB NVARCHAR(50); + DECLARE @BackupUser NVARCHAR(255); + DECLARE @DateStamp NVARCHAR(20); + DECLARE @TargetPath NVARCHAR(255); + DECLARE @BackupSQL NVARCHAR(MAX); -PRINT '=====================================================================' -PRINT 'get user name...' -PRINT '=====================================================================' -DECLARE @BackupUser VARCHAR(255) -SET @BackupUser = (substring(suser_sname(),charindex('\',suser_sname())+(1),len(suser_sname())-charindex('\',suser_sname()))) + PRINT '=====================================================================' + PRINT 'Starting database backup process...' + PRINT '=====================================================================' -PRINT '=====================================================================' -PRINT 'get current date and time...' -PRINT '=====================================================================' -DECLARE @DateStamp VARCHAR(20) -SET @DateStamp = '_' + CONVERT(VARCHAR(20),GetDate(),112) + '_' + REPLACE(CONVERT(VARCHAR(20),GetDate(),108),':','') + -- Set the name of the database + SET @SourceDB = @DatabaseName; -PRINT '=====================================================================' -PRINT 'set database backup path...' -PRINT '=====================================================================' -DECLARE @TargetPath VARCHAR(255) --- TO DO: Standardize the backup folder location for all servers -IF @@SERVERNAME = 'Server1' SET @TargetPath = 'C:\Temp\' + -- Get the username of the person executing the backup + SET @BackupUser = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, + LEN(SUSER_SNAME()) - CHARINDEX('\', SUSER_SNAME())); -PRINT '=====================================================================' -PRINT 'set the backup file name...' -PRINT '=====================================================================' -SET @TargetPath = @TargetPath + @SourceDB + @DateStamp + '_' + @BackupUser + '.bak''' -PRINT @TargetPath + -- Get the current date and time + SET @DateStamp = '_' + CONVERT(NVARCHAR(20), GETDATE(), 112) + '_' + + REPLACE(CONVERT(NVARCHAR(20), GETDATE(), 108), ':', ''); -PRINT '=====================================================================' -PRINT 'backup the database...' -PRINT '=====================================================================' -IF EXISTS(SELECT NAME FROM sys.databases where name = @SourceDB) -BEGIN - DECLARE @BACKUP_SQL VARCHAR(MAX) - SET @BACKUP_SQL = - 'BACKUP DATABASE ' + @SourceDB + ' - TO DISK = ''' + @TargetPath + ' - WITH FORMAT, - MEDIANAME = ''' + @BackupUser + ''', - NAME = ''' + @SourceDB + @DateStamp + '''' + -- Set the database backup path + -- TODO: Standardize the backup folder location for all servers + IF @@SERVERNAME = 'Server1' + SET @TargetPath = N'C:\Temp\'; + ELSE + SET @TargetPath = N'D:\Backups\'; - PRINT @BACKUP_SQL - EXEC (@BACKUP_SQL) -END -PRINT '=====================================================================' -PRINT 'Finished!' -PRINT '=====================================================================' + -- Set the backup file name + SET @TargetPath = @TargetPath + @SourceDB + @DateStamp + '_' + @BackupUser + '.bak'; -END + PRINT 'Backup file will be saved at: ' + @TargetPath; + -- Check if the database exists + IF EXISTS (SELECT name FROM sys.databases WHERE name = @SourceDB) + BEGIN + -- Construct the BACKUP SQL command + SET @BackupSQL = N' + BACKUP DATABASE [' + @SourceDB + N'] + TO DISK = ''' + @TargetPath + N''' + WITH FORMAT, + MEDIANAME = ''' + @BackupUser + N''', + NAME = ''' + @SourceDB + @DateStamp + N''''; -GO + PRINT 'Executing backup command...'; + -- Execute the backup command + EXEC sp_executesql @BackupSQL; + PRINT '=====================================================================' + PRINT 'Database backup completed successfully!' + PRINT '=====================================================================' + END + ELSE + BEGIN + PRINT '=====================================================================' + PRINT 'Error: The specified database does not exist!' + PRINT '=====================================================================' + END + END TRY + BEGIN CATCH + -- Handle errors + PRINT '=====================================================================' + PRINT 'Error occurred during the database backup process.' + PRINT ERROR_MESSAGE(); + PRINT '=====================================================================' + END CATCH +END +GO