transferer 350000 enregistrement d'une table local a table distante?

transferer 350000 enregistrement d'une table local a table distante? - SQL/NoSQL - Programmation

Marsh Posté le 10-09-2003 à 17:51:55    

voila
comment peut-on faire pour transferer 350 000 enregistrement d'une table provenant d'une base de données Access à une table d'une Base de données ditantes sur MySql ?
 
j'ai essayera partir d'acces ca merde ca ne copie pas tt
a partir de MySqlFront , SQLyog et dernièrement avce EMS Mysql manager et ca merde encore
 
uen solution?

Reply

Marsh Posté le 10-09-2003 à 17:51:55   

Reply

Marsh Posté le 22-09-2003 à 07:25:43    

Personnelement, je ferai transiter d'abord les enregistrement vers une bdd mysql locale, puis je balancerai la mysql locale sur la distante, ca reglerait deja une embrouille :D

Reply

Marsh Posté le 27-09-2003 à 19:27:18    

moi si j'etais toi, je genererais un fichier texte qui serait une liste de INSERT INTO a faire pour chaque enregistrement.
 

INSERT INTO ....blabla...........;
INSERT INTO ....blabla2...........;
INSERT INTO ....blabla3...........;
.
.
.
INSERT INTO ....blablaN...........;


 
Une fois ce fichier generé, tu te demerde avec un client mysql, ou un chti script php...


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 27-09-2003 à 19:55:16    

plutot que de passer par une serie de requetes, je conseille plutot un fichier plat a pas fixe (ce qu'il y a de plus performant)
 
en effet, le probleme de la chie d'insert, c'est que si les transactions sont activees dans mysql tu risque grandement un rollback segment full et donc un plantage. et si tu force es commits 5meme par lot, non seulement tu vas faire chutter les perfs, mais surtout si pour une raison ou pour une autre ca plante, tu ne pourras pas revenir en arriere. alors qu'avec un module d'import de fichier plat tu ne devrais pas avoir ces probleme.

Reply

Marsh Posté le 27-09-2003 à 20:48:53    

MagicBuzz a écrit :

plutot que de passer par une serie de requetes, je conseille plutot un fichier plat a pas fixe (ce qu'il y a de plus performant)
 
en effet, le probleme de la chie d'insert, c'est que si les transactions sont activees dans mysql tu risque grandement un rollback segment full et donc un plantage. et si tu force es commits 5meme par lot, non seulement tu vas faire chutter les perfs, mais surtout si pour une raison ou pour une autre ca plante, tu ne pourras pas revenir en arriere. alors qu'avec un module d'import de fichier plat tu ne devrais pas avoir ces probleme.


 
Tu veux dire carrément copier le fichier contenant les données de la DB sur le serveur? Encore faut-il que sont hebergeur autorise cela...


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 27-09-2003 à 20:55:36    

non non, avec access, faire "exporter donnee", et choisir "fichier a masque" ou un truc du genre.
 
ensuite, sous mysql, creer la table avec les champs formattes de la meme facon.
 
puis avec un gui de mysql, choisir "importer un fichier a masque"

Reply

Marsh Posté le 29-09-2003 à 09:59:17    

MagicBuzz a écrit :

non non, avec access, faire "exporter donnee", et choisir "fichier a masque" ou un truc du genre.
 
ensuite, sous mysql, creer la table avec les champs formattes de la meme facon.
 
puis avec un gui de mysql, choisir "importer un fichier a masque"


 
si dans la table distante MySQl , la clé est juste un numerique et dans access la clé et un numero auto , es ce que ca peu engendré des problèmes? en partant du principe que l'on fait une transaction ACCESS a MySQL.

Reply

Marsh Posté le 29-09-2003 à 10:00:46    

dans l'exportantion je ne voix pas ce que tu appelles par "fichier a  masque"?

Reply

Marsh Posté le 29-09-2003 à 10:19:29    

Il faut que tu exportes depuis access ta base en prenant l'option fichier texte ou excel.


---------------
Mes guitares, ampli, et effets sont en vente !
Reply

Marsh Posté le 29-09-2003 à 10:31:12    

Format_C a écrit :

Il faut que tu exportes depuis access ta base en prenant l'option fichier texte ou excel.


 
peut-on exporter juste une table?
ensuite faut'il que le prestataire accepte de mettre ajour la base MySql :/

Reply

Marsh Posté le 29-09-2003 à 10:31:12   

Reply

Marsh Posté le 29-09-2003 à 10:36:38    

Saxgard a écrit :


 
peut-on exporter juste une table?
ensuite faut'il que le prestataire accepte de mettre ajour la base MySql :/


 
oui on peut, lis la documentation de Access, c dedans ( intégralement d'ailleurs, un ami m'avait posé la meme question et ct devant ses yeux).


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 29-09-2003 à 10:39:54    

tetedeiench a écrit :


 
oui on peut, lis la documentation de Access, c dedans ( intégralement d'ailleurs, un ami m'avait posé la meme question et ct devant ses yeux).


 
ayé j'ai vu et essayé , le truc c que au niveau du prestataire ca rique d'etre un pb a moi q ue je puisse  a distance mettre a jour la table   de mla base distante MySql avce le fichier texte crée !

Reply

Marsh Posté le 29-09-2003 à 11:02:25    

Saxgard a écrit :


 
ayé j'ai vu et essayé , le truc c que au niveau du prestataire ca rique d'etre un pb a moi q ue je puisse  a distance mettre a jour la table   de mla base distante MySql avce le fichier texte crée !


Non c'est pas trop problématique. Il suffit de faire un script qui récupère le fichier texte crée et le transforme automatiquement. Le tout c'est que la personne qui fasse l'import mette le fichier exporter toujours au même endroit sur le serveur vers lequel le script pointera (si j'ai bien compris ton pb)


---------------
Mes guitares, ampli, et effets sont en vente !
Reply

Marsh Posté le 29-09-2003 à 11:04:10    

Format_C a écrit :


Non c'est pas trop problématique. Il suffit de faire un script qui récupère le fichier texte crée et le transforme automatiquement. Le tout c'est que la personne qui fasse l'import mette le fichier exporter toujours au même endroit sur le serveur vers lequel le script pointera (si j'ai bien compris ton pb)


 
euh ouais c a peu pres ca ;o)
hmm le truc c que mnt faut savoir cmment se fait ce script et en plus il ya quelques pb avce le prestataire :/

