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 :

Lock Table - .net/Oracle


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut Lock Table - .net/Oracle
    Bonjour,

    J'utilise une table oracle pour synchroniser des processus .net et Oracle. Les nombres énormes d’insert/delete fait ralentir toutes la DB (600% du processeur).

    Dans la table j'ai maximum 30 lignes.

    Y aurait-il une solution pour ce genre de problématique.

    Merci beaucoup.

    Code utilisé:

    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
     
    -- Create table
    create table LCK
    (
    	LCK_ID  NUMBER(38),
      LCK_NME VARCHAR2(1000 BYTE) not null,
      DTE     DATE default sysdate not null,
      DTE_REQ DATE,
      SES_REQ VARCHAR2(100)  
    );
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table LCK
      add constraint P_LCK primary key (LCK_ID);
    -- Create/Recreate indexes 
    create unique index U_LCK on LCK (LCK_NME);

    Request Lock
    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
      procedure request_lock_table(lock_id in number, lock_name in varchar2, request_date in date, request_session in varchar2) is
        pragma autonomous_transaction;
        v_request_date date;
        v_count number(28);
      begin
        select nvl(request_date, sysdate) into v_request_date from dual;
        begin
           select count(*) into v_count from lck where lck_id = lock_id;
          if (v_count != 0) then        
     
            dbms_lock.sleep(0.5);
            request_lock_table(lock_id, lock_name, request_date, request_session);
     
          else
     
            insert into lck
              (lck_id, lck_nme, dte, dte_req, ses_req)
            values
              (lock_id, lock_name, sysdate, request_date, request_session);
            commit;
     
          end if;
        exception
          when dup_val_on_index then
            dbms_lock.sleep(0.5);
            request_lock_table(lock_id, lock_name, request_date, request_session);
          when others then
            raise_application_error(-20000, 'request lock failed (' || sqlcode || ') :' || sqlerrm);
        end;
      end request_lock_table;

    Release Lock

    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
    procedure release_lock_table(lock_id in number) is
        pragma autonomous_transaction;
      begin
        begin
          -- Delete specific lock
          delete from lck
           where lck_id = lock_id;
          commit;
        exception
          when others then
            raise_application_error(-20000, 'release lock failed: ' || lock_id);
        end;
        begin
          -- Delete the locks when the start date is more than 10 minutes
          delete from lck
           where dte < sysdate - (10 / 1440);
          commit;
        exception
          when others then
            raise_application_error(-20000, 'release old lock failed');
        end;
      end release_lock_table;

  2. #2
    Membre du Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 28
    Points : 47
    Points
    47
    Par défaut
    Il est possible de spécifier que la table accepte les accès simultanés (ce qui augmente la mémoire utilisée par cette table mais pour 30 lignes ça doit rester raisonnable ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table MA_TABLE parallel 5;

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par elnfrancois Voir le message
    J'utilise une table oracle pour synchroniser des processus .net et Oracle.
    Précisez votre besoin, votre code est particulièrement étrange et donc peut être inadapté.

Discussions similaires

  1. lock table oracle
    Par zinabd dans le forum Oracle
    Réponses: 7
    Dernier message: 23/03/2009, 13h17
  2. Table Mapping Oracle vers MS SQL
    Par cheachwood dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/08/2005, 13h05
  3. Réponses: 15
    Dernier message: 30/06/2005, 16h35
  4. lier les tables acces oracle
    Par xtaze dans le forum Access
    Réponses: 5
    Dernier message: 12/06/2005, 21h39
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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