0

データベースからデータをコピーするために使用されるバッチ ファイルがあります。データベースには 7,500 万件を超えるレコードがあります。

だから私は 8 つの出力ファイルを作成しました..それぞれ 1000 万の検索範囲。

バッチファイルは次のとおりです。

echo off

REM -t"^^" -r"~`~" 

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b1.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F1 -L10000000 -t"^^" -r"~`~"

REM "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b2.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F10000001 -L20000000 -t"^^" -r"~`~"

rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b3.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F20000001 -L30000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b4.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F30000001 -L40000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b5.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F40000001 -L50000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b6.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F50000001 -L60000000 -t"^^" -r"~`~"


rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b7.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F60000001 -L70000000 -t"^^" -r"~`~"

rem "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b8.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F70000001 -L80000000 -t"^^" -r"~`~"

一時停止

私が従っている方法は次のとおりです。remを使用して最後の7つのステートメントにコメントを付け、最初の行のみを実行します..次に、2行目を除くすべての行にコメントを付け、バッチファイルを実行します..など..最後までライン..

最初の行では、レコードをコピーするのに 45 分かかりました。2 行目で 1 時間 20 分、3 行目で 2 時間 5 分、というように、時間はどんどん増えていきます。

誰かがそのようなバッチ ファイルを最適化する方法を提案できますか?

よろしく アストッシュ

4

2 に答える 2

1

あなたの質問について、次の 2 点を述べたいと思います。

1-以下のバッチ ファイルに示す方法で、バッチ ファイルの実行を自動化できます。

echo off
setlocal EnableDelayedExpansion

REM -t"^^" -r"~`~" 

set start=1
for /L %%i in (1,1,7) do (
   "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp" "DatabaseD1.dbo.TOOLS_AUDIT" out audit_b%%i.dat -S"LDNPCM05927V05B\DSDCU_MAIN2_UAT" -UUserID -PPassword-c -F!start! -L%%i0000000 -t"^^" -r"~`~"
   set /A start+=10000000
)
pause

このバッチ ファイルは、1 回の実行で 1..8 ステップを実行します... この解決策が適切でない場合は、パラメーターで指定された 1 つのステップのみを実行するようにバッチ ファイルを変更できます (必要な場合は、要求してください)。 .

2-実行時間の問題はバッチファイルとは関係ありません(そして私はSQLを知りません)ので、この点で他の人のアドバイスに従う必要があります。

それが役立つことを願っています...

アントニオ

于 2012-12-01T08:11:39.057 に答える
0

-Fおよび-Lパラメータは使用しないでください。この場合、bcpはテーブルが「F」行になるたびにスキャンし、時間がかかるためです。テーブル全体をエクスポートするだけです。または、パーティショニングと「スライディングウィンドウパティショニングスキーマ」の使用を検討してください。

于 2012-11-30T13:00:39.503 に答える