web-dev-qa-db-ja.com

プロパティサイズはデータベースでは使用できません

最近、データベースを(SQL Server 2008 R2 Enterprise)からバックアップしたのと同じインスタンスに復元しましたが、データベースのプロパティにアクセスできませんでした。

私は次のことを行いました:

  • sp_helpdbを使用して、データベース所有者が正しく設定されていることを確認しました。
  • データベースの所有者をsaに変更しました。修正ではありません。
  • データベースの所有者をsysadminユーザーに戻しました。修正ではありません。
  • 影響を受けるデータベースに対してDBCC updateusageを発行しました。修正ではありません。
  • 別のインスタンスへの復元されたコピーに対してDBCC CheckDBを実行します。破損は見つかりませんでした。 (同じバックアップファイルから)復元されたコピーは、データベースプロパティウィンドウにアクセスするときにエラーをスローしませんでした。

誰か助けてもらえますか?

プロパティを表示しようとすると、次のエラーメッセージが表示されます。

要求されたダイアログを表示できません。 (SqlMgmt)
プロパティサイズはデータベース '[DBNAME]'では使用できません。
このプロパティはこのオブジェクトに存在しないか、アクセス権が不十分なために取得できない可能性があります。 (Microsoft.SqlServer.Smo)

私はこのインスタンスのsysadminです。

更新:提案されたとおり、新しいユーザーを作成し、それをsysadminにして、データベース所有者をそれに変更しました。残念ながら修正ではありません。プロファイラーのトレースが何か有用なものになるかどうかを確認します。

更新:Aaron-元のデータベースは名前が変更されてオフラインにされましたが、まだそのインスタンス上にあります。次に、そのデータベースのバックアップが元の名前を使用して復元されました。新しいデータベースファイルのファイル名は、元のmdf/ldfと同じフォルダーにあるため、元のファイルとは異なります。復元されたデータベースは現在、重要なアプリを通常どおりに駆動しています。

15
Peter

残念ながら、SQL Serverサービスを再起動することで、これを解決しました。

私の最初のアイデアは、データベースをデタッチ/アタッチすることでした。これで実際に問題が解決するとは思っていませんでした。どこかでフォーラムで読んだだけです。これは効果がありませんでした。

残念ながら、PJ Mahoneyが提案したre:トレースの実行を実行しませんでした。トレースが何かを明らかにするかどうかを確認できるように、この問題が再び表示されることを願っています。提案をありがとう。

少なくとも自分の質問に答えるということは、データベース所有者の変更に関する別の提案を見る必要がないことを意味します。P

ありがとう

9
Peter

本番データベースのログファイルのファイル拡張プロパティを変更しようとすると、同じエラーが発生しました。 SSMSを使用してみましたが、同じエラーが発生しました。

プロパティサイズはXXXデータベースでは使用できません。

代わりに、T-SQLを使用してデータベースログファイルを変更しました。

USE [master]
GO
ALTER DATABASE [MyDatabase] MODIFY FILE ( NAME = N'MyDatabase_log', FILEGROWTH = 524288KB )
GO

コマンドが完了した後、SSMSでデータベースのプロパティを開くことができました。これが他の人にも役立つことを願っています。

5
Mark S.

ちょうどこれに遭遇し、トレースから、明らかにこれは実行中のINDEX REBUILD操作によってブロックされました

私の特定のエラーは

プロパティSpaceAvailableは、データベース '[dbOverwatch]'では使用できません。このプロパティはこのオブジェクトに存在しないか、アクセス権が不十分なために取得できない可能性があります。 (Microsoft.SqlServer.Smo)

SELECT
(SELECT SUM(CAST(df.size as float)) FROM sys.database_files AS df WHERE df.type in ( 0, 2, 4 ) ) AS [DbSize],
(SUM(a.total_pages) + (SELECT ISNULL(SUM(CAST(df.size as bigint)), 0) FROM sys.database_files AS df WHERE df.type = 2 )) AS [SpaceUsed]
FROM
sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id left join sys.internal_tables it on p.object_id = it.object_id

タイムアウト値は非常に小さい必要がありますが、プロパティにアクセスしようとしたときに何かがブロックされているかどうかを確認できます

1
Thiago Dantas

これは、非常にビジーなデータベース、またはデータベースが一般的にビジーではない場合でも発生する可能性がありますが、現時点では、ログファイルのサイズを急速に変化させるステートメントを実行しています。たとえば、非常に多数の行(数百万)をテーブルから削除しようとすると、エンジンはロールバックの目的ですべての行をログに記録する必要があり、ログファイルが急速に増大します。これが進行中に、SSMSでデータベースプロパティを開こうとすると、「プロパティサイズが利用できません。」というエラーメッセージが表示されます。

それを再現する別の方法は次のとおりです。非常に大規模なデータベース(1億を超える行)を取得し、ALTER TABLEステートメントを実行します(たとえば、char列をvarcharに変換します)。ログファイルが数メガバイトまたは数ギガバイト/秒で爆発するのを確認してください。繰り返しますが、これが発生している間、SSMSは変化が速すぎて正確ではないため、データベースサイズを提供できません。

言うまでもなく、これをライブサーバーで試さないでください。 :)

1
Xotic1

SQL Serverデータベースツールソリューションの展開データベース(SQL Server 2008 R2)に対してこのエラーメッセージが表示されます。展開が完了すると、エラーはなくなります。シングルユーザーモードのDBも読み取り専用(corseのない)も、理由を示すものもないため、少し厄介です。

0
Magier