暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORA-12516 ORA-06512 ORA-04088报错分析

原创 黑獭 2024-07-17
190
今天碰到一个问题,客户的数据库报错,但是检查了连接数之类的信息都是正常的。报错信息如下:


ORA-12516 对于大部分工程师来说都是一个小问题,大家都知道去看下process 和连接数之类的信息当前连接数据:[19c@test gdul]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 9 07:57:20 2016Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.3.0.0.0SQL> select count(*) from v$process;  COUNT(*)----------  65连接数的参数设置SQL> show parameter processNAME             TYPE   VALUE------------------------------------ ----------- ------------------------------aq_tm_processes          integer   1cell_offload_processing        boolean   TRUEdb_writer_processes         integer   1gcs_server_processes         integer   0global_txn_processes         integer   1job_queue_processes         integer   40log_archive_max_processes       integer   4processes           integer   300processor_group_name         string我一般喜欢用下面的查询:SQL> col RESOURCE_NAME format a25SQL> col LIMIT_VALUE format a15SQL>  col MAX_UTILMAX_UTILIZATION format a10SQL> set linesize 1000SQL> select * from v$resource_limit;RESOURCE_NAME      CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION           LIMIT_VALUE     CON_ID------------------------- ------------------- --------------- ---------------------------------------- --------------- ----------processes           66       69       300              300    0sessions           85       86       472              472    0enqueue_locks           25       37      5620             5620    0enqueue_resources         19       19      2296        UNLIMITED    0ges_procs            0        0         0          0    0ges_ress            0        0         0        UNLIMITED    0ges_locks            0        0         0        UNLIMITED    0ges_cache_ress            0        0         0        UNLIMITED    0ges_reg_msgs            0        0         0        UNLIMITED    0ges_big_msgs            0        0         0        UNLIMITED    0ges_rsv_msgs            0        0         0          0    0RESOURCE_NAME      CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION           LIMIT_VALUE     CON_ID------------------------- ------------------- --------------- ---------------------------------------- --------------- ----------gcs_resources            0        0         0        UNLIMITED    0gcs_shadows            0        0         0        UNLIMITED    0smartio_overhead_memory         0        0         0        UNLIMITED    0smartio_buffer_memory          0        0         0        UNLIMITED    0smartio_metadata_memory         0        0         0        UNLIMITED    0smartio_sessions          0        0         0        UNLIMITED    0dml_locks            0        0      2076        UNLIMITED    0temporary_table_locks          0        0  UNLIMITED        UNLIMITED    0transactions            0        0       519        UNLIMITED    0branches            0        0       519        UNLIMITED    0cmtcallbk            0        1       519        UNLIMITED    0RESOURCE_NAME      CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION           LIMIT_VALUE     CON_ID------------------------- ------------------- --------------- ---------------------------------------- --------------- ----------max_rollback_segments         11       11       519            65535    0sort_segment_locks          0        2  UNLIMITED        UNLIMITED    0k2q_locks            0        0       944        UNLIMITED    0max_shared_servers          1        2  UNLIMITED        UNLIMITED    0parallel_max_servers          4        4        40            32767    0



回到上面的问题,上面的报错唯一的不同是,客户通过触发器执行了部分操作,这部分操作又通过dblink,连接到了另一个数据库,我们可以通过触发器定义的line 63行找到相关信息。在这过程中我用的是sqlplus 客户端,set linesize 1000set pagesize 0set long 99999select dbms_metadata.get_ddl('TRIGGER','***','***') from dual;上面查询会输出触发器的定义sqlplus 输出的有空行, 去掉后找到63行,或者你直接上下几行都看下(推荐大家使用plsql),找到相应的行,发现是个查询视图的sql SELECT *** INTO *** FROM 视图名字。 我们再看下这个视图的定义select dbms_metadata.get_ddl('VIEW','TWOCS_ORDERCODE','HIS') from dual;里面有个表是通过dblink查询的table_name@dblink_name 然后查询dblink的相关信息:select * from dba_dblinks;可以看到dblink的定义,然后找到相应的数据库,根据上面的 v$resource_limitv$process 查询相关信息最后发现是dblink指向的数据库process 不足,修改相关参数然后重启。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论