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 :

Droits sur index


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut Droits sur index
    Bonjour,

    J'ai une BDD avec 2 user : USER1 et USER2
    USER2 a les droits de select sur une table USER1.TABLE1
    Pour accélerer une requête j'ai créé un index USER2.INDEX2 sur USER1.TABLE1.
    Pour cela, j'ai donné les droits INDEX à USER2 sur USER1.TABLE1.

    Je souhaiterais que USER1 n'utilise pas l'index USER2.INDEX2.
    Est-ce possible ?
    Si oui, comment ?

  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
    Par défaut
    non, c'est pas possible à moins de faire une vue qui applique une fonction (TO_CHAR par exemple) sur une colonne de l'index.

  3. #3
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Sachant que ma requête s'exécute tous les matins à 3h,
    n'est-ce pas possible non plus de rendre l'index valide seulement entre 3h et 4h et invalide le reste de la journée ?

  4. #4
    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
    Par défaut
    ça me parait plus propre de créer une vue spécifique mais sinon, techniquement c'est faisable

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut
    si USER2.INDEX2 est le seul index sur la table dans ta requête que dois executer USER1 tu peux rajouter le hint pour un Full Table Scan à ce moment oracle ne vas pas utilser les indexes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select /*+ FULL(USER1.TABLE1) */

  6. #6
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Fred_D
    ça me parait plus propre de créer une vue spécifique mais sinon, techniquement c'est faisable

    Comment ?

  7. #7
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Peut-être dans un cron : En faisant un alter unusable à 3h et un alter rebuild à 4h ... mais sur un gros index ça va être très lourd ...

  8. #8
    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
    Par défaut
    Citation Envoyé par milka
    Comment ?
    si tu as un index sur la colonne col1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ...
    FROM matable
    WHERE TO_CHAR(col1) = ...
    en appliquant une fonction sur la colonne tu empêches d'utiliser l'index

  9. #9
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 39
    Par défaut
    Autre solution (en peu dans la même catégorie que les proposition ci-dessus) :

    désactiver l'index avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 DISABLE CONSTRAINT votre_indexe_table1
    faire la requête, puis réactiver l'index avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 ENABLE CONSTRAINT votre_indexe_table1

  10. #10
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Bon je sais, ça me regarde peut etre pas , mais pourquoi veux tu absolument interdire l'utilisation d'un index à un utilisateur?

  11. #11
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Citation Envoyé par remi4444
    Bon je sais, ça me regarde peut etre pas , mais pourquoi veux tu absolument interdire l'utilisation d'un index à un utilisateur?
    Il s'agit d'une très grosse base de données créée avec une appli que nous avons acheté. J'ai créé un USER2 pour nos besoins. L'index a accéléré énormément une de mes requêtes mais nous avons remarqué qu'il était utilisé par les requêtes propres à l'appli et que certaines d'entre elles ont été plus que ralenties.
    Ce que je ne comprends pas aujourd'hui c'est pourquoi ces requêtes utilisent mon index plutôt que les autres, comment ce fait-il que oracle choississe d'utiliser mon index qui est moins performant ?

    A ne rien comprendre ...
    Je fais fouiller un peu pour bien comprendre comment oracle choisi son plan d'exécution (qui est d'ailleurs parfois différent entre Toad et DBA studio ???...???)
    Je suis un peu dans le flou.

  12. #12
    Membre confirmé
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    Citation Envoyé par Mihaela
    Autre solution (en peu dans la même catégorie que les proposition ci-dessus) :

    désactiver l'index avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 DISABLE CONSTRAINT votre_indexe_table1
    faire la requête, puis réactiver l'index avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 ENABLE CONSTRAINT votre_indexe_table1
    Ca ne fonctionne pas ...
    ORA-00933: La commande SQL ne se termine pas correctement

    Ma version d'oracle : 9.2.0.1.0

  13. #13
    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
    Par défaut
    Citation Envoyé par Mihaela
    Autre solution (en peu dans la même catégorie que les proposition ci-dessus) :

    désactiver l'index avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 DISABLE CONSTRAINT votre_indexe_table1
    faire la requête, puis réactiver l'index avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  user1.table1 ENABLE CONSTRAINT votre_indexe_table1
    cette syntaxe est incorrecte... en fait il faut rendre l'index UNUSABLE mais ça peut poser des problèmes lors de mis à jour évidemment

  14. #14
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Citation Envoyé par Fred_D
    cette syntaxe est incorrecte... en fait il faut rendre l'index UNUSABLE mais ça peut poser des problèmes lors de mis à jour évidemment
    Ohhh au contraire, je pense qu'il n'y aura pas de problème puisque la mise à jour sera carrément impossible....

  15. #15
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Citation Envoyé par milka
    comment ce fait-il que oracle choississe d'utiliser mon index qui est moins performant ?
    Est-ce que tu as bien repassé les stats sur ta base ?

    Si il y a un problème sur une colonne en particulier (celle ou tu as mis l'index), c'est peut etre parcequ'elle a une répartition de données trés hétérogène (par ex 3/4 de zéros et le reste en valeurs trés diverses). Dans ce cas là, il faut passer des stats détaillées sur cette colonne avec histogramme (voir le package DBMS_STAT)

Discussions similaires

  1. Droits sur index d'un autre schéma
    Par xant dans le forum Administration
    Réponses: 2
    Dernier message: 10/12/2008, 11h02
  2. Sécurité - Droits sur un seul ou plusieurs index
    Par sifac dans le forum Administration
    Réponses: 1
    Dernier message: 15/01/2008, 10h56
  3. [JSP][Javascript] click droit sur un lien
    Par Stessy dans le forum Servlets/JSP
    Réponses: 22
    Dernier message: 24/09/2004, 10h14
  4. [Système] Droits sur un fichier
    Par maxvador dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 16/07/2004, 17h06

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