度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 2113|回复: 3
打印 上一主题 下一主题

[分享] 很全的sql server日常维护脚本

[复制链接]

78

主题

634

帖子

1598

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1598
跳转到指定楼层
楼主
发表于 2020-5-18 09:37:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL code--备份declare @sql varchar(8000) set @sql='backup database mis to disk=''d:\databack\mis\mis'+rtrim(convert(varchar,getdate(),112))+'.bak''' exec(@sql) --删除15天前备份文件 set @sql='del d:\databack\mis\mis' +rtrim(convert(varchar,getdate()-15,112))+'.bak''' exec master..xp_cmdshell@sql --清除日志dump transaction databasename with no_log backup log databasename with no_log --查看数据库里用户和进程的信息sp_who --查看SQL Server数据库里的活动用户和进程的信息sp_who 'active' --查看SQL Server数据库里的锁的情况sp_lock --进程号--50是SQL Server系统内部用的,进程号大于的才是用户的连接进程. --spid是进程编号,dbid是数据库编号,objid是数据对象编号--收缩数据库日志文件的方法--收缩简单恢复模式数据库日志,收缩后@database_name_log的大小单位为M backup log @database_name withno_log dbcc shrinkfile (@database_name_log, 5) --分析SQL Server SQL 语句的方法: set statisticstime {on | off} set statistics io {on | off} --图形方式显示查询执行计划--在查询分析器->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形--文本方式显示查询执行计划set showplan_all {on |off} set showplan_text { on | off } set statistics profile { on | off }

--完整备份,每周一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\FullBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.bak'
BACKUP DATABASE [demo TO DISK=@str
WITH RETAINDAYS=15,NOFORMAT,NOINIT,
NAME
=N'Demo完整备份',SKIP,NOREWIND,
NOUNLOAD,STATS
=10
GO





--截断日志
USE Master
GO
BACKUP LOG Demo WITH NO_LOG
GO
--收缩日志文件
USE Demo
GO
DBCC SHRINKFILE (N'Demo_log',0,TRUNCATEONLY)
GO
--差异备份,每天一次
USE Master
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\DiffBak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.diff'
BACKUP DATABASE [Demo TO DISK=@str
WITH DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,
NAME
=N'Demo差异备份',SKIP,NOREWIND,
NOUNLOAD,STATS
=10
GO





--日志备份,每小时一次
USE Demo
GO
declare @str varchar(100)
set @str='D:\DBtext\jgj\DBABak\logbak'+replace(replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+'.trn'
BACKUP LOG [Demo TO DISK=@str
WITH RETAINDAYS=3,NOFORMAT,NOINIT,
NAME
=N'Demo日志备份',SKIP,NOREWIND,
NOUNLOAD,STATS
=10
GO




--删除过期的备份文件,每天两次
declare @str varchar(100),@dir varchar(100),@fileName varchar(30)
set @dir='del D:\DBtext\jgj\DBABak\'
set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),'',''),':',''),8)
set @str=@dir+'fullbak'+@filename+'*.bak'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set @str=@dir+'diffbak'+@filename+'*.diff'
exec xp_cmdshell @str
set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),'',''),':',''),8)
set @str=@dir+'logbak'+@filename+'*.trn'
exec xp_cmdshell @str
SQL code-- 如何删除 SQL2005 过期的数据库备份文件呢? 在 SQL2005 数据库中,不可以自动删除过期的备份文件,所以借用第三方插件完成此功能。 -- 方式一:通过 Forfiles 删除指定目录下过期的备份文件 目的:删除目录 i: \sqldataup 中天前的 . bak 文件: 步骤: 1 、定义 FORFILES 批处理脚本如下: C: \> FORFILES / P i: \sqldataup / M *. bak / C "cmd /C del /Q @path" / d - 5 如果执行成功则返回当前盘符 C: \> --如果没有需要删除的文件则返回信息错误 : 用指定的搜索标准没有找到文件。比如: --C:\>FORFILES /P i:\sqldataup /M *.bak /C "cmd /C del /Q @path" /d -5 -- 错误 : 用指定的搜索标准没有找到文件。 2 、通过计划任务调用批处理脚本如图所示,图太长请看这里 3 、当然也可以用 SQLAgent 调用 CMDEXEC 完成批处理作业。 方式二:如果在 SQL2008 中因为默认安装 Powershell 1.0 程序,故可以用 Powershell 编写脚本来完成定时删除过期文件。 太多内容,请看文章http://blog.csdn.net/claro/archive/2009/08/18/4458417.aspx。
SQL code--最好备份日志,以后可通过日志恢复数据。。。以下为日志处理方法 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. --*/--下面的所有库名都指你要处理的数据库的库名1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG 库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了也可以用SQL语句来完成 --收缩数据库DBCC SHRINKDATABASE(库名) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfilesDBCC SHRINKFILE(1) 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) a.分离数据库: 企业管理器--服务器--数据库--右键--分离数据库b.在我的电脑中删除LOG文件 c.附加数据库: 企业管理器--服务器--数据库--右键--附加数据库此法将生成新的LOG,大小只有500多K 或用代码: 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a.分离 EXEC sp_detach_db @dbname = '库名'b.删除日志文件 c.再附加 EXEC sp_attach_single_file_db @dbname = '库名', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf' 5.为了以后能自动收缩,做如下设置: 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"--SQL语句设置方式:EXEC sp_dboption '库名', 'autoshrink','TRUE' 6.如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:alter database 库名 modify file(name=逻辑文件名,maxsize=20)
--查看表的索引信息
exec sp_helpindex tb

