sql >> データベース >  >> RDS >> Oracle

トリガーをロックできますか。それがそうであるとどのように判断するでしょうか?

    トリガー(およびその他のストアドプロシージャ)がロックされているかどうかを判断するには、 V $ ACCESS 動的パフォーマンスビューを照会できます。

    Session #1
    
    insert into test_trigger
     select level
       from dual
    connect by level <= 1000000; 
    
    Session #2
    
    SQL> select *
      2    from v$access
      3   where object = upper('test_trigger_t')
      4  ;
    
    
    Sid  Owner  Object         Type    Con_Id 
    --------------------------------------
    441  HR     TEST_TRIGGER_T TRIGGER  3 
    

    これらの種類のロック ライブラリキャッシュピンです(ライブラリキャッシュロックはリソースです(TM ロックのタイプ)ロック)、セッションの実行中にオブジェクトが変更されないように保護するために必要です。

    --session sid # 441
    insert into test_trigger
      select level
        from dual
     connect by level <= 1000000;
    
    
    -- session sid #24
    create or replace trigger test_trigger_t 
    after insert on test_trigger for each row
    begin
      insert into test_trigger_h (id) values (:new.id);
    end;  
    
    -- Session # 3
    select vs.sid
         , vs.username
         , vw.event
      from v$session       vs
      join v$session_wait  vw
        on (vw.sid = vs.sid)
      join v$access        va
        on (va.owner = vs.username)
     where vs.username = 'HR'
    

    結果:

    Sid Username Event 
    --------------------------
    24 HR library cache pin 
    ....
    441 HR log file switch (checkpoint incomplete) 
    

    ここでは、セッション#441がログファイルの切り替えを待機し、セッション#24がライブラリキャッシュピンを待機していることがわかります。




    1. PostgreSQLデータベーステーブルの列の位置を変更するにはどうすればよいですか?

    2. 覚えている機能を実装する方法は?

    3. mysqlはデータベースから重複レコードのみを選択します

    4. MySQLですべての子行を見つける方法は?