包编译卡住的终极解决办法

2023-05-16

在数据库开发过程中,经常遇到一个很烦躁的现象:刚修改好的包一编译就卡死了,PL/SQL变成一片空白,又不忍心关闭,这可是耗死多少脑细胞才写出来的!!!只好去求DBA帮忙解决,可是人家也不是每次都会耐心帮你解决,结果经常碰一鼻子灰,所以了,求人不如求己,下面就让我们自己学会去解决这个烦人的问题。。

首先我们先了解下与这种卡死现象相关的几个视图:

1)v$access

V$ACCESS displays information about locks that are currently imposed on library cache objects. The locks are imposed to ensure that they are not aged out of the library cache while they are required for SQL execution.

v$access里存放的是数据字典缓存中的对象,包括表,包,游标等(库缓存缓存的是最近执行的代码),所以你当前编译的包是可以查到的,执行完毕后一般就会v$access中消失。不过有种情况要注意下,如果一个session执行了包A后就停下来了(session对应的状态为INACTIVE),执行完毕后,session与包A可能还是存在于v$access中,直到这个session再次执行另外的sql,这种情况是不会影响你包的编译。所以当你看到v$access中有你要编译的包,不要惊慌,它不一定是凶手,去v$session中确认下状态再做判断。

2)DBA_DDL_LOCKS

DBA_DDL_LOCKS lists all DDL locks held in the database and all outstanding requests for a DDL lock.

当你编译包时,oracle就会对这个包加个DDL锁,同时也会这个包所引用的对象加DDL锁(与DDL锁对应的是DML锁,记录在V$locked_object里,sql语句执行完毕后,DML锁不会消失,必须commit或rollback)


下面我们做几个实验来验证上面的理论(其实上面也是我从别处看到的,对不对还得自己去验证)

1. 用PL/SQL随便调试个sp,让它停在调试状态;


2. 看看在两个视图中的情况:

--注意这里用了/*+rule*/可以解决查询 v$access慢的情况

SQL> SELECT/*+rule*/ * FROM v$access t WHERE t.OWNER='ORACLE' AND OBJECT='TEST_FOR_DDL';

151       ORACLE       TEST_FOR_DDL        PROCEDURE


SQL> SELECT * FROM dba_ddl_locks t WHERE t.owner='ORACLE' AND NAME='TEST_FOR_DDL';

151        ORACLE        TEST_FOR_DDL            Table/Procedure/Type                      Null      None


3.再开一个窗口,编译TEST_FOR_DDL,开始卡死;


4.再查两个视图中的情况:发现v$access中显示的认识持有DDL锁的session,而dba_ddl_locks显示了持有锁和请求锁的session

SQL> SELECT/*+rule*/ * FROM v$access t WHERE t.OWNER='ORACLE' AND OBJECT='TEST_FOR_DDL';

151       ORACLE       TEST_FOR_DDL        PROCEDURE


SQL> SELECT * FROM dba_ddl_locks t WHERE t.owner='ORACLE' AND NAME='TEST_FOR_DDL';

151       ORACLE       TEST_FOR_DDL            Table/Procedure/Type                      Null                None
158       ORACLE       TEST_FOR_DDL            Table/Procedure/Type                      Exclusive       None    --排他锁


5.让调试的session跑完,再来看。编译卡死的session死而复生

--v$access记录没了

SQL> SELECT/*+rule*/ * FROM v$access t WHERE t.OWNER='ORACLE' AND OBJECT='TEST_FOR_DDL';

no rows selected

--只剩调试的session,此时仍可以正常编译sp

SQL> SELECT * FROM dba_ddl_locks t WHEREt.owner='ORACLE' AND NAME='TEST_FOR_DDL';


151               ORACLE                    TEST_FOR_DDL                 Table/Procedure/Type                     Null      None


通过上面的实验,我们可以得出这样的结论:v$access,dba_ddl_locks 中有你要编译的对象,都不能说明会影响你的编译。对于v$access,你要确认其对应的session是否ACTIVE,对于dba_ddl_locks,你要确认其对应的锁类型是否为Exclusive。这样就可以准确找到卡死你编译的真凶。。


找到卡死你真凶的sid后,下面就开始准备干掉它:

1. 找出其对应的serial#:

SQL> SELECT SID,SERIAL# FROM v$session  WHERE SID IN (150);

       150         20


2. 杀掉:

SQL> alter system kill session'150,20';

