Guest User

Untitled

a guest
Jan 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. USE [master]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[sp_BackupDatabases] ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. IF OBJECT_ID('sp_BackupDatabases') IS NOT NULL
  10. BEGIN
  11. DROP PROCEDURE [dbo].[sp_BackupDatabases]
  12. END
  13.  
  14. GO
  15.  
  16. CREATE PROCEDURE [dbo].[sp_BackupDatabases]
  17. @databaseName sysname = null,
  18. @backupType CHAR(1),
  19. @backupLocation nvarchar(200)
  20. AS
  21. -- =============================================
  22. -- Author: Microsoft
  23. -- Create date: 2010-02-06
  24. -- Description: Backup Databases for SQLExpress
  25. -- Parameter1: databaseName
  26. -- Parameter2: backupType F=full, D=differential, L=log
  27. -- Parameter3: backup file location
  28. -- =============================================
  29.  
  30. -- Example: EXEC sp_BackupDatabases @backupLocation='C:\SQLBackups\', @backupType='F'
  31. -- Example: EXEC sp_BackupDatabases @backupLocation='C:\SQLBackups\', @backupType='D'
  32. -- Example: EXEC sp_BackupDatabases @backupLocation='C:\SQLBackups\', @backupType='L'
  33.  
  34. SET NOCOUNT ON;
  35.  
  36. DECLARE @DBs TABLE
  37. (
  38. ID int IDENTITY PRIMARY KEY,
  39. DBNAME nvarchar(500)
  40. )
  41.  
  42. -- Pick out only databases which are online in case ALL databases are chosen to be backed up
  43. -- If specific database is chosen to be backed up only pick that out from @DBs
  44. INSERT INTO @DBs (DBNAME)
  45. SELECT Name FROM master.sys.databases
  46. where state=0
  47. AND (name=@DatabaseName OR @DatabaseName IS NULL)
  48. ORDER BY Name
  49.  
  50. --Filter out databases which do not need to backed up
  51. --IF @backupType='F'
  52. --BEGIN
  53. -- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
  54. --END
  55. --ELSE IF @backupType='D'
  56. --BEGIN
  57. -- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
  58. --END
  59. --ELSE IF @backupType='L'
  60. --BEGIN
  61. -- DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
  62. --END
  63. --ELSE
  64. --BEGIN
  65. -- RETURN
  66. --END
  67.  
  68. DELETE @DBs where DBNAME IN ('master','model','msdb','tempdb','Northwind','pubs','AdventureWorks')
  69.  
  70. -- Declare variables
  71. DECLARE @BackupName varchar(100)
  72. DECLARE @BackupFile varchar(100)
  73. DECLARE @DBNAME varchar(300)
  74. DECLARE @sqlCommand NVARCHAR(1000)
  75. DECLARE @dateTime NVARCHAR(20)
  76. DECLARE @Loop int
  77.  
  78. -- Loop through the databases one by one
  79. SELECT @Loop = min(ID) FROM @DBs
  80.  
  81. WHILE @Loop IS NOT NULL
  82. BEGIN
  83.  
  84. -- Database Names have to be in [dbname] format since some have - or _ in their name
  85. SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'
  86.  
  87. -- Set the current date and time n yyyyhhmmss format
  88. SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')
  89.  
  90. -- Create backup filename in path\filename.extension format for full,diff and log backups
  91. IF @backupType = 'F'
  92. SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
  93. ELSE IF @backupType = 'D'
  94. SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
  95. ELSE IF @backupType = 'L'
  96. SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'
  97.  
  98. -- Provide the backup a name for storing in the media
  99. IF @backupType = 'F'
  100. SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
  101. IF @backupType = 'D'
  102. SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
  103. IF @backupType = 'L'
  104. SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime
  105.  
  106. -- Generate the dynamic SQL command to be executed
  107.  
  108. IF @backupType = 'F'
  109. BEGIN
  110. SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
  111. END
  112. IF @backupType = 'D'
  113. BEGIN
  114. SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
  115. END
  116. IF @backupType = 'L'
  117. BEGIN
  118. SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+ ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
  119. END
  120.  
  121. -- Execute the generated SQL command
  122. EXEC(@sqlCommand)
  123.  
  124. -- Goto the next database
  125. SELECT @Loop = min(ID) FROM @DBs where ID>@Loop
  126.  
  127. END
Add Comment
Please, Sign In to add comment