數(shù)據(jù)庫(kù)的日常維護(hù),可以通過SQL Server中的維護(hù)計(jì)劃來自動(dòng)實(shí)現(xiàn),非常方便。不過,也不是所有的維護(hù),都可以通過維護(hù)計(jì)劃來實(shí)現(xiàn), 下面將通過代碼來實(shí)現(xiàn)
1、檢查數(shù)據(jù)庫(kù)完整性
代碼如下:
dbcc checkdb(test)
--通過加tablock提高速度
dbcc checkdb(test) with tablock
2、數(shù)據(jù)庫(kù)重命名、修改恢復(fù)模式、修改用戶模式
代碼如下:
--數(shù)據(jù)庫(kù)重命名
ALTER DATABASE WC
MODIFY NAME = test
--設(shè)置數(shù)據(jù)庫(kù)為完整恢復(fù)模式
alter database test
set recovery full
--只允許一個(gè)用戶訪問數(shù)據(jù)庫(kù)
alter database test
set single_user
with rollback after 10 seconds --指定多少秒后回滾事務(wù)
--只有sysadmin,dbcreator,db_owner角色的成員可以訪問數(shù)據(jù)庫(kù)
alter database wc
set restricted_user
with rollback immediate --立即回滾事務(wù)
--多用戶模式
alter database wc
set multi_user
with no_wait --不等待立即改變,如不能立即完成,那么會(huì)導(dǎo)致執(zhí)行錯(cuò)誤
2、擴(kuò)展數(shù)據(jù)庫(kù):增加文件組、增加文件、修改文件大小、修改文件的邏輯名稱
代碼如下:
--添加文件組
ALTER DATABASE test
ADD FILEGROUP WC_FG8
--添加數(shù)據(jù)文件
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
)
--修改數(shù)據(jù)文件的大小,增長(zhǎng)大小,最大大小
ALTER DATABASE test
MODIFY FILE
(
NAME = 'WC_FG8',
SIZE = 2MB, --必須大于之前的大小,否則報(bào)錯(cuò)
MAXSIZE= 8MB,
FILEGROWTH = 10%
)
--修改數(shù)據(jù)文件或日志文件的邏輯名稱
ALTER DATABASE test
MODIFY FILE
(
NAME = WC_LOG3,
NEWNAME = WC_FG33
)
3、移動(dòng)文件
復(fù)制代碼 代碼如下:
--由于在SQL Server中文件組、文件不能離線
--所以必須把整個(gè)數(shù)據(jù)庫(kù)設(shè)置為離線
checkpoint
go
ALTER DATABASE WC
SET OFFLINE
go
--修改文件名稱
ALTER DATABASE WC
MODIFY FILE
(
NAME = WC_fg8,
FILENAME = 'D:\WC\WC_FG8.NDF'
)
go
--把原來的文件復(fù)制到新的位置:'D:\WC\WC_FG8.NDF'
--設(shè)置數(shù)據(jù)庫(kù)在線
ALTER DATABASE WC
SET ONLINE
4、設(shè)置默認(rèn)文件組、只讀文件組
代碼如下:
--設(shè)置默認(rèn)文件組
ALTER DATABASE WC
MODIFY FILEGROUP WC_FG8 DEFAULT
--設(shè)為只讀文件組
--如果文件已經(jīng)是某個(gè)屬性,不能再次設(shè)置相同屬性
ALTER DATABASE WC
MODIFY FILEGROUP WC_FG8 READ_WRITE
5、收縮數(shù)據(jù)庫(kù)、 收縮文件
--收縮數(shù)據(jù)庫(kù)
DBCC SHRINKDATABASE('test', --要收縮的數(shù)據(jù)庫(kù)名稱或數(shù)據(jù)庫(kù)ID
10 --收縮后,數(shù)據(jù)庫(kù)文件中空間空間占用的百分比
)
DBCC SHRINKDATABASE('test', --要收縮的數(shù)據(jù)庫(kù)名稱或數(shù)據(jù)庫(kù)ID
10, --收縮后,數(shù)據(jù)庫(kù)文件中空閑空間占用的百分比
NOTRUNCATE --在收縮時(shí),通過數(shù)據(jù)移動(dòng)來騰出自由空間
)
DBCC SHRINKDATABASE('test', --要收縮的數(shù)據(jù)庫(kù)名稱或數(shù)據(jù)庫(kù)ID
10, --收縮后,數(shù)據(jù)庫(kù)文件中空間空間占用的百分比
TRUNCATEONLY --在收縮時(shí),只是把文件尾部的空閑空間釋放
)
--收縮文件
DBCC SHRINKFILE(wc_fg8, --要收縮的數(shù)據(jù)文件邏輯名稱
7 --要收縮的目標(biāo)大小,以MB為單位
)
DBCC SHRINKFILE(wc_fg8, --要收縮的數(shù)據(jù)文件邏輯名稱
EMPTYFILE --清空文件,清空文件后,才可以刪除文件
)
6、刪除文件、 刪除文件組
代碼如下:
--要?jiǎng)h除文件,必須要先把文件上的數(shù)據(jù)刪除,或者移動(dòng)到其他文件或文件組上
--刪除數(shù)據(jù)后,必須要清空文件的內(nèi)容
DBCC SHRINKFILE(WC_FG8,EMPTYFILE)
--刪除文件,同時(shí)也在文件系統(tǒng)底層刪除了文件
ALTER DATABASE test
REMOVE FILE WC_FG8
--要?jiǎng)h除文件組,必須先刪除所有文件
--最后刪除文件組
ALTER DATABASE test
REMOVE FILEGROUP WC_FG8
7、重新組織索引
ALTER INDEX [idx_temp_lock_id] ON [dbo].[temp_lock]
REORGANIZE
WITH ( LOB_COMPACTION = ON )
8、重新生成索引
代碼如下:
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 )
9、更新統(tǒng)計(jì)信息
代碼如下:
--更新表中某個(gè)的統(tǒng)計(jì)信息
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, --使用最近的采樣速率更新每個(gè)統(tǒng)計(jì)信息
norecompute --查詢優(yōu)化器將完成此統(tǒng)計(jì)信息更新并禁用將來的更新
--更新索引的統(tǒng)計(jì)信息
update statistics temp_lock(idx_temp_lock_id)
with fullscan
--更新表的所有統(tǒng)計(jì)信息
update statistics txt
with all
10、執(zhí)行SQL Server代理作業(yè)
11、備份數(shù)據(jù)庫(kù)(完整、差異、日志備份),這個(gè)在其他文章中已有詳細(xì)描述,這里不再贅述。
代碼如下:
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 )
更多信息請(qǐng)查看IT技術(shù)專欄