時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
在工作中,作為一名開發(fā)者的你,也許偶爾需要從事維護數(shù)據(jù)庫的工作。下面我們來介紹一下兩個SQL服務器的維護技巧:輕松改變數(shù)據(jù)庫擁有者、整理索引碎片。
在重指定數(shù)據(jù)庫擁有者當回復或者新建數(shù)據(jù)庫時,我們應當注意到SQL Server已經(jīng)把把數(shù)據(jù)庫的擁有者置為你的NT登錄名,這樣做是為了確保不同數(shù)據(jù)庫間的一致性(更別提安全性因素了),你也許考慮用系統(tǒng)過程sp_changedbowner來把數(shù)據(jù)庫擁有者改為其它用戶如系統(tǒng)管理員(SA)。你也許已經(jīng)寫了這樣一段腳本用來掃描所有用戶數(shù)據(jù)庫并把數(shù)據(jù)庫擁有者重指定為系統(tǒng)管理員?! ?/p>
系統(tǒng)過程sp_changedbowner有一個參數(shù),即@map,其缺省值為空(null),該過程可以把數(shù)據(jù)庫舊有的擁有者的別名重映射為新的數(shù)據(jù)庫擁有者,如系統(tǒng)管理員?! ?/p>
為了演示該過程,讓我們首先建立一個盡可能小的數(shù)據(jù)庫模型,然后運行sp_helpuser指令來看看新創(chuàng)建的用戶名清單:
CREATE DATABASE luck GO USE luck GO EXEC sp_helpuser GO
?
這些代碼執(zhí)行后,輸出應該列出數(shù)據(jù)庫擁有者的清單(db_owner)。如果你使用Windows NT認證身份,那么清單中應該有一個NULL的登錄名字和一個SID值?! ?/p>
然后,讓我們加上兩個登錄用戶:ISUser1和ISUser2作為db_owner的別名,并把數(shù)據(jù)庫的擁有者改為系統(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)容應該顯示出系統(tǒng)管理員作為db_owner、ISUser1作為db_owner的別名。
現(xiàn)在我們用過程sp_changedbowner來指定ISUser2為數(shù)據(jù)庫新的擁有者。我們將使用該過程的@map參數(shù)并把該參數(shù)賦值為"否",這樣把用戶將為別名。
EXEC sp_changedbowner @loginame = 'ISUser2', @map = 'FALSE'
EXEC sp_helpuser GO
輸出應當顯示出ISUser2現(xiàn)在成為數(shù)據(jù)庫新的擁有者,ISUser1降為別名。下面,我們應該停止這個數(shù)據(jù)庫并結束本演示過程?!?/p>
USE master GO DROP DATABASE luck GO
用DBCC INDEXDEFRAG命令來實現(xiàn)維護
對索引進行維護工作是一件冗長費力的工作,不過在SQL Server 2000中,微軟已經(jīng)引入了一條維護命令DBCC INDEXDEFRAG,它相對SQL Server7.0的DBREINDEX命令來說,有好幾個優(yōu)點。最主要的優(yōu)點就是它是一種在線操作,這樣,在該命令運行期間用戶仍可以連續(xù)工作。這是因為它不像DBREINDEX那樣在運行時需要鎖定操作所涉及的資源,它還可以降低內(nèi)容阻塞?! ?/p>
DBCC INDEXDEFRAG操作一小段、一小段的數(shù)據(jù),這樣該操作隨時都可以停止下來并跟蹤它已經(jīng)完成的工作。該操作每隔五分鐘就報告一次估計已完成工作的百分比。
從技術的角度來看,DBCC INDEXDEFRAG從新安排了目標索引所在的當前分配頁上的物理葉。當操作完成后,目標索引的物理順序與它的邏輯順序相對應,因此可以加速索引的掃描速度?! ?/p>
該操作還重新安排分配分配給目標索引的空間中的其它索引頁。SQL Server將會為以一個填充因子為目標、根據(jù)索引數(shù)據(jù)的密度和為該索引分配的空間大小,來為索引緩沖頁上的空間。操作后空下來的頁將會被釋放?! ?/p>
注釋:DBCC INDEXDEFRAG有幾個缺點我們需要注意,如果一個表格中的兩個索引共享一個盤區(qū)的同一個空間,而這兩個索引并不相鄰,那么最好重新建立索引讓它們相鄰。
假如索引中的碎片太多,那么DBCC INDEXDEFRAG命令執(zhí)行的速度可能要低于 DBREINDEX命令;但是如果索引中的碎片不太多,那么DBCC INDEXDEFRAG 應該比DBREINDEX快的多,用DBCC INDEXDEFRAG取代DBREINDEX則會顯現(xiàn)很多的優(yōu)越性,此文中不再贅述。
關鍵詞標簽:SQLServer維護技巧
相關閱讀
熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對現(xiàn)有數(shù)據(jù)進行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構的關系
人氣排行 配置和注冊ODBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法