阿里雲sqlserver 遷移到百度雲sqlserver 2

阿里雲的日誌遷移到百度雲後,要進行日誌的追加操作

1.百度雲sql中創建存儲過程

2.exec RestoreDBLog 'D:\sqlback\log\log日誌所在路徑\','庫名稱',如果報錯,可能因爲在執行的時候正在複製,最好不要在整點

use master
go
create procedure RestoreDBLog(   @LogPath varchar(200),
  @DBName varchar(200)
  )

  --exec RestoreDBLog 'D:\DBBackup\log\testex\','testexlog'
  as 
begin
declare @SqlStr varchar(2000),@file_timestamp varchar(50)
declare @Physical_Device_Name nvarchar(200)
declare @TimeBigint bigint
declare @FileName varchar(256)
declare @sql nvarchar(2000)
declare @LogPathGet nvarchar(200)


set @SqlStr = 'dir ' + @LogPath  + '\ /B'

create table #FileName([filename] varchar(200))

insert into #FileName exec master..xp_cmdshell @SqlStr
delete from #FileName where filename is null
delete from #FileName where filename like '%.txt'

alter table #FileName add TimeBigint bigint,RestoreStatus int
update #FileName set TimeBigint=cast(left(right([filename],21),17) as bigint),RestoreStatus=0
   set @LogPathGet=@LogPath+'%'
   select @LogPathGet
   set @sql=N'select top 1 @Physical_Device_Name=physical_device_name from msdb.dbo.backupmediafamily with(nolock) where physical_device_name like @LogPathGet order by media_set_id desc'   
   exec sp_executesql @sql,N'@LogPathGet NVARCHAR(200),@Physical_Device_Name nvarchar(200) OUTPUT',@LogPathGet,@Physical_Device_Name OUTPUT;
   select @Physical_Device_Name
 delete from #FileName where TimeBigint <= cast(left(right(@Physical_Device_Name,21),17) as bigint)
   set @SqlStr	=''
   	while exists (select  * from #FileName where RestoreStatus=0 )
	
			begin				 
				select top 1 @FileName=FileName,@TimeBigint=TimeBigint from 
				       #FileName where  RestoreStatus = 0 order by TimeBigint
                set @SqlStr	 ='restore database ' + @DBName + ' from disk = '+'''' + @logpath  + @FileName +''''+' with norecovery'	
				
				select 	@FileName,	    @TimeBigint
				print (@SqlStr)
				exec(@SqlStr)
				
				update #FileName set RestoreStatus = 1 where TimeBigint = @TimeBigint
		
				set @SqlStr=''
				if not exists (select  * from #FileName where RestoreStatus=0)				             
				begin
					set @SqlStr = 'restore database ' + @DBName + ' with standby='+''''+ @LogPath+ @DBName + '.txt'+''''
					exec(@SqlStr)
                    break
			     end
	         end
			 
		 drop table #FileName

--set @sql='forfiles /p D:\DBbackup\log\ /m *.trn /d -2 /s /c "cmd /c if @ISDIR==FALSE DEL /A A @FILE && Echo @path"'
--exec master..xp_cmdshell @sql
end

2.查詢 是否加載日誌

select physical_device_name from msdb.dbo.backupmediafamily with(nolock)
where physical_device_name like '%Aso_comment_statistics1%'
order by media_set_id desc 

3. 切庫步驟

1、停服(如果可以停的話)
2、禁用寫賬號
3、kill進程
4、禁用日誌備份job,自動傳送日誌job,日誌還原job
5、手動執行備份日誌存儲過程,備份最後一次尾日誌
6、手動執行自動傳送日誌備份
7、手動執行最後日誌還原存儲過程
8、檢查最後日誌還原節點
9、如果正確,改成recovery模式,通知開發人員改連接ip或者域名配置
10、如果一切驗證都ok,切換完畢,如果有job啓用job,後期做全備,日誌備份,搭建備庫等等後續工作
11、如果有問題,改回原來ip或者域名配置,啓用原來寫賬號,重新備份數據庫,還原數據庫,啓用日誌備份、傳輸、還原job,等待下一次切換

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