IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

Limites SQL LOADER


Sujet :

SQL*Loader Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par défaut Limites SQL LOADER
    Bonjour à tous.

    Je viens de passer un peu de temps à éplucher les formus en quete de compléments d'informations sur SQL LOADER et je n'ai pas réellement trouvé les réponses à mes questions.

    Pour faire bref :
    Deux bases:
    Une ancienne de laquelle on extrait les données au format CSV
    Une nouvelle (Oracle 10g) dans laquelle on veut insérer les données de l'ancienne de manière périodique car lancienne base sert de référentiel et continue a être alimenté (du moins pendant un certain temps...)

    Mon premier souci : je vais avoir dans un premier temps des insertions, puis par la suite des insertions ET mises à jour... Est -il possible via le fichier de controle d'SQLLOADER de vérifier si une ligne est deja en base, pour ne pas faire d'insert mais plutôt un update?

    Mon deuxième souci : le MCD a évolué entre les deux bases et des notions de clés primaires clés étrangères ont été ajouté dans les tables... Aucun champs n'a disparu mais certains ont été ajoutés pour consolider les liaisons entre les tables..; Comment, est-il possible de gérer ces clés sachant qu'elles n'apparaissent pas dans mes fichiers d'entrée (issus de l'extraction de l'ancienne base, donc ancien MCD)...

    Voila, je sais que ca fais bcp de questions, mais je commence à me demander si utiliser sql loader pour de telles manip ne va pas etre compliqué...

    Merci pour vos futures réponses.

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    1) tu ne peux pas faire d'Update avec sql*loader, la solution naturelle serait de charger les données dans une table en faisant un TRUNCATE (dans sqlloader), puis ensuite de fusioner les insertions et mises à jours avec un MERGE (dans sqlplus)

    2) si tu as plus de colonne, ça ne pose aucun problème, tant qu'il y a des valeurs par défaut. quand aux clés, si tu acceptes des violations dans ton "chargement initial", il faut alors faire un DISABLE, le chargement, puis un ENABLE NOVALIDATE. S'il n'y a pas de violations, alors tout est bon

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par défaut complément d'information
    Merci pour ta réponse.

    Apres tes explications, les choses sont plus claires pour le merge, cependant les notions de DISABLE puis ENABLE NOVALIDATE restent flous...

    Je récapitule ce que j'ai compris:

    1. Création d'une table temporaire qui est une copie de ma table destination(contraintes, champs...) je fais un disable lors de la création de cette table

    1. chargement de mon fichier CSV avec SQLLOADER (valeurs nulles par défaut pour les nouveaux champs) dans la table temp

    1. MERGE de la table temporaire et de la table de ma base

    1. Suppresion de ma table temporaire... (ou pas si j'utilise TRUNCATE lors de l'appel SQLLoader)


    Voila, alors je ne saisi pas bien quand interviennent les notions de DISABLE puis ENABLE NOVALIDATE? Sur ma table temporaire? sur ma table destination lors du MERGE?

    merci.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    1) création d'une table "intermédiaire" sans contraintes.
    2) merge dans ta table "finale"

    c'est tout. Quel est ton problème avec les contraintes?

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par défaut
    en fait mon pb c'est que dans toutes mes tables je vais avoir des contraintes clé primaires clés étrangères.

    A la première insertion, pas de souci, j'insère mes données, je crée une séquence pour incrémenter ma clé primaire... jusque là, niquel.
    Mais comment je renseigne les clés étrangères avec la bonne valeur? Sachant que dans mon fichier que j'ai importé, je n'ai pas de "contraintes", si ce n'est des liaisons avec un ID (attribut commun à presque toutes le tables).
    Du coup, je vais avoir des clé étrangères nulles qui ne correspondront du coup pas du tout avec la réalité de la base.
    Mon problème est là... Comme puis-je mettre a jour mes clés étrangères d'une table?
    Il va me falloir procéder de manière ordonnée, nan? les charger les unes apres les autres dans un ordre bien préscis?

    J'ai été clair ?

    merci !!!

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par moumoutte32
    j'insère mes données, je crée une séquence pour incrémenter ma clé primaire
    là t'es foutu

    l'idée serait d'avoir une clé naturelle non-générée, style N° Employé ou Dept+DateDebut, etc...

    Avec une séquence, c'est mission impossible. Comment vas-tu comparer <laurent;schneider> avec <1;laurent;schneider> si laurent schneider n'est pas unique...

    Aucune chance! Il faudrait vraiment que tu choisisses une solution avec clé naturelle plutôt que clé "séquence".

    Dans un scénario catastrophe, tu pourrais avoir une clé primaire générée et un algorythme maison pour faire correspondre les valeurs "naturelles" à une clé, mais bonjour l'intégrité !

    Désolé pour ces mauvaises nouvelles

Discussions similaires

  1. équivalent SQL*Loader pour FB / IB
    Par djeant dans le forum Outils
    Réponses: 9
    Dernier message: 10/01/2005, 21h26
  2. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08
  3. SQL LOADER
    Par velo83 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 25/10/2004, 08h24
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo