2014-09-16 3 views
1

Je travaille sur une application qui nécessite beaucoup de données. Ces données sont stockées dans SAP (un outil de planification de grande entreprise) et doivent être chargées dans une base de données Oracle. Les données dont je parle sont de 15.000 + lignes et chaque ligne a 21 colonnes.Manipulation de 15 000 lignes dans Oracle

Chaque fois qu'une interaction est effectuée avec SAP (4 fois par jour), ces 15 000 lignes sont exportées et doivent être chargées dans la base de données Oracle. Je vais essayer d'expliquer ce que je fais maintenant pour atteindre mon objectif:

  1. Exporter des données de SAP dans un fichier CSV
  2. Supprimez toutes les lignes de la base de données Oracle
  3. Chargez le fichier CSV exporté et importer ce Dans la base de données Oracle

Vous pouvez en déduire que les données doivent être mises à jour dans la base de données Oracle en cas de modification de la ligne. Ce processus prend environ 1 minute.

Maintenant, je me demande s'il serait plus rapide de vérifier chaque ligne dans la base de données Oracle pour les changements dans le fichier CSV. La raison pour laquelle je pose cette question avant de l'essayer en premier est qu'il faut beaucoup de codage pour faire ce que ma question veut dire. Peut-être que quelqu'un a déjà fait quelque chose de similaire et peut me guider avec la meilleure solution.

+2

Si vous utilisez un outil tel que SQL * Loader pour placer les données dans le tableau final, il est peu probable qu'il soit plus rapide de modifier uniquement les données modifiées. – Ben

+2

La façon dont nous avons fait une chose similaire est de définir une table externe sur le fichier CSV. Définissez ensuite une vue matérialisée comme SELECT * FROM EXT_TABLE avec REFRESH COMPLETE ON DEMAND. La vue matérialisée est alors la table que nous interrogeons dans Oracle et créons des index sur et ainsi de suite. Le processus d'actualisation des données devient alors deux étapes: d'abord exporter les données vers un fichier CSV, puis appeler DBMS_MVIEW.REFRESH pour terminer l'actualisation de la vue. Cela fonctionne dans quelque chose comme 10-15 secondes pour 60.000 lignes dans notre environnement. –

+0

Quel processus prend une minute? Étape 1? Étape 2? Ou l'étape 3? Ou tous ensemble cela prend une minute? Si tous ensemble, avez-vous une répartition du temps pour chaque étape? Et quel est le problème si votre ordinateur est occupé pendant 4 minutes par jour? –

Répondre

1

Tous les commentaires m'ont aidé à réduire le temps. Trongez d'abord, puis insérez toutes les lignes avec la bibliothèque Oracle DataAccess au lieu de OleDb.

+1

Si vous devez supprimer toutes les lignes d'une table, vous pouvez simplement TRUNCATE. –

+0

@alikox, merci pour l'astuce d'utiliser TRUNCATE au lieu de DELETE. Plus vite! – Krowi

Questions connexes