Oracle開發包被鎖解決辦法-終極辦法

來源:互聯網
上載者:User

標籤:

http://www.itpub.net/forum.php?mod=viewthread&tid=1761963

以前在資料庫維護中,基本都是碰到表被鎖的情況,然後就是尋找被鎖的表相關的資訊,通過v$session視圖尋找到相關的sid和serial#,通過

alter system kill session ‘sid,serial#’

kill掉相關的進程即可。但是今天碰到開發封裝更新過程中,串連中斷,導致開發包一直被鎖定的狀態,無法操作。

由於以前沒有遇到包被鎖的情況,所以也沒太注意這方面的技術,網上好像也很少相關的資訊。當開發找到我的時候 確實也琢磨了好一陣子。

然後又從網上查到一些相關的資訊,最後結合,解決問題。這裡吧解決方案寫下來,供參考!

如有更好的方法,歡迎大神指導學習!!歡迎拍磚

鎖表的資訊屬於dml鎖,在v$locked_object中,

但所包的資訊屬於ddl鎖,在dba_ddl_locks中,

首先尋找那個進程鎖住了該對象,以下是操作過程

 

sql> Select b.SID,b.SERIAL#   From dba_ddl_locks a, v$session b  Where a.session_id = b.SID    And a.name = ‘xxx包名‘ AND OWNER=‘登陸使用者‘;   

       SID    SERIAL#
---------- ----------
       249 27744
       255 10572
       70 49021
       39  9881
       220  1101
       32 33362
       290   828
       264 36682
       266 34873
       93 41887
       193 63309
       115 46955
       186 20919
       84  2125
       62 57709
       41 21572
       320 58450
       285 14303
       133 38681
       221 32723
       39  9881
       220  1101
       193 63309
       115 46955
       62 57709
       133 38681
       221 32723

27 rows selected.

好多資訊,這個時候本來可以直接執行

Select spid, osuser, s.program   From v$session s, v$process p  Where s.paddr = p.addr    And s.sid = (sid);

找到相關sid的spid。然後執行kill -9 spid 或者執行

alter system kill session ‘sid,serial#‘

kill掉進程就可以了,但是一個資料庫上面與很多連結使用者,都在做同一件事情,你不可以吧其他正常的進程也給kill了吧

顯然是不可能的。

如果是這樣的情況,你可以直接尋找到連結用戶端機器鎖開啟的所有進程,kill掉,避免亂殺無辜!

確認該使用者的包是否存在

select * From all_objects where owner=‘登陸使用者‘and object_type = ‘PACKAGE‘   確實存在。其實這步這裡可以不做每應該在最前面做,可以看看包的資訊-----

終極方法,對鎖表和所包應該夠有效果

一般開發都是用戶端串連資料庫伺服器。所以查到該使用者在當前資料庫下的所有會話,記得連用戶端的電腦名稱都查出來,避免亂殺

涉及到資料資料我就不多了

sys> select saddr,sid,serial#,username,MACHINE from v$session order by username desC;

SADDR                  SID           SERIAL#      USERNAME                MACHINE
--------            ----------    ----------    ------------------- -----------------------

B54R8510                71          27377          DB1
B5659D50                319            1           DB1

B54A3B28                 32        37270           xxxx                  user-b4b16aa573

這樣就可以看到該電腦串連到資料庫的所有進程了

現在就可以執行

alter system kill session ‘32,37270‘;

執行後再查看

sys> select saddr,sid,serial#,username,MACHINE from v$session order by username desC;

已經沒有該用戶端的進程了!!搞定

歡迎拍磚哈!!!

Oracle開發包被鎖解決辦法-終極辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.