Reply

Marsh Posté le 29-09-2003 à 11:15:35    

Saxgard a écrit :


 
euh ouais c a peu pres ca ;o)
hmm le truc c que mnt faut savoir cmment se fait ce script et en plus il ya quelques pb avce le prestataire :/  


Il faut un script php qui ouvre le fichier généré en lecture seule.
Ensuite tu lis et modifie le fichier ligne par ligne et à chaque fois tu fait un insert dans ta table.
 
Par exemple si une ligne de ton fichier de la table coordonnée est : $ligne = 'contact';'adresse';'telephone';'fax';etc...
Tu feras une fonction qui comptera le nbre de caractères jusqu'à la première occurence de ";" et tu dira que ton champs $contact est égal au n premiers caratères de $ligne. Puis tu remplaces dans $ligne le champs $contact.";" par rien autrement dit par "", et tu recommences l'opération par autant de champs que nécessaire.
Une fois que c'est fait tu te retrouves avec les variables $contact, $adresse, $telephone, $fax, etc... Tu n'as alors plus qu'à faire un Insert_table dans ta base mysql.


---------------
Mes guitares, ampli, et effets sont en vente !
Reply

Marsh Posté le 29-09-2003 à 11:19:10    

Format_C a écrit :


Il faut un script php qui ouvre le fichier généré en lecture seule.
Ensuite tu lis et modifie le fichier ligne par ligne et à chaque fois tu fait un insert dans ta table.
 
