一、建立作業備份數據庫
打開SQL SERVER MANAGEMENT STUDIO,啟動SQL SERVER代理服務(注意在“控制面板-管理工具-服務”中設置SQL SERVER AGENT的啟動類型為自動)。啟動后點擊“作業-新建作業”,彈出一個作業屬性的窗口,在“常規”欄目里可以先給作業命名,假設為“備份數據”。?一、備份數據的第一個步驟--“備份當日數據”?
在“步驟”欄目里新建一個步驟名為“備份當日數據”,類型為“T-SQL”,數據庫選擇你要操作的數據庫(假設為“TESTDB”),命令窗口里填入備份的SQL語句。假設備份數據放在“D:\BACKUP”里,備份文件命名格式為“SQL-2009-3-26.BAK”,那么語句如下:
DECLARE @filename VARCHAR(255) DECLARE @date DATETIME SELECT @date=GETDATE() SELECT @filename = 'D:\BACKUP\SQL-'+CAST(DATEPART(yyyy,@date) as varchar)+'-'+CAST(DATEPART(mm,@date) as varchar)+'-'+CAST(DATEPART(dd,@date) as varchar)+'.bak' BACKUP DATABASE [TESTDB] TO DISK = @filename WITH INIT GO
在步驟屬性的高級的“成功時要執行的操作”選擇“轉到下一步”即可,這樣“備份當日數據”的步驟已經建立好。
二、備份數據的第二個步驟--“刪除舊有備份”
我們可以設置只保留5天內的備份數據,那么必須刪除5天前的數據備份文件。在“備份數據”作業屬性窗口的步驟欄目里,建立第二個步驟命名為“刪除舊有備份”。同樣類型為“T-SQL”,命令窗口里填入一下SQL語句:
DECLARE @OLDDATE DATETIME SELECT @OLDDATE=GETDATE()-5 EXECUTE master.dbo.xp_delete_file 0,N'D:\BACKUP',N'bak',@olddate,1
此命令會刪除“D:\BACKUP”里5天前的.BAK或.TRN格式的文件,不用指定文件名是什么。因為SQL SERVER的備份文件里包含了時間屬性在里面。在步驟屬性的高級的“成功時要執行的操作”選擇“退出報告成功的作業”即可,這樣第二個步驟已經建立好。
三、備份數據作業屬性的計劃欄目里,設置作業的執行時間
新建一個作業計劃,命名為“每日自動備份和刪除”,再選擇執行的周期,例如每天凌晨1點開始執行。
最后保存整個“備份數據”的作業,每日就會自動備份數據庫和刪除舊有數據了。
?
四、清理歷史記錄
1. 刪除舊的歷史記錄
每次執行備份或還原操作后會向備份和還原歷史記錄表添加額外的行。因此,如果實例中的數據庫備份非常頻繁,建議定期執行 sp_delete_backuphistory,通過刪除早于指定日期的備份集條目,減小備份和還原歷史記錄表的大小。
USE msdb; GO EXEC sp_delete_backuphistory @oldest_date = '2013-06-30';
2. 刪除特定數據庫的所有歷史記錄
sp_delete_database_backuphistory 將從備份和還原歷史記錄表中刪除有關指定數據庫的所有歷史記錄。 USE msdb; GO EXEC sp_delete_database_backuphistory @database_name = 'db01';
?五、查看事務日志文件是否做過備份
如果發現數據庫db01的事務日志文件(LDF文件)變得非常大,那么首先運行以下語句,檢查db01數據庫是否做過事務日志備份。 select * from msdb.dbo.backupset where database_name='db01' and type='L'
?
六.?數據庫備份還原歷史記錄
備份還原的記錄都在msdb里。
1.?備份記錄
SELECT bs.backup_set_id,bs.database_name,bs.backup_start_date,bs.backup_finish_date,CAST(CAST(bs.backup_size/1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS [Size],CAST(DATEDIFF(second, bs.backup_start_date,bs.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' [TimeTaken],CASE bs.[type]WHEN 'D' THEN 'Full Backup'WHEN 'I' THEN 'Differential Backup'WHEN 'L' THEN 'TLog Backup'WHEN 'F' THEN 'File or filegroup'WHEN 'G' THEN 'Differential file'WHEN 'P' THEN 'Partial'WHEN 'Q' THEN 'Differential Partial'END AS BackupType,bmf.physical_device_name,CAST(bs.first_lsn AS VARCHAR(50)) AS first_lsn,CAST(bs.last_lsn AS VARCHAR(50)) AS last_lsn,bs.server_name,bs.recovery_modelFROM msdb.dbo.backupset bsINNER JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_idORDER BY bs.server_name,bs.database_name,bs.backup_start_date; GO
如果server_name是本機,那么備份是在本機生成的;
如果server_name是別的主機名,那么備份是被拿到本機做過數據庫還原;
?
2.?還原紀錄
SELECT rs.[restore_history_id],rs.[restore_date],rs.[destination_database_name],bmf.physical_device_name,rs.[user_name],rs.[backup_set_id],CASE rs.[restore_type]WHEN 'D' THEN 'Database'WHEN 'I' THEN 'Differential'WHEN 'L' THEN 'Log'WHEN 'F' THEN 'File'WHEN 'G' THEN 'Filegroup'WHEN 'V' THEN 'Verifyonly'END AS RestoreType,rs.[replace],rs.[recovery],rs.[restart],rs.[stop_at],rs.[device_count],rs.[stop_at_mark_name],rs.[stop_before] FROM [msdb].[dbo].[restorehistory] rs INNER JOIN [msdb].[dbo].[backupset] bs --on rs.backup_set_id = bs.media_set_id ON rs.backup_set_id = bs.backup_set_id INNER JOIN msdb.dbo.backupmediafamily bmf ON bs.media_set_id = bmf.media_set_id GO
還原數據庫的時候是會寫backupset和backupmediafamily系統表的,用來記錄還原所用到的備份文件信息。