首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 維護實戰技巧:變更資料庫擁有者與線上索引碎片整理

     編輯:關於SqlServer

資料庫維護雖屬 DBA 職責,但開發人員掌握關鍵技巧能在緊急情況下迅速介入。本文介紹兩項實用技巧:使用 sp_changedbowner 統一資料庫擁有者,以及採用 DBCC INDEXDEFRAG 線上整理索引碎片。

技巧一:重新指定資料庫擁有者

還原或建立資料庫時,SQL Server 預設將擁有者設為目前的 NT 登入帳號。為確保跨環境一致性與安全性,建議統一改為 sa。

關鍵參數 @map

sp_changedbowner 的 @map 參數控制舊擁有者別名是否重新對應至新擁有者:

  • @map = 'TRUE'(預設):將舊擁有者的別名映射給新擁有者。
  • @map = 'FALSE':保留舊別名,新擁有者不繼承別名權限。

示範腳本

-- 建立測試資料庫
CREATE DATABASE OwnerTest;
GO
USE OwnerTest;
GO

-- 新增兩個登入並設為 dbo 別名
EXEC sp_addlogin 'UserA', 'Password1', 'master';
EXEC sp_addlogin 'UserB', 'Password2', 'master';
EXEC sp_addalias 'UserA', 'dbo';

-- 將擁有者改為 sa,並映射別名
EXEC sp_changedbowner 'sa', @map = 'TRUE';
EXEC sp_helpuser;  -- 顯示 sa 為 dbo,UserA 為 dbo 別名

-- 改為 UserB 為擁有者,不映射別名
EXEC sp_changedbowner 'UserB', @map = 'FALSE';
EXEC sp_helpuser;  -- UserB 成為 dbo,UserA 降為一般別名

-- 清理
USE master;
GO
DROP DATABASE OwnerTest;
GO

技巧二:使用 DBCC INDEXDEFRAG 線上整理索引碎片

SQL Server 2000 引入 DBCC INDEXDEFRAG,較 DBCC DBREINDEX 具備線上操作、可中斷續傳、降低封鎖等優勢。

運作原理

  • 以小批次重新排列索引分頁的實體順序,使其符合邏輯順序,加速掃描。
  • 每 5 分鐘回報完成百分比,隨時可停止且保留已完成工作。
  • 釋放多餘分頁,壓縮索引空間。

適用與限制

優點缺點/限制
線上操作,不鎖定資源共用區塊且不相鄰的索引建議重建
可中斷續傳,進度可見碎片極高時比 DBREINDEX 慢
減少封鎖,釋放空間非葉層索引頁不重排
不更新統計資料(需另行 UPDATE STATISTICS)

建議策略

定期監控 sys.dm_db_index_physical_stats(SQL 2005+)或 DBCC SHOWCONTIG,碎片率 10-30% 用 INDEXDEFRAG,超過 30% 改用 ALTER INDEX REBUILD(線上選項)或 DBREINDEX。維護窗口充足時,重建索引效果更徹底。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved