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

来源:这里教程网 时间:2026-03-03 20:15:55 作者:
今天碰到一个问题,客户的数据库报错,但是检查了连接数之类的信息都是正常的。报错信息如下:

ORA-12516 对于大部分工程师来说都是一个小问题,大家都知道去看下process 和连接数之类的信息当前连接数据:
[19c@test gdul]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 9 07:57:20 2016
Version 19.3.0.0.0
Copyright (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.0
SQL> select count(*) from v$process;  
COUNT(*)----------  
65
连接数的参数设置
SQL> show parameter processNAME             
TYPE   VALUE------------------------------------ ----------- ------------------------------
aq_tm_processes          integer   1
cell_offload_processing        boolean   TRUE
db_writer_processes         integer   1
gcs_server_processes         integer   0
global_txn_processes         integer   1
job_queue_processes         integer   40
log_archive_max_processes       integer   4
processes           integer   300
processor_group_name         string
我一般喜欢用下面的查询:
SQL> col RESOURCE_NAME format a25
SQL> col LIMIT_VALUE format a15
SQL>  col MAX_UTILMAX_UTILIZATION format a10
SQL> set linesize 1000
SQL> 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 不足,修改相关参数然后重启。

相关推荐