1

execute メソッドsqlを使用して、古いテーブルから新しいテーブルにデータを移行するスクリプトがあります。FluentMigrator

これは私のスクリプトです:

                INSERT INTO [Demo].[C]([key], [value], [tempID]) SELECT [name], [value], [userID] FROM [Demo].[A]
                INSERT INTO [Demo].[B]([parentID], [propertyID]) SELECT [tempID], [id] FROM [Demo].[C] WHERE [tempID] IS NOT NULL
                UPDATE [Demo].[C] SET [tempID] = NULL

userPropertyテーブルには約 1,100 万行あり、次のようになります。

  • 最初のステップでは、Cテーブルの列に挿入する必要があります (1,100 万行)。
  • ステップ2、CテーブルからBテーブルにデータを挿入する必要があります.(1100万行)
  • ステップ 3、C テーブル (1100 万行) を更新する必要があります

合計 1,100 万行ですが、次のエラーが発生します。

エラーは、「ACTIVE_TRANSACTION」により、データベース「test」のトランザクション ログがいっぱいです。

one time runningこれはスクリプトなので、最速の方法を見つけたいです。

4

2 に答える 2

1

トランザクション ログ ファイルがいっぱいで、拡張するためのディスク領域が残っていません (自動拡張オプションが指定されている場合)。

以下のクエリを実行して、トランザクション ログ ファイルの設定に関する詳細を取得します。

SELECT [type_desc]
      ,[name]
      ,[physical_name]
      ,[size]
      ,[max_size]
      ,[growth]
FROM [sys].[database_files];

あなたの問題にはさまざまな解決策があるかもしれません。たとえば、より多くのスペースを取得して自動拡張オプションを有効にし、ステップを個別に実行するなどです。

あなたが確かにチェックするいくつかのこと:

  • お使いのデータベースは復旧モデルに基づいていますFULLSIMPLE
  • 復旧モデルを使用している場合FULLは、トランザクション ログ ファイルの定期的なバックアップが作成されているかどうかを確認します (作成されていない場合、ファイルは可能な限り大きくなり、スペースを消費します)。

FULLデータベースを復旧モデルにする必要がない場合は、 SIMPLE.

于 2015-05-21T13:52:11.677 に答える