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

PL/SQL Oracle Discussion :

Alimenter une base à partir d'une autre


Sujet :

PL/SQL Oracle

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut Alimenter une base à partir d'une autre
    Bonjour à tous,

    Je dois alimenter des tables d'une base de données à partir d'une autre bdd distante. Les deux sont sous Oracle 12c.
    Je pensais faire une procédure PL/SQL sur la bdd de destination en utilisant un DBlink vers la bdd source, avec de simples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1 SELECT * FROM table1@bddsource;
    Mais ce n'est pas autorisé par les architectes de la boite! Les BDD ne peuvent pas communiquer entre elles, mais seulement avec les serveurs applicatifs (sous linux).

    Du coup sur notre serveur applicatif, qui a accès aux deux bases, je pense faire pour chaque table que l'on doit récupérer :
    - une extraction sous forme de fichier plat avec un spool SQL+ sur la base de données source
    - puis une insertion de ces fichiers dans la base de destination avec SQL Loader.
    En terme de temps de developpement et de maintenance ça ne nous arrange pas vraiment

    Ma question est la suivante : connaissez-vous une méthode plus simple pour faire cela? Un moyen d'accéder aux données de la base de données source à partir d'un PL/SQL lancé sur la bdd destination, sans utiliser de DBLink?

    Merci d'avance pour votre aide,
    Bonne journée!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 790
    Points
    30 790
    Par défaut
    Bonjour,

    Plutôt qu'une extraction sous forme de fichier plat, tu pourrais passer par un dump (datapump, commandes expdp et impdp) qui serait sans doute plus facile à mettre en oeuvre : une seule commande à exécuter, un seul fichier à transférer.
    Si le transfert est une simple copie des tables, l'importation se fait simplement par remplacement des données. Si le transfert est plus complexe, il faudra passer par une importation des données dans un schéma de travail puis la mise à jour de la base cible.
    Si je me souviens bien, expdp permet déjà d'opérer un certain filtrage sur les données exportées pour limiter les volumes.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour Al1_24,

    Merci pour ta réponse.
    En effet ce serait sans doute plus pratique, d'autant qu'il s'agit bien d'une simple copie des tables, je ne l'avais pas envisagé! Mais je ne pense pas que ce soit possible pour nous malheureusement.
    Je n'ai pas voulu rentrer dans les détails pour ne pas diluer les infos mais du coup je n'en ai pas assez donné... désolé.

    La base de données source appartient à un autre département de la boite.
    Ils nous autorisent seulement à accéder à leur base sur des vues matérialisées contenant juste les données dont nous avons besoin, qui sont raffraichies quotidiennement.
    Le user qu'ils nous ont créé a juste le droit de SELECT sur les vues en question. Ils ne mettront pas en place d'autre process de leur côté, et ne rajouteront pas de droit sur notre user.
    Du coup je crois bien que ça élimine l'option du datapump? Je crois me souvenir qu'il faut des droits spécifiques, je vais rechercher confirmation quand même.

    De notre côté, on a notre serveur de base de données (qui n'a pas le droit de communiquer directement avec leur serveur de base de données), et notre serveur applicatif (Linux avec client Oracle) qui peut accéder aux deux bases de données.
    C'est sur ce serveur applicatif que je pensais mettre en place le spool à partir de la base source, puis l'insertion SQL Plus dans la base cible, et je me demandais s'il y avait une solution plus simple qui m'avait echappé!

    Merci encore pour votre aide!

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 790
    Points
    30 790
    Par défaut
    Pas une solution simple mais intégrée : le passage par un ETL qui aura le droit d'accéder aux deux environnements.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Etant données toutes ces restrictions oui tu pourrais créer un fichier spool depuis ton client sql*plus du serveur d'appli. Ensuite soit tu utilises sql*loader pour charger ces fichiers dans tes tables, soit tu les transfères vers ton serveur bdd et tu définis des tables externes qui pointent dessus pour faire le mapping automatique.
    Sinon comme suggéré par al1_24 tu utilises un ETL, ou les outils d'export/import de logiciels Tiers comme SQL*Developer ou Toad.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Je vais creuser la piste de l'ETL au cas où il y en aurait un de disponible, sait-on jamais, ça me simplifierait effectivement la tache!
    Merci beaucoup pour vos réponses

Discussions similaires

  1. select pour alimenter une autre base MySQL
    Par PatatorMan dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/03/2015, 22h04
  2. [AC-2007] Inserer la valeur dans une table avec une liste qui en alimente une autre
    Par DidoFido dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/12/2009, 11h39
  3. Liste alimentant une autre liste
    Par Ershiana dans le forum IHM
    Réponses: 2
    Dernier message: 26/10/2009, 11h15
  4. Réponses: 3
    Dernier message: 30/07/2008, 16h51
  5. Liste en alimentant une autre
    Par kemiolek dans le forum IHM
    Réponses: 3
    Dernier message: 04/06/2008, 17h39

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