最近大型資料表要進行歷史資料封存,為了使線上交易持續正常運作,
選用 A.小量分批刪除 + B.關閉擴大鎖定方案,但執行時間需要數小時,不太符合效能需求。
想到刪除資料量比保留的多,於是靈光一現,改採以前主機常用的哪招:
A.先建立只有保留資料的新資料表
B.再改名來減少封存執行的時間。
主鍵和資料表都很順利的重新命名,偏偏索引改名失敗,
找不到名稱為 'IX_TABLE1' 的項目
加上索引參數,則出現
稜兩可或是所宣告的 @objtype (INDEX)
1.先建立測試資料表TABLE1、主鍵及索引鍵
--建立資料表
CREATE TABLE TABLE1
(C1 VARCHAR(5) NOT NULL,C2 VARCHAR(10) NOT NULL)
--建立主鍵
ALTER TABLE TABLE1
ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED(C1)
--建立索引
CREATE NONCLUSTERED INDEX IX_TABLE1 ON TABLE1(C2)
2.執行改名
SQL Server 修改資料庫物件名稱的的系統預存程序 SP_RENAME
--(1)主鍵重新命名
SP_RENAME N'PK_TABLE1',
N'PK_TABLE2'
--成功!
--(2)索引鍵重新命名
SP_RENAME N'IX_TABLE1',
N'IX_TABLE2'
--失敗:找不到名稱為 'IX_TABLE1' 的項目
--(2)索引鍵重新命名
SP_RENAME N'IX_TABLE1',
N'IX_TABLE2',
N'INDEX'
--失敗:模稜兩可或是所宣告的 @objtype (INDEX)
--(2)索引鍵重新命名
SP_RENAME N'TABLE1.IX_TABLE1',
N'IX_TABLE2',
N'INDEX'
--成功:原來索引項目名稱必須加上資料表名稱,自己真的是很呆(氣)~
--(3)資料表重新命名
SP_RENAME N'TABLE1',
N'TABLE2'
--成功!
呼~筆記一下系統預存程序SP_Rename使用方式
備註: 如果在封存資料執行期間,除了查詢也還有資料會新增進來,記得要補追差異資料喔。