国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

兩個(gè)SQL Server維護(hù)技巧

2024-08-31 00:49:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友


收集最實(shí)用的網(wǎng)頁(yè)特效代碼!

確實(shí),數(shù)據(jù)庫(kù)的維護(hù)常常交給那些專業(yè)的數(shù)據(jù)庫(kù)管理員,但是作為一個(gè)開(kāi)發(fā)者,你也許偶爾需要暫時(shí)從事這個(gè)工作。所以,試一試這兩個(gè)sql服務(wù)器維護(hù)技巧:輕松改變數(shù)據(jù)庫(kù)擁有者、整理索引碎片。誰(shuí)會(huì)想到你甚至可以給那些數(shù)據(jù)庫(kù)管理員教上一兩個(gè)新技巧呢?

重指定數(shù)據(jù)庫(kù)擁有者
當(dāng)回復(fù)或者新建數(shù)據(jù)庫(kù)時(shí),你有沒(méi)有注意到sql server把數(shù)據(jù)庫(kù)的擁有者置為你的nt登錄名??jī)H僅為了確保不同數(shù)據(jù)庫(kù)間的一致性(更別提安全性因素了),你也許考慮用系統(tǒng)過(guò)程sp_changedbowner來(lái)把數(shù)據(jù)庫(kù)擁有者改為其它用戶如系統(tǒng)管理員(sa)。你也許已經(jīng)寫了這樣一段腳本用來(lái)掃描所有用戶數(shù)據(jù)庫(kù)并把數(shù)據(jù)庫(kù)擁有者重指定為系統(tǒng)管理員。

系統(tǒng)過(guò)程sp_changedbowner有一個(gè)參數(shù),即@map,其缺省值為空(null),該過(guò)程可以把數(shù)據(jù)庫(kù)舊有的擁有者的別名重映射為新的數(shù)據(jù)庫(kù)擁有者,如系統(tǒng)管理員。

為了演示該過(guò)程,讓我們首先建立一個(gè)盡可能小的數(shù)據(jù)庫(kù)模型,然后運(yùn)行sp_helpuser指令來(lái)看看新創(chuàng)建的用戶名清單:

create database test
go
use test
go
exec sp_helpuser
go

這些代碼執(zhí)行后,輸出應(yīng)該列出數(shù)據(jù)庫(kù)擁有者的清單(db_owner)。如果你使用windows nt認(rèn)證身份,那么清單中應(yīng)該有一個(gè)null的登錄名字和一個(gè)sid值。

然后,讓我們加上兩個(gè)登錄用戶:isuser1和isuser2作為db_owner的別名,并把數(shù)據(jù)庫(kù)的擁有者改為系統(tǒng)管理員:exec sp_addlogin @loginame = 'isuser1', @passwd = 'isuser1',@defdb = 'master'
exec sp_addlogin @loginame = 'isuser2', @passwd = 'isuser2',@defdb = 'master'
exec sp_addalias @loginame = 'isuser1', @name_in_db = 'dbo'
exec sp_changedbowner @loginame = 'sa', @map = 'true'
exec sp_helpuser

輸出內(nèi)容應(yīng)該顯示出系統(tǒng)管理員作為db_owner、isuser1作為db_owner的別名。

現(xiàn)在我們用過(guò)程sp_changedbowner來(lái)指定isuser2為數(shù)據(jù)庫(kù)新的擁有者。我們將使用該過(guò)程的@map參數(shù)并把該參數(shù)賦值為“否”,這樣把用戶將為別名。


exec sp_changedbowner @loginame = 'isuser2', @map = 'false'

exec sp_helpuser
go

 
輸出應(yīng)該顯示出isuser2現(xiàn)在成為數(shù)據(jù)庫(kù)新的擁有者,isuser1降為別名。下面,我們應(yīng)該停止這個(gè)數(shù)據(jù)庫(kù)并結(jié)束本演示過(guò)程。


use master
go
drop database test
go


用dbcc indexdefrag命令來(lái)實(shí)現(xiàn)維護(hù)
對(duì)索引進(jìn)行維護(hù)工作是一件冗長(zhǎng)費(fèi)力的工作,不過(guò)在sql server 2000中,微軟已經(jīng)引入了一條維護(hù)命令dbcc indexdefrag,它相對(duì)sql server7.0的dbreindex命令來(lái)說(shuō),有好幾個(gè)優(yōu)點(diǎn)。最主要的優(yōu)點(diǎn)就是它是一種在線操作,這樣,在該命令運(yùn)行期間用戶仍可以連續(xù)工作。這是因?yàn)樗幌馾breindex那樣在運(yùn)行時(shí)需要鎖定操作所涉及的資源,它還可以降低內(nèi)容阻塞。

dbcc indexdefrag操作一小段、一小段的數(shù)據(jù),這樣該操作隨時(shí)都可以停止下來(lái)并跟蹤它已經(jīng)完成的工作。該操作每隔五分鐘就報(bào)告一次估計(jì)已完成工作的百分比。

從技術(shù)的角度來(lái)看,dbcc indexdefrag從新安排了目標(biāo)索引所在的當(dāng)前分配頁(yè)上的物理葉。當(dāng)操作完成后,目標(biāo)索引的物理順序與它的邏輯順序相對(duì)應(yīng),因此可以加速索引的掃描速度。

該操作還重新安排分配分配給目標(biāo)索引的空間中的其它索引頁(yè)。sql server將會(huì)為以一個(gè)填充因子為目標(biāo)、根據(jù)索引數(shù)據(jù)的密度和為該索引分配的空間大小,來(lái)為索引緩沖頁(yè)上的空間。操作后空下來(lái)的頁(yè)將會(huì)被釋放,這就使得索引變得更加緊湊。

dbcc indexdefrag也有幾個(gè)缺點(diǎn)需要你注意:

如果一個(gè)表格中的兩個(gè)索引共享一個(gè)盤區(qū)的同一個(gè)空間,而這兩個(gè)索引并不相鄰,那么最好重新建立索引讓它們相鄰。
如果索引中的碎片太多,那么dbcc indexdefrag命令執(zhí)行的速度可能要低于 dbreindex命令;但是如果索引中的碎片不太多,那么dbcc indexdefrag 應(yīng)該比dbreindex快的多,用dbcc indexdefrag取代dbreindex的好處網(wǎng)上有介紹。
非葉式(nonleaf)索引頁(yè)不能重新排序。
dbcc indexdefrag不能更新統(tǒng)計(jì)數(shù)字。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 常山县| 阆中市| 昌乐县| 泌阳县| 沂源县| 陕西省| 视频| 宜黄县| 麻城市| 崇州市| 乡城县| 柳江县| 罗田县| 阳谷县| 涡阳县| 神池县| 繁峙县| 项城市| 大厂| 昭觉县| 赤峰市| 墨竹工卡县| 祁东县| 高邮市| 砚山县| 东莞市| 襄汾县| 古田县| 莒南县| 延吉市| 卫辉市| 开原市| 重庆市| 民县| 额敏县| 晋州市| 岑溪市| 历史| 黄骅市| 彭水| 岱山县|