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 :

[DBA] Mettre une table en mémoire


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Par défaut [DBA] Mettre une table en mémoire
    Bonjour

    oracle 9.2.0.3 / Unix Solaris

    Est ce possible de mettre une table existante en mémoire et comment faire
    pour qu'elle soit prise en compte lors du démarrage de l'instance

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967

  3. #3
    Membre averti
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Par défaut

    Merci pour votre réponse rapide

    Prenons un exemple la table existante emp du schéma scott

    Pour la passer en mémoire il faut faire :

    ALTER TABLE SCOTT.EMP CACHE;



    et pour qu'elle reste au prochain démarrage :
    lancer sous $ORACLE_HOME/rdbms/admin/dbmspool.sql pour créer le package ensuite :


    BEGIN
    SYS.DBMS_SHARED_POOL.KEEP (' scott.emp’);
    END;
    /

    merci de valider

  4. #4
    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
    BEGIN
    SYS.DBMS_SHARED_POOL.KEEP (' scott.emp’);
    END;
    /
    Ca ne peut pas mettre les données de la table en cache que l'instance soit démarrée ou pour le prochain démarrage. Cette procédure ne concerne que le shared pool qui ne contient que des objets liés directement aux requêtes et au code PL/SQL et non des données. Le shared pool n'est pas le buffer cache Peut-être que cela permet de mettre la définition de la table en cache la documentation n'est pas claire à ce niveau.

    There are two kinds of objects:

    * PL/SQL objects, triggers, sequences, and types which are specified by name
    * SQL cursor objects which are specified by a two-part number (indicating a location in the shared pool).

    For example:

    DBMS_SHARED_POOL.KEEP('scott.hispackage')

  5. #5
    Membre averti
    Inscrit en
    Février 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2004
    Messages : 18
    Par défaut
    je vais oublier l'histoire du DBMS_SHARED_POOL.KEEP
    et tout simplement programmer un job au démarrage qui exécute un :

    ALTER TABLE nomtable CACHE ;

  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 Fakhry
    je vais oublier l'histoire du DBMS_SHARED_POOL.KEEP
    et tout simplement programmer un job au démarrage qui exécute un :

    ALTER TABLE nomtable CACHE ;
    mais bien sûr cela n'est qu'un souhait, rien ne garantit qu'une table cache soit dans le cache... Oracle va seulement essayer de la garder en cache le plus longtemps possible


    [edition]
    et le alter table nomtable cache ne met rien en cache, ce DDL n'est à exécuter qu'une fois. Ensuite, les données sélectionnées seront si possible gardées en cache.

    Regarde aussi le BUFFER_POOL KEEP, qui est plus puissant que Cache, mais qui a aussi ses limites (bloc standards, sga_target, mémoire "gaspillée", etc...)

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    ALors pour mettre une table en cache , il suffit tout simplement de faire un

    Sinon tu peux créer dans ta cache deux types de caches en plus de ton DATA BUFFER :

    Le recycle
    Le Keep


    Pour pouvoir les mettre en cache au démarrage voici les requêtes :
    Dans la partie storage de la table


    Pour définir ces buffer dans le fichier d'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BUFFER_POOL_KEEP
     
    BUFFER_POOL_RECYCLE
    Comment déterminer les tables candidates au buffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT obj object,
        COUNT(1) buffers,
        AVG(tch) avg_touches
    FROM x$bh
    WHERE lru_flag = 8     
    GROUP BY obj       
    HAVING AVG(tch) > 5
    AND COUNT(1) > 20;

Discussions similaires

  1. [SQL-SERVER 2000] Mettre une table en mémoire
    Par usf70 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 07/12/2007, 23h31
  2. Mettre une table en iso-8859-1?
    Par Prosis dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/07/2007, 13h54
  3. Réponses: 15
    Dernier message: 21/05/2007, 11h24
  4. mettre une table dans plusieurs tables
    Par mat75019 dans le forum Access
    Réponses: 5
    Dernier message: 16/06/2006, 11h46
  5. [Access 2003]Mettre une table dans un formulaire?
    Par steeves5 dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 13h30

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