monkeybron
REM +---------------------------------------------------------------------------------+
REM |desc AUTO backup sqlserver database and recovery to focdev env ervery week       |
REM |auther: monkeybron 38339332@qq.com                                            |
REM |NOTE :  xp_cmdshell must ON   V2.0                                               |
REM +---------------------------------------------------------------------------------+
REM +--------------------------------------------------------------------------+
REM | VALIDATE ENVIRONMENT VARIABLES                                           |
REM +--------------------------------------------------------------------------+

set YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%
set hhmiss=%time:~0,2%%time:~3,2%%time:~6,2%
set BACKUPTEMP=D:\dbbackup
set BACKUPLOG=%BACKUPTEMP%\backup.log
SET RECOVERYLOG=%BACKUPTEMP%\recovery.log
set GRANTLOG=%BACKUPTEMP%\grant.log
set LOGFILE=D:\dba_scripts\autobackup_%YYYYmmdd%_%hhmiss%.log
set BAKCMDFILE=%BACKUPTEMP%\backup.rcv

SET REMOTEUSER=sa
set REMOTEPASSWD=xxxxSET RECOVERYFILE=%BACKUPTEMP%\recovery.rcv
set GRANTFILE=%BACKUPTEMP%\GRANTFILE.rcv



REM +--------------------------------------------------------------------------+
REM | REMOVE OLD LOG AND COMMAND FILES AND FILES                               |
REM +--------------------------------------------------------------------------+

del /q %BACKUPTEMP%
md %BACKUPTEMP%


REM +--------------------------------------------------------------------------+
REM | WRITE BACKUP COMMAND SCRIPT.                                             |
REM +--------------------------------------------------------------------------+
 
