Il me semble que bcp n'est pas intégré au générateur de script: pour
autant
que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai 308 dans ma
base, liées entre elles par des clés secondaires et une centaine de
triggers. Et quand je dis "ma" base, il s'agit en fait d'une base de
données
d'une application de gestion du parc informatique d'un fournisseur
externe.
Pierrot
"bruno reiter" wrote in message
news:
> bcp.exe est ton ami ;-)
> br
> "wpher56" wrote in message
>news:
>> "Med Bouchenafa" wrote in message
>>news:
>>> -Script data !!!
>>> Ils ont fait vraiment fort en 2008
>> Bof... J'ai une table History qui compte près de 2 mios de lignes; le
>> Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement !
>> Comme je le disais, à raison de 50 par seconde, cela fait quand même 10
>> heures rien que pour ça. Espérons que dans SQL 2012 il y aura un
>> "Script
>> Data Bulk Insert" !
>> Pierrot
Il me semble que bcp n'est pas intégré au générateur de script: pour
autant
que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai 308 dans ma
base, liées entre elles par des clés secondaires et une centaine de
triggers. Et quand je dis "ma" base, il s'agit en fait d'une base de
données
d'une application de gestion du parc informatique d'un fournisseur
externe.
Pierrot
"bruno reiter" <delete-this.b...@terra.com.br> wrote in message
news:ejR51fClJHA.504@TK2MSFTNGP06.phx.gbl...
> bcp.exe est ton ami ;-)
> br
> "wpher56" <wphe...@gmail.com> wrote in message
>news:ecWJqd3kJHA.3868@TK2MSFTNGP05.phx.gbl...
>> "Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
>>news:1A9BC25D-CCBF-418E-BFCA-78F6E6AC96DC@microsoft.com...
>>> -Script data !!!
>>> Ils ont fait vraiment fort en 2008
>> Bof... J'ai une table History qui compte près de 2 mios de lignes; le
>> Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement !
>> Comme je le disais, à raison de 50 par seconde, cela fait quand même 10
>> heures rien que pour ça. Espérons que dans SQL 2012 il y aura un
>> "Script
>> Data Bulk Insert" !
>> Pierrot
Il me semble que bcp n'est pas intégré au générateur de script: pour
autant
que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai 308 dans ma
base, liées entre elles par des clés secondaires et une centaine de
triggers. Et quand je dis "ma" base, il s'agit en fait d'une base de
données
d'une application de gestion du parc informatique d'un fournisseur
externe.
Pierrot
"bruno reiter" wrote in message
news:
> bcp.exe est ton ami ;-)
> br
> "wpher56" wrote in message
>news:
>> "Med Bouchenafa" wrote in message
>>news:
>>> -Script data !!!
>>> Ils ont fait vraiment fort en 2008
>> Bof... J'ai une table History qui compte près de 2 mios de lignes; le
>> Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement !
>> Comme je le disais, à raison de 50 par seconde, cela fait quand même 10
>> heures rien que pour ça. Espérons que dans SQL 2012 il y aura un
>> "Script
>> Data Bulk Insert" !
>> Pierrot
Il me semble que bcp n'est pas intégré au générateur de script: pour
autant que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai
308 dans ma base, liées entre elles par des clés secondaires et une
centaine de triggers. Et quand je dis "ma" base, il s'agit en fait d'une
base de données d'une application de gestion du parc informatique d'un
fournisseur externe.
Pierrot
"bruno reiter" wrote in message
news:bcp.exe est ton ami ;-)
br
"wpher56" wrote in message
news:
"Med Bouchenafa" wrote in message
news:-Script data !!!
Ils ont fait vraiment fort en 2008
Bof... J'ai une table History qui compte près de 2 mios de lignes; le
Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement
! Comme je le disais, à raison de 50 par seconde, cela fait quand
même 10 heures rien que pour ça. Espérons que dans SQL 2012 il y aura
un "Script Data Bulk Insert" !
Pierrot
Il me semble que bcp n'est pas intégré au générateur de script: pour
autant que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai
308 dans ma base, liées entre elles par des clés secondaires et une
centaine de triggers. Et quand je dis "ma" base, il s'agit en fait d'une
base de données d'une application de gestion du parc informatique d'un
fournisseur externe.
Pierrot
"bruno reiter" <delete-this.br33@terra.com.br> wrote in message
news:ejR51fClJHA.504@TK2MSFTNGP06.phx.gbl...
bcp.exe est ton ami ;-)
br
"wpher56" <wpher56@gmail.com> wrote in message
news:ecWJqd3kJHA.3868@TK2MSFTNGP05.phx.gbl...
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:1A9BC25D-CCBF-418E-BFCA-78F6E6AC96DC@microsoft.com...
-Script data !!!
Ils ont fait vraiment fort en 2008
Bof... J'ai une table History qui compte près de 2 mios de lignes; le
Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement
! Comme je le disais, à raison de 50 par seconde, cela fait quand
même 10 heures rien que pour ça. Espérons que dans SQL 2012 il y aura
un "Script Data Bulk Insert" !
Pierrot
Il me semble que bcp n'est pas intégré au générateur de script: pour
autant que j'aie pu en juger, bcp fonctionne au niveau table. J'en ai
308 dans ma base, liées entre elles par des clés secondaires et une
centaine de triggers. Et quand je dis "ma" base, il s'agit en fait d'une
base de données d'une application de gestion du parc informatique d'un
fournisseur externe.
Pierrot
"bruno reiter" wrote in message
news:bcp.exe est ton ami ;-)
br
"wpher56" wrote in message
news:
"Med Bouchenafa" wrote in message
news:-Script data !!!
Ils ont fait vraiment fort en 2008
Bof... J'ai une table History qui compte près de 2 mios de lignes; le
Script Data génère donc 2 mios d'Inserts, à exécuter séquentiellement
! Comme je le disais, à raison de 50 par seconde, cela fait quand
même 10 heures rien que pour ça. Espérons que dans SQL 2012 il y aura
un "Script Data Bulk Insert" !
Pierrot
Il suffit de faire un script en 3 parties :
1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
sortes que ce soit.
2) insertion via BULK INSERT
3) passage des contraintes et index.
En moyenne vous divisez par 8 le temps de réponse.
Il suffit de faire un script en 3 parties :
1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
sortes que ce soit.
2) insertion via BULK INSERT
3) passage des contraintes et index.
En moyenne vous divisez par 8 le temps de réponse.
Il suffit de faire un script en 3 parties :
1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
sortes que ce soit.
2) insertion via BULK INSERT
3) passage des contraintes et index.
En moyenne vous divisez par 8 le temps de réponse.
"Fred BROUARD" wrote in message
news:%
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le 2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
"Fred BROUARD" <brouardf@club-internet.fr> wrote in message
news:%23IRmJnflJHA.4028@TK2MSFTNGP03.phx.gbl...
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le 2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
"Fred BROUARD" wrote in message
news:%
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le 2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
de
les reactiver. C'est fait par defaut
Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
Tu peux jouer sur les options de BCP pour le personnaliser selon les
besoins
DECLARE @databaseName SYSNAME,
@tableSchema SYSNAME,
@tableName SYSNAME
DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
OPEN crsTables
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
out "' + @tableName + '.bcp" -T -n'
--PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
'
in "' + @tableName + '.bcp" -T -n'
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
END
CLOSE crsTables
DEALLOCATE crsTables
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :
"Fred BROUARD" wrote in message
news:%
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de
> quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
de
les reactiver. C'est fait par defaut
Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
Tu peux jouer sur les options de BCP pour le personnaliser selon les
besoins
DECLARE @databaseName SYSNAME,
@tableSchema SYSNAME,
@tableName SYSNAME
DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
OPEN crsTables
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
out "' + @tableName + '.bcp" -T -n'
--PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
'
in "' + @tableName + '.bcp" -T -n'
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
END
CLOSE crsTables
DEALLOCATE crsTables
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :
"Fred BROUARD" <brouardf@club-internet.fr> wrote in message
news:%23IRmJnflJHA.4028@TK2MSFTNGP03.phx.gbl...
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de
> quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
de
les reactiver. C'est fait par defaut
Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
Tu peux jouer sur les options de BCP pour le personnaliser selon les
besoins
DECLARE @databaseName SYSNAME,
@tableSchema SYSNAME,
@tableName SYSNAME
DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
OPEN crsTables
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
out "' + @tableName + '.bcp" -T -n'
--PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
'
in "' + @tableName + '.bcp" -T -n'
FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
END
CLOSE crsTables
DEALLOCATE crsTables
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :
"Fred BROUARD" wrote in message
news:%
> Il suffit de faire un script en 3 parties :
> 1) la création des tables "brutes" sans PK, FK ni contraintes de
> quelques
> sortes que ce soit.
> 2) insertion via BULK INSERT
> 3) passage des contraintes et index.
>
> En moyenne vous divisez par 8 le temps de réponse.
>
Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
2,
je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
Pierrot
Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" wrote in message
news:
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" wrote in message
>> news:%
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>
Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:12EFA5CA-9B61-46B3-B2FE-68E9790F9B66@microsoft.com...
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" <brouardf@club-internet.fr> wrote in message
>> news:%23IRmJnflJHA.4028@TK2MSFTNGP03.phx.gbl...
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>
Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" wrote in message
news:
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema, table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName + '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" wrote in message
>> news:%
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>
Il ne faut ne pas se fier au message disant 1000 lignes....
Si tu ne specifies pas d'option -b, BCP fait tout en une seule
transaction.
Pour les grosses tables, je pense que tu gagnerais a rajouter une
option -b
Tu peux aussi tres certainement reduire ton temps en passant la base 2005
en
mode BULK LOGGED avant insertion et la remettre a FULL apres insertion
Pour les tres grosses tables, j'utilise sur le meme principe un script qui
me divise ma table en 10+ fichiers (Voir parametres F et L de BCP)
Je lance alors tous les BCP in en parallele et les temps d'insertion sont
alors eblouissants
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce
type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" wrote in message
news:
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes
> et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes
> tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema,
> table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName
> +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" wrote in message
>> news:%
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour
>> le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>
Il ne faut ne pas se fier au message disant 1000 lignes....
Si tu ne specifies pas d'option -b, BCP fait tout en une seule
transaction.
Pour les grosses tables, je pense que tu gagnerais a rajouter une
option -b
Tu peux aussi tres certainement reduire ton temps en passant la base 2005
en
mode BULK LOGGED avant insertion et la remettre a FULL apres insertion
Pour les tres grosses tables, j'utilise sur le meme principe un script qui
me divise ma table en 10+ fichiers (Voir parametres F et L de BCP)
Je lance alors tous les BCP in en parallele et les temps d'insertion sont
alors eblouissants
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :
Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce
type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:12EFA5CA-9B61-46B3-B2FE-68E9790F9B66@microsoft.com...
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes
> et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes
> tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema,
> table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName
> +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" <brouardf@club-internet.fr> wrote in message
>> news:%23IRmJnflJHA.4028@TK2MSFTNGP03.phx.gbl...
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour
>> le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>
Il ne faut ne pas se fier au message disant 1000 lignes....
Si tu ne specifies pas d'option -b, BCP fait tout en une seule
transaction.
Pour les grosses tables, je pense que tu gagnerais a rajouter une
option -b
Tu peux aussi tres certainement reduire ton temps en passant la base 2005
en
mode BULK LOGGED avant insertion et la remettre a FULL apres insertion
Pour les tres grosses tables, j'utilise sur le meme principe un script qui
me divise ma table en 10+ fichiers (Voir parametres F et L de BCP)
Je lance alors tous les BCP in en parallele et les temps d'insertion sont
alors eblouissants
--
Bien cordialement
Med Bouchenafa
"wpher56" a écrit :Merci mille fois pour ce script. J'ai maintenant pu copier la base depuis
SQL 2008 vers SQL 2005 en moins de 15 minutes. J'ai constaté que le bulk
copy copie par groupe de 1000 lignes et qu'il lui avait fallu 24 secondes
pour copier une table de 2.2 mios de lignes, belle performance pour ce
type
d'opération.
A bientôt pour d'autres aventures !
Pierrot
"Med Bouchenafa" wrote in message
news:
> Avec un BULK INSERT, il n'est pas besoin de desactiver les contraintes
> et
> de
> les reactiver. C'est fait par defaut
> Un script comme ce qui suit te gere le code pour l'ensemble de tes
> tables
> Tu peux jouer sur les options de BCP pour le personnaliser selon les
> besoins
>
>
> DECLARE @databaseName SYSNAME,
> @tableSchema SYSNAME,
> @tableName SYSNAME
>
>
> DECLARE crsTables CURSOR FOR SELECT Table_catalog,table_Schema,
> table_Name
> FROM INFORMATION_SCHEMA.tables WHERE Table_Type = 'BASE TABLE'
>
> OPEN crsTables
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema, @tableName
> WHILE @@FETCH_STATUS = 0
> BEGIN
> PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName +
> '
> out "' + @tableName + '.bcp" -T -n'
>
> --PRINT 'BCP ' + @databaseName + '.' + @tableSchema + '.' + @tableName
> +
> '
> in "' + @tableName + '.bcp" -T -n'
>
> FETCH NEXT FROM crsTables INTO @databaseName,@tableSchema ,@tableName
>
> END
> CLOSE crsTables
> DEALLOCATE crsTables
>
> --
> Bien cordialement
> Med Bouchenafa
>
>
> "wpher56" a écrit :
>
>>
>> "Fred BROUARD" wrote in message
>> news:%
>> > Il suffit de faire un script en 3 parties :
>> > 1) la création des tables "brutes" sans PK, FK ni contraintes de
>> > quelques
>> > sortes que ce soit.
>> > 2) insertion via BULK INSERT
>> > 3) passage des contraintes et index.
>> >
>> > En moyenne vous divisez par 8 le temps de réponse.
>> >
>>
>> Pour le 1 et le 3, je peux utiliser le générateur de script. Mais pour
>> le
>> 2,
>> je dois le faire pour CHAQUE table ? (j'en ai 308 dans ma base !)
>>
>> Pierrot
>>
>>