System altered.


3. 杀掉后一切恢复正常,编译卡住的sp也编译过去了

SQL> SELECT SID,SERIAL#,status FROM v$session  WHERE SID IN (150);

no rows selected


不过我这是很幸运的情况,很多时候你kill会话后,PMON并不能及时清除该会话的资源,在V$session中的状态是KILLED,还是会卡住你要编译的包。要是你是开发人员的话,只能求助DBA帮你把session对应的操作系统线程杀掉(因为开发人员通常是没有对操作系统进行操作的权限),不过我们还是应该了解DBA是怎么操作的,其实很简单的:

1. 找出进程地址

SELECT PADDR FROM v$session  WHERE SID IN (147);

2. 找操作系统对应的SPID

SELECT spid FROM V$process WHERE addr='30E1C924'

3.在操作系统杀

linux:          kill pid

windows:    orakill sid spid


这下就肯定没人阻止你编译了,不过小心要是你把别人正在用的session杀掉了,小心挨揍大笑

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包编译卡住的终极解决办法 的相关文章

  • 正则的基本用法

    一 了解正则表达式 正则表达式是对字符串操作的一种逻辑公式 xff0c 就是用事先定义好的一些特定字符 及这些特定字符的组合 xff0c 组成一个 规则字符串 xff0c 这个 规则字符串 用来表达对字符串的一种过滤逻辑 正则表达式是用来匹
  • windows10 配置 VNC server

    windows10 配置 VNC server 配置 VNC server并设置 当客户端连接vnc server端时不能通过键盘和鼠标控制服务端 下载windows版 https www realvnc com en connect do
  • 二叉树的前序,中序,后序遍历

    前序遍历 xff1a 根节点 gt 左子树 gt 右子树 xff08 根 gt 左 gt 右 xff09 中序遍历 xff1a 左子树 gt 根节点 gt 右子树 xff08 左 gt 根 gt 右 xff09 后序遍历 xff1a 左子树
  • Java拉姆达表达式

    目录 语法 lambda表达式的重要特征 变量作用域 Lambda 表达式 xff0c 也可称为闭包 xff0c 它是推动 Java 8 发布的最重要新特性 Lambda 允许把函数作为一个方法的参数 xff08 函数作为参数传递进方法中
  • activiti修改流程定义二进制数据后需清缓存

    示例如下 package com zz flow utils import org activiti engine impl interceptor Command import org activiti engine impl inter
  • Ubuntu 12.04 LTS 中文输入法的安装

    安装 Ubuntu 12 04 着实费力一番功夫 xff0c 老是在用 Ubuntu 来引导 Windows xff0c 结果 Ubuntu 倒是能用 xff0c 一进入 Windows 就蓝屏 xff0c 于是又重装 Windows 好几
  • stream buffer原理

    Stream buffer是一个用于在cache和memory或者L1cache和L2cache之间的预取器 xff0c 相应地 xff0c 其目的是用于替代L2cache或者减少L1cache的缺失率 最原始的streambuffer由J
  • 原创:纠正国人对Linux的误解和错误认识之二

    或问 xff1a Linux兼容性差 真的是这样吗 xff1f 从2 6 30内核开始 xff0c 驱动程序占整个内核的代码比率首次超过50 xff05 就在2009年圣诞节那天 xff0c Linus Torvalds 在给大家发的圣诞快
  • linux vnc登陆黑屏问题

    1 现象描述 桌面背景全黑 xff0c 没有右上角的设置按钮 2 添加新用户步骤 命令 xff1a 1 useradd xy 2 passwd xy 3 输入密码 4 vim etc sudoers xff0c 将xy添加下面 5 在roo
  • 读书笔记-深度学习推荐系统9-推荐系统知识框架

    针对某一个领域 xff0c 建立自己的技术框架是最重要的 xff0c 只有建立了知识框架 xff0c 才能在这个框架中开枝散叶 xff0c 思考细领域的问题时 xff0c 见微知著的同时 xff0c 也不会忘记整体 9 1 知识架构图 9
  • shell将命令输出结果保存到变量中的3种常用方式

    shell将命令输出结果保存到变量中的几种形式及相应的输出结果 xff0c 使用时须注意对应关系 xff0c 记录在此以便使用时查找比较 bin bash abc 61 34 echo 66666666666666666 34 只用一个 3
  • SphereFace的翻译,解读以及训练

    前段时间 xff0c 由于工作需要 xff0c 学习了一下论文 SphereFace Deep Hypersphere Embedding for Face Recognition 收获挺大的 xff0c 这几天刚好有空 xff0c 就整理
  • IDEA2019,springboot2.1 .6 热部署配置 完整版

    1 修改pom文件 xff0c 增加配置 lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId gt spring boot
  • casbin模型

    目录 一 PERM元模型二 基础代码实现步骤1 创建main go步骤2 创建model conf步骤3 创建policy csv 三 role definition 角色域的用法g 61 的用法1 model文件2 policy文件 g
  • 为Visual Studio添加项目模板及项模板

    1 问题的引入 在做项目的时候 xff0c 需要代码规范 xff0c 版本信息不可或缺 xff0c 但是每次在文件头COPY版本信息很麻烦 xff0c 而且也不太容易控制 为了更好 更规范的去完成项目 xff0c 需对项目文件做统一的格式来
  • Hadoop-HDFS-读写流程详解

    HDFS写数据流程 xff1a 详细步骤图 xff1a 详细描述 xff1a 1 客户端向NN发送文件上传的请求 2 NN进行一系列的检查 xff1a 是否有权限 xff0c 文件的父目录是否存在 xff0c 文件是否已经存在同名等等 xf
  • tcsh编程学习3

    一 xff1a shell 是什么 shell是一个 UNIX程序 xff0c 当给出一条命令时 xff0c shell解释并执行它 xff0c 然后返回一个提示或是一个错误消息 作为一个命令解释器 xff0c shell是一种编程语言 x
  • xcode 基本操作

    1 IDE概览 2 偏好设置 通过 command 43 快捷键或 Xcode Preferences 菜单呼出偏好设置 xff08 1 xff09 主题及字体 xff08 Preferences gt Fonts amp Colors x
  • 无屏,新安装的一个apk 如何启动?

    调试的设备没有屏幕 xff0c 只能通过adb 投屏 然后安卓的桌面应用已经被干掉了 xff0c 改成了定制的桌面 新安装的apk xff0c 在屏幕或者投屏中都是无法看到新安装的 UI 入口的 那怎样启动这个 apk 呢 xff1f 首先
  • 推荐几个ubuntu16.04的下载地址

    推荐几个ubuntu16 04的下载地址 ubuntu16 04下载地址 xff1a 中科大源 http mirrors ustc edu cn ubuntu releases 16 04 阿里云开源镜像站 http mirrors ali

