Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2008, 16h10   #1
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 113
Points : 33
Points : 33
Par défaut copier des informations d’une base de données vers une table

Bonjour,

J’ai juste une question classique. Je veux copier des informations d’une base de données vers une table d’une autre base de données. Ce que j’ai proposé c’est de le faire en Java, en créant deux connexions et faire des selects dans l’une et des inserts (ou update dans l’autre). Si non, il y a quelqu'un qui m’a parlé de Sql loader (….). Ou si non, peut être on peut le faire directement par sql.
J’aime bien si vous pouvez me proposer des solution et qui est la plus optimiser et celle la plus facile etc… Merci
freakfm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 16h19   #2
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Bonjour,


Tu peux regarder du cote de la commande sqlplus COPY :

Code :
1
2
3
4
5
6
7
 
copy -
FROM ***/****@*** -
insert Table2 -
using -
select * -
from Table1;

Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 11h18   #3
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 113
Points : 33
Points : 33
En faite la commande Copy ne marche que pour copier une table dans une autre qui a les mêmes noms de colonnes. Dans mon cas je veux copier des colonnes d’une table vers une autre qui n’as pas les mêmes noms de colonnes. En tous cas avec une commande comme celle là, une table de 200 millions de lignes ne va pas vraiment tenir dans ce genre de copies. Je pense que l’utilisation d’un transfert fichier en utilisant un SQL Loader sera la meilleure.
freakfm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 12h12   #4
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Bonjour,


Pas du tout, tu peux spécifier les colonnes dans la table de destination. Par défaut tu as un commit a chaque ligne, mais tu peux le changer avec l'option COPYCOMMIT de SQL*Plus.

Pour moi y a pas plus simple pour copier des données entre deux bases, apres c'est toi qui voit...

Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2008, 14h43   #5
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 113
Points : 33
Points : 33
Bonjour,

J’ai décidé enfin de compte de le faire en JDBC. J’ai juste un souci. Comment faire pour copier la table en même temps que d’autre processus sont entrain d’insert, update ou supprime des données dans la base, sans que leurs requêtes soit perdus. Autrement dit, comment on peut faire des verrous on base de donner Oracle 9i.

Sachant que je vais faire plusieurs requêtes SQL pour copier les tables de la base de données. Je veut qu’avant d’exécuter tous mes requêtes, tous les requêtes extérieur envoyées par d’autres utilisateurs, restent en attentes.

(Un Verrouillage niveau Oracle/SQL et pas niveau Java)
freakfm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2008, 16h32   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par freakfm Voir le message
Bonjour,

J’ai décidé enfin de compte de le faire en JDBC. J’ai juste un souci. Comment faire pour copier la table en même temps que d’autre processus sont entrain d’insert, update ou supprime des données dans la base, sans que leurs requêtes soit perdus. Autrement dit, comment on peut faire des verrous on base de donner Oracle 9i.

Sachant que je vais faire plusieurs requêtes SQL pour copier les tables de la base de données. Je veut qu’avant d’exécuter tous mes requêtes, tous les requêtes extérieur envoyées par d’autres utilisateurs, restent en attentes.

(Un Verrouillage niveau Oracle/SQL et pas niveau Java)
C'est la mauvais solution d'écrire un traitement en JDBC!
Pour les verrous cherche Select ... For Update ou Lock Table...
Mais la vrai question est "a tu vraiment besoin de faire ça"
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2008, 13h55   #7
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 113
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 113
Points : 33
Points : 33
Citation:
Envoyé par lalystar Voir le message
Bonjour,


Pas du tout, tu peux spécifier les colonnes dans la table de destination. Par défaut tu as un commit a chaque ligne, mais tu peux le changer avec l'option COPYCOMMIT de SQL*Plus.

Pour moi y a pas plus simple pour copier des données entre deux bases, apres c'est toi qui voit...

Laly.
En fait moi j’ai deux tables dans deux différantes base de données. Les tables n’ont pas les même noms, ni les même non de colonnes. En plus dans certain colone j’ai le type « TimeStamp » qui n’est pas géré par la commande COPY (je ne sais pas si je peut faire un transfgert vers le type ‘DATE’. J’aime bien si vous pouvez me données un simple exemple de la commande ‘COPY’ on tenant compte des de ce que je vient dire (non différant, timestamp….).

Si non, pour avoir une bonne idée sur ce que je veux faire. Je veut faire un programme qui à chaque heur mis à jour la table d’une autre qui est sur une autre base de données.(donc à chaque fois il ne faut qu’ajouter que les mise à jour (UPDATE, INSERT,DELETE).

N’oubli surtout pas que je suis très intéresser pour savoir comment utiliser la commande ‘COPY’ et de me donnée un exemple (car j’ai pas vraiment trouvé un bon sur le net –juste des exemple ridicule-)


Je vais juste mettre un exemple que j’ai compris d’un tutorial, et j’aime bien si vous pouvez me dire s’il est correcte ou pas. Je suppose que j’ai les tables suivantes :
TbSource (Nu :NUMBER, Nom : VARCHAR, YearsOld : TIMESTAMP)
TbDestination (Numero : NUMBER, Age: TIMESTAMP)

Code :
1
2
COPY FROM   userMoi1/MonMotdepass1@identifiantDEConnection1  TO  userMoi2/MonMotdepass2@identifiantDEConnection2  INSERT     TbDestination (Numero, Age)
USING SELECT Nu, YersOld FROM  TbSource;

(Si ce que j’ai écris est correct, j’aime bien si vous pouvez me données une solution pour les TIMESTAMP car ils ne sont pas gère par la commande COPY)
freakfm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2008, 16h06   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Citation:
The COPY command is not being enhanced to handle datatypes or features introduced with, or after Oracle8. The COPY command is likely to be made obsolete in a future release. For COPY command details and syntax, see Appendix B, "SQL*Plus COPY Command".
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 16h22   #9
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Salut


Au niveau du timestamp, je pense pas que ce soit bloquant, tu peux faire une conversion :
Code :
1
2
 
SELECT to_date(to_char(current_timestamp, 'dd/mm/yyyy hh24:mi:ss'), 'dd/mm/yyyy hh24:mi:ss') FROM dual
Apres y a surement moyen de faire ca plus joliment...


Citation:
Je veut faire un programme qui à chaque heur mis à jour la table d’une autre qui est sur une autre base de données.(donc à chaque fois il ne faut qu’ajouter que les mise à jour (UPDATE, INSERT,DELETE).
As tu regardé du cote des vues materialisées dans ce cas ? (ta table répliquée, elle est en lecture seule ?) :
http://www.psoug.org/reference/materialized_views.html
L'exemple "Complete Refresh" ou peut etre meme que tu pourras faire propager les modifs en temps reel avec un refresh fast...


Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web