5

メモリに収まらない大きな SQL ファイルがあり、Microsoft SQL Server 2008 に対して実行する必要があります。sqlcmd.exeツールは常に最初にメモリにロードするようですが、この場合は不可能です。何か案は?

残念ながら、このスクリプトは Red Gate の優れた SQL Data Compare によって生成されているため、分割できません。スクリプト全体が 1 つの大きなトランザクションであり、そのままにしておきたいと思います。データベースの世界では大量のデータを持つことが一般的であるため、巨大なスクリプトを持つことは珍しいことだとは思っていませんでした。スクリプトのサイズは 3 GB です。

4

8 に答える 8

3

RedGate の SQL Compare には、SQL スクリプトを生成して後で実行する代わりに、ステートメントを直接実行するオプションがあります。これが機能しない理由はありますか? つまり、SQL スクリプトが必要で、アプリケーションの「今すぐ同期」機能を使用できない理由はありますか?

于 2009-06-04T14:28:20.610 に答える
2

数か月前にこの問題に遭遇しました。私は SQLDataCompare を使用して、いくつかのカタログ データベースに対して週単位および月単位で同期スクリプトを生成していますが、それらは定期的に 500 MB を超えています。私の解決策は、更新スクリプトを 50 から 1000 のコマンド バッチに分割する VBscript を作成することでした。このアプローチの問題は、データベース更新の途中で何かが壊れた場合に、すべての変更をロールバックする機能が失われることです。

于 2009-07-06T18:52:54.167 に答える
1

SQLスクリプトを作成したのは誰ですか?トランザクションまたはステートメント(ファイルの構造に応じて)のいずれかによって、ファイルを作成したものを取得して、スクリプトをロジックチャンクに分割します。ソースがこれを実行できない場合は、スクリプトを作成してファイルを論理的に分割します。

于 2009-06-04T13:56:24.700 に答える
1

それが非常に大きい場合、スクリプトは複雑すぎるか、反復的です。どちらの場合でも、他の人が示唆しているように、唯一の賢明なことは、それを管理可能なチャンクに分割することです。

これは1回限りの運動ですか、それとも定期的なイベントですか。

于 2009-06-04T14:00:25.177 に答える
1

OpenXML で使用されていた巨大な XML 文字列がスクリプトに含まれていた場合、以前にこの問題が発生しました。実際の SQL はかなり最小限で、テーブル内のいくつかの値を更新していました。

XML に含まれていたすべての情報が格納されるまで、一時テーブルにデータを (チャンク単位で) 挿入することになりました。次に、更新ステートメントを実行しました。

より多くのデータが投稿された後、後で追加されました:

ツールで大きなチャンクを選択し、SQL データ比較でスクリプトをチャンクで生成することができます。そうすれば、トランザクションを取得できます。範囲を強調表示してスペースバーを押すだけで、大きなセクションを選択できます。

于 2009-06-04T14:12:44.183 に答える
0

sqlcmdコマンドを使用

例:

sqlcmd  -S myServer\instanceName -i C:\myScript.sql
于 2014-03-07T18:57:04.713 に答える
0

1-800-redgate-support.....

また

  • トランザクション スクリプトを小さなファイルに分割する
  • データベースをシングル ユーザー モードに設定する
  • データベースのフルバックアップ
  • 小さいスクリプト ファイルをそれぞれ実行します。障害が発生した場合: バックアップの復元、スクリプトの修正、再試行
  • シングルユーザーモードから戻り、すべて完了
于 2009-06-04T14:36:44.603 に答える