原文:
備份資料庫儲存過程
由於使用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...