以前は、クラスター化インデックスのDROP INDEXステートメントと非クラスター化インデックスのDROP STATISTICSステートメントのいずれかを使用して、架空のインデックスを削除すると思っていました。
クリーンアップしたいDTAの残りがいっぱいのデータベースがあります。ただし、オブジェクトをドロップしようとすると、「オブジェクトが存在しないか、権限がないため」オブジェクトをドロップできないというエラーメッセージが常に表示されます。私はサーバーの完全なシステム管理者ですので、何かをする権利があると思っています。
私はこれをDROP STATSとDROP INDEXステートメントの両方で試しましたが、どちらも同じエラーを出します。
誰かが以前にこれらを削除したことがあり、私が見逃しているトリックはありますか?
補遺
これを見てみると、オブジェクトをRクリックすると、[名前を付けてスクリプト]オプションと[削除]オプションの両方がグレー表示されることに気づきました。
インデックスチューニングによって作成された仮想インデックスWizardは "hind _%"という名前で始まり、後に存在してはなりません。チューニングが完了しました。これらはすべて削除する必要があります。SQLServerクエリアナライザーから次のスクリプトを実行して、存在する可能性のあるインデックスを削除できます。sysadminまたはdb_owner権限を持つアカウント、またはこれらの統計が作成されたオブジェクトの所有者。
例えば
DECLARE @strSQL nvarchar(1024) DECLARE @objid int DECLARE @indid tinyint DECLARE ITW_Stats CURSOR FOR SELECT id、indid FROM sysindexes WHERE name LIKE 'hind_ % 'ORDER BY名 OPEN ITW_Stats FETCH NEXT FROM ITW_Stats INTO @objid、@indid WHILE(@@ FETCH_STATUS -1) BEGIN SELECT @strSQL =(SELECT Case when INDEXPROPERTY(i.id、i.name、 'IsStatistics')= 1 then 'drop statistics [' else 'drop index [' end + OBJECT_NAME(i.id)+ ']。[ '+ i.name +'] ' FROM sysindexes i join sysobjects o on i.id = o.id WHERE i.id = @objid and i.indid = @indid AND (INDEXPROPERTY(i.id、i.name、 'IsHypothetical')= 1 OR (INDEXPROPERTY(i.id、i.name、 'IsStatistics')= 1 AND INDEXPROPERTY (i.id、i.name、 'IsAutoStatistics')= 0))) EXEC(@strSQL) ITCH_Stats INTO @objid、@indid END [から次をフェッチ.____。]閉じるITW_Stats DEALLOCATE ITW_Stats
上記のスクリプトは、マイクロソフトから提供されています。詳細については、次のリンクにアクセスしてください。 http://support.Microsoft.com/kb/q293177
Books online には、インデックスを削除できないいくつかの理由が含まれています。
他の理由もあるかもしれません。
これは少し単純化していますが、DTAの提案が完了したら、DTAインターフェイスを介してそのサーバーからチューニングセッションを削除してみてください。