--结合sys.indexes和sys.index_columns,sys.objects,sys.columns查询索引所属的表或视图的信息
select
  o.name
as 表名,
  i.name
as 索引名,
  c.name
as 列名,
  i.type_desc
as 类型描述,
  is_primary_key
as 主键约束,
  is_unique_constraint
as 唯一约束,
  is_disabled
as 禁用
from
  sys.objects o
inner join
  sys.indexes i
on
  i.
object_id=o.object_id
inner join
  sys.index_columns ic
on
  ic.index_id
=i.index_id and ic.object_id=i.object_id
inner join
  sys.columns c
on
  ic.column_id
=c.column_id and ic.object_id=c.object_id
go

--查询索引的键和列信息
select
  o.name
as 表名,
  i.name
as 索引名,
  c.name
as 字段编号,
from
  sysindexes i
inner join sysobjects o
on
  i.id
=o.id
inner join
  sysindexkeys k
on
  o.id
=k.id and i.indid=k.indid
inner join
  syscolumns c
on
  c.id
=i.id and k.colid=c.colid
where
  o.name
='表名'
---查询索引操作的信息
select * from sys.dm_db_index_usage_stats

--查询指定表的统计信息(sys.stats和sysobjects联合查询)
select
  o.name,
--表名
  s.name,--统计信息的名称
  auto_created,--统计信息是否由查询处理器自动创建
  user_created--统计信息是否由用户显示创建
from
  sys.stats
inner join
  sysobjects o
on
  s.
object_id=o.id
where
  o.name
='表名'
go


--查看统计信息中列的信息
select
  o.name,
--表名
  s.name,--统计信息的名称
  sc.stats_column_id,
  c.name
---列名
from
  sys.stats_columns sc
inner join
  sysobjects o
on
  sc.
object_id=o.id
inner join
  sys.stats s
on
  sc.stats_id
=s.stats_id and sc.object_id=s.object_id
inner join
  sys.columns c
on
  sc.column_id
=c.column_id and sc.object_id=c.object_id
where
  o.name
='表名'

--查看统计信息的明细信息
dbcc show_statistics

--查看索引自动创建的统计信息
exec sp_autostats '对象名'

--关闭自动生成统计信息的数据库选项
alter datebase 数据库名 set auto_create_statistics off

