[SQL SERVER][Memo]如何更新system catalogs

[SQL SERVER][Memo]如何更新system catalogs

SQL Server提供相當多的system catalogs方便DBA可以利用TSQL來取得相關資訊,

前幾天朋友問我是否可以手動更改system catalogs,

一般來說,如果你自行對system catalogs 執行一般update(dml),

將會收到如下圖錯誤訊息。

image

就在準備和朋友說無法達到你的需求時,

恰巧在國外論壇找到了一篇討論,也看到了希望的曙光,

接下來,我將實際操作更新system catalogs過程,

但我一定要強調一件事,修改system catalogs可能會造成無法預期的後果,

除非你相當清楚並了解你自己再做什麼,否則千萬別輕易去更新system catalogs,

不然..後果請自行負責喔。

 

一、利用DAC登入 SQL Server

(如要啟用遠端DAC可參考並記得啟動sql browser 服務)

DAC的存在我認為有其必要性,之前遇過開發人員所開發的SP寫成無窮回圈,

導致Server 資源耗盡且無法正常登入SQL Server,

而當時我就是利用DAC登入SQL Server才得以順利解決(DAC可以讓你存取master),

但DAC也不是萬靈丹,也是有些限制存在的。

image

 

確認spid

image

DAC登入的SPID=51

 

note:DAC無法支援物件總管(錯誤如下圖),只能透過查詢才能使用DAC登入。

image

物件總管不支援DAC登入。

 

二、設定SQL Server為Single_User Mode

單人模式預設會啟用allow updates。

image

 

三、更新master.sys.servers

image

原有linked server name=ProDB

 

嘗試更新name=ricotest

update master.sys.servers
set name='ricotest'
where server_id=1

 

image

 

重新啟動為多人模式後再次查詢master.sys.servers

clip_image002[5]

更新成功。

 

 

參考

如何:利用 SQL Server Management Studio 使用專用管理員連接

如何:將資料庫設定為單一使用者模式 (SQL Server Management Studio)

Update Systems Tables in SQL Server 2005