Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1017 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  dupliquer une table sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

dupliquer une table sql

n°1221024
molarisapa
Posté le 12-10-2005 à 10:42:10  profilanswer
 

bonjour,
 
je dois dans un executable dupliquer une table sql d'une base a une autre
quel est le meilleur moyen
 
je pensais a une procedure PL/SQL (je suis en oracle) qui parcour tout les enregistrements de la table a copier (avec un databaseLink)
dans un curseur
puis de tout inserer dans la table de reception
 
merci  :hello:

mood
Publicité
Posté le 12-10-2005 à 10:42:10  profilanswer
 

n°1221026
betsamee
Asterisk Zeperyl
Posté le 12-10-2005 à 10:45:09  profilanswer
 

je comprends pas
pourquoi faire ca en PL/SQL?
une simple creation de table a partir du select de la table source ne te convient pas?

n°1221031
molarisapa
Posté le 12-10-2005 à 10:52:08  profilanswer
 

create table matable as select * from MaTableaCopie@dblink;
 
 
comme ca? oui kler je voyais le trop d'une maniere trop complexe ;)

n°1221034
molarisapa
Posté le 12-10-2005 à 10:53:50  profilanswer
 

non en faite les tables seront deja crée, ca va peu etr pas marcher le create table (pour les jointures etc...)
 
je vais peu etre faire ca alors:
INSERT INTO MaTableCopie (var1, var2, ....) SELECT var1, var2, .... FROM MaTable;

n°1221036
betsamee
Asterisk Zeperyl
Posté le 12-10-2005 à 10:56:55  profilanswer
 

INSERT INTO MaTableCopie SELECT * FROM MaTable devrait suffire non


Message édité par betsamee le 12-10-2005 à 10:57:10
n°1221041
molarisapa
Posté le 12-10-2005 à 11:02:12  profilanswer
 

kler merci pour ton aide.  
 

n°1221282
Arjuna
Aircraft Ident.: F-MBSD
Posté le 12-10-2005 à 15:57:56  profilanswer
 

seul souci du create as select, c'est que si la table est trop grosse tu risque un rollback segment. mais sinon, c'est la meilleur solution.
 
autre solution, qui ne risque rien, et bien plus rapide : génération d'un fichier plat au format SQL Loader, puis un coup de SQL Loader et là tu pleures en voyant ta table de 100 000 000 être recopiée en 5 secondes ;)

n°1221294
Beegee
Posté le 12-10-2005 à 16:05:55  profilanswer
 

5 secondes pour 100 millions de lignes, faut pas exagérer :D
 
D'ailleurs, je me demande ce qui serait le plus rapide entre passer par SQL Loader ou du PL/SQL avec COMMITs régulier, pour copier une grosse table ... à tester.

n°1221721
Arjuna
Aircraft Ident.: F-MBSD
Posté le 13-10-2005 à 00:49:12  profilanswer
 

SQL Loader sans la moindre hésitation.
 
Au départ, j'avais des doutes.
Quand on est passé de 1 heure à moins de 5 minutes pour la réplication des données nécessaires au site web d'un client, le résultat fut assez flagrant pour écarter toute hipothèse d'un problème d'optimisation des lots SQL.  Et pourtant, des données y'en a une tétrachiée. Certes, au départ, les données étaient mises à jour via OLEDB, avec un commit toutes les 10 000 lignes. Mais l'écart de perfs entre un script SQL et une éxécution OLEDB d'un lot de requête ne justifie pas une telle différence (au pire, 2 ou 3 fois plus lent, jamais de la vie plus de 10 )
 
En tout et pour tout, dans l'ordre décroissant de rapidité, on avait :
- Les select qui génèrent les fichiers
- Les transferts FTP (liaison 1Gbps)
- SQL Loader
 
Bon, sur un gros serveur HP sous Solaris, utilisant un SAN. Avec un serveur x86, les perfs seront certainement moindre à cause du goulot d'étranglement du PCI.
 
En fait, avec un SQL Loader, on ne fait que recopier brut de fonderie les données d'un fichier plat (rien de plus rapide à lire) dans les tablespace. Seul un contrôle du type est effectué, les tests d'unicité et d'intégrité n'étant faits qu'à la fin du chargement. Un peu l'équivalent de l'insertion par lot, mais en zappant complètement le moteur SQL. En bref, si ton RAID 50 est capable de bouffer 500 Mo/s (ce qu'on peut obtenir avec une vingtaine de disques réparti sur une chaîne RAID 50), alors les données seront intégrées à cette vitesse (c'est pas les tests de types qui vont réussir à ralentir les CPU actuels). Avec des insertions, même avec des commits bien gérés, à chaque insertion on va générée une chiée d'écriture et de lectures (vérification de la cohérence et des FK, lock des index, insertion des données, mise à jour des index, puis la série d'écritures générées par un COMMIT - lock de a table et des index, recopie des données temporaires dans les fichiers de données, puis unlock des index et tables -). Avec un SQL Loader, la table est de toute façon lockée pendant tout le traîtement, c'est pas rollbackable, et les index ne sont checkés/mis à jour qu'une une seule fois à la fin.
 
C'est un peu même chose qu'entre un "DELETE maTable" et un "TRUNCATE maTable" : le jour et la nuit ;)


Message édité par Arjuna le 13-10-2005 à 00:59:47
n°1221837
cinocks
Posté le 13-10-2005 à 10:40:36  profilanswer
 

Mais pas le meme niveau de securité.


---------------
MZP est de retour
mood
Publicité
Posté le 13-10-2005 à 10:40:36  profilanswer
 

n°1222486
Arjuna
Aircraft Ident.: F-MBSD
Posté le 13-10-2005 à 20:41:35  profilanswer
 

?
 
Ben si, car SQL Loader marche comme suit :
- LOCK de la table.
- Insertion des données dans le table space
- Mise à jour des index et contrôles des FK
- Connection des données inserrées à la table elle-même.
- UNLOCK de la table.
 
Donc si la régénération des index plante, alors les données ne sont jamais liées à la table, et donc c'est comme si on n'avais rien fait.
 
En fait, clairement, mise à part si on a des triggers, y'a aucune différence de comportement par rapport à des INSERT, mise à part que c'est incomparablement plus rapide.


Message édité par Arjuna le 13-10-2005 à 20:42:13
n°1222664
cinocks
Posté le 14-10-2005 à 07:46:16  profilanswer
 

non je parle du DELETE et du TRUNCATE. L'un log et l'autre non.


---------------
MZP est de retour
n°1223498
Arjuna
Aircraft Ident.: F-MBSD
Posté le 14-10-2005 à 19:20:56  profilanswer
 

ah ok :)
 
me SQL Loader non plus ne log pas d'ailleurs. Le seul truc, comme le TRUNCATE, c'est qu'en cas de plantage pour données incohérentes, le contenu de la table n'est pas altéré :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  dupliquer une table sql

 

Sujets relatifs
afficher enregistrements d'une table dans le corps du mailgénéraliser mon model de table
fckeditor update table[SQL Server] Enlever une contrainte IDENTITY d'une table?
[PostgreSQL] Alias de table et performanceRecharger table sql en ligne de commande
Dupliquer un enregistrement[Access] dupliquer des lignes d'une table
Table définie dans FROM impossible à dupliquer dans EXISTSACCESS: comment dupliquer des enregistrements d'une table liée ??
Plus de sujets relatifs à : dupliquer une table sql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR