oracle 会话 死锁 执行sql 执行job的方法

//根据用户分组会话
select t.USERNAME,count(*) from v$session t group by t.USERNAME
//查找某一用户正在执行的sql_id值
select * from v$session t where t.USERNAME = 'BUDGET' and t.SQL_ID is not null
//查找对应sql_id的对应sql语句
select m.SQL_TEXT from v$session t , v$sqlarea m where t.USERNAME ='BUDGET' and t.sql_id = m.SQL_ID
//
select * from v$sqlarea t where t.SQL_ID = 'g92sy7kwt6mrq'
//查询死锁对象
select * from v$locked_object

1、修改Oracle最大连接数的方法

a、以sysdba身份登陆PL/SQL 或者 Worksheet
b、查询目前连接数
show parameter processes;
c、更改系统连接数
alter system set processes=1000 scope=spfile;
d、创建pfile
create pfile from spfile;
e、重启Oracle服务或重启Oracle服务器
2、查询Oracle游标使用情况的方法
select * from v$open_cursor where user_name = 'TRAFFIC';
3、查询Oracle会话的方法
select * from v$session

杀掉会话:

方法一:SQL> SELECT pid,spid FROM V$PROCESS WHERE ADDR IN (SELECT PADDR FROM V$SESSION where username ='SYS');
PID SPID
---------- ------------
17 13657

ps -ef |grep 13657
kill -9 13657

方法二
SQL> SELECT sid,serial# FROM V$SESSION WHERE sid in (SELECT distinct sid FROM V$MYSTAT);
SID SERIAL#

---------- ----------
1637 13894

alter system disconnect session '1637,13894' immediate;
执行这句会提示:ora-00031:标记要终止的会话。。。但是其实执行成功了。
如果用pl/sql登陆客户端那边会提示:ora-00028:您的会话已经被终止。

查看正在执行sql进度:
SELECT SE.SID,OPNAME,TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,ELAPSED_SECONDS ELAPSED,ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,SQL_TEXT
FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE AND SL.SID = SE.SID AND SOFAR != TOTALWORK
ORDER BY START_TIME

SELECT a.tablespace_name "表空间名",round(total/1024/1024/1024,4) 表空间大小Gb,round(free/1024/1024/1024,4) 表空间剩余大小Gb,
round((total-free)/1024/1024/1024,4) 表空间使用大小Gb,ROUND((total-free)/total,4)*100 "使用率 %"
FROM (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE
GROUP BY tablespace_name ) a,
(SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name) b
WHERE a.tablespace_name=b.tablespace_name order by 5 desc
 
强制停止oracle正在执行的job:
 
1、查看所有job;
select * from dba_jobs;
2、查看正在运行的job;
select * from dba_jobs_running;
3、根据sid查出对应的session;
select SID,SERIAL# from V$Session where SID='&SID';
4、kill对应的session;
alter system kill session '&SID,&SERIAL';
5、将job置为broken;
exec dbms_job.broken('&JOB',true);
6、sysdba用户权限删除job;
delete from dba_jobs where JOB='&JOB';
---实在无奈时启动数据库

(0)

