当前位置: 首页 > news >正文

Oracle解锁表、包、用户、杀会话、停job

Oracle解锁表、包、用户、杀会话、停job

  • 一、创建包tzq_server_pkg
  • 二、授权给需要使用的用户log
  • 三、解锁表:执行存过unlock_table(schema_name, table_name)
  • 四、解锁包:执行存过unlock_package(schema_name, pkg_name)
  • 五、解锁用户:执行存过unlock_user(username)
  • 六、停止job任务:执行存过stop_job(job_id)
  • 七、杀session会话:执行存过kill_session(se_sid, se_serail#)
    • 7.1、查询需要kill的session的SID及serial#
    • 7.2、执行存过kill_session(se_sid, se_serail#)
  • 八、给新建的用户授权:执行存过 grant_pris(username)


一、创建包tzq_server_pkg

sys用户以sysdba身份登录Oracle数据库,创建包 tzq_server_pkg ,上代码:

CREATE OR REPLACE PACKAGE sys.tzq_server_pkg ISPROCEDURE 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 ISPROCEDURE unlock_table(table_owner IN VARCHAR2, table_name IN VARCHAR2) ISCURSOR c1 ISSELECT DISTINCT '''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || '''' AS si_idFROM gv$locked_object l,dba_objects      o,gv$session       sWHERE l.object_id = o.object_idAND l.session_id = s.sidAND l.inst_id = s.inst_idAND o.owner = upper(table_owner)AND o.object_name = upper(table_name);c1_rec c1%ROWTYPE;v_sql  VARCHAR2(2000);BEGINFOR c1_rec IN c1 LOOPv_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';dbms_output.put_line(v_sql);BEGINEXECUTE IMMEDIATE v_sql;EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);END;END LOOP;END unlock_table;PROCEDURE unlock_package(package_owner IN VARCHAR2,package_name  IN VARCHAR2) ISCURSOR c1 ISSELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_idFROM gv$session a,gv$access  bWHERE b.object = upper(package_name)AND b.owner = upper(package_owner)AND a.sid = b.sidAND a.inst_id = b.inst_id;c1_rec c1%ROWTYPE;v_sql  VARCHAR2(2000);BEGINFOR c1_rec IN c1 LOOPv_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';dbms_output.put_line(v_sql);BEGINEXECUTE IMMEDIATE v_sql;EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);NULL;END;END LOOP;END unlock_package;PROCEDURE unlock_user(username IN VARCHAR2) ISus_name VARCHAR2(200) := username;v_sql   VARCHAR2(2000);BEGINv_sql := 'alter user ' || us_name || ' account unlock';BEGINEXECUTE IMMEDIATE v_sql;dbms_output.put_line(us_name || '''s account is unlock');EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);END;END unlock_user;PROCEDURE stop_job(job_id IN NUMBER) ISCURSOR c1 ISSELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_idFROM gv$session a,(SELECT v.sid,v.id2     job,v.inst_id inst_idFROM sys.job$ j,gv$lock  vWHERE v.type = 'JQ'AND j.job(+) = v.id2) b,gv$instance cWHERE a.inst_id = b.inst_idAND a.sid = b.sidAND a.inst_id = c.inst_idAND c.inst_id = b.inst_idAND b.job = job_id;c1_rec c1%ROWTYPE;v_sql  VARCHAR2(2000);BEGINFOR c1_rec IN c1 LOOPv_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';dbms_output.put_line(v_sql);BEGINEXECUTE IMMEDIATE v_sql;EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);NULL;END;END LOOP;END stop_job;PROCEDURE kill_session(se_sid IN NUMBER, se_serail# IN NUMBER) ISp_sid           NUMBER := se_sid;p_serail        NUMBER := se_serail#;is_back_process NUMBER := 0;CURSOR c1 ISSELECT DISTINCT '''' || a.sid || ',' || a.serial# || ',@' || a.inst_id || '''' AS si_idFROM gv$session aWHERE a.sid = p_sidAND a.serial# = p_serail;c1_rec c1%ROWTYPE;v_sql  VARCHAR2(2000);BEGINIF se_sid IS NULL OR se_serail# IS NULL THENdbms_output.put_line('sid is null or serail# is null');RETURN;END IF;BEGINSELECT 1INTO is_back_processFROM gv$sessionWHERE sid = se_sidAND serial# = se_serail#AND TYPE = 'BACKGROUND';EXCEPTIONWHEN OTHERS THENis_back_process := 0;END;IF is_back_process = 1 THENRETURN;END IF;FOR c1_rec IN c1 LOOPv_sql := 'alter system kill session ' || c1_rec.si_id || ' immediate';dbms_output.put_line(v_sql);BEGINEXECUTE IMMEDIATE v_sql;EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);NULL;END;END LOOP;END kill_session;PROCEDURE grant_pris(username IN VARCHAR2) ISus_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);BEGINv_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;BEGINEXECUTE 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!');EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);END;END grant_pris;END tzq_server_pkg;
/

二、授权给需要使用的用户log

sys用户以sysdba身份登录Oracle数据库,给需要使用该包(sys.tzq_server_pkg)的用户授予 execute 的权限,执行下面命令授权:

grant execute on sys.tzq_server_pkg to log;

在这里插入图片描述

三、解锁表:执行存过unlock_table(schema_name, table_name)

以上面被授权的log用户,打开命令行窗口,执行下列SQL:

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

在这里插入图片描述

四、解锁包:执行存过unlock_package(schema_name, pkg_name)

以上面被授权的log用户,打开命令行窗口,执行下列SQL:

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

在这里插入图片描述

五、解锁用户:执行存过unlock_user(username)

以上面被授权的log用户,打开命令行窗口,执行下列SQL:

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

在这里插入图片描述

六、停止job任务:执行存过stop_job(job_id)

以上面被授权的log用户,打开命令行窗口,执行下列SQL:

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

在这里插入图片描述

七、杀session会话:执行存过kill_session(se_sid, se_serail#)

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

执行下列SQL:

SELECT * FROM gv$session;

找到你需要kill的那个session会话,拿到SID及serial#:159, 3729
在这里插入图片描述

7.2、执行存过kill_session(se_sid, se_serail#)

执行存过kill_session(),kill掉上面的那个session会话。在命令行执行下面的SQL:

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

在这里插入图片描述

八、给新建的用户授权:执行存过 grant_pris(username)

以上面被授权的log用户,打开命令行窗口,执行下列SQL:

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

在这里插入图片描述

http://www.lryc.cn/news/139609.html

相关文章:

  • 软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用
  • Redis Pub/Sub 指南
  • Nest(2):Nest 应用目录结构和脚手架命令介绍
  • 【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片
  • 矢量调制分析基础
  • ensp-Ipv6配置配置
  • java八股文面试[java基础]—— hashCode 与 equals 区别 == 与 equals的区别
  • Dubbo之PojoUtils源码分析
  • 【C++】—— C++11新特性之 “右值引用和移动语义”
  • 谈一谈redis脑裂
  • 基于原生Servlet使用模板引擎Thymeleaf访问界面
  • 【C语言】15-函数-1
  • 08-信息收集-架构、搭建、WAF等
  • Qt --- 显示相关设置 窗口属性等
  • 使用小程序实现左侧菜单,右侧列表双向联动效果
  • selenium中处理验证码问题
  • EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器
  • 一些自定义hooks
  • 基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法
  • lEC 61068-2-14_2023环境试验.第2-14部分:试验.试验N:温度变化, 最新版发布
  • CFDEM学习笔记
  • SpringBoot入门篇1 - 简介和工程创建
  • MyBatis-Plus updateById不更新null值
  • 用pytorch实现AlexNet
  • LeetCode560.和为k的子数组
  • echarts 的dataZoom滑块两端文字被遮挡
  • MongoDB基本使用
  • C++ 中的左值(Lvalues)和右值(Rvalues)
  • html流光按钮
  • HAProxy+nginx搭建负载均衡群集