-
Notifications
You must be signed in to change notification settings - Fork 49
Expand file tree
/
Copy pathPMDB.Create_Database_Backup.sql
More file actions
98 lines (83 loc) · 3.01 KB
/
PMDB.Create_Database_Backup.sql
File metadata and controls
98 lines (83 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*=======================================================================+
| Purpose : Create a backup of the specified database
| Usage : EXEC admin.Create_Database_Backup @DatabaseName = 'PMDB1_TEST'
| Author : Amit Patel (SQL DBA)
| Date : [Insert Date]
| Notes : Ensure the SQL Server Agent service account has access to
| the backup folder path. Customize the path logic as needed.
+========================================================================*/
-- SQLCMD mode variables (used if running from SSMS in SQLCMD mode)
:setvar _server "Server1"
:setvar _user "***username***"
:setvar _password "***password***"
:setvar _database "master"
-- Connect to the instance
:connect $(_server) -U $(_user) -P $(_password)
USE [$(_database)];
GO
IF NOT EXISTS (
SELECT 1
FROM sys.schemas
WHERE name = 'admin'
)
BEGIN
EXEC('CREATE SCHEMA admin');
END
GO
CREATE OR ALTER PROCEDURE [admin].[Create_Database_Backup]
(
@DatabaseName SYSNAME
)
AS
BEGIN
SET NOCOUNT ON;
-- Initialize variables
DECLARE
@SourceDB SYSNAME = @DatabaseName,
@BackupUser NVARCHAR(255),
@DateStamp CHAR(20),
@TargetPath NVARCHAR(500),
@BackupFile NVARCHAR(500),
@SQL NVARCHAR(MAX);
PRINT '====================================================================='
PRINT 'Creating database backup for: ' + @SourceDB
PRINT '====================================================================='
-- Extract backup operator's username
SET @BackupUser = PARSENAME(REPLACE(SUSER_SNAME(), '\', '.'), 1);
-- Generate timestamp
SET @DateStamp = FORMAT(GETDATE(), 'yyyyMMdd_HHmmss');
-- Set default backup path based on server name
-- TODO: Standardize across environments
IF @@SERVERNAME = 'Server1'
SET @TargetPath = 'C:\Temp\';
ELSE
SET @TargetPath = 'C:\Backups\'; -- fallback/default
-- Compose full backup file path
SET @BackupFile = CONCAT(@TargetPath, @SourceDB, '_', @DateStamp, '_', @BackupUser, '.bak');
PRINT 'Backup file path: ' + @BackupFile;
-- Verify database existence
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = @SourceDB)
BEGIN
SET @SQL = '
BACKUP DATABASE [' + @SourceDB + ']
TO DISK = N''' + @BackupFile + '''
WITH FORMAT,
INIT,
NAME = N''' + @SourceDB + '_Full_Backup_' + @DateStamp + ''',
MEDIANAME = N''' + @BackupUser + ''',
STATS = 10;
';
PRINT 'Executing backup command...';
PRINT @SQL;
EXEC (@SQL);
PRINT 'Backup completed successfully.';
END
ELSE
BEGIN
RAISERROR('Database "%s" does not exist.', 16, 1, @SourceDB);
END
PRINT '====================================================================='
PRINT 'Backup procedure finished.'
PRINT '====================================================================='
END
GO