我有一个批处理文件,用于从数据库中复制数据。 该数据库有超过7500万条记录。
所以我制作了8个输出文件..每个1000万个检索范围。
Tha批处理文件如下:
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个语句,只运行第一行...然后评论除第二行以外的所有行并运行批处理文件......等等。直到最后一行..
对于第一行,我花了45分钟来复制记录。 对于第二行,我花了1小时20分钟.. 对于第三行.. 2小时5分钟......依此类推...每次都会增加时间。
有人可以建议任何优化此类批处理文件的方法吗?
最诚挚的问候 Asutosh
答案 0 :(得分:1)
我想就你的问题说两点:
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..8步骤...如果此解决方案不适合您,可以修改批处理文件以仅运行参数中指示的一个步骤(如果您要求,请求它想要它。)
2-执行时间的问题与批处理文件无关(我不知道sql),因此你应该遵循其他人的建议。
我希望它有所帮助...
安东尼奥
答案 1 :(得分:0)
不要使用-F和-L参数,因为在你的情况下,bcp每次扫描时都要扫描“F”行并且需要一些时间。只需导出整个表格。 或者考虑使用分区和“滑动窗口修改架构”。