web-dev-qa-db-ja.com

すべてのSQL Serverデータベースで自動縮小をオフにします。なぜこれが機能しないのですか?

Sp_MSforeachdbを使用してこの問題を解決できると考えていましたが、エラーメッセージが表示されます。

sp_MSforeachdb '
BEGIN
USE [?]
DECLARE @dbid INT
SET @dbid = DB_ID()
IF(@dbid > 4)
BEGIN
    --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid)
    --ALTER DATABASE [?] SET AUTO_SHRINK OFF
END
END;
'

PRINT行のコメントを外して上記のクエリを実行すると、システムデータベースを除くすべてのデータベースのリストが表示されます。ただし、ALTER DATABASE行のコメントを外すと、次の2つのエラーメッセージが表示されます。

メッセージ5058、レベル16、状態2、行9
オプション「AUTO_SHRINK」はデータベース「マスター」に設定できません。
メッセージ5058、レベル16、状態1、行9
オプション「AUTO_SHRINK」はデータベース「tempdb」に設定できません。

これはある時点で操作を中断するようで、一部のデータベースのみが自動縮小を無効にします。

すべてのデータベースで自動縮小を無効にするにはどうすればよいですか?おまけの質問:なぜ私のアプローチが機能しないのですか?

8
Petter Brodin

残念ながら、プロシージャsp_MSforeachdbはサポートされておらず、今後もサポートされないため、信頼性が低いと言えます。

このDBを使用するときにデータベースをフィルターする方法を示す CodeProjectに関する記事 があります。しかし、私は私のローカル2008 R2インストールであなたと同じ問題を抱えています。フィルタリングが機能しません。

私たちの友人であるアーロンは、sp_MSforeachdbの異なるより良いバージョンを書くことについて、Nice記事を少し前に書いています。彼の記事 here を参照してください。 SPを使用すると、フィルタリングパラメータが必要な処理を実行します。

7
Marian