|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2007 Messages : 23 ![]() |
ASE : 12.5
Bonjour, Je souhaite copier 60 Millions d'enregistrements d'une table vers une autre. Etant restreint en segment de log, l'INSERT INTO n'est pas envisageable, le BCP OUT/IN également. Auriez-vous une solution ? D'avance merci |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 1 056 ![]() |
tu peux utiliser la commande SELECT cols INTO new_table FROM table_origine,
ton journal ne sera pas rempli mais ta cohérence transactionnelle est perdue donc il faudra faire un backup complet ensuite.
__________________
Emmanuel T. |
|
|
00
|
|
|
#3 | ||
![]() ![]() |
Pour limiter la taille de la log on peut faire un SELECT ... INTO ... FROM ...
Cela implique que l'option "select into" est positionnée pour la base, et il faudra faire un DUMP DATABASE complet après l'insert pour que les saves de la transaction log soient utilisablent. Autremement il faut découper le select en blocs, en utilisant SET ROWCOUNT pour limiter le nombres d'inserts fait par itérations, et en faisant un DUMP TRAN entre chaque itération. Evidemment il faut que le select puisse rapidement trouver où il doit commencer pour chaque itération. On pourrait imaginer qqch comme ceci (dans l'example ci-dessous on admet que la colonne "id" est un numeric et est la pk): Code :
Reste à voir si ce genre de solution est adaptable à ta situation. Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
||
|
|
00
|
|
|
#4 |
![]() ![]() |
Je suis pour la méthode select into from... mais juste pour curiosité, pourquoi pas de bcp out/in en mode fast ?
__________________
Sr DBA Oracle / Sybase / MS-SQL / DB2 / Informix / Postgresql Administrateur SAP Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums ! |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2006 Messages : 10 ![]() |
Il est peut-être envisageable d'utiliser l'option -b <nombre de ligne> du bcp pour commiter tous les n lignes.
|
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : août 2007 Messages : 134 ![]() |
Le seul soucis avec le select into c'est qu'il ne fonctionne que si la table destination n'existe pas (le select into existing table ne fonctionne que vers des tables proxy).
Si la table destination existe et qu'on veut conserver son contenu, il faut faire quelque chose dans ce genre (non testé) Code :
|
||
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2006 Messages : 15 ![]() |
Pour le bcp out pas de problèmes de segments, par contre le bcp in peut en avoir si tu as des PK, indexs .....
Pour les GROS bcp in j'ai un truc pour laisser le serveur "souffler" : l'option -b bcp mabase..matable in monfichier.bcp -Uuser -Ppassword -Sserver -b5000 Ca va faire des "tranches" de 5000 enregistrements et faire une pause enter chaque. Je fais souvent des bcp in de plus de 20 millions de lignes avec cette méthode. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com