SqlServer:SqlServer(数据库备份,数据文件迁移,增加数据库文件组,递归查询一周报送情况,查询近X天未报送单位,截断数据库日志,复制单个或多个数据库表到另一个数据库 )
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.数据文件迁移
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('tempdb'); USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'G:\DATA\sqlserverData\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'G:\DATA\sqlserverLog\templog.ldf');
GO
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(''''+@mName+'''');
insert into #tempt(name)values(''''+@mlogName+'''');
'
exec (@tempstr);
select @mName= name from #tempt where name not like '%log%';
select @mlogName= name from #tempt where name like '%log%';
set @oldDataMovePath = 'D:\DataBase\SqlServer\SqlServerDataBase\'+@mName+'.mdf'
set @oldLogMovePath = 'D:\DataBase\SqlServer\SqlServerLog\'+@mlogName+'.ldf'
set @dataMovePath = 'F:\DataBase\SqlServer\SqlServerDataBase\'+@mName+'.mdf'
set @logMovePath = 'F:\DataBase\SqlServer\SqlServerLog\'+@mlogName+'.ldf'
set @str = 'alter database ['+@databaseName+'] set offline;
exec master.dbo.xp_cmdshell''move '+@oldDataMovePath+' F:\DataBase\SqlServer\SqlServerDataBase\'';
exec master.dbo.xp_cmdshell''move '+@oldLogMovePath+' F:\DataBase\SqlServer\SqlServerLog\'';
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:\test\'+@databaseName+'1.ndf'
set @logPath = 'F:\test\'+@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 = ''+@dataSize+''KB , FILEGROWTH = 1KB ); ALTER DATABASE ['+@databaseName+'] MODIFY FILE ( NAME = N'''''+@databaseName+'_log'''',MAXSIZE = ''+@logSize+''KB , FILEGROWTH = 1KB ); Alter database '+@databaseName+' add file(NAME = '''''+@databaseName+''''',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
5.查询近X天未报送单位
declare @date int;
set @date = 3;
WITH cte(t) AS
(
SELECT CAST(GETDATE()-@date AS DATE) AS t
UNION ALL
SELECT DATEADD(DAY,1,t)
FROM cte
WHERE t<GETDATE()-2
)
select * into T_TEMPTABLE from
(
SELECT cte.t DATES,aa.* from cte cross join
(
select UNIT_CODE,UNIT_NAME from T_UNIT_AUDIT
where LEN(UNIT_CODE)=6 or UNIT_CODE =''
) aa
)zz ; WITH cte2(t) AS
(
SELECT CAST(GETDATE()-2 AS DATE) AS t
UNION ALL
SELECT DATEADD(DAY,1,t)
FROM cte2
WHERE t<GETDATE()-2
)
select * into T_TEMPTABLE2 from (
SELECT distinct cte2.t,t.UNIT_CODE,t.UNIT_NAME
FROM cte2
LEFT JOIN (
SELECT *
FROM dbo.T_FILE_UNZIP_RECORD
) t ON cte2.t=BACKUP_TIME
) cc; ---查询展示语句
select distinct a.DATES,a.UNIT_CODE,a.UNIT_NAME UnReportUnitName
from T_TEMPTABLE a left join T_TEMPTABLE2 b
on a.DATES =b.t
and a.UNIT_CODE = b.UNIT_CODE
where b.UNIT_NAME is null
order by a.UNIT_CODE,a.DATES desc; -------------删除临时表
drop table T_TEMPTABLE;
drop table T_TEMPTABLE2;
6.截断数据库日志
DECLARE @databaseName varchar(600)
DECLARE @str varchar(6000)
DECLARE My_Cursor CURSOR
FOR
(
select distinct name from sys.databases
where name not like '%tmp%'
and name not like '%model%'
and name not like '%msdb%'
and name not like '%master%'
and name not like '%tempdb%'
)
OPEN My_Cursor;
FETCH NEXT FROM My_Cursor INTO @databaseName
WHILE @@FETCH_STATUS = 0
BEGIN
set @str = '
use ['+@databaseName+'];
DECLARE @sysfileLogName varchar(6000);
select @sysfileLogName = name from ['+@databaseName+']..sysfiles where name like ''%log%'';
ALTER DATABASE ['+@databaseName+'] SET RECOVERY SIMPLE;
DBCC SHRINKFILE (@sysfileLogName, 1);
'
select (@str); FETCH NEXT FROM My_Cursor INTO @databaseName END
CLOSE My_Cursor;
DEALLOCATE My_Cursor;
7.复制单个或多个数据库表到另一个数据库
ALTER PROCEDURE [dbo].[DataBaseToDataBase]
@sourceDatabaseName VARCHAR(100),
@targetDatabaseName VARCHAR(100)
AS
BEGIN
DECLARE @DatabaseName VARCHAR(255)
DECLARE @sql VARCHAR(8000)
DECLARE cur CURSOR
FOR
SELECT name FROM sys.databases
WHERE name = ''+@sourceDatabaseName+''
--SELECT name FROM sys.databases
--WHERE name like '%test%'
OPEN cur;
FETCH NEXT FROM cur INTO @DatabaseName;
WHILE @@FETCH_STATUS =0
BEGIN
SET @sql = 'USE ['+@DatabaseName+'];
DECLARE @TableName VARCHAR(255)
DECLARE @sql2 VARCHAR(8000);
DECLARE cur2 CURSOR
FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
OPEN cur2
FETCH NEXT FROM cur2 INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql2 = ''
USE ['+@targetDatabaseName+'];
DECLARE @inssql1 VARCHAR(8000);
DECLARE @inssql2 VARCHAR(8000);
set @inssql1 = ''''insert into ['+@targetDatabaseName+'].dbo.''+@TableName+'' select * from ['+@DatabaseName+'].dbo.''+@TableName+'' ''''
set @inssql2 = ''''select * into ['+@targetDatabaseName+'].dbo.''+@TableName+'' from ['+@DatabaseName+'].dbo.''+@TableName+'' ''''
IF EXISTS(
select *
from sysobjects
where name =''''''+@TableName+''''''
and type = ''''U''''
)
begin
exec (@inssql1);
end;
else
begin
exec (@inssql2);
end;
'';
EXEC (@sql2);
FETCH NEXT FROM cur2 INTO @TableName
END
CLOSE cur2;
DEALLOCATE cur2;
';
EXEC (@sql)
FETCH NEXT FROM cur INTO @DatabaseName;
END;
CLOSE cur;
DEALLOCATE cur;
END
SqlServer:SqlServer(数据库备份,数据文件迁移,增加数据库文件组,递归查询一周报送情况,查询近X天未报送单位,截断数据库日志,复制单个或多个数据库表到另一个数据库 )的更多相关文章
- [SQL]复制数据库某一个表到另一个数据库中
SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...
- sql server从一个数据库复制一个表到另一个数据库的方法
分两步进行: 第一步,复制表结构: 在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件, 将新查询编辑器窗口最上面的一句话USE [ ...
- python操作mysql数据库读取一个数据库的表写入另一个数据库
写这个肯定是工作需要了,不啰嗦,直接说事 我现在有两台主机,一台是公司主机,一台是客户主机,要求把公司主机上的三个表同步到客户主机上的数据库 注意是同步,首先就得考虑用linux定时任务或者主从复制, ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- SQL server 使用触发器跨数据库备份数据
create database TriggerTest create table transInfo2 --交易信息表 ( cardID ) not null, --卡号 transType ) no ...
- Oracle 数据库导出数据泵(EXPDP)文件存放的位置
数据泵是服务器端工具,导出的文件是放在数据库所在的服务器上,当然我们知道可以通过directory目录对象来控制.目录对象默认有四个级别,当然是有优先级顺序的,优先级从上往下 1.每个文件单独的指定具 ...
- 数据库使用数据泵迁移遇到LOB字段
impdp system/Clic1234 attach=SYS_IMPORT_ILEARN_TRA desc ILEARN_TRA.NOTIFI_TACTIC desc ILEARN_TRA.MSG ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
- MongoDB数据库备份与还原、单表的导入导出
-------------------MongoDB备份与恢复------------------- 1.MongoDB数据库备份 1.语法: mongodump -h dbh ...
随机推荐
- BZOJ 1006 完美消除序列&最大势算法&弦图
K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系 ...
- 如何判断元素是否在可视区域ViewPort
个性签名: 生如夏花,逝如冬雪:人生如此,何悔何怨. 前言: 经常需要计算元素的大小或者所在页面的位置,offsetWidth,clientWidth,scrollWidth,scrollTop这几个 ...
- Javaweb运行时出现Tomcat错误
运行web项目时出现如下错误如何解决 重新配置路径,具体可参考 https://www.cnblogs.com/xueqiuxiang/p/12087947.html 中提到的配置Tomca ...
- Python之subprocess模块的使用
1.subprocess调用系统的命令 #!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess import sys compl ...
- 日照学习提高班day3测试
A 思路: 一看到'#''.'什么的就想到搜索怪我怪我... 这道题勉强说是搜索别打我qwq 1)因为不重复,所以首先要判断是否%5==0,若不满足,直接输出NO 2)弄个vis数组记录是否被搜过,如 ...
- 【CUDA 基础】2.3 组织并行线程
title: [CUDA 基础]2.3 组织并行线程 categories: CUDA Freshman tags: Thread Block Grid toc: true date: 2018-03 ...
- 【一起学源码-微服务】Nexflix Eureka 源码二:EurekaServer启动之配置文件加载以及面向接口的配置项读取
前言 上篇文章已经介绍了 为何要读netflix eureka源码了,这里就不再概述,下面开始正式源码解读的内容. 如若转载 请标明来源:一枝花算不算浪漫 代码总览 还记得上文中,我们通过web.xm ...
- JavaWeb_(Hibernate框架)Hibernate中重要的api
Hibernate中重要的api Configuration SessionFactory Session(重点) Transaction 在Dao层中UserDao.java使用Hibernate向 ...
- 微信小程序_(表单组件)button组件的使用
微信小程序表单组件button官方文档 传送门 Learn 一.button组件的使用 一.button组件的使用 size:按钮的大小[默认值default] type:按钮的样式类型[默认值def ...
- 了解dubbo+zookeeper
一.Dubbo是什么? Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,分布式服务框架(SOA),致力于提供高性能和透明化的RPC远程 ...