Oracle授予普通用戶kill session權(quán)限的方法
開(kāi)發(fā)A在測(cè)試環(huán)境操作時(shí)有時(shí)會(huì)遇到阻塞問(wèn)題,需要找DBA幫忙查看阻塞會(huì)話及kill session,后來(lái)覺(jué)得太麻煩想要個(gè)kill會(huì)話的權(quán)限,查了下Oracle授予普通用戶kill session權(quán)限的方法。
1. 授予alter system權(quán)限
官方文檔查到,kill session需要ALTER SYSTEM權(quán)限,但是這個(gè)權(quán)限非常大,不能直接給
GRANT ALTER SYSTEM TO <username>;
2. 創(chuàng)建存儲(chǔ)過(guò)程
后來(lái)查到了可以自己創(chuàng)建存儲(chǔ)過(guò)程實(shí)現(xiàn),簡(jiǎn)單的實(shí)現(xiàn)方法如下:
-- sys執(zhí)行 create or replace procedure kill_session ( v_sid number, v_serial number ) as v_varchar2 varchar2(100); begin execute immediate 'ALTER SYSTEM KILL SESSION ''' || v_sid || ',' || v_serial || ''''; end; / -- 授權(quán): grant execute on kill_session to username; -- 普通用戶使用: exec sys.kill_session(161,14502);
還能加各種限制條件,例如寫入日志,記錄是誰(shuí)在什么時(shí)候發(fā)起的、kill了誰(shuí),視需要而定。
創(chuàng)建審計(jì)表
CREATE TABLE action_audit ( id NUMBER GENERATED ALWAYS AS IDENTITY, operator_name VARCHAR2(50) NOT NULL, action_time TIMESTAMP NOT NULL, session_id NUMBER(10) NOT NULL, serial_id NUMBER(10) NOT NULL, sql_id VARCHAR2(13), CONSTRAINT action_audit_pk PRIMARY KEY (id) );
創(chuàng)建存儲(chǔ)過(guò)程
CREATE OR REPLACE PROCEDURE kill_session (
p_session_id NUMBER,
p_serial_id NUMBER
) AS
v_sql_id VARCHAR2(13);
BEGIN
SELECT s.sql_id INTO v_sql_id FROM v$session s WHERE s.sid = p_session_id AND s.serial# = p_serial_id;
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || p_session_id || ',' || p_serial_id || ''' IMMEDIATE';
INSERT INTO action_audit (
operator_name,
action_time,
session_id,
serial_id,
sql_id
) VALUES (
sys_context('userenv','os_user'),
CURRENT_TIMESTAMP,
p_session_id,
p_serial_id,
v_sql_id
);
commit;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Error in killing session: ' || SQLERRM);
END;
/運(yùn)行方法同上~
到此這篇關(guān)于Oracle授予普通用戶kill session權(quán)限的方法的文章就介紹到這了,更多相關(guān)Oracle授予普通用戶kill權(quán)限內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比
在項(xiàng)目中用到了Oracle中 Instr 這個(gè)函數(shù),順便仔細(xì)的再次學(xué)習(xí)了一下這個(gè)知識(shí),使用 Instr 函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符2013-10-10
Oracle管道函數(shù)pipelined?function的用法小結(jié)
這篇文章主要介紹了Oracle管道函數(shù)pipelined?function的用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
WINDOWS下使用DOS命令行連接oracle數(shù)據(jù)庫(kù)
本文講述了通過(guò)windows下的DOS命令連接oracle數(shù)據(jù)庫(kù)并進(jìn)行簡(jiǎn)單操作的方法2018-03-03
oracle數(shù)據(jù)庫(kù)如何使用exp和imp命令導(dǎo)入導(dǎo)出數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫(kù)如何使用exp和imp命令導(dǎo)入導(dǎo)出數(shù)據(jù)的相關(guān)資料,Oracle的EXP(Export)和 IMP(Import)是兩個(gè)非常重要的命令,它們用于數(shù)據(jù)庫(kù)的備份和恢復(fù),需要的朋友可以參考下2024-07-07
Oracle 11g收集多列統(tǒng)計(jì)信息詳解
我們?cè)趯慡QL語(yǔ)句的時(shí)候,有的時(shí)候會(huì)碰到where子句后面有多個(gè)條件的情況,也就是根據(jù)多列的條件篩選得到數(shù)據(jù)。下面這篇文章主要給大家介紹了Oracle 11g收集多列統(tǒng)計(jì)信息的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下。2017-03-03
在Oracle表中進(jìn)行關(guān)鍵詞搜索的過(guò)程
這篇文章主要介紹了在Oracle表中進(jìn)行關(guān)鍵詞搜索的過(guò)程,我們可以通過(guò)Oracle?SQL?Developer或Toad運(yùn)行PL/SQL塊,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

