2010-08-30 59 views
3

我不確定是否可以在此處詢問此問題或服務器故障。我想知道...是否有辦法快速撤消由SQL Server 2005 Tuning Advsor所做的更改,而不是從備份恢復?撤消對SQL Server數據庫調整所做的更改

+0

我認爲調優顧問生成了一個腳本來運行,而不是對數據庫進行更改 - 如果是這樣,沒有任何可撤消的。 – adrianbanks 2010-08-30 16:10:19

+0

@adrianbanks:有一個選項可以自動應用建議。請參閱:[如何:實施調整建議](http://msdn.microsoft.com/en-us/library/ms175529.aspx) – 2010-08-30 19:02:13

回答

4

有一個辦法,只要你還沒有給他們改名通常數據庫引擎優化顧問生成的對象都有前綴_dta

enter image description here

這樣你就可以運行這個查詢

查看它們索引

SELECT   
* 
FROM    
sys.indexes where name like '_dta%' 

從統計

SELECT 
* 
FROM 
sys.stats where name like '_dta%' 

從那裏我猜你會知道放棄什麼項目

+0

hey raymund最初模糊名稱的原因是什麼? – 2012-11-01 16:47:52

2

沒有官方參考撤消此操作,就像不會有一個官方從DROP DATABASE恢復的建議。一個負責任的DBA只是不做這些事情。

如果您剛剛完成並觸發了快感,您很可能會將名稱作爲默認值 - 這對您有很大的幫助。 Raymund的回答幾乎就在那裏。但是,如果你已經完成了一段時間,那麼你不希望UNDO所有的良好數據和索引。第二部分難題是檢查索引何時最後更新。如果您剛剛在幾分鐘前完成了此操作,這對UNDO來說是一個很好的時間表,請檢查此查詢以獲取剛剛重建的索引和統計信息。

SELECT object_name(object_id) tablename, 
     name indexname, 
     nullif(name,name) statsname, 
     STATS_DATE(object_id, index_id) lastupdated 
    from sys.indexes 
    where STATS_DATE(object_id, index_id) >= dateadd(hh,-1,getdate()) 
    -- and name like '_dta%' 
    union all 
    SELECT object_name(object_id) tablename, 
     nullif(name,name) indexname, 
     name statsname, 
     STATS_DATE(object_id, stats_id) lastupdated 
    from sys.stats 
    where STATS_DATE(object_id, stats_id) >= dateadd(hh,-1,getdate()) 
    -- and name like '_dta%' 
order by lastupdated desc 

此過濾器列表下降到僅已在過去的每小時更新索引。但是,默認情況下,auto-stats通常處於打開狀態,偶爾也會重新生成統計數據,因此您不會想要刪除顯示的索引全部。取消註釋and name like '_dta%'將是一個開始,除非您重命名它們 - 在這種情況下,您肯定可以回想起您將它們命名爲?

1

我經常使用僞動態SQL來生成我需要的SQL語句。 這將刪除以_dta開頭的所有索引。

SELECT
'下降指數' + OBJECT_NAME(的object_id)+ '[' +名稱+ ']' FROM
SYS.INDEXES 其中名稱像 '_dta%'

粘貼從結果這到一個新的窗口,然後我會刪除之前手動仔細檢查每個索引。

同樣,你可以做同樣的事情下探統計

選擇
'DROP INDEX' + OBJECT_NAME(OBJECT_ID)+ '[' +名字+ ']' FROM
SYS。統計信息 其中name'_dta%'