You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Linux grep/AWK过滤Oracle迁移日志,保留指定错误及失败SQL块

Oracle迁移日志筛选:提取指定错误及SQL块

方法1:使用grep快速匹配单行内容

如果目标错误和SQL块都是单行格式,直接用扩展正则匹配两种目标模式,同时可按需排除已知错误:

仅提取目标内容

grep -E 'ORA-123|Failing sql:.*CONVERSION \(".*_OWNER"\."[^"]+" & .*_OWNER\)' 你的日志文件名.log > 筛选结果文件名.log

排除已知错误后提取

若需先排除其他已知错误(比如ORA-456、ORA-789),可叠加-v参数实现反向过滤:

grep -vE 'ORA-456|ORA-789' 你的日志文件名.log | grep -E 'ORA-123|Failing sql:.*CONVERSION \(".*_OWNER"\."[^"]+" & .*_OWNER\)' > 筛选结果文件名.log

参数说明:

  • -E:启用扩展正则表达式,支持用|分隔多个匹配模式
  • -v:反向匹配,排除符合指定模式的行
  • 正则中的\(、\)、\"是对特殊字符的转义,确保精准匹配日志中的原格式

方法2:使用AWK处理多行SQL块

如果失败SQL块是多行内容(比如Failing sql:开头后,后续行包含完整SQL细节),AWK能更灵活地捕获上下文内容:

awk '
# 匹配ORA-123错误,直接打印该行
/ORA-123/ {print; next}
# 匹配目标格式的失败SQL块起始行
/Failing sql:.*CONVERSION \(".*_OWNER"\."[^"]+" & .*_OWNER\)/ {
    print $0
    # 捕获后续行,直到遇到空行(可根据实际日志调整结束条件,比如/^END SQL$/)
    while (getline > 0) {
        print $0
        if ($0 ~ /^$/) break
    }
}
' 你的日志文件名.log > 筛选结果文件名.log

脚本说明:

  • 第一分支直接匹配并打印ORA-123错误行
  • 第二分支匹配目标SQL块的起始行后,循环读取并打印后续行,直到触发结束条件(示例为空行),可根据实际日志的SQL块结束标记修改判断逻辑

内容的提问来源于stack exchange,提问作者Damon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:01:11