随机推荐

  • 读书笔记-深度学习推荐系统4-推荐与embedding

    本篇结合了书籍 深度学习推荐系统 和吴恩达老师的视频课程 Natural Language Processing and Word Embeddings embedding技术是深度学习的一种基础核心操作 xff0c 有很多的应用场景 1
  • VNC 密码修改遇到的问题

    记一下今天在修改vnc密码的时候 xff0c 使用vncpasswd xff0c 修改完死活不成功 xff0c 后来切换到对应的账号再修改就成功了
  • 我的2014

    2014 xff0c 不 xff0c 应该是先说说现在的2015吧 xff0c 2015年1月18号 xff0c 我刚刚注册了CSDN的博客账号 xff0c 相对来说 xff0c 我是个新手 xff0c 其实以前都没有写博客的习惯 xff0
  • 平衡车+速度/位置pid+野火上位机移植+Freertos+cubemx(一)

    平衡小车 43 野火pid上位机移植 程序源码已经上传 xff0c 需要的可以下载 一 首先下载STM32CUBEMX 二 配置相关单片机和相关功能 1 配置时钟和debug引脚2 开启freertos3 相关功能以及引脚的配置这里使用的相
  • 百度笔试题2

    一 xff0c 简答题 30分 1 xff0c 当前计算机系统一般会采用层次结构存储数据 xff0c 请介绍下典型计算机存储系统一般分为哪几个层次 xff0c 为什么采用分层存储数据能有效提高程序的执行效率 xff1f xff08 10分
  • 2014华为机试题目

    1 输入摸一个数 xff0c 然后将其倒过来相加 xff0c 如果和不是回文串 xff0c 那么将和再采取同样的操作 xff0c 在判断得到的是否为回文串 xff0c 这样往返7次 xff0c 如果其中有一次是回文就直接打出来 xff0c
  • 2014小米,百度,pptv,去哪儿笔试题目回忆

    今天一共笔试了这四家 xff0c 真累啊 xff0c 上午10点小米 xff0c 下午2点百度 xff0c 下午3点PPTV xff0c 下午5点去哪儿 xff0c 今天右手太酸了 xff0c 打的都话了50左右 xff0c 如果没面试通知
  • 质数因子

    功能 输入一个正整数 xff0c 按照从小到大的顺序输出它的所有质数的因子 xff08 如180的质数因子为2 2 3 3 5 xff09 思路 xff1a 传统的思维是从2到n遍历一遍 xff08 稍微优化一下可以到根号n xff09 x
  • OVS于DVS

    撰写时间 xff1a 2022 2 28 分布式虚拟交换机 xff08 DVS 注意 xff1a DVS是二层交换机 DVS特点 xff1a 1 集中管理 xff1a 通过统一的Portal页面进行集中管理 xff0c 简化用户配置 2 基
  • 如何同时使用maven-replacer-plugin和maven-assembly-plugin插件

    页面css和js缓存是前端常见的问题 xff0c maven有专门的插件maven assembly plugin可以处理 参考https blog csdn net weixin 34336292 article details 9197
  • Ubuntu上两台服务器利用nfs实现共享文件夹

    碰到的一个问题是 xff0c 一台服务器A放不下所有的数据 xff0c 部分数据只能放到另一台服务器B上 xff0c 那么就涉及到如何把服务器B上的数据共享给服务器A xff0c 使得A可以看到B上的内容 xff0c 需要用的是nfs文件共
  • Unbuntu16.04 虚拟机 安装win7以及文件共享

    KVM虚拟机的模版导出 xff0c 通常都是直接用qemu img命令可以将默认的raw格式或者qcow2格式的磁盘文件压缩后导出 xff0c 指令如下 xff1a 将默认raw格式的磁盘 xff0c 简单压缩转换成qcow2格式 qemu
  • 报错:RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

    一般显存溢出报out of memory之类 xff0c 修改了代码中batch size大小 xff08 忘记自己已经配置过默认参数 xff09 未解决 所以便认为是cuda配置问题 xff0c 多方检查确认cuda cudnn配置无误
  • js delete删除key

    var a 61 a a 61 1 a b 61 2 delete a 34 a 34 console log a b 2 delete a b console log a js 的delete可以根据key删除对象中的元素
  • 2014跌跌撞撞--伴我成长

    2014跌跌撞撞 伴我成长 上眼皮是正月 xff0c 下眼皮是腊月 xff0c 一转眼一年就过去了 没有轰轰烈烈 xff0c 也不是平淡无奇 xff0c 或许应该说是跌跌撞撞地走过来 叶子不断地从生命之树飘落 xff0c 不知不觉中岁月已在
  • stm32f103rb升级到stm32f103rc时代码移植注意事项

    1 由于stm32f103RC RD RE系列单片机芯片级的bug xff0c 代码中用到重映射相关函数的地方 xff0c 在其后面添加 HAL AFIO REMAP SWJ NOJTAG 语句 xff0c 如下所示 xff1a HAL A
  • OpenFlow所面临的挑战与创新方案

    1 OpenFlow控制面的挑战 2 OpenFlow转发面的挑战 3 芯片厂商的犹豫 一 OpenFlow控制面的挑战 OpenFlow在控制面存在以下不足 xff1a 1 master和slavecontroller的选举机制不够成熟
  • apt-get软件管理工具(软件安装、重装、卸载)

    apt get软件管理工具 下面讲解 xff0c linux系统下如何进行软件的管理 xff0c 包括软件的索引安装 更新 卸载删除 本地存储介中软件的安装 系统升级等操作 更多优质文章 xff0c 请访问博主个人网站 xff1a www
  • Ubuntu 系统下如何安装pip3工具

    一 导读 Ubuntu 系统内置了 Python2 和 Python3 两个版本的开发环境 xff0c 却没有内置相应的 pip3 管理工具 xff0c 本文将介绍如何在Ubuntu下如何快速安装 pip3 工具 xff0c 并升级到最新可
  • 包编译卡住的终极解决办法

    在数据库开发过程中 xff0c 经常遇到一个很烦躁的现象 xff1a 刚修改好的包一编译就卡死了 xff0c PL SQL变成一片空白 xff0c 又不忍心关闭 xff0c 这可是耗死多少脑细胞才写出来的 xff01 xff01 xff01