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天未报送单位,截断数据库日志,复制单个或多个数据库表到另一个数据库 )的更多相关文章

  1. [SQL]复制数据库某一个表到另一个数据库中

    SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...

  2. sql server从一个数据库复制一个表到另一个数据库的方法

    分两步进行: 第一步,复制表结构: 在表上面右击——>编写表脚本为:——>Create到——>新查询编辑器窗口,你也可以保存为sql文件, 将新查询编辑器窗口最上面的一句话USE [ ...

  3. python操作mysql数据库读取一个数据库的表写入另一个数据库

    写这个肯定是工作需要了,不啰嗦,直接说事 我现在有两台主机,一台是公司主机,一台是客户主机,要求把公司主机上的三个表同步到客户主机上的数据库 注意是同步,首先就得考虑用linux定时任务或者主从复制, ...

  4. ssm框架之将数据库的数据导入导出为excel文件

    在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...

  5. SQL server 使用触发器跨数据库备份数据

    create database TriggerTest create table transInfo2 --交易信息表 ( cardID ) not null, --卡号 transType ) no ...

  6. Oracle 数据库导出数据泵(EXPDP)文件存放的位置

    数据泵是服务器端工具,导出的文件是放在数据库所在的服务器上,当然我们知道可以通过directory目录对象来控制.目录对象默认有四个级别,当然是有优先级顺序的,优先级从上往下 1.每个文件单独的指定具 ...

  7. 数据库使用数据泵迁移遇到LOB字段

    impdp system/Clic1234 attach=SYS_IMPORT_ILEARN_TRA desc ILEARN_TRA.NOTIFI_TACTIC desc ILEARN_TRA.MSG ...

  8. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  9. MongoDB数据库备份与还原、单表的导入导出

    -------------------MongoDB备份与恢复------------------- 1.MongoDB数据库备份     1.语法:         mongodump -h dbh ...

随机推荐

  1. P3731 二分图匹配必经边

    题意经过一番转换变成了 让你在一个二分图上删一条边使得二分图的最大独立集大小至少+1 二分图的最大独立集=点数-最小点覆盖(最大匹配) 点数是固定不变的 所以我们要减少最大匹配数 则删掉的哪一条边必须 ...

  2. Linux之RPM 软件管理程序

    RPM RPM是软件管理程序,提供软件的安装.升级.查询.反安装的功能.优点:a.安装方便,软件中所有数据都经过编译和打包b.查询.升级.反安装方便缺点:a.缺乏灵活性b.存在相依属性 用法: rpm ...

  3. axios 请求多个接口

    axios.all([ axios.get('https://api.github.com/xxx/1'), axios.get('https://api.github.com/xxx/2') ]) ...

  4. POI读取Excel如何判断行为空

    public static boolean isRowEmpty(Row row) { for (int c = row.getFirstCellNum(); c < row.getLastCe ...

  5. BZOJ4777 [Usaco2017 Open]Switch Grass[最小生成树+权值线段树套平衡树]

    标题解法是吓人的. 图上修改询问,不好用数据结构操作.尝试转化为树来维护.发现(不要问怎么发现的)最小生成树在这里比较行得通,因为最近异色点对一定是相邻的(很好想),所以只要看最短的一条两端连着异色点 ...

  6. docker run always

    https://www.cnblogs.com/kaishirenshi/p/10396446.html

  7. pdf缩略图上传控件

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  8. 数位dp入门(内容一样,新版格式)

    顾名思义,数位dp,是一种用来计数的dp,就是把一个数字拆成一个一个数位去统计 如果现在给你一道题,需要你求在区间[l,r]内满足条件的解的个数,我们很容易想到去暴力枚举,但要是数据范围太大这种办法就 ...

  9. AcWing:142. 前缀统计(字典树)

    给定N个字符串S1,S2…SNS1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1S1-SNSN中有多少个字符串是T的前缀. 输入字符串的总长度不超过106106,仅包含小写字母. ...

  10. SVN_SVN的基本认识

    SVN是什么? svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具. 版本控制是什么? 版本控制(Revision contr ...