[SQL Server] 歷史資料封存Archive(索引改名失敗)

最近大型資料表要進行歷史資料封存,為了使線上交易持續正常運作,
選用 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使用方式


備註: 如果在封存資料執行期間,除了查詢也還有資料會新增進來,記得要補追差異資料喔