【SQL Server DBA】日常维护语句


数据库的日常维护,可以通过SQL Server中的维护计划来自动实现,非常方便。


不过,也不是所有的维护,都可以通过维护计划来实现,下面将通过代码来实现。



1、检查数据库完整性

dbcc checkdb(test)


通过加tablock提高速度

dbcc checkdb(test) with tablock

2、数据库重命名、修改恢复模式、修改用户模式

--数据库重命名  
ALTER DATABASE WC  
MODIFY NAME = test 


--设置数据库为完整恢复模式
alter database test
set recovery full


--只允许一个用户访问数据库  
alter database test  
set single_user   
with rollback after 10 seconds --指定多少秒后回滚事务  
  
  
--只有sysadmin,dbcreator,db_owner角色的成员可以访问数据库  
alter database wc  
set restricted_user   
with rollback immediate        --立即回滚事务  
  
  
--多用户模式 
alter database wc  
set multi_user  
with no_wait       --不等待立即改变,如不能立即完成,那么会导致执行错误  


3、扩展数据库:增加文件组、增加文件、修改文件大小、修改文件的逻辑名称

--添加文件组
ALTER DATABASE test
ADD FILEGROUP WC_FG8


--添加数据文件
ALTER DATABASE test
ADD FILE
(
	NAME = WC_FG8,
	FILENAME = 'D:\WC_FG8.ndf',
	SIZE = 1mb,
	MAXSIZE = 10mb,
	FILEGROWTH = 1mb
)
TO FILEGROUP WC_FG8


--添加日志文件
ALTER DATABASE test
ADD LOG FILE
(
	NAME = WC_LOG3,
	FILENAME = 'D:\WC_FG3.LDF',
	SIZE = 1MB,
	MAXSIZE = 10MB,
	FILEGROWTH = 100KB
)


--修改数据文件的大小,增长大小,最大大小
ALTER DATABASE test
MODIFY FILE
(
	NAME = 'WC_FG8',
	SIZE = 2MB,      --必须大于之前的大小,否则报错
	MAXSIZE= 8MB,
	FILEGROWTH = 10%
)


--修改数据文件或日志文件的逻辑名称
ALTER DATABASE test
MODIFY FILE
(
	NAME = WC_LOG3,
	NEWNAME = WC_FG33
)

4、移动文件

--由于在SQL Server中文件组、文件不能离线
--所以必须把整个数据库设置为离线
checkpoint
go

ALTER DATABASE WC
SET OFFLINE
go


--修改文件名称
ALTER DATABASE WC
MODIFY FILE
(
	NAME = WC_fg8,
	FILENAME = 'D:\WC\WC_FG8.NDF'
)
go


--把原来的文件复制到新的位置:'D:\WC\WC_FG8.NDF'


--设置数据库在线
ALTER DATABASE WC
SET ONLINE


5、设置默认文件组、只读文件组

--设置默认文件组
ALTER DATABASE WC
MODIFY FILEGROUP WC_FG8 DEFAULT


--设为只读文件组
--如果文件已经是某个属性,不能再次设置相同属性
ALTER DATABASE WC
MODIFY FILEGROUP WC_FG8 READ_WRITE

6、收缩数据库、收缩文件

--收缩数据库  
DBCC SHRINKDATABASE('test',    --要收缩的数据库名称或数据库ID  
                    10         --收缩后,数据库文件中空间空间占用的百分比  
                    )  
  
  
DBCC SHRINKDATABASE('test',    --要收缩的数据库名称或数据库ID  
                    10,        --收缩后,数据库文件中空闲空间占用的百分比  
                    NOTRUNCATE --在收缩时,通过数据移动来腾出自由空间  
                    )  
               
                      
DBCC SHRINKDATABASE('test',      --要收缩的数据库名称或数据库ID  
                    10,          --收缩后,数据库文件中空间空间占用的百分比  
                    TRUNCATEONLY --在收缩时,只是把文件尾部的空闲空间释放  
                    )  
                      
  
--收缩文件  
DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称  
                7         --要收缩的目标大小,以MB为单位  
                )  
                  
DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称  
                EMPTYFILE --清空文件,清空文件后,才可以删除文件  
                ) 

7、删除文件、删除文件组

--要删除文件,必须要先把文件上的数据删除,或者移动到其他文件或文件组上
--可以清空文件的内容
DBCC SHRINKFILE(WC_FG8,EMPTYFILE)


--删除文件,同时也在文件系统底层删除了文件
ALTER DATABASE test
REMOVE FILE WC_FG8


--要删除文件组,必须先删除所有文件


--最后删除文件组
ALTER DATABASE test
REMOVE FILEGROUP WC_FG8

/*
drop database www
go

create database www
on primary
(
name = 'www_data01',
filename = 'c:\www_data01.mdf'
),
(
name = 'www_data02',
filename ='c:\www_data02.ndf'
)

log on
(
name = 'www_log',
filename = 'c:\www_log.ldf'
)
go

use www
go

create table a(id int ,v varchar(10)) on [primary]
go

insert into a
select OBJECT_ID,left(name,10) from sys.objects 
go


insert into a
select * from a
go 10


DBCC SHRINKFILE(www_data02,EMPTYFILE) 
go

ALTER DATABASE www  
REMOVE FILE www_data02 
*/

8、重新组织索引

ALTER INDEX [idx_temp_lock_id] ON [dbo].[temp_lock] 
REORGANIZE 
WITH ( LOB_COMPACTION = ON )


批量生成重组索引的语句

use test
go

select 'DBCC INDEXDEFRAG('+db_name()+','+o.name+','+i.name + ');'
        --,db_name(),
        --o.name,
        --i.name,
        --i.*

from sysindexes i
inner join sysobjects o
        on i.id = o.id
where o.xtype = 'U'
      and i.indid >0
      and charindex('WA_Sys',i.name) = 0

9、重新生成索引

ALTER INDEX [idx_temp_lock_id] ON [dbo].[temp_lock] 
REBUILD PARTITION = ALL 
WITH ( PAD_INDEX  = OFF, 
       STATISTICS_NORECOMPUTE  = OFF, 
       ALLOW_ROW_LOCKS  = ON, 
       ALLOW_PAGE_LOCKS  = ON, 
       ONLINE = OFF, 
       SORT_IN_TEMPDB = OFF )

10、更新统计信息

--更新表中某个的统计信息  
update statistics temp_lock(_WA_Sys_00000001_07020F21)  
  
  
update statistics temp_lock(_WA_Sys_00000001_07020F21)  
with sample 50 percent  
  
  
update statistics temp_lock(_WA_Sys_00000001_07020F21)  
with resample,    --使用最近的采样速率更新每个统计信息  
     norecompute  --查询优化器将完成此统计信息更新并禁用将来的更新  
  
  
  
--更新索引的统计信息  
update statistics temp_lock(idx_temp_lock_id)  
with fullscan          
  
  
--更新表的所有统计信息  
update statistics txt  
with all   

11、执行SQL Server代理作业

exec msdb.dbo.sp_start_job 
	@job_name =N'job_update_sql';

12、备份数据库(完整、差异、日志备份),这个在其他文章中已有详细描述,这里不再赘述。


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值