SqlServer:SqlServer(数据库备份,数据库迁移,增加数据库文件组,递归查询一周报送情况)
Posted 咫尺天涯是路人丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer:SqlServer(数据库备份,数据库迁移,增加数据库文件组,递归查询一周报送情况)相关的知识,希望对你有一定的参考价值。
1.数据备份
DECLARE @databaseName varchar(600) DECLARE @str varchar(600) DECLARE @savePath VARCHAR(600) DECLARE @date VARCHAR(60)=REPLACE(CONVERT(VARCHAR,GETDATE(),23),‘-‘,‘‘) DECLARE @savename VARCHAR(600) SET @savePath = ‘f:/DatabaseBackup/‘ DECLARE My_Cursor CURSOR FOR ( select name from sys.databases where name not like ‘%tmp%‘ and name not like ‘%temp%‘ and name not like ‘%master%‘ and name not like ‘%model%‘ and name not like ‘%msdb%‘ and name not like ‘%wqb_upgrade%‘ and name not like ‘%ReportServer%‘ and name not like ‘%ReportServerTempDB%‘ and name not like ‘%spagobietllog%‘ and name not like ‘%spagobietl%‘ ) OPEN My_Cursor; FETCH NEXT FROM My_Cursor INTO @databaseName WHILE @@FETCH_STATUS = 0 BEGIN --restore headeronly from disk = ‘f:/doc/document_20180702.bak‘ 查看备份位置 set @savename = @savePath+@databaseName+‘_‘+@date+‘.bak‘; declare @weekday varchar(50) declare @date2 varchar(100) declare @temppath varchar(100) select @temppath= @savePath+@databaseName+‘_‘+REPLACE(CONVERT(VARCHAR, DATEADD(WK,DATEDIFF(wk,0,getdate()),0),23),‘-‘,‘‘)+‘.bak‘ select @weekday = DATEname(weekday, getdate()) if @weekday=‘星期一‘ begin set @temppath = @savename INSERT INTO T_BACKUP_DATABASE_TIME(completeTime) values (getdate()) backup database @databaseName to disk = @savename with FORMAT; end else begin INSERT INTO T_BACKUP_DATABASE_TIME(diffTime) values (getdate()) backup database @databaseName to disk = @temppath with differential; end FETCH NEXT FROM My_Cursor INTO @databaseName END CLOSE My_Cursor; DEALLOCATE My_Cursor;
2.数据迁移
DECLARE @databaseName varchar(600) DECLARE @str varchar(6000) DECLARE @tempstr varchar(6000) DECLARE @mName varchar(600) DECLARE @mlogName varchar(600) DECLARE @oldDataMovePath VARCHAR(600) DECLARE @oldLogMovePath VARCHAR(600) DECLARE @logMovePath VARCHAR(600) DECLARE @dataMovePath VARCHAR(600) DECLARE My_Cursor CURSOR FOR ( select distinct name from sys.databases where name in ( select ‘410000_yw_‘+UNIT_CODE from dbo.T_UNIT_AUDIT where INDUSTRY_NAME ! = ‘重点国企‘ ) and name like ‘%410000_yw_115211%‘ and name not like ‘%tmp%‘ and name not like ‘%410000_yw_204101%‘ and name not like ‘%master%‘ and name not like ‘%model%‘ and name not like ‘%msdb%‘ and name not like ‘%NETWORKING_AUDIT%‘ and name not like ‘%ReportServer%‘ and name not like ‘%ReportServerTempDB%‘ and name not like ‘%wqb_upgrade%‘ and name not like ‘%temp%‘ and name not like ‘%spagobietllog%‘ and name not like ‘%Spagobietl%‘ and name not like ‘%李亚坤测试库%‘ ) OPEN My_Cursor; FETCH NEXT FROM My_Cursor INTO @databaseName WHILE @@FETCH_STATUS = 0 BEGIN create table #tempt(name varchar(60)); set @tempstr = ‘ DECLARE @mName varchar(600) DECLARE @mlogName varchar(600) select @mName= name from [‘+@databaseName+‘]..sysfiles where name not like ‘‘%log%‘‘; select @mlogName = name from [‘+@databaseName+‘]..sysfiles where name like ‘‘%log%‘‘; insert into #tempt(name)values(‘‘‘‘[email protected]+‘‘‘‘); insert into #tempt(name)values(‘‘‘‘[email protected]+‘‘‘‘); ‘ exec (@tempstr); select @mName= name from #tempt where name not like ‘%log%‘; select @mlogName= name from #tempt where name like ‘%log%‘; set @oldDataMovePath = ‘D:DataBaseSqlServerSqlServerDataBase‘+@mName+‘.mdf‘ set @oldLogMovePath = ‘D:DataBaseSqlServerSqlServerLog‘+@mlogName+‘.ldf‘ set @dataMovePath = ‘F:DataBaseSqlServerSqlServerDataBase‘+@mName+‘.mdf‘ set @logMovePath = ‘F:DataBaseSqlServerSqlServerLog‘+@mlogName+‘.ldf‘ set @str = ‘alter database [‘+@databaseName+‘] set offline; exec master.dbo.xp_cmdshell‘‘move ‘+@oldDataMovePath+‘ F:DataBaseSqlServerSqlServerDataBase‘‘; exec master.dbo.xp_cmdshell‘‘move ‘+@oldLogMovePath+‘ F:DataBaseSqlServerSqlServerLog‘‘; alter database [‘+@databaseName+‘] modify file (name=‘‘‘+@mName+‘‘‘,filename=‘‘‘+@dataMovePath+‘‘‘); alter database [‘+@databaseName+‘] modify file (name=‘‘‘+@mlogName+‘_1og‘‘,filename=‘‘‘+@logMovePath+‘‘‘); alter database [‘+@databaseName+‘] set online; ‘ select (@str); FETCH NEXT FROM My_Cursor INTO @databaseName drop table #tempt; END CLOSE My_Cursor; DEALLOCATE My_Cursor;
3.增加数据库文件组
DECLARE @databaseName varchar(600) DECLARE @str varchar(6000) DECLARE @dataPath VARCHAR(600) DECLARE @logPath VARCHAR(600) DECLARE My_Cursor CURSOR FOR ( select name from sys.databases where name like ‘%tco%‘ ) OPEN My_Cursor; FETCH NEXT FROM My_Cursor INTO @databaseName WHILE @@FETCH_STATUS = 0 BEGIN set @dataPath = ‘F: est‘+@databaseName+‘1.ndf‘ set @logPath = ‘F: est‘+@databaseName+‘_log1.ldf‘ set @str = ‘ DECLARE @dataSize varchar(50) DECLARE @logSize varchar(50) DECLARE @innerstr varchar(6000) select @dataSize = size*10 from [‘+@databaseName+‘].[dbo].[sysfiles] where name not like ‘‘%log%‘‘; select @logSize = size*10 from [‘+@databaseName+‘].[dbo].[sysfiles] where name like ‘‘%log%‘‘; set @innerstr = ‘‘ USE [master] ALTER DATABASE [‘+@databaseName+‘] MODIFY FILE ( NAME =N‘‘‘‘‘+@databaseName+‘‘‘‘‘,MAXSIZE = ‘‘[email protected]+‘‘KB , FILEGROWTH = 1KB ); ALTER DATABASE [‘+@databaseName+‘] MODIFY FILE ( NAME = N‘‘‘‘‘+@databaseName+‘_log‘‘‘‘,MAXSIZE = ‘‘[email protected]+‘‘KB , FILEGROWTH = 1KB ); Alter database ‘+@databaseName+‘ add file(NAME = ‘‘‘‘‘+@databaseName+‘1‘‘‘‘,FILENAME =‘‘‘‘‘+@dataPath+‘‘‘‘‘); Alter database ‘+@databaseName+‘ add log file ( name=‘‘‘‘‘+@databaseName+‘_log1‘‘‘‘, filename=‘‘‘‘‘+@logPath+‘‘‘‘‘, size=2MB, maxsize=UNLIMITED, filegrowth=10% ); ‘‘ exec(@innerstr) ‘ exec (@str) FETCH NEXT FROM My_Cursor INTO @databaseName END CLOSE My_Cursor; DEALLOCATE My_Cursor;
4.查询一周报送情况
WITH cte(t) AS ( select DATEADD(DAY,-6,CAST(@date as date))AS t UNION ALL SELECT DATEADD(DAY,1,t) FROM cte WHERE t<CAST(@date as date) ) SELECT case when t.RECEIVE_TIME IS null then 0 else 1 end as isReport, t1.RECEIVE_TIME, t1.UNIT_NAME,t1.UNIT_CODE FROM ( select b.UNIT_CODE,b.UNIT_NAME,convert(varchar,a.t,23) RECEIVE_TIME from cte a cross join [NETWORKING_AUDIT].dbo.T_UNIT_AUDIT b ) as t1 LEFT JOIN ( select distinct a.UNIT_CODE,CONVERT(varchar,RECEIVE_TIME,23) RECEIVE_TIME from [NETWORKING_AUDIT].dbo.T_UNIT_AUDIT a join [NETWORKING_AUDIT].dbo.T_FILE_RECEIVE_RECORD b on a.UNIT_CODE = b.UNIT_CODE and convert(varchar,RECEIVE_TIME,23) > DATEADD(DAY,-7,CAST(@date as date)) and convert(varchar,RECEIVE_TIME,23) <= CAST(@date as date) ) t ON t1.RECEIVE_TIME=t.RECEIVE_TIME and t1.UNIT_CODE = t.UNIT_CODE order by t1.UNIT_CODE,t1.RECEIVE_TIME
以上是关于SqlServer:SqlServer(数据库备份,数据库迁移,增加数据库文件组,递归查询一周报送情况)的主要内容,如果未能解决你的问题,请参考以下文章