Oracle 实现对全局错误语句的审计监控 ORA- alert

news/2024/11/26 4:15:03/

--将所有数据库ora-错误写入表

create table error_tab (username varchar2(4000), d_current_nr_error varchar2(4000), ora_server_error_msg varchar2(4000), full_text varchar2(4000),errdate date);

create or replace trigger error_trigger

after servererror on database

declare

n number;

full_text varchar2(4000);

sql_text ora_name_list_t;

d_current_nr_error number := ora_server_error(1);

ora_server_error_msg varchar2(100);

date1 date;

begin

n := ora_sql_txt(sql_text);

ora_server_error_msg := SQLERRM(-d_current_nr_error);

FOR i IN 1 .. n LOOP

full_text := full_text || sql_text(i);

END LOOP;

insert into error_tab

values

(user, d_current_nr_error, ora_server_error_msg, full_text,sysdate);

end;

-----将指定的错误写入alert log

CREATE OR REPLACE TRIGGER logon_denied_to_alert

AFTER servererror ON DATABASE

DECLARE

message VARCHAR2(168);

ip VARCHAR2(15);

v_os_user VARCHAR2(80);

v_module VARCHAR2(50);

v_action VARCHAR2(50);

v_pid VARCHAR2(10);

v_sid NUMBER;

v_program VARCHAR2(48);

BEGIN

IF (ora_is_servererror(1722)) THEN

-- get ip FOR remote connections :

IF upper(sys_context('userenv', 'network_protocol')) = 'TCP' THEN

ip := sys_context('userenv', 'ip_address');

END IF;

SELECT sid INTO v_sid FROM sys.v_$mystat WHERE rownum < 2;

SELECT p.spid, v.program

INTO v_pid, v_program

FROM v$process p, v$session v

WHERE p.addr = v.paddr

AND v.sid = v_sid;

v_os_user := sys_context('userenv', 'os_user');

dbms_application_info.read_module(v_module, v_action);

message := to_char(SYSDATE, 'YYYYMMDD HH24MISS') ||

' logon denied from ' || nvl(ip, 'localhost') || ' ' ||

v_pid || ' ' || v_os_user || ' with ' || v_program || ' – ' ||

v_module || ' ' || v_action;

sys.dbms_system.ksdwrt(2, message);

END IF;

END;

一个sql查询语句报ORA-01722

要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。

比如如果要比较的话,同时都用to_number强制转换(to_number(字段a) = to_number(字段b)),

或者同时转换为字符串类型(字段a||'' = 字段b||'',都连接一个空字符串使之变成字符串类型)。

on d.loc = to_char(c.cid)

今天一个开发人员说一个很普通的sql语句提示ORA-01722:invalid number,该sql语句为

select to_number(paraid,'xxxxxxxxxx') paraid,sortid,dataid from scpparsereg;一个很简单的sql语句,开发人员说使用pl/sql显示全部记录时到第1000条时报这个错误,那证明前999条记录显示是正常的,整个sql语句就一个简单得不能再简单的sql语句,其中能出问题的就是使用了一个转换函数to_number,于是使用desc scpparsereg中显示表结构,发现paraid是个char(8)的数据类型,怀疑可能是字符不够自动补空格,然后在此情况下进行转换时报错,接着通过select distinct length(trim(paraid)) from scpparsereg

该sql语句得到了答案:

1* select distinct lengthb(trim(parseid)) from scpparsereg

idle> /

LENGTHB(TRIM(PARSEID))

----------------------

8

7

从以上结果就可以断定是由于空格转换成数字时发生该错误。


http://www.ppmy.cn/news/31433.html

相关文章

04从零开始学Java之可能是最详细的Java环境配置教程

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言在上一篇文章中&#xff0c;壹哥给大家重点讲解了Java实现跨平台的原理&#xff0c;不知道你现在有没有弄清楚呢&#xff1f;如…

ASP.NETCore学习资料

1.ASP.NETCore比ASP.NET更具优势的地方是什么&#xff1f; ASP.NET Core(ASP.NET Core 简介) ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET(ASP.NET 简介) ASP.NET 是一个成熟的框架&#xff0c;提…

react+antdpro+ts实现企业级项目四:注册页面实现及useEmotionCss的介绍

创建文件路径并注册register路由 在pages/User下创建Register文件夹并创建index.tsx文件 然后在config/routes创建register注册路由。注册完后&#xff0c;当在登陆页面点击注册按钮时就可以跳转到此注册页面而不会报404了。 export default [{path: /user,layout: false,rou…

【Java】SpringBoot中实现异步编程

前言 首先我们来看看在Spring中为什么要使用异步编程&#xff0c;它能解决什么问题&#xff1f; 什么是异步&#xff1f; 首先我们先来看看一个同步的用户注册例子&#xff0c;流程如下&#xff1a; 异步的方式如下&#xff1a; 在用户注册后将成功结果返回&#xff0c;…

[学习笔记] 3. 算法进阶

算法进阶视频地址&#xff1a;https://www.bilibili.com/video/BV1uA411N7c5 1. 贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;&#xff0c;是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑 —— 所做…

学生信息管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第6章-课后作业)

实例2&#xff1a;学生信息管理系统 学生信息管理系统是用于管理学生信息的管理软件&#xff0c;它具备学生信息的查找、修改、增加和删除功能&#xff0c;利用该系统可实现学生信息管理的电子化&#xff0c;提高信息管理效率。 本实例要求编写程序&#xff0c;实现学生信息管…

嵌入式学习笔记——使用寄存器编程实现按键输入功能

文章目录前言模块介绍原理图编程思路检测IO口的电平前言 昨天&#xff0c;通过配置通用输出模式&#xff0c;实现了LED灯的点亮、熄灭以及流水等操作&#xff0c;解决了通用输出的问题&#xff0c;今天我们再借用最常见的输入模块&#xff0c;按键来实现一个按键控制LED的功能…

【Linux】安装MariaDB Community Server最佳实践

写作背景&#xff1a;记一次从MySQL平台迁移到MariaDB的测试环境准备 文章目录安装YUM (CentOS, RHEL)APT (Debian, Ubuntu)ZYpp (SLES)启动配置测试本机登录远程登录在主流Linux上安装MariaDB Community Server&#xff0c;官方当前&#xff08;2023年3月10日&#xff09;最新…