oracle怎么获取exception信息

oracle怎么获取exception信息,第1张

通过如下代码:

public static String getExceptionAllinformation(Exception ex){

String sOut = "";

StackTraceElement[] trace = exgetStackTrace();

for (StackTraceElement s : trace) {

sOut += "\tat " + s + "\r\n";

}

return sOut;

}

扩展资料:

注意事项

oracle存储过程,可以通过sqlcode 获取异常编码、通过sqlerrm获取异常信息。

例子:

create or replace procedure write2blob(p_id        in number, --id

p_blob_data in blob,

p_msg       out varchar2) --数据

is

v_lobloc     blob; --目标blob

v_blob_data blob; --作为接受参数的字段,参数变量不能直接拿来赋值

v_amount     binary_integer; --总长度

v_sub_length binary_integer; --一次读取的最大长度,不超过32766

v_sub_blob   blob; --一次读取的子串

v_offset     binary_integer; --游标

v_err_msg    varchar2(1000);

v_id         binary_integer; --要修改或新增的记录ID

v_temp       binary_integer; --临时变量用于判断是否有v_id对应的记录begin

v_amount     := length(p_blob_data);

v_blob_data  := p_blob_data;

v_sub_length := 32767;

v_offset     := 1;

v_id         := p_id;

v_temp       := 0;  --execute immediate v_query_string into v_lobloc;

select count(1) into v_temp from a where id = v_id;  --查询是否有v_id对应的记录,并且赋值给v_te/注意:无论是修改还是新增,blob字段都需要用empty_blob()进行初始化,否则后边的blob内容,不能写进表里面。

介绍下Oracle Database gR 中的日志和日志的收集

为什么要收集Oracle日志?

很多时候 遇到问题联系Oracle support或者提交SR的时候 support总是会要求你收集好日志 有时候日志收集不齐全 来来回回几次 时间都浪费在沟通上了 另外即使自己在测试环境进行实验的时候也会遇到一些问题 在论坛提问或者招人帮忙的时候 为了把问题描述清楚 必要的日志也是十分有帮助的

有哪些日志需要收集?

随着Oracle Database gR 的发布 大量的feature引入 日志的种类和范畴也有了很大的增加 安装出错了 root sh出错了 建库失败了 a ca失败了 最大的改变是在 gR 中引入了各种各样的agent 资源的管理全部集成到了统一的agent framework中进行 这些包括启动 停止 检查 清除等等 agent因为资源的范畴和权限不同分为了crsd agent crsd root agent ohasd agent ohasd root agent 详细不多说 可以参考前面讲过的 gR 的后台进程 具体的这些agent如何控制和管理这些资源 以后在专题介绍

日志多不要紧 而且目录结构也比较分散 crs 的日志文件 dbca/dbua/netca/a ca这些文件 root sh日志文件 install的日志文件都是分部在不同地方的 所以就迫切需要一个好用的工具进行收集

日志收集工具diagcollection pl

既然日志收集这么迫切 又这么麻烦 那么有没有一款方便好用的收集工具呢? 答案是肯定的 在GI HOME/bin/目录下就有这么一个好用的脚本 diagcollection pl 脚本是用perl写成的 所以天生可移植 支持各种平台的日志收集(包括Windows) 工具的使用也相当的简单 如下是一个简单的帮助信息

sh # /diagcollection pl

Production Copyright Oracle   All rights reserved

Cluster Ready Services (CRS) diagnostic collection tool

diagcollection

–collect

[–crs] For collecting crs diag information

[–adr] For collecting diag information for ADR; specify ADR location

[–chmos] For collecting Cluster Health Monitor (OS) data

[–all] Default For collecting all diag information

[–core] UNIX only Package core files with CRS data

[–afterdate] UNIX only Collects archives from the specified date Specify in mm/dd/yyyy format

[–aftertime] Supported with adr option Collects archives after the specified time Specify in YYYYMMDDHHMISS format

[–beforetime] Supported with adr option Collects archives before the specified date Specify in YYYYMMDDHHMISS format

[–crshome] Argument that specifies the CRS Home location

[–incidenttime] Collects Cluster Health Monitor (OS) data from the specified time   Specify in MM/DD/YYYY HH:MM:SS format

If not specified Cluster Health Monitor (OS) data generated in the past hours are collected

[–incidentduration] Collects Cluster Health Monitor (OS) data for the duration after the specified time   Specify in HH:MM format

If not specified all Cluster Health Monitor (OS) data after incidenttime are collected

NOTE:

You can also do the following

/diagcollection pl –collect –crs –crshome <crs Home>

–clean        cleans up the diagnosability

information gathered by this script

–core yze  UNIX only Extracts information from core files

and stores it in a text file

sh #

</crs>

不要被大量的选项吓坏 其实主要的选项就是一个 –collect 另外清除收集的日志就是–clean

这实在是一款居家旅行 老少皆宜的工具 欢迎大家使用

为什么要介绍这个工具?

为什么想到突然要介绍这个工具呢 那是在目前版本中这个工具收集的日志范围有限 而我因为目前正在着手对这个工具进行改进 使之功能更加强大 收集的日志种类更多 也欢迎大家对这个工具提出更多建议 并关注后续消息

还有别的工具可以收集日志吗?

lishixinzhi/Article/program/Oracle/201311/17296

监听日志在$ORACLE_BASE/diag/tnslsnr/hostname/listener/trace目录下,文件名为listenerlog上面的hostname根据你的实际主机名而定

(1)常用命令 SQL> show parameter log_archive_dest; SQL> archive log list; SQL> select from V$FLASH_RECOVERY_AREA_USAGE; ARCHIVELOG 9662 0 141 SQL> select sum(percent_space_used)3/100 from v$flash_recovery_area_usage; 29904 SQL> show parameter recover; db_recovery_file_dest string /u01/oracle/flash_recovery_area db_recovery_file_dest_size big integer 2G。

