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

Oracle Discussion :

Clone de base de donnée


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Par défaut Clone de base de donnée
    Bonjour,

    Os : Win2k
    db : Oracle9i

    J'aimerais réaliser un "clone" automatique entre deux bases de données pour une période spécifique.

    En effet, l'idée est la suivante.

    1 base A de production avec maximum 2 ans en ligne
    1 base B de consultation à long terme avec un accès sur plus de 10 ans

    Il faudrait tout les X jours alimenter la base B avec les données de "date from" à "date to" de la base A.

    Ex :

    Le 1 dimanche du mois : Insert de 3 mois de la base A sur la base B.

    Existe-il un produit oracle ou autre qui effectue cette opération ?

    Faut-il se diriger sur Database Link ou la Replication, Imp/Exp ?

    Merci pour toutes vos informations,

    Magnum_head

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Les outils d'export/import sont assez limités pour ce type d'activité même si on peut exporter une liste de tables et ajouter une clause de sélection (paramètre QUERY): mais ces 2 options ne fonctionnent pas bien ensemble car il me semble que la clause QUERY est appliquée à toutes les tables exportées. L'outil d'import est aussi couteux en temps d'exécution. Vous pouvez créer des tables temporaires dans A avec CREATE TABLE AS SELECT ... qui représentent les données à archiver, exporter ces tables, les importer dans la base B, fusionner les données dans B avec INSERT INTO ... SELECT * FROM ... et à la fin supprimer les tables temporaires dans les bases A et B. Cette solution nécessite un espace important dans A et B pour les tables temporaires.

    Je conseillerais d'étudier le database link ainsi que le déchargement en fichier plats (avec UTL_FILE) et le chargement avec sqlldr en mode direct si le volume est vraiment important. Je me demande s'il n'y a pas aussi une solution avec partitionnement de tables et/ou les tablespaces transportables ?

    Je ne connais ni la réplication Oracle ni les solutions ETL que propose Oracle qu'il faudrait aussi étudier.

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Si, bien sûr une solution basée sur des partitions (par exemple une partition par année) basées sur des tablespaces que l'on peut passer en read/only afin de les déplacer est le plus simple et le plus rapide mais l'on déplace année par année...

    et cela nécessite la licence Enterprise.

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par pifor
    ...on peut exporter une liste de tables et ajouter une clause de sélection (paramètre QUERY): ... la clause QUERY est appliquée à toutes les tables exportées.
    Si le volume le permet, c'est la solution qui me paraît la plus simple, et que j'aurais spontanément proposée.
    Reste à voir si les tables concernées ont toutes un champ DATE de même nom, qui puisse servir de critère commun.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Par défaut
    Reste à voir si les tables concernées ont toutes un champ DATE de même nom
    Non malheureusement.

    La solution du database link pourrait être envisagé.

    Par contre LeoAnderson pourrais-tu mexpliquer ton idée sur le partionnement comment mettre cela en oeuvre sur une base de donnée existente ?

    Nous avons la licence enterprise.

    Merci à tous,

  6. #6
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Sur une base existante, en 10g EE, il suffit d'appeller le package DBMS_REDEFINITION qui, d'une table non partitionnée va la transformer en table partitionnée (et à chaud, pendant l'exploitation s'il vous plait ! )

    Par exemple, vous pourrez dire que votre tables des COMMANDES sera "découpée" logiquement par ANNEE (partition by range) en répartissant chaque partition sur un tablespace dédié.

    Après, vous passez les tablespaces non-courant en read-only et vous les déplacez (tablespaces transportables)

    c'est très intérêssant comme solution car elle combine plusieurs techniques sympas !

  7. #7
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Etant donné que les 2 bases doivent avoir des vies différentes (car ce ne sont pas les mêmes requêtes de purge de données) Il n'y aura pas de solution toutes packagées. Donc d'une manière ou d'une autre, il va faloir faire de la programmation. Ensuite le choix dépendra des partucularités de la base.
    Si tu dois traiter de tres tres gros volumes, la solution des partitions a l'air très bien.
    Si tu veux un traitement plus fin il faudra passer par des requêtes à travers des dblink. La complexité de cette mise en oeuvre dépendra beaucoup de la complexité de ton applicatif.

    Par exemple:
    - Est-ce que les données sont seulement insérées ou peuvent-elles être updatées ou supprimées (en dehors des purges).
    - Est-ce qu'il peu y avoir des suppressions de lignes dans des tables de références ce qui pourrait poser des problèmes de consistance des données dans des tables d'historique
    - ... etc...

    Il y a quelques petits trucs que tu peux utiliser pour simplifier la vie:
    - faire une table contenant le nom des tables a répliquer ainsi que le nom colonnes DATE afin de faire du SQL dynamique
    - tenir à jour une table contenant les dates des dernières mises à jour
    - créer des snapshot-logs sur les tables de prod afin de s'en servir de base pour faire de la réplication différentielle (très pratique).

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 11h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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