最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle解鎖表、包、用戶、殺會話、停job的方法實現(xiàn)

 更新時間:2023年12月14日 15:22:10   作者:Tzq@2018  
本文主要介紹了Oracle解鎖表、包、用戶、殺會話、停job的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、創(chuàng)建包tzq_server_pkg

sys用戶以sysdba身份登錄Oracle數(shù)據(jù)庫,創(chuàng)建包 tzq_server_pkg ,上代碼:

CREATE OR REPLACE PACKAGE sys.tzq_server_pkg IS

  PROCEDURE unlock_table(table_owner IN VARCHAR2, table_name IN VARCHAR2);

  PROCEDURE unlock_package(package_owner IN VARCHAR2,
                           package_name  IN VARCHAR2);

  PROCEDURE unlock_user(username IN VARCHAR2);

  PROCEDURE stop_job(job_id IN NUMBER);

  PROCEDURE kill_session(se_sid IN NUMBER, se_serail# IN NUMBER);
  PROCEDURE grant_pris(username IN VARCHAR2);
END tzq_server_pkg;
/

CREATE OR REPLACE PACKAGE body SYS.tzq_server_pkg IS

  PROCEDURE unlock_table(table_owner IN VARCHAR2, table_name IN VARCHAR2) IS
    CURSOR c1 IS
      SELECT DISTINCT '''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || '''' AS si_id
        FROM gv$locked_object l
            ,dba_objects      o
            ,gv$session       s
       WHERE l.object_id = o.object_id
         AND l.session_id = s.sid
         AND l.inst_id = s.inst_id
         AND o.owner = upper(table_owner)
         AND o.object_name = upper(table_name);
    c1_rec c1%ROWTYPE;
    v_sql  VARCHAR2(2000);
  BEGIN
    FOR c1_rec IN c1 LOOP
      v_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';
      dbms_output.put_line(v_sql);
      BEGIN
        EXECUTE IMMEDIATE v_sql;
      EXCEPTION
        WHEN OTHERS THEN
          dbms_output.put_line(SQLERRM);
      END;
    END LOOP;
  END unlock_table;

  PROCEDURE unlock_package(package_owner IN VARCHAR2,
                           package_name  IN VARCHAR2) IS
    CURSOR c1 IS
      SELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_id
        FROM gv$session a
            ,gv$access  b
       WHERE b.object = upper(package_name)
         AND b.owner = upper(package_owner)
         AND a.sid = b.sid
         AND a.inst_id = b.inst_id;
    c1_rec c1%ROWTYPE;
    v_sql  VARCHAR2(2000);
  BEGIN
    FOR c1_rec IN c1 LOOP
      v_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';
      dbms_output.put_line(v_sql);
      BEGIN
        EXECUTE IMMEDIATE v_sql;
      EXCEPTION
        WHEN OTHERS THEN
          dbms_output.put_line(SQLERRM);
          NULL;
      END;
    END LOOP;
  END unlock_package;

  PROCEDURE unlock_user(username IN VARCHAR2) IS
    us_name VARCHAR2(200) := username;
    v_sql   VARCHAR2(2000);
  BEGIN
    v_sql := 'alter user ' || us_name || ' account unlock';
    BEGIN
      EXECUTE IMMEDIATE v_sql;
      dbms_output.put_line(us_name || '''s account is unlock');
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(SQLERRM);
    END;
  END unlock_user;

  PROCEDURE stop_job(job_id IN NUMBER) IS
    CURSOR c1 IS
      SELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_id
        FROM gv$session a
            ,(SELECT v.sid
                    ,v.id2     job
                    ,v.inst_id inst_id
                FROM sys.job$ j
                    ,gv$lock  v
               WHERE v.type = 'JQ'
                 AND j.job(+) = v.id2) b
            ,gv$instance c
       WHERE a.inst_id = b.inst_id
         AND a.sid = b.sid
         AND a.inst_id = c.inst_id
         AND c.inst_id = b.inst_id
         AND b.job = job_id;
    c1_rec c1%ROWTYPE;
    v_sql  VARCHAR2(2000);
  BEGIN
    FOR c1_rec IN c1 LOOP
      v_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';
      dbms_output.put_line(v_sql);
      BEGIN
        EXECUTE IMMEDIATE v_sql;
      EXCEPTION
        WHEN OTHERS THEN
          dbms_output.put_line(SQLERRM);
          NULL;
      END;
    END LOOP;
  END stop_job;

  PROCEDURE kill_session(se_sid IN NUMBER, se_serail# IN NUMBER) IS
    p_sid           NUMBER := se_sid;
    p_serail        NUMBER := se_serail#;
    is_back_process NUMBER := 0;
    CURSOR c1 IS
      SELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_id
        FROM gv$session a
       WHERE a.sid = p_sid
         AND a.serial# = p_serail;
    c1_rec c1%ROWTYPE;
    v_sql  VARCHAR2(2000);
  BEGIN
    IF se_sid IS NULL OR se_serail# IS NULL THEN
      dbms_output.put_line('sid is null or serail# is null');
      RETURN;
    END IF;
    BEGIN
      SELECT 1
        INTO is_back_process
        FROM gv$session
       WHERE sid = se_sid
         AND serial# = se_serail#
         AND TYPE = 'BACKGROUND';
    EXCEPTION
      WHEN OTHERS THEN
        is_back_process := 0;
    END;
    IF is_back_process = 1 THEN
      RETURN;
    END IF;
    FOR c1_rec IN c1 LOOP
      v_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';
      dbms_output.put_line(v_sql);
      BEGIN
        EXECUTE IMMEDIATE v_sql;
      EXCEPTION
        WHEN OTHERS THEN
          dbms_output.put_line(SQLERRM);
          NULL;
      END;
    END LOOP;
  END kill_session;

  PROCEDURE grant_pris(username IN VARCHAR2) IS
    us_name VARCHAR2(200) := username;
    v_sql   VARCHAR2(2000);
    v_sql2  VARCHAR2(2000);
    v_sql3  VARCHAR2(2000);
    v_sql4  VARCHAR2(2000);
    v_sql5  VARCHAR2(2000);
    v_sql6  VARCHAR2(2000);
    v_sql7  VARCHAR2(2000);
  BEGIN
    v_sql  := 'grant create synonym,create table,create type,create sequence,create view ,create materialized view,create job,create database link,connect,resource,create procedure ,debug any procedure, debug connect session to ' ||
              us_name;
    v_sql2 := 'grant select on gv_$locked_object to ' || us_name;
    v_sql3 := 'grant select on dba_objects to ' || us_name;
    v_sql4 := 'grant select on gv_$session to ' || us_name;
    v_sql5 := 'grant select on gv_$process to ' || us_name;
    v_sql6 := 'grant select on gv_$sql to ' || us_name;
    v_sql7 := 'grant select on gv_$access  to ' || us_name;
    BEGIN
      EXECUTE IMMEDIATE v_sql;
      EXECUTE IMMEDIATE v_sql2;
      EXECUTE IMMEDIATE v_sql3;
      EXECUTE IMMEDIATE v_sql4;
      EXECUTE IMMEDIATE v_sql5;
      EXECUTE IMMEDIATE v_sql6;
      EXECUTE IMMEDIATE v_sql7;
      dbms_output.put_line('grant success!');
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(SQLERRM);
    END;
  END grant_pris;

END tzq_server_pkg;
/

二、授權給需要使用的用戶log

sys用戶以sysdba身份登錄Oracle數(shù)據(jù)庫,給需要使用該包(sys.tzq_server_pkg)的用戶授予 execute 的權限,執(zhí)行下面命令授權:

grant execute on sys.tzq_server_pkg to log;

在這里插入圖片描述

三、解鎖表:執(zhí)行存過unlock_table(schema_name, table_name)

以上面被授權的log用戶,打開命令行窗口,執(zhí)行下列SQL:

set serveroutput on
execute sys.tzq_server_pkg.unlock_table('LOG','tzq_log_t');

在這里插入圖片描述

四、解鎖包:執(zhí)行存過unlock_package(schema_name, pkg_name)

以上面被授權的log用戶,打開命令行窗口,執(zhí)行下列SQL:

set serveroutput on
execute sys.tzq_server_pkg.unlock_package('LOG','tzq_log_pkg');

在這里插入圖片描述

五、解鎖用戶:執(zhí)行存過unlock_user(username)

以上面被授權的log用戶,打開命令行窗口,執(zhí)行下列SQL:

set serveroutput on
execute sys.tzq_server_pkg.unlock_user('LOG');

在這里插入圖片描述

六、停止job任務:執(zhí)行存過stop_job(job_id)

以上面被授權的log用戶,打開命令行窗口,執(zhí)行下列SQL:

set serveroutput on
execute sys.tzq_server_pkg.stop_job(6);

在這里插入圖片描述

七、殺session會話:執(zhí)行存過kill_session(se_sid, se_serail#)

7.1、查詢需要kill的session的SID及serial#

執(zhí)行下列SQL:

SELECT * FROM gv$session;

找到你需要kill的那個session會話,拿到SID及serial#:159, 3729

在這里插入圖片描述

7.2、執(zhí)行存過kill_session(se_sid, se_serail#)

執(zhí)行存過kill_session(),kill掉上面的那個session會話。在命令行執(zhí)行下面的SQL:

set serveroutput on
execute sys.tzq_server_pkg.kill_session(159, 3729);

在這里插入圖片描述

八、給新建的用戶授權:執(zhí)行存過 grant_pris(username)

以上面被授權的log用戶,打開命令行窗口,執(zhí)行下列SQL:

set serveroutput on
execute sys.tzq_server_pkg.grant_pris('log');

在這里插入圖片描述

 到此這篇關于Oracle解鎖表、包、用戶、殺會話、停job的方法實現(xiàn)的文章就介紹到這了,更多相關Oracle解鎖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Oracle不完全恢復的實戰(zhàn)指南

    Oracle不完全恢復的實戰(zhàn)指南

    當誤刪表、日志損壞或控制文件丟失時,Oracle的不完全恢復是DBA最后的救命稻草,掌握關鍵恢復技術,可在數(shù)據(jù)災難中力挽狂瀾,所以本文給大家介紹了Oracle不完全恢復的實戰(zhàn)指南,需要的朋友可以參考下
    2025-07-07
  • windows系統(tǒng)下Oracle?11g完整安裝教程

    windows系統(tǒng)下Oracle?11g完整安裝教程

    Oracle?11g?是Orcale公司推出的一款數(shù)據(jù)庫管理系統(tǒng),受廣泛應用于企業(yè)級應用程序,下面這篇文章主要給大家介紹了關于windows系統(tǒng)下Oracle?11g完整安裝的相關資料,需要的朋友可以參考下
    2024-04-04
  • 判定一個字符串是否為有效時間的函數(shù)

    判定一個字符串是否為有效時間的函數(shù)

    判定時間是否有效的函數(shù),為有效時間則返回1,不是有效時間則返回0,需要的朋友可以參考下
    2014-07-07
  • Oracle集群 diagwait的問題記錄

    Oracle集群 diagwait的問題記錄

    這篇文章主要給大家介紹了關于Oracle集群diagwait的問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Oracle數(shù)據(jù)庫事務的開啟與結束詳解

    Oracle數(shù)據(jù)庫事務的開啟與結束詳解

    事務是一個整體,這些操作要么全部執(zhí)行成功,要么全部不執(zhí)行,下面這篇文章主要給大家介紹了關于Oracle數(shù)據(jù)庫事務的開啟與結束的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Oracle中如何處理空值函數(shù)(NVL、NVL2、NULLIF等)詳解

    Oracle中如何處理空值函數(shù)(NVL、NVL2、NULLIF等)詳解

    本文詳細介紹了Oracle數(shù)據(jù)庫中處理空值的常用函數(shù),包括NVL()、NVL2()、NULLIF()、COALESCE()及DECODE()和CASE()函數(shù),這些函數(shù)在數(shù)據(jù)庫查詢和數(shù)據(jù)處理中發(fā)揮重要作用,幫助開發(fā)者有效處理空值問題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Oracle EXP和IMP用法和介紹

    Oracle EXP和IMP用法和介紹

    正在看的ORACLE教程是:OracleEXP和IMP用法和介紹
    2007-03-03
  • [Oracle] CPU/PSU補丁安裝詳細教程

    [Oracle] CPU/PSU補丁安裝詳細教程

    Oracle CPU的全稱是Critical Patch Update, Oracle對于其產(chǎn)品每個季度發(fā)行一次安全補丁包,通常是為了修復產(chǎn)品中的安全隱患,以下是對CPU/PSU補丁安裝的具體操作步驟進行了詳細的分析介紹,需要的朋友可以參考
    2013-07-07
  • 基于ORA-12170 TNS 連接超時解決辦法詳解

    基于ORA-12170 TNS 連接超時解決辦法詳解

    本篇文章是對ORA-12170 TNS 連接超時的解決辦法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • oracle如何連接登陸SYS賬號

    oracle如何連接登陸SYS賬號

    在Navicat12中連接Oracle 11g的SYS用戶時,如果設置了新密碼但連接失敗,可能是因為需要以SYSDBA或SYSOPER角色連接,解決方法是確保在連接時選擇了正確的角色,SYS用戶是具有最高權限的超級用戶,擁有創(chuàng)建數(shù)據(jù)庫的權限
    2025-02-02

最新評論

清原| 宜兴市| 孝昌县| 沁水县| 扶沟县| 驻马店市| 内乡县| 隆昌县| 泗洪县| 新沂市| 北海市| 栾川县| 南通市| 日土县| 科技| 井冈山市| 塔城市| 云浮市| 惠水县| 揭阳市| 长宁区| 苍山县| 马关县| 新营市| 石河子市| 扎兰屯市| 岱山县| 新巴尔虎右旗| 晴隆县| 阳山县| 交口县| 瑞昌市| 桦南县| 家居| 东港市| 武山县| 慈利县| 车致| 璧山县| 玉林市| 石嘴山市|