0

SQL 2000 データベースで、あるテーブルから別のテーブルに行をコピーするように設計された SQL スクリプトを考えてみましょう。転送には、単純に 750,000 行が含まれます。

INSERT INTO TableB([ColA],[ColB]....[ColG])
SELECT [ColA],[ColB]....[ColG]
FROM  TableA

これは、ColBタイプが であるため、おそらく長時間実行されるクエリntextです。ステートメントにはいくつかのCONVERT()操作があります。SELECT

問題は、約 15 分の操作の後、SQL Server によってこの例外が発生することです。

'PRIMARY' ファイル グループがいっぱいであるため、データベース '[DB]' のオブジェクト '[TABLE]'.'[PRIMARY_KEY]' に領域を割り当てることができませんでした。不要なファイルを削除するか、ファイル グループ内のオブジェクトを削除するか、ファイル グループにファイルを追加するか、ファイル グループ内の既存のファイルに対して自動拡張を設定して、ディスク領域を作成します。

より詳しい情報

  • 自動拡張はすでにオンになっています。
  • ディスクに十分な空き容量があります (~20GB)
  • 単一の.mdfは〜6GBです
  • ソース表またはターゲット表にトリガーがない

代替テキスト

代替テキスト 質問

必要に応じてデータベースを拡張できるようにするには、Management Studio または T-SQL を介してどのオプションを設定する必要がありますか? 他にどのような救済策を提案しますか?

解像度

SQL Server 2008 Expressのインスタンスでこのデータベースをホストしていたため、必要に応じてデータベースを拡張できませんでした。中和されていないバージョンの SQL Server にアップグレードすると、この問題が解決します。

代替テキスト

4

3 に答える 3

1

最善のアドバイス: 必要に応じてデータベースを強制的に拡張するのではなく、事前にデータベースのサイズを大きくしてください (処理が遅くなる可能性があります)。

このエラーが発生する理由の 1 つは、autogrow 間隔の設定が大きすぎる場合です。明らかなこと (ディスクに 20 GB しかない状態で 25 GB の拡張を試みる) に加えて、拡張間隔が大きいと、割り当てに非常に長い時間がかかり、クエリがタイムアウトする可能性があります。

編集:新しいスクリーンショットに基づいて、間隔が問題であるようには見えません。しかし、私の最初のアドバイスはまだ有効です。自分でデータベースを手動で拡大してみて、次のことができるかどうかを確認してください。

ALTER DATABASE foobar
MODIFY FILE (name = foobar_data, size = 5000)
于 2009-11-23T17:26:46.890 に答える
0

PRIMARYファイルグループの構成と自動拡張設定(つまり、PRIMARYに含まれるすべてのファイルとそれぞれの自動拡張設定)に関するスクリーンショット/情報を共有できる場合は、同様に役立ちます。追加の情報が表示されない場合の最初の考えは、PRIMARYグループを構成する1つ以上のファイルにmaxFileSizeが指定されている可能性があるということですが、実際には情報が表示されないため、これは単なる予感です。

于 2009-11-23T17:11:30.027 に答える
0

問題のテーブルにトリガーはありますか? 以前にトリガーがあったときに同様の結果を見たことがありますが、実際には、mdf 自体ではなく、トリガーによって実行されたすべてのクエリをログに記録するだけで制限に達したログ ファイル (ldf) の拡張でした。トリガーがある場合は、この更新を行っている間、それらを無効にして、それが役立つかどうかを確認することを検討します (これは、定期的なイベントではなく、1 回限りのデータ移行であると思いますか?)

于 2009-11-23T17:28:39.053 に答える