備份資料庫儲存過程

2021-09-22 20:35:33 字數 3580 閱讀 5574

原文:

備份資料庫儲存過程

由於使用ssms建立的維護計畫中,完整備份的話,會打斷別的備份的順序鏈,而由於管理原因,往往需要有幾套備份計畫,所以經過時間,本人編寫了乙個儲存過程實現我的想法。不管你用不用,反正我用了。

首先,建立乙個表,用於記錄備份資訊。因為用dmv和系統檢視的話往往要編寫很多東西,對於一般人很難記住那麼多表。所以使用乙個表來記錄更加方便。以前之前已經建立了乙個庫 auditdb,用於監控資料庫的ddl操作,所以這裡沒有再編寫建庫指令碼。只是在這個庫裡面建立乙個表。

use auditdb

goif object_id('backuphistory') is not null

drop table backuphistory

gocreate table backuphistory

( databasename nvarchar(128),--資料庫名

createdate datetime,--建立時間

compatibilitylevel tinyint,--資料庫相容級別

recoverymodel char(10),--恢復模式

backupstartdata datetime, --備份開始時間

backupenddata datetime, --備份結束時間

backupspace nvarchar(128), --備份檔案大小

operator nvarchar(128),--執行操作者

servername nvarchar(128), --伺服器名稱

[filename] nvarchar(256) --備份檔案名

);

建了表之後,在msdb或者auditdb中建立這個儲存過程。一般不要在客戶資料中建立。

/*

注意:由於用gui備份會導致備份鏈中斷,而作業無法實現「僅複製備份」,所以使用指令碼備份

create by huangzj 20120510

exec backup_by_dba 'auditdb','e:\新建資料夾\'

*/alter proc backup_by_dba

(@dbname nvarchar(128),

@bakpath nvarchar(128)='e:\')as

--不備份系統表

if @dbname in ( 'master', 'msdb', 'model', 'tempdb' )

begin

return

end

else

begin

--定義備份時間,精確到秒

declare @date nvarchar(64)

select @date = substring(convert(varchar(20), getdate(), 121), 1, 4)

+ '_' + substring(convert(varchar(20), getdate(), 121), 6, 2)

+ '_' + substring(convert(varchar(20), getdate(), 121), 9, 2)

+ '_' + convert(char(2), datepart(hh, getdate()))

+ convert(char(2), datepart(mi, getdate()))

+ convert(char(2), datepart(ss, getdate()))

--定義要備份的資料庫名

declare @db nvarchar(20)

set @db = '' + '' + @dbname + '' + ''

--定義備份檔案的全名

declare @bakname nvarchar(128)

select @bakname = @db + '_' + @date

--定義備份存放路徑

declare @disk nvarchar(256)

select @disk = @bakpath + @bakname + '.bak'

--定義備份描述

declare @name nvarchar(128)

select @name = @db + '-完整 資料庫 備份'

--定義錯誤資訊

declare @error nvarchar(128)

select @error = '驗證失敗。找不到資料庫「' + @db + '」的備份資訊。'

backup database @db to disk = @disk with copy_only, noformat, noinit,

name =@name, skip, norewind, nounload, stats = 10, checksum ;

declare @backupsetid as int

select @backupsetid = position

from msdb..backupset

where database_name = @db

and backup_set_id = ( select max(backup_set_id)

from msdb..backupset

where database_name = @db

)if @backupsetid is null

begin

raiserror(@error, 16, 1)

endrestore verifyonly from disk = @disk with file = @backupsetid, nounload, norewind

insert into auditdb.dbo.backuphistory(databasename,createdate,compatibilitylevel,recoverymodel,backupstartdata,backupenddata,backupspace,operator,servername,[filename])

select a.[name] ,create_date,a.[compatibility_level] ,recovery_model_desc,s.backup_start_date,s.backup_finish_date,convert(varchar(20),convert(decimal(10,2),s.compressed_backup_size/(1024*1024)))+'mb',

s.[user_name],s.[server_name],physical_device_name

from sys.databases a inner join msdb.dbo.backupset s on a.name=s.database_name inner join

msdb.dbo.backupmediafamily m on s.media_set_id =m.media_set_id

where a.name=db_name() and physical_device_name=@disk

end

備註:此處只是完整備份的例子,如果需要別的備份,那麼要修改指令碼。

定時備份資料庫的儲存過程 sql

create procedure dbo back pubs time as declare filename nvarchar 100 檔名 nowday int 設定時間 set filename f jxxdata cast day getdate as varchar 2 dat 檔案路徑及...

備份資料庫

參考 sql如何備份到異機 寫成儲存過程,建立作業定時備份 在sql中對映一下就可以了 exec master.xp cmdshell net use z yizhi d module user yizhi administrator 說明 exec master.xp cmdshell net u...

備份資料庫

命令在dos的 url file mysql bin mysql bin url 目錄下執行 1.匯出整個資料庫 匯出檔案預設是存在mysql bin目錄下 mysqldump u 使用者名稱 p 資料庫名 匯出的檔名 mysqldump u user name p123456 database n...