java對mssql數據庫的備份和恢復

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章