--创建统计信息
create statistics 统计信息名称 on 表名(列名)
[with
[[fullscan
   sample number{percent|rows}

[norecompute
]
go
解释一下上面的参数:
fullscan:指定对表或视图中所有的行收集统计信息
sample
number{percent|rows}:指定随机抽样应读取的数据行数或者百分比 sample选项不能与fullscan选项同时使用
norecompute:指定数据库引擎不自动重新计算统计信息

--计算随机抽样统计信息
create statistics 统计信息名称 on 表名(列名)
with sample 5 percent---创建统计信息,按5%计算随机抽样统计信息
go

--创建统计信息
exec sp_createstats--参数自己去查下帮助,在这里不一一列举

--修改统计信息
update statistics 表名|视图名
    索引名
|统计信息名,索引名|统计信息名,.....
[with
[[fullscan
   sample number{percent|rows}

[norecompute
]
---参数与create statistics 语句相似,下面介绍几种常用应用
1.更新指定表的所有统计信息
update statistics 表名

2.更新指定表的单个索引的统计信息
update statistics 表名 索引名

3.对表进行全面扫描,更新统计信息
update statistics 表名(列名) with fullscan
--获取磁盘读写情况
select
@@total_read as '读取磁盘的次数',
@@total_write as '写入磁盘的次数',
@@total_error as '磁盘写入错误数',
getdate() as '当前时间'

--获取数据库文件的I/O统计信息
select * from fn_virtualfilestats(null,null)
--两个参数
database_id--指定数据库编号,如果为null,则为所有数据库实例返回I/O统计信息
file_id --文件的编号,如果为null,则为所有文件返回信息

--获取I/O工作情况
select
@@id_busy--SQL自上次启动以来的用于执行输入和输出操作的时间
@@timeticks, --每个时钟周期对应的微秒数
@@id_busy*@@timeticks as 'I/O 操作毫秒数',
getdate() as '当前时间'

--查看SQL SEVER CPU活动,工作情况
select
@@cpu_busy,--自上次启动以来的工作时间
@@timeticks, --每个时钟周期对应的微秒数
@@cpu_busy*cast(@@timeticks as float)/1000 as 'cpu工作时间(秒)',
@@idie*cast(@@timeticks as float)/1000 as 'CPU空闲时间(秒)'
getdate() as '当前时间'


--获取网络数据包统计信息
select
getdate() as '当前时间',
@@pack_received as'输入数据包数量',
@@pack_sent as '输出数据包数量',
@@packet_error as '错误包数量'
服务器配置选项
--启动AWE
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'awe enable',1--启动AWE选项,用于支持超过4G内存 具体用法见笔记三
go
sp_configure
'show advanced options',0
reconfigure
go

--指定游标集中的行数
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'cursor threshold'--指定游标集中的行数,超过此行数,将异步生成游标键集
go
sp_configure
'show advanced options',0
reconfigure
go


--指定全文索引列的默认语言值
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'default full-text language'--2052代表简体中文,具体的查询联机丛书
go
sp_configure
'show advanced options',0
reconfigure
go


--控制是否让触发器返回结果集
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'disallow results from triggers',1--1代表on
go
sp_configure
'disallow results from triggers',0--0代表off
go
sp_configure
'show advanced options',0
reconfigure
go


--控制最初为创建索引分配的最大内存量
sp_configure 'index create memory', 4096
GO

--设置可用的锁的最大个数
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'locks'---要设置的话在后面加',数字'
go
sp_configure
'show advanced options',0
reconfigure
go


--设置SQL进程可使用的工作线程数
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'max worker threads'--要设置的话在后面加',数字'
go
sp_configure
'show advanced options',0
reconfigure
go


--指定一个查询在超时前等待所需资源的时间
sp_configure 'query wait',数字
go

--指定在SQL SERVER超时之前远程操作可以持续的时间
sp_configure 'remote query  timeout',数字
go

--是否允许运行系统存储过程xp_cmdshell
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'xp_cmdshell',1
reconfigure
go
sp_configure
'show advanced options',0
reconfigure
go

--从运行SQL SERVER实例的本地或远程服务器上控制存储过程的执行
sp_configure 'show advanced options',1
reconfigure
go
sp_configure
'remote access',1 --1表示允许
reconfigure
go
sp_configure
'remote access',0 --0表示禁止
reconfigure
go
sp_configure
'show advanced options',0
reconfigure
go

---更多的查看联机丛书

--启动,暂停和停止本地的SQL SERVER 服务
net start MSSQLSERVER --启动
net pause MSSQLSERVER --暂停
net continue MSSQLSERVER ---继续被停止的服务
net stop MSSQLSERVER --停止


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2
回复

使用道具 举报

78

主题

634

帖子

1598

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1598
沙发
 楼主| 发表于 2020-5-18 09:41:03 | 只看该作者
很全的sql server日常维护脚本,很多方法还没用过。
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-5-18 19:49:15 | 只看该作者
太全面了,收藏起,慢慢看!
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9376

积分

论坛元老

Rank: 8Rank: 8

积分
9376
地板
发表于 2020-5-19 11:34:11 | 只看该作者
果断收藏,以备不时之需
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-12-22 22:25 , Processed in 0.158095 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表