この質問をここで行うことができるか、サーバーフォールトで行うことができるかはわかりません。疑問に思っていました...バックアップから回復する以外に、SQL Server 2005 Tuning Advsor によって行われた変更をすばやく元に戻す方法はありますか?
3 に答える
それらの名前を変更していない限り、通常、データベース チューニング アドバイザによって生成されたオブジェクトには接頭辞が付けられます。_dta
このクエリを実行してそれらを表示できます
FOR インデックス
SELECT
*
FROM
sys.indexes where name like '_dta%'
FROM統計
SELECT
*
FROM
sys.stats where name like '_dta%'
そこから、ドロップするアイテムがわかると思います
DROP DATABASE からの回復に関する公式の推奨事項がないのと同様に、この操作の UNDO に関する公式の言及もありません。責任ある DBA は、これらのことを行いません。
あなたがそれをやったばかりで、トリガーに満足しているなら、おそらく名前をデフォルトのままにしておいたでしょう - それは大いに役立ちます. レイモンドの答えはほとんどそこにあります。しかし、時間をかけて行った場合は、すべての優れた統計とインデックスを元に戻したくありません。パズルの 2 番目のピースは、インデックスが最後に更新された時期を確認することです。数分前に 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
これにより、過去 1 時間にUPDATEDされたインデックスのみがリストに表示されます。ただし、通常、自動統計はデフォルトでオンになっており、統計を時々再構築するため、表示されているすべてのインデックスを削除したくないでしょう。名前を変更しない限り、コメントand name like '_dta%'
を外すことから始めましょう。
必要なSQLステートメントを生成するために、疑似動的SQLを頻繁に使用します。これにより、プレフィックス_dtaで始まるすべてのインデックスが削除されます。
SELECT'drop
index' + OBJECT_NAME(object_id)+'。['+ name +']' FROM
sys.indexes where name like'_dta%'
この結果を新しいウィンドウに貼り付けてから、ドロップする前に各インデックスを手動で再確認します。
同様に、統計を削除するために同じことを行うことができます
SELECT'drop
index' + OBJECT_NAME(object_id)+'。['+ name +']' FROM
sys.stats where name like'_dta%'