plsql 上对Oracle库的package 包执行重新编译时,超时无响应

问题描述:

plsql工具下pkg包正常编译的,中途有一次编译较慢,便强制结束了plsql进程,重新登录plsql编译同一个包无论如何都会无响应卡死。

plsql中kill掉session后重新编译同样卡死

原因分析:

1、在编译过程时plsql未反应便强制关掉了plsql导致

(1)存储过程编译没完成,或者编译失败时,oracle 数据库会自动把相应的存储过程锁起来;

(2)DBA_DDL_LOCKS视图中记录存储过程、表结构、视图、包等数据库对象锁的信息;

(3)V$ACCESS视图显示数据库中当前锁定的对象及访问它们的会话 。

查询锁定(运行中的)的包对应的SID号:
SELECT * FROM V$ACCESS WHERE OBJECT='CMSVOUCHER';
select * from dba_ddl_locks where name='CMSVOUCHER';
根据SID号查出会话信息:
select sid,serial# from v$session where sid in('78','209');
kill掉:
alter system kill session '78,4883';
alter system kill session '209,57021';

如果以上会话kill掉之后还是不行,查询V$ACCESS时无法出结果,需要重启数据库服务器

1. 停应用层的各种程序

    2. 停Oralce的监听进程

    $ lsnrctl stop

    3. 在独占的系统用户下,备份控制文件:

    $ sqlplus "/as sysdba"

    SQL> alter database backup controlfile to trace;

    4. 在独占的系统用户下,手工切换重作日志文件,确保当前已修改过的数据存入文件:

  SQL> alter system switch logfile;

    5. 在独占的系统用户下,运行下面SQL语句,生成杀数据库用户连接的kill_all_session.sql文件:

    SQL> set head off;

    SQL> set feedback off;

    SQL> set newpage none;

    SQL> spool ./kill_session.sql

    SQL> select 'alter system kill session '''||sid||','||serial#||''';' from v$session where username is not null;

    SQL> spool off;

    6. 在独占的系统用户下,执行杀数据库用户连接的kill_session.sql文件

 SQL> @./kill_session.sql

    7. 在独占的系统用户下,关闭数据库, 输入命令: shutdown immediate;

SQL> shutdown immediate;

    或者

    SVRMGRL> shutdown immediate;

 8. 启动oralce的监听进程

 $ lsnrctl start

    9. 进入独占的系统用户下,启动Oralce数据库

$sqlplus /nolog

进入oracle控制台。输入命令: sqlplus  / as sysdba;

  SQL> connect / as sysdba

    SQL> startup;

启动数据库,输入命令: startup;

或者   

 $ svrmgrl

    SVRMGRL> connect internal;

    SVRMGRL> startup;

    10.启动应用层的各种程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章