java對數據庫的備份和恢復要用到的數據庫連接方法DB.getMsConn:
用到的存儲過程(該存儲過程由網上收集+個人修改):
CREATE PROCEDURE DBbackup
@bakequip int, -- 備份設備:磁盤&磁帶
@bakpath varchar(50), -- 帶全路徑的備份文件名
@baktype int, -- 完全備份&增量備份
@baklog int, -- ‘0’備份日誌
@bakdb int, -- ‘0’備份數據庫
@kind varchar(7), --備份還是恢復
@retmsg varchar(20) out --返回信息
AS
DECLARE @DevName_data varchar(50)
DECLARE @DevName_log varchar(50)
DECLARE @db_path varchar(100)
DECLARE @log_path varchar(100)
SELECT @DevName_data =@bakpath + '.dat'
SELECT @DevName_log = @bakpath + 'log.dat'
SELECT @db_path = @bakpath + '.dat'
SELECT @log_path= @bakpath + 'log.dat'
DBCC CHECKDB(llp)
IF NOT EXISTS (SELECT * FROM sysdevices WHERE NAME=@DevName_log OR NAME=@DevName_data)
BEGIN
EXEC sp_addumpdevice 'disk', @DevName_data,@db_path
EXEC sp_addumpdevice 'disk', @DevName_log,@log_path
IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE llp TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG llp WITH NO_LOG
BACKUP LOG llp TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE llp TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG llp WITH NO_LOG
BACKUP LOG llp TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SET @retmsg='數據庫備份成功!'
END
IF @kind='restore'
BEGIN
RESTORE DATABASE llp FROM DISK=@DevName_data WITH REPLACE
SET @retmsg='恢復數據庫成功!'
END
END
ELSE
BEGIN
EXEC SP_DropDevice @Devname_data
EXEC sp_dropdevice @devname_log
EXEC sp_addumpdevice 'disk', @DevName_data,@db_path
EXEC sp_addumpdevice 'disk', @DevName_log,@log_path
IF @kind='backup'
BEGIN
IF @bakequip=0
BEGIN
IF @baktype=0
BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE llp TO DISK=@Devname_data
WITH INIT
END
IF @baklog=0
BEGIN
BACKUP LOG llp WITH NO_LOG
BACKUP LOG llp TO DISK=@DevName_log
WITH INIT,NO_TRUNCATE
END
END
ELSE BEGIN
IF @bakdb=0
BEGIN
BACKUP DATABASE llp TO DISK=@DevName_data
WITH NOINIT
END
IF @baklog=0
BEGIN
BACKUP LOG llp WITH NO_LOG
BACKUP LOG llp TO DISK=@DevName_log
WITH NOINIT,NO_TRUNCATE
END
END
END
SET @retmsg='數據庫備份成功!'
END
IF @kind='restore'
BEGIN
DECLARE hCForEach CURSOR FOR
SELECT s='kill '+CAST(spid AS VARCHAR) FROM master..sysprocesses
WHERE dbid=DB_ID('llp')
EXEC sp_msforeach_worker '?'
RESTORE DATABASE llp FROM DISK=@DevName_data WITH REPLACE
SET @retmsg='恢復數據庫成功!'
END
END
RETURN 0
GO