(2)删除日志 cd $ORACLE_BASE/flash_recovery_area/orcl/archivelog 转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。

(3)rman target sys/password RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; 或者 RMAN> delete archivelog until time “sysdate-1″。

(4)再查 SQL> select from V$FLASH_RECOVERY_AREA_USAGE。

(5)修改大小 SQL> alter system set db_recovery_file_dest_size=4G scope=both。

您好,很高兴为您解答。

select from user_scheduler_job_log where job_name = 'NIFM_FILE_PRO_OTFCACTION71122' order by log_id desc;

select from user_scheduler_job_run_details where log_id = 1512482;

select job,what,failures,broken from user_jobs

job id,job 名称,失败次数,状态

所有的job:

select juname username, jobj#, joname, jfailure_count from

sysobj$ jo, sysuser$ ju, sysobj$ co, sysscheduler$_job j

where jobj# = joobj# AND joowner# = juuser# AND jclass_oid = coobj#(+) order by name;

在运行的job:

SELECT SID,JOB FROM DBA_JOBS_RUNNING;

如若满意,

首先,图中每个告警规则 Rule 都有一个 active queue(下面简称本地队列),用来保存一个告警规则下的活跃告警。

其次,从本地队列中取出告警,发送至 AlertManager 前,会被放入 Thanos Rule Queue(下面简称缓冲队列),该缓冲队列有两个属性:

capacity(默认值为 10000):控制缓冲队列的大小,

maxBatchSize(默认值为 100):控制单次发送到 AlertManager 的最大告警数

了解了上述过程,再通过翻阅 Ruler 源码发现,一条告警在放入缓冲队列前,会为其设置一个默认的自动解决时间(当前时间 + 3m),这里是影响告警自动解决的开始时间,在这以后,有两个阶段可能影响告警的处理:1 缓冲队列阶段2 出缓冲队列到 AlertManager 阶段(网络延迟影响)由于测试环境是局域网环境,并且也没在环境上发现网络相关的问题,我们初步排除第二个阶段的影响,下面我们将注意力放在缓冲队列上。通过相关源码发现,告警在缓冲队列中的处理过程大致如下:如果本地队列中存在一条告警,其上次发送之间距离现在超过了 1m(默认值,可修改),则将该告警放入缓冲队列,并从缓冲队列中推送最多 maxBatchSize 个告警发送至 AlertManager。反之,如果所有本地队列中的告警,在最近 1m 内都有发送过,那么就不会推送缓冲队列中的告警。也就是说,如果在一段时间内,产生了大量重复的告警,缓冲队列的推送频率会下降。队列的生产方太多,消费方太少,该队列中的告警就会产生堆积的现象。因此我们不难猜测,问题原因很可能是是缓冲队列推送频率变低的情况下,单次推送的告警数量太少,导致缓冲队列堆积。下面我们通过两个方面验证上述猜想:首先通过日志可以得到队列在大约 20000s 内推送了大约 2000 次,即平均 10s 推送一次。结合缓冲队列的具体属性,一条存在于队列中的告警大约需要 (capacity/maxBatchSize)10s = 16m,AlertManager 在接收到告警后早已超过了默认的自动解决时间(3m)。其次,Ruler 提供了 3 个 metric 的值来监控缓冲队列的运行情况:

thanos_alert_queue_alerts_dropped_total

thanos_alert_queue_alerts_pushed_total

thanos_alert_queue_alerts_popped_total

通过观察 thanos_alert_queue_alerts_dropped_total 的值,看到存在告警丢失的总数,也能佐证了缓冲队列在某些时刻存在已满的情况。

解决通过以上的分析,我们基本确定了问题的根源:Ruler 组件内置的缓冲队列堆积造成了告警发送的延迟。针对这个问题,我们选择调整队列的 maxBatchSize 值。下面介绍一下这个值如何设置的思路。由于每计算一次告警规则就会尝试推送一次缓冲队列,我们通过估计一个告警数量的最大值,得到 maxBatchSize 可以设置的最小值。假设你的业务系统需要监控的实体数量分别为 x1、x2、x3、、xn,实体上的告警规则数量分别有 y1、y2、y3、、yn,那么一次能产生的告警数量最多是(x1 y2 + x2 y2 + x3 y3 + + xn yn),最多推送(y1 + y2 + y3 + + yn)次,所以要使缓冲队列不堆积,maxBatchSize 应该满足:maxBatchSize >= (x1 y2 + x2 y2 + x3 y3 + + xn yn) / (y1 + y2 + y3 + + yn),假设 x = max(x1,x2, ,xn), 将不等式右边适当放大后为 x,即 maxBatchSize 的最小值为 x。也就是说,可以将 maxBatchSize 设置为系统中数量最大的那一类监控实体,对于 DMP 平台,一般来说是 MySQL 实例。

注意事项

上面的计算过程只是提供一个参考思路,如果最终计算出该值过大,很有可能对 AlertManager 造成压力,因而失去缓冲队列的作用,所以还是需要结合实际情况,具体分析。因为 DMP 将 Ruler 集成到了自己的组件中,所以可以比较方便地对这个值进行修改。如果是依照官方文档的介绍使用的 Ruler 组件,那么需要对源码文件进行定制化修改。

‍‍

记录系统日志,比如日志切换的记录,修改系统参数等系统事件。

位置在参数background_dump_dest指定的路径下,一般为: %ORACLE_BASE%\admin\%ORACLE_SID%\bdump

以上就是关于oracle怎么获取exception信息全部的内容,包括:oracle怎么获取exception信息、OracleDatabase11gR2日志收集工具、如何查看oracle数据库日志文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9395149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存