Tag Archives: JOB

ORA-4031导致CJQ进程出现ORA-1003错误

客户数据库出现ORA-4031错误,随后出现了大量的ORA-1003和ORA-604错误。 数据库版本为10.2.0.3 RAC for HP-UX,详细的报错信息为: Mon Jul 16 15:30:30 2012 Errors IN file /u01/app/oracle/admin/ORCL/udump/orcl2_ora_2389.trc: ORA-00603: ORACLE server SESSION TERMINATED BY fatal error ORA-00604: error occurred at recursive SQL level 1 ORA-04031: unable TO allocate 32 bytes OF shared memory ("shared … Continue reading

Posted in BUG | Tagged , , , , | Leave a comment

利用触发器解决更新主键冲突的问题

有朋友问我能否用触发器实现更新数据时,如果发现主键已经存在,则将冲突的主键更新为当前记录之前的主键值。 简单的说,如果表中存在主键为1和2的记录,如果一条UPDATE语句将1更新为2,那么想要实现的功能是为了确保这个UPDATE可以执行成功,在后台自动将ID为2的记录更新为1。 这个功能应该可以实现,但是直接在触发器中肯定无法实现,因为这是一个标准的变异表问题。而且即使是采用自治事务的方式,也需要小心,因为要修改原有的记录就必须通过UPDATE实现,而这个UPDATE又会导致触发器的触发,如果处理不当,就会导致循环触发。 SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30), CONSTRAINT PK_T PRIMARY KEY (ID)); TABLE created. SQL> CREATE OR REPLACE PROCEDURE P_UPDATE_T (P_NEW NUMBER, P_OLD NUMBER) AS 2 BEGIN 3 FOR I IN (SELECT ID FROM T WHERE … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

利用SCHEDULER调用shell脚本

10g的SCHEDULER的一个重要的功能是可以调用操作系统命令或SHELL脚本。而在10g以前,这个功能只能通过外部存储过程来实现。 下面是一个简单的例子,首先编辑一个test.sh脚本: #!/usr/bin/ksh echo abc >> /home/xxx/a.txt 注意,#!/usr/bin/ksh是必须的,否则JOB运行会出现ORA-27369错误。 给这个shell设置执行权限: $ chmod 744 test.sh 下面就可以在数据库中建立PROGRAM: SQL> BEGIN 2 DBMS_SCHEDULER.CREATE_JOB( 3 JOB_NAME => ‘J_TEST’, 4 JOB_TYPE => ‘EXECUTABLE’, 5 JOB_ACTION => ‘/home/xxx/test.sh’, 6 ENABLED => TRUE, 7 AUTO_DROP => TRUE); 8 END; … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

ORA-610内部错误

ORA-600内部错误司空见惯了,这个ORA-610的内部错误还是第一次见到。 完整的相关错误信息如下: Wed Jun 22 10:01:08 2011 Errors IN file /oracle10g/admin/orcl/bdump/orcl_ora_27376.trc: ORA-00610: Internal error code Wed Jun 22 10:02:16 2011 WARNING: inbound connection timed OUT (ORA-3136) Wed Jun 22 10:05:02 2011 Process J000 died, see its trace file Wed Jun … Continue reading

Posted in ORACLE | Tagged , , , , , , | Leave a comment