25 พฤศจิกายน 2568

SQL Server : Stored Procedure for Backup day of week

 สำหรับท่านที่ต้องการสำรองข้อมูลของฐานข้อมูล SQL Server โดยสำรองแล้วตั้งชื่อตามวันในสัปดาห์ ก็สามารถสร้าง Stored Procedure ไว้ภายใต้ฐานข้อมูล master  ตามตัวอย่างด้านล่าง 

USE master
GO

 
/*
Programmer : Kasem K.
Create : 12/11/2006
-- Execute the generated SQL command
    Sample
    ======
          EXEC sp_BackupDatabase
                @databaseName='yourDatabaseName',
                @backupType='F',
                @backupLocation='D:\BackupFolder'
          GO
*/
CREATE PROCEDURE [dbo].[sp_BackupDatabase] 
       @databaseName varchar(300),
       @backupType CHAR(1),  -- F = full bakcup   D = difference backup
       @backupLocation nvarchar(200)
AS
DECLARE @BackupName varchar(200)
DECLARE @BackupFile varchar(200)
DECLARE @sqlCommand nvarchar(4000)
DECLARE @DayOfWeek varchar(10)
SET @DayOfWeek = DATENAME(dw,GETDATE())
-- Create backup filename in path\filename.extension format for full and diff backups
-- Generate the dynamic SQL command to be executed
IF @backupType = 'F'
   BEGIN
SET @BackupFile = @backupLocation + '\' +
     REPLACE(REPLACE(@databaseName, '[',' '),']',' ') + 
     '_' + @dayOfWeek + '.BAK'
SET @BackupName = REPLACE(REPLACE(@databaseName,'[',' '),']',' ') + 
     ' full backup for ' + @DayOfWeek
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +  
     ' TO DISK = ''' + @BackupFile + '''' + 
     ' WITH INIT, NAME = ''' + @BackupName + '''' + 
     ', NOSKIP, NOFORMAT'

                             -- ใช้ INIT: สร้างไฟล์ใหม่ทับไฟล์เดิม
                             -- ใช้ NOFORMAT: เก็บแบ็กอัพใหม่เพิ่มเข้าไปใน media set เดิม
                             -- ใช้ FORMAT: สร้าง media set ใหม่ ลบข้อมูลเดิมออก  

   EXEC(@sqlCommand)
   END
ELSE IF @backupType = 'D'
   BEGIN
SET @BackupFile = @backupLocation + '\' +
     REPLACE(REPLACE(@databaseName, '[',' '),']',' ') + 
     '_' + @DayOfWeek + '.BAK'
SET @BackupName = REPLACE(REPLACE(@databaseName,'[',' '),']',' ') + 
     ' differential backup for '+ @DayOfWeek
SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +  
     ' TO DISK = ''' +  @BackupFile + '''' + 
     ' WITH INIT, NAME = ''' + @BackupName + '''' + 
     ', NOSKIP, NOFORMAT'
    EXEC(@sqlCommand)
   END



การเรียกใช้งาน เช่น ต้องการสำรองฐานข้อมูลชื่อ myDatabase แบบ full backup เก็บไว้ใน ไดร์ฟ D ของ Server ภายใต้ folder ชื่อ Backup ก็สั่งดังนี้

USE master
GO

EXEC sp_BackupDatabase
      @databaseName='myDatabase', 
      @backupType='F', 
      @backupLocation='D:\Backup'
GO

ไม่มีความคิดเห็น:

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.