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

Administration Oracle Discussion :

Comment tester le paramètre open_links des DB Links [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut Comment tester le paramètre open_links des DB Links
    Hello les DBA Oracle,

    J'essaye de comprendre comment fonctionne le paramètre open_links et je n'arrive pas à trouver un protocole de test.

    Ma base a les paramètres suivants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    show parameter link
    open_links                           integer  200
    open_links_per_instance              integer  200

    J'ai plusieurs DB Links qui sont actifs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    set linesize 200
    select owner, db_link from dba_db_links order by 2;
     
    OWNER                          DB_LINK                                                                                                                         
    ------------------------------ ---------------------------------------------------------------------------------------------
    SYS                            DATAPUMP_COPY.WORLD                                                                                                             
    PUBLIC                         DGADPAFIR.WORLD                                                                                                                 
    PUBLIC                         DGCUP01AFIR.WORLD                                                                                                               
    PUBLIC                         INF.WORLD                                                                                                                       
    PUBLIC                         IR_AFWL.WORLD                                                                                                                   
    IR                             IR_AFWL.WORLD                                                                                                                   
    PUBLIC                         IR_NG_DWHP01.WORLD                                                                                                              
    PUBLIC                         IR_NG_ICAN_ARCH.WORLD                                                                                                           
    PUBLIC                         IR_NG_ICAN.WORLD                                                                                                                
    PUBLIC                         IR_NG_J2EE.WORLD                                                                                                                
    ACCBATCH                       WM_POLLING.WORLD                                                                                                                
     
    11 rows selected.
    D'après la doc Oracle il est écrit "OPEN_LINKS specifies the maximum number of concurrent open connections to remote databases in one session."
    Je comprends que pour avoir un message d'erreur ORA-02020: too many database links in use il faut que j'ai au moins 5 SELECT dans la même session et qui s'exécutent en même temps! C'est là que je sèche car j'utilise TOAD et je comptais lancer les 5 requêtes suivantes (avec changement du DBLink dans chaque requête) dans 5 fenêtres différentes. Manque de chance, une fois une requête lancée je ne peux pas cliquer sur la deuxième fenêtre de la même session avant que la première requête ne soit terminée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET TIMING ON;
    DECLARE
    V_N_COUNT NUMBER(10);
    BEGIN
    FOR I IN 1..20000 LOOP
        select count(*) INTO V_N_COUNT from cat@IR_NG_ICAN.WORLD;
    END LOOP;
     
    END;
    /
    Avez-vous une idée de comment je pourrais mettre en place ce test?
    Par avance merci

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    C'est le nombre de connexions différentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT NAME, VALUE FROM v$parameter WHERE NAME LIKE '%link%'
     
    NAME	VALUE
    open_links	4
    open_links_per_instance	4
     
     
    DECLARE i number := 0; v NUMBER;
    BEGIN
    FOR r IN (SELECT db_link FROM dba_db_links ORDER BY 1)
    LOOP
    	i := i + 1;
      execute immediate 'SELECT 1 FROM DUAL@'|| r.db_link INTO v;
    END LOOP;
    EXCEPTION WHEN others THEN DBMS_OUTPUT.PUT_LINE(i ||':'||SQLERRM);
    END;
     
    5:ORA-02020: too many DATABASE links IN USE
    Pour éviter ce message (à part monter le paramètre), il faut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session close database link <DBLINK>

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    McM, si je comprends bien, on teste le nombre de connexions faites sur des DBLink différents dans la même session?

    Là où je ne comprends pas c'est que ma base a seulement 3 DBLink et des paramètres à 4 (l'exemple de mon premier message pointait vers une autre base).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    show parameter link
    SELECT db_link FROM dba_db_links ORDER BY 1;
     
    open_links                           integer  4
    open_links_per_instance              integer  4
     
    DB_LINK                                                                         
    --------------------------------------------------------------------------------
    DATAPUMP_ISII01.WORLD                                                           
    ISI_SIR.WORLD                                                                   
    OPARSITP02.WORLD                                                                
     
    3 rows selected.
    Je ne vois donc pas comment avec 3 DBLink, un user pourrait franchir cette limite de 4...

    Autre précision, on utilise un serveur Weblogic et un développeur m'a envoyé ce message; est-ce que ce serait l'explication?
    "http://dbtricks.com/?p=198

    The problem is that Oracle keeps the database link open until the session is closed. This is especially problematic when working with Weblogic data sources pools for example. Since the Weblogic server keeps its session open constantly, all queries are using the same session (or sessions). This cause the number of open links to accumulates with every query from a new remote server. The final result is that when the fourth database link is used the “ora-02020-too many database links in use” is raised. The fact that many times this message is raised when running a query that uses only one database link makes it hard to debug.

    J’en déduirai qu’ISI doit avoir une fuite mémoire ?"

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je n'arrive pas à reproduire ce problème avec seulement trois "database links".
    Dans le lien que vous avez pointé la phrase "This cause the number of open links to accumulates with every query from a new remote server" est assez ambiguë ou erronée!
    Le fonctionnement normal est celui exemplifié dans le test du McM au fur et à mesure que vous ouvrez des nouvelles "database links" le test envers le seuil est effectué et l'erreur arrive quand le nombre des "database links" ouvertes dépasse le seuil.

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Ca y est, j'ai réussi à avoir le message d'erreur
    J'ai créé six dblinks avec une limite de 4 dans une base de tests à la maison et j'ai lancé le script de McM un peu modifié.

    Merci pour vos conseils, j'y vois mieux à présent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    SQL> show parameter link
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ----------------------------
    open_links                           integer     4
    open_links_per_instance              integer     4
    
    
    SQL> SELECT db_link FROM all_db_links ORDER BY 1;
    
    DB_LINK
    --------------------------------------------------------------------------------
    DBMS_CLRDBLINK
    TESTDDU01
    TESTDDU02
    TESTDDU03
    TESTDDU04
    TESTDDU05
    TESTDDU06
    7 rows selected.
    
    
    SET SERVEROUTPUT ON
    DECLARE i number := 0; v NUMBER;
    BEGIN
    FOR r IN (SELECT db_link FROM all_db_links ORDER BY 1)
    LOOP
    	i := i + 1;
      execute immediate 'SELECT 1 FROM DUAL@'|| r.db_link INTO v;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('OK 02');
    EXCEPTION WHEN others THEN DBMS_OUTPUT.PUT_LINE(i ||':'||SQLERRM);
    END;
    /
    
    SQL> @D:\DBLINKS
    5:ORA-02020: too many database links in use
    PL/SQL procedure successfully completed.


    Et maintenant le même résultat sans passer par une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SQL> connect hr/hr
    Connected.
    SQL> select 1 from dual@TESTDDU01;
     
             1
    ----------
             1
     
    SQL> select 1 from dual@TESTDDU02;
     
             1
    ----------
             1
     
    SQL> select 1 from dual@TESTDDU03;
     
             1
    ----------
             1
     
    SQL> select 1 from dual@TESTDDU04;
     
             1
    ----------
             1
     
    SQL> select 1 from dual@TESTDDU05;
    select 1 from dual@TESTDDU05
                       *
    ERROR at line 1:
    ORA-02020: too many database links in use

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2013, 10h22
  2. [SoapUI] Comment tester un WebService avec des requêtes différentes
    Par houpli dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 11/05/2012, 13h10
  3. Comment tester la validité des nombres réels ?
    Par linda80 dans le forum Langage
    Réponses: 4
    Dernier message: 15/10/2007, 17h47
  4. Réponses: 3
    Dernier message: 16/12/2006, 12h59
  5. Comment faire pour le passage des paramètres
    Par dauphin34000 dans le forum Oracle
    Réponses: 14
    Dernier message: 25/04/2006, 14h18

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