相关推荐

  • Oracle对于死锁的处理方法

    Oracle数据库出现死锁的时候可以按照以下处理步骤加以解决: 第一步:尝试在sqlplus中通过sql命令进行删除,如果能够删除成功,则万事大吉!但通常情况下,出现死锁时,想通过命令行或者通过Oracle的管理工具删除有死锁的session,oracle只会将该session标记为killed,但无法清除掉,往往需要通过第二步在操作系统层级进行删除! Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0 Connected as

  • 讲解Oracle数据库中结束死锁进程的一般方法

    1.查看死锁 1)用dba用户执行以下语句 select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object) 如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台.字段说明: Username:死锁语句所用的数据库用户: Lockwait:死锁的状态,如果有内容表示被死锁. Status: 状态,active表示被死锁 Ma

  • 简单说明Oracle数据库中对死锁的查询及解决方法

    死锁的原理 当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提 交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态, 此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错.    死锁的定位方法 通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台.   1)用dba用户执行以下语句 select username,lockwait,status,machine,program from v$session where sid in

  • Oracle删除死锁进程的方法

    本文实例讲述了Oracle删除死锁进程的方法.分享给大家供大家参考.具体如下: 步骤1:用以下SQL查看进程列表,判断出被锁定的表 复制代码 代码如下: SELECT dob.OBJECT_NAME Table_Name,lo.SESSION_ID||', '||vss.SERIAL# 删除号, lo.locked_mode,lo.SESSION_ID, vss.SERIAL#,vss.action Action,vss.osuser OSUSER, vss.LOGON_TIME, vss.pr

  • Oracle 查询死锁并解锁的终极处理方法

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀. 1.下面的语句用来查询哪些对象被锁: 复制代码 代码如下: select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where l.object_id =

  • Oracle数据表中的死锁情况解决方法

    在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定: 1.查找被锁定的表: select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status from v$locked_object l, all_objects a where l.object_id=a.object_id; 如果想知道具体是哪

  • Oracle外键不加索引引起死锁示例

    --创建一个表,此表作为子表 create table fk_t as select *from user_objects; delete from fk_t where object_id is null; commit; --创建一个表,此表作为父表 create table pk_t as select *from user_objects; delete from pk_t where object_id is null; commit; --创建父表的主键 alter table PK

  • oracle 会话 死锁 执行sql 执行job的方法

    //根据用户分组会话 select t.USERNAME,count(*) from v$session t group by t.USERNAME //查找某一用户正在执行的sql_id值 select * from v$session t where t.USERNAME = 'BUDGET' and t.SQL_ID is not null //查找对应sql_id的对应sql语句 select m.SQL_TEXT from v$session t , v$sqlarea m where

  • Oracle基础多条sql执行在中间的语句出现错误时的控制方式

    多条sql执行时如果在中间的语句出现错误,后续会不会直接执行,如何进行设定,以及其他数据库诸如Mysql是如何对应的,这篇文章将会进行简单的整理和说明. 环境准备 使用Oracle的精简版创建docker方式的demo环境,详细可参看: https://www.jb51.net/article/153533.htm 多行语句的正常执行 对上篇文章创建的两个字段的学生信息表,正常添加三条数据,详细如下: # sqlplus system/liumiao123@XE <<EOF > desc

  • Spring执行sql脚本文件的方法

    本篇解决 Spring 执行SQL脚本(文件)的问题. 场景描述可以不看. 场景描述: 我在运行单测的时候,也就是 Spring 工程启动的时候,Spring 会去执行 classpath:schema.sql(后面会解释),我想利用这一点,解决一个问题: 一次运行多个测试文件,每个文件先后独立运行,而上一个文件创建的数据,会对下一个文件运行时造成影响,所以我要在每个文件执行完成之后,重置数据库,不单单是把数据删掉,而 schema.sql 里面有 drop table 和create tabl

  • Oracle在Mybatis中SQL语句的配置方法

    数据库中有下划线的字段在实体中应采用驼峰命名法,如P_NAME对应pName,实例如下: 1.XML文件中SQL语句配置(Geteway.xml文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-m

  • C#中执行SQL的几种方法讲解

    1.不同的数据库 private InfoLightDBTools dbTools; //#ORACLE# this.dbTools = new InfoLightDBTools(clientInfo, dbName); private InfoLightDBTXTools dbTXTools; //#ORACLE# 要结合事务处理使用:BeginTransaction(),Commit(),Rollback(),EndTransaction() this.dbTXTools = new Inf

  • Java使用Statement接口执行SQL语句操作实例分析

    本文实例讲述了Java使用Statement接口执行SQL语句操作的方法.分享给大家供大家参考,具体如下: Statement执行SQL语句: 1. 对数据库的曾删改操作时,使用stmt.executeUpdate(sql)  执行给定 SQL 语句,分别为 insert .update.delete. 2. 对数据库做查询时,直接使用 stmt.executeQuery(sql),返回结果可以为一个resultSet结果集. 首先做一些准备工作: ①对要进行操作的数据库表进行封装,比如说我的数

  • Mybatis如何直接执行SQL语句

    目录 Mybatis直接执行SQL语句 第一种方法 第二种方法 测试Mybatis执行SQL语句步骤 mybatis核心类:SqlSessionFactory 举例 Mybatis直接执行SQL语句 有时候我们如果要对传入的SQL验证语法方面怎么办呢,首先我们是不是要有一条完整的SQL,而且让mybatis去执行,这是小白最近遇到的,对于用户输入进来的语法与参数,进行拼接并且去执行,判断SQL语句有没有语法错误. 第一种方法 建立一个SQL工具进行SQL处理再返回完整的SQL语句 1.建立工具类

  • java通过MySQL驱动拦截器实现执行sql耗时计算

    目录 背景 具体实现 MySQL5 MySQL6 MySQL8 使用方法 测试结果 背景 公司的一个需求,公司既有的链路追踪日志组件要支持MySQL的sql执行时间打印,要实现链路追踪常用的手段就是实现第三方框架或工具提供的拦截器接口或者是过滤器接口,对于MySQL也不例外,实际上就是实现了MySQL驱动的拦截器接口而已. 具体实现 MySQL的渠道有不同的版本,不同版本的拦截器接口是不同的,所以要针对你所使用的不同版本的MySQL驱动去实现响应的拦截器,接下来分别介绍下MySQL渠道5,6,8

  • oracle sql执行过程(流程图)

    Oracle sql执行流程图_SQL执行过程一.sql语句的执行步骤:1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义.2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限.3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句.4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式.5)选择优化器,不同的优化器一般产生不同的"执行计划"  6)选择连接方式,ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连

随机推荐