3

この質問をここで行うことができるか、サーバーフォールトで行うことができるかはわかりません。疑問に思っていました...バックアップから回復する以外に、SQL Server 2005 Tuning Advsor によって行われた変更をすばやく元に戻す方法はありますか?

4

3 に答える 3

5

それらの名前を変更していない限り、通常、データベース チューニング アドバイザによって生成されたオブジェクトには接頭辞が付けられます。_dta

ここに画像の説明を入力

このクエリを実行してそれらを表示できます

FOR インデックス

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

FROM統計

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

そこから、ドロップするアイテムがわかると思います

于 2012-10-31T01:03:14.313 に答える
2

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%'を外すことから始めましょう。

于 2012-10-31T02:34:04.970 に答える
1

必要な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%'

于 2012-10-31T19:03:47.040 に答える