【SQL Server DBA】日常維護語句
阿新 • • 發佈:2019-01-01
資料庫的日常維護,可以通過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、備份資料庫(完整、差異、日誌備份),這個在其他文章中已有詳細描述,這裡不再贅述。