Par exemple si une ligne de ton fichier de la table coordonnée est : $ligne = 'contact';'adresse';'telephone';'fax';etc...
Tu feras une fonction qui comptera le nbre de caractères jusqu'à la première occurence de ";" et tu dira que ton champs $contact est égal au n premiers caratères de $ligne. Puis tu remplaces dans $ligne le champs $contact.";" par rien autrement dit par "", et tu recommences l'opération par autant de champs que nécessaire.
Une fois que c'est fait tu te retrouves avec les variables $contact, $adresse, $telephone, $fax, etc... Tu n'as alors plus qu'à faire un Insert_table dans ta base mysql.


 
ouais mais le problème c'ets que si j'excecute ce script , je ne risque pas d'avoir un timeout parceque l'execution de cette requete sera trop longue?
 
j'ai deja rencontré ce pb avec d'autres tables

Reply

Marsh Posté le 29-09-2003 à 11:30:38    

Soit tu modifies le timeout, soit tu découpes le script en plusieurs boucles.
Par exemple ton script principal s'apelle script.php.
Quand tu le lances tu passes une variable script.php?saut2ligne=1000
 
Dans script.php tu dis que si la position de $ligne=$saut2ligne
alors tu dis que $saut2ligne=$saut2ligne+1000 et qu'il faut aller à la 'pagescript.php?saut2ligne='.$saut2ligne, ce qui rechargera ton script en passant scannantles lignes 1000 à 2000 etc...


---------------
Mes guitares, ampli, et effets sont en vente !
Reply

Marsh Posté le 29-09-2003 à 11:33:30    

Format_C a écrit :

Soit tu modifies le timeout, soit tu découpes le script en plusieurs boucles.
Par exemple ton script principal s'apelle script.php.
Quand tu le lances tu passes une variable script.php?saut2ligne=1000
 
Dans script.php tu dis que si la position de $ligne=$saut2ligne
alors tu dis que $saut2ligne=$saut2ligne+1000 et qu'il faut aller à la 'pagescript.php?saut2ligne='.$saut2ligne, ce qui rechargera ton script en passant scannantles lignes 1000 à 2000 etc...


 
ah c pas bette ca , et ca peu s efaire automatiquementa lors? par une redirection?
mais on peu pa strouver un moyen qu'il y est un genre de flush sur la meme execution du script . Comme si il a fini il affiche puis continue( les requetes) puis affiche  ... etc... ?

Reply

Marsh Posté le 29-09-2003 à 14:41:54    

pas pitiée, utilisez pas le CSV :sweat:
 
un fichier à masque est plus rapide, et plus compatible (pas de problème de séparateur).
 
il se lit et s'écrit avec des variables de type "record".
 
Exemple :
 
mettons un type "utilisateur"
 


utilisateur
  nom - string(30)
  prenom - string(30)
  datenaissannce - string(8)
  groupe - string(2)
  CR - string(2)


 
on a deux variables contenant les données :


  Michel
  Dupont
  15021986
  2
  chr(10) + chr(13)
 
  François
  Dupuis
  05071964
  1
  chr(10) + chr(13)


(a noter qu'il faut impérativement comme dernière valeur une string contenant un saut de ligne, c'est pas obligatoire, mais ca rends le fichier plus lisible pour le débuggage)
 
On écrit dans le fichier avec un write_file(variable_de_type_reccord)
 
PS: si le langage est bien foutu, c'est la même fonction que celle pour écrire une chaine. Les valeurs dans les variables doivent impérativement être forcée à une taille fixe (utilisation de string(xxx) lors de la déclaration)
 
Le fichier généré sera :
 


Michel              Dupont              150219862
François            Dupuis              050719641


 
Il se lira de la même façon qu'il a été écrit, dans les mêmes variables. C'est à la vois très simple, et ce qu'il y a de plus performant. Ca évite de faire des traîtements de chaîne à plus savoir quoi en faire et de bosser avec des tableaux dynamiques (avec la fonction split par exemple).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed