今天碰到一个问题,客户的数据库报错,但是检查了连接数之类的信息都是正常的。报错信息如下:

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),找到相应的行,发现是个查询视图的sqlSELECT *** 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




