sql - Oracle 中 2 个 varchar 列(来自不同表)之间的正则表达式比较
问题描述
我正在尝试找到一种从 oracle alertlog 中捕获相关错误的方法。我有一张表(ORA_BLACKLIST),其列值如下(这些是我想从 V$DIAG_ALERT_EXT 中忽略的值)
下面是 ORA_BLACKLIST 表中的示例数据。此表可以根据要从警报日志中忽略的其他错误而增长。
ORA-07445%[kkqctdrvJPPD
ORA-07445%[kxsPurgeCursor
ORA-01013%
ORA-27037%
ORA-01110
ORA-2154
V$DIAG_ALERT_EXT 包含一个 MESSAGE_TEXT 列,其中包含如下示例文本。
ORA-01013: user requested cancel of current operation
ORA-07445: exception encountered: core dump [kxtogboh()+22] [SIGSEGV] [ADDR:0x87] [PC:0x12292A56]
ORA-07445: exception encountered: core dump [java_util_HashMap__get()] [SIGSEGV]
ORA-00600: internal error code arguments: [qercoRopRowsets:anumrows]
我想写一个类似下面的查询来忽略黑名单错误,只捕获下面的相关信息。
select dae.instance_id, dae.container_name, err_count, dae.message_level from ORA_BLACKLIST ob, V$DIAG_ALERT_EXT dae where group by .....;
有人可以建议一种方法或示例代码来实现它吗?
我应该提供黑名单表的确切内容。它目前包含一些正则表达式(perl),我想将它转换为像正则表达式一样的 oracle 并与 v$diag_alert_ext message_text 列进行比较。下面是我的黑名单表中的示例 perl 正则表达式。
ORA-0(,|$| ) ORA-48913 ORA-00060 ORA-609(,|$| ) ORA-65011 ORA-65020 ORA-31(,|$| ) ORA-7452 ORA-959(,|$| ) ORA-3136(,|)|$| ) ORA-07445。[kkqctdrvJPPD ORA-07445。[kxsPurgeCursor –</p>
解决方案
您的blacklist
表格看起来像like
模式,而不是正则表达式。
您可以编写如下查询:
select dae.* -- or whatever columns you want
from V$DIAG_ALERT_EXT dae
where not exists (select 1
from ORA_BLACKLIST ob
where dae.message_text like ob.<column name>
);
如果表很大,这将不会有特别好的性能。
推荐阅读
- amazon-web-services - AWS lightail wordpress 多站点静态 IP 不起作用
- python - 如何防止我新创建的 conda 环境包含从 conda 默认环境的 `pip` 继承的 pip 包?
- java - Android:从 Activity 外部的标准 java 类更改 textView
- c# - 为什么 Google Firestore C# SDK 在第一次编写时速度非常慢?
- java - 如何访问 Spring 托管类中的 keyvault 属性?
- pytest - pytest-dependency 在我的测试中不起作用
- php - 不支持的操作数类型:Laravel 中的 string / int
- python - 为什么 log.plaintext 在 Python 中响应较晚?
- python - Python曲线拟合优化使用相对偏差而不是绝对偏差
- python - 为什么python请求默认不使用系统ssl证书?