`

关于Oracle中编译package挂死的原因

阅读更多
今天用plsqlDeveloper编译一个package,结果一开始编译,就程序挂死。

仔细思考了一下原因,可能是如下两种:

1.package在编译的时候,用到了某些对象,而这个对象恰好被锁住了,也就是说编译线程发生了死锁现象,程序挂死也就很正常了。

2.package中写了某些奇怪的语句,oracle的编译器出问题了。

第二种原因听起来很不可思议,但是我之前确实遇到过。。。

首先,转一个检查oracle数据库中对象死锁及解决办法的文章:
http://www.iteye.com/topic/187947

引用
一些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 = o.object_id and l.session_id=s.sid;

2.下面的语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)

【注】以上两步,可以通过Oracle的管理控制台来执行。

3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)

4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345


如果是第一种情况的话,参考上面的文章,即可解决。

可惜我碰到的不是。
没办法,只能用笨方法。
一个一个方法往package中加
加到某个方法的时候,终于发现了

原来我写了一句:
select 'aaaaa'||column_name||'bbbb' 
  INTO Message from table_name;

就是这句话出了问题

改为:
select column_name 
  INTO tmp_Message from table_name;
Message := 'aaaaa'||tmp_Message||'bbbb';
 

没事了。

以前还碰到过用for失败,用while循环才可以通过编译的问题。。。
分享到:
评论

相关推荐

    oracle jdbc diver package 正版

    总之,Oracle JDBC Driver Package是Java开发者与Oracle数据库之间的重要桥梁,提供了丰富的功能和优化选项,使得在Java环境中开发数据库应用变得更加便捷和高效。在实际开发中,结合最佳实践和性能调优策略,可以...

    oracle_11g_package.zip

    在Oracle 11g的安装过程中,这个库用于解决与C++相关的编译和链接问题,尤其是在执行某些特定的数据库操作或调用Oracle的C++接口时。 其次,"libaio-0.3.105-2"是异步I/O库,它为应用程序提供了一种高效的、非阻塞...

    Oracle数据库Package

    在上传的文件中,"包调用.sql"很可能是包含对Package中过程或函数的调用语句,例如: ```sql BEGIN 包名.过程名(参数); DBMS_OUTPUT.PUT_LINE(包名.函数名(参数)); END; / ``` "包 体.txt"和"包.txt"分别可能包含...

    Linux上搭建Oracle数据库需要的各种package.zip

    2. **开发工具**:安装Oracle数据库前,你需要确保系统中已经装有基本的开发工具,如`gcc`编译器、`make`工具等,它们是构建和编译Oracle软件所必需的。 3. **库文件**:Oracle依赖于一系列库文件,如`libaio`...

    配置增强型的Oracle简单客户端-Instant_Client

    3. sdk-10.2.0.4.0-linux-x86_64.zip(开发工具包,用于编译和链接Oracle相关程序) 4. sqlplus-10.2.0.4.0-linux-x86_64.zip(SQL*Plus命令行工具) 下载完成后,以root用户身份登录,创建目录`/opt/oracle`并将...

    linux下安装oracle缺少的所有包

    以下将详细介绍在Linux系统中安装Oracle时可能缺少的关键包和步骤。 1. **基础系统包**: - `glibc`: Oracle数据库需要GNU C Library(glibc)来支持其运行。确保系统中的glibc是最新的。 - `gcc`: 用于编译...

    oracle11g下用到的RPM

    Oracle 11g是一款广泛应用的关系型数据库管理系统,其在Linux操作系统上通常通过RPM(Red Hat Package Manager)包进行安装。RPM是一种软件包管理器,它使得在Linux系统上安装、升级、查询和卸载软件变得简单。下面...

    ORACLE DBMS STATS ERROR

    在Oracle数据库中,`DBMS_STATS` 是一个重要的包,它用于收集和管理表、索引和其他数据库对象的统计信息,这些信息用于优化器选择执行查询的最佳执行计划。然而,当出现错误“ORA-04063: package body 'SYS.DBMS_...

    Oracle Solaris 11.2 Copying and Creating Package Repositories in

    在Oracle Solaris 11.2中,复制和创建软件包仓库(Package Repositories)是系统管理和维护的重要环节,这允许系统管理员有效地分发、更新和管理软件包。 复制软件包仓库通常是出于备份目的或为了在网络中的多台...

    red hat enterprise linux6.5(rhel6.5)安装oracle 11gR2缺少的包package

    这允许Oracle编译其内核模块以适应您的系统。 3. **jemalloc**: Oracle推荐使用jemalloc作为内存分配器以提高性能。确保jemalloc库已安装并配置为Oracle的首选内存分配器。 4. **Glibc**: Oracle需要GLIBC的最新...

    PL/SQL DEVELOPER 详细教程

    PL/SQL DEVELOPER 用户指南 PL/SQL Developer是一个为Oracle数据库开发存储程序单元的集成开发环境(IDE),使用PL/SQL Developer你能方便地创建你的客房、服务器应用程序的服务器部分。

    批量导出pl/sql程序包内容代码

    在Oracle数据库管理中,批量导出PL/SQL程序包内容是一项非常实用的操作。特别是在维护大型数据库系统时,这项技能能够极大地提高工作效率,帮助开发者快速地备份、迁移或者分析特定的程序包代码。 #### 一、Oracle ...

    oracle的jdbc驱动包

    Oracle的JDBC驱动包是Java开发者连接Oracle数据库的重要工具,它允许Java应用程序通过JDBC(Java Database Connectivity)接口与Oracle数据库进行交互。JDBC是一种Java API,由Sun Microsystems(现已被Oracle公司...

    oracle对象创建实例

    在Oracle数据库管理中,对象创建是数据库管理员和开发人员日常工作中不可或缺的一部分。Oracle对象包括触发器(Trigger)、存储过程(Stored Procedure)以及其他多种数据库组件,它们对于实现业务逻辑、数据验证...

    CentOS6.2安装Oracle客户端

    3. `oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm`:开发包,包含SDK,对于开发与Oracle数据库交互的应用程序,特别是当需要编译如`oracle_fdw`这样的扩展时是必需的。 安装这些RPM包,可以使用`rpm`...

    java_for_oracle.rar_for oracle_oracle

    要在Oracle中创建Java存储过程,首先需要将Java源代码编译为字节码(.class文件),然后使用`DBMS_JAVA`包中的PL/SQL过程导入到数据库中。例如,使用`LOADJAVA`命令加载类,`GRANT EXECUTE`权限给用户,最后通过`...

    数据库oracle触发器课件

    包(Package)是Oracle数据库中组织PL/SQL代码的一种方式,包括包头(Package Specification)和包体(Package Body)。包头定义了包中公开的子程序(过程和函数),而包体包含了这些子程序的实现。使用包的好处在于...

    oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64/sqlplus/devel

    此版本号中的“11.2.0.4.0”代表Oracle数据库的版本,而“-1”则可能表示发行的修订次数。 SQL*Plus是Oracle Instant Client的一部分,是一个命令行工具,用于执行SQL和PL/SQL语句,进行数据库管理、查询、更新和...

    linux rpm for oracle

    在Linux环境中部署Oracle数据库时,RPM(Red Hat Package Manager)是常见的软件包管理工具,它可以帮助用户方便地安装、升级和管理软件。"linux rpm for oracle"这个标题表明我们将探讨如何利用RPM包来安装Oracle...

Global site tag (gtag.js) - Google Analytics