> %BAKCMDFILE% echo exec master.sys.xp_cmdshell \'net use g: \\172.31.40.41\dbbackup "xxxxx" /user:172.31.40.41\administrator\',NO_OUTPUT
>> %BAKCMDFILE% echo go
>> %BAKCMDFILE% echo declare @s nvarchar(200),@del nvarchar(200)
>> %BAKCMDFILE% echo select @s=\'\',@del=\'\'
>> %BAKCMDFILE% echo declare datebak cursor for
>> %BAKCMDFILE% echo select
>> %BAKCMDFILE% echo [bak]=\'backup database  \'+quotename(Name)+\'  to disk =\'\'g:\\'+Name+\'_\'+convert(varchar(8),getdate(),112)+\'.bak\'\' with init,format,compression,buffercount=50,maxtransfersize=4194304;\',
>> %BAKCMDFILE% echo [del]=\'exec master..xp_cmdshell \'\' del g:\'+Name+\'_\'+convert(varchar(8),getdate()-7,112)+\'.bak\'\', no_output\'
>> %BAKCMDFILE% echo from master..sysdatabases where dbid=db_id(\'isa\')
>> %BAKCMDFILE% echo open datebak
>> %BAKCMDFILE% echo fetch next from datebak into @s,@del
>> %BAKCMDFILE% echo while @@fetch_status=0
>> %BAKCMDFILE% echo begin
>> %BAKCMDFILE% echo  exec(@del)
>> %BAKCMDFILE% echo  exec(@s)
>> %BAKCMDFILE% echo  fetch next from datebak into @s,@del
>> %BAKCMDFILE% echo  end
>> %BAKCMDFILE% echo close datebak
>> %BAKCMDFILE% echo deallocate datebak
>> %BAKCMDFILE% echo go
>> %BAKCMDFILE% echo exec master..xp_cmdshell \'net use g: /delete\'
>> %BAKCMDFILE% echo go


REM +--------------------------------------------------------------------------+
REM | PERFORM remote SQL BACKUP.                                                      |
REM +--------------------------------------------------------------------------+

sqlcmd -S 172.31.86.56 -U%REMOTEUSER% -P%REMOTEPASSWD% -i %BAKCMDFILE% -o %BACKUPLOG%

REM +--------------------------------------------------------------------------+
REM | WRITE RECOVERY COMMAND SCRIPT.                                           |
REM +--------------------------------------------------------------------------+



>%RECOVERYFILE%  echo declare @i int declare cur cursor for select spid from sysprocesses where db_name(dbid)= \'isa_test\' open cur fetch next from cur into @i while @@fetch_status=0 begin exec(\'kill \'+@i) fetch next from cur into @i end close cur deallocate cur;
>>%RECOVERYFILE% echo drop database isa_test;
>>%RECOVERYFILE% echo declare @res nvarchar(200)
>>%RECOVERYFILE% echo select @res=\'\'
>>%RECOVERYFILE% echo declare datebak cursor for
>>%RECOVERYFILE% echo select
>>%RECOVERYFILE% echo [res]=\'restore database isa_test from disk =\'\'d:\dbbackup\\'+\'isa\'+\'_\'+convert(varchar(8),getdate(),112)+\'.bak\'\'\'
>>%RECOVERYFILE% echo + \' with move \'\'ISA_Data\'\' to \'\'D:\DATA\isa_test.mdf\'\',move\'\'ISA_Log\'\' to \'\'D:\DATA\isa_test.ldf\'\';\'
>>%RECOVERYFILE% echo from master..sysdatabases where dbid=db_id(\'master\')
>>%RECOVERYFILE% echo open datebak
>>%RECOVERYFILE% echo fetch next from datebak into @res
>>%RECOVERYFILE% echo while @@fetch_status=0
>>%RECOVERYFILE% echo     begin
>>%RECOVERYFILE% echo         exec(@res)
>>%RECOVERYFILE% echo         fetch next from datebak into @res
>>%RECOVERYFILE% echo     end
>>%RECOVERYFILE% echo close datebak
>>%RECOVERYFILE% echo deallocate datebak
>>%RECOVERYFILE% echo go


REM +--------------------------------------------------------------------------+
REM |  RECOVERY to dev hosts.                                                  |
REM +--------------------------------------------------------------------------+

sqlcmd  -i %RECOVERYFILE% -o %RECOVERYLOG%



REM +--------------------------------------------------------------------------+
REM | WRITE GRANT PRIVILEGES COMMAND SCRIPT.                                   |
REM +--------------------------------------------------------------------------+

>%GRANTFILE%  echo USE [master]
>>%GRANTFILE% echo GO
>>%GRANTFILE% echo ALTER DATABASE [isa_test] SET RECOVERY SIMPLE WITH NO_WAIT
>>%GRANTFILE% echo go
>>%GRANTFILE% echo use isa_test
>>%GRANTFILE% echo go
>>%GRANTFILE% echo use isa_test
>>%GRANTFILE% echo go
>>%GRANTFILE% echo create user isa_test for login isa_test with default_schema=dbo
>>%GRANTFILE% echo exec sp_addrolemember \'db_owner\', \'isa_test\'
>>%GRANTFILE% echo go
>>%GRANTFILE% echo create user isa_r for login isa_r with default_schema=dbo
>>%GRANTFILE% echo ALTER ROLE [db_datareader] ADD MEMBER [liujing]
>>%GRANTFILE% echo go

>>%GRANTFILE% echo grant select on OCR_factorS to isa_r;
>>%GRANTFILE% echo grant select on OCR_factor_Rick to isa_r;
>>%GRANTFILE% echo grant select on AIRLINES_ROUTES  to isa_r;
>>%GRANTFILE% echo grant select on AIRLINES_ROUTES_PTP  to isa_r;
>>%GRANTFILE% echo go

REM +--------------------------------------------------------------------------+
REM |  grant privileges to dev hosts.                                          |
REM +--------------------------------------------------------------------------+

sqlcmd  -i %GRANTFILE% -o %GRANTLOG%

REM +--------------------------------------------------------------------------+
REM |  merge log operation                                                     |
REM +--------------------------------------------------------------------------+
echo  -------------  > %LOGFILE%
type  %BACKUPLOG% >> %LOGFILE%
echo  -------------  >> %LOGFILE%
type  %RECOVERYLOG% >> %LOGFILE%
echo  -------------  >> %LOGFILE%
type  %GRANTLOG% >> %LOGFILE%
echo  -------------  >> %LOGFILE%
echo  complete!  >> %LOGFILE%

 

分类:

技术点:

相关文章:

  • 2022-01-26
  • 2022-02-03
  • 2022-01-01
  • 2022-01-01
  • 2022-12-23
  • 2021-09-29
  • 2021-04-15
猜你喜欢
  • 2022-01-01
  • 2021-11-17
  • 2021-11-04
  • 2022-12-23
  • 2021-12-25
相关资源
相似解决方案