[20241230]21c HIST_HEAD$ UNIFIED AUDIT.txt --//看标题有点奇怪,生产系统19c遇到的问题,在我的测试环境21c也存在,就是访问ALL_TAB_COLS,ALL_TAB_COLUMNS视图时会访问 --//HIST_HEAD$表,会触发审计记录相关信息,有点奇怪,做一个记录并分析。 1.环境: SYS@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.问题提出: --//首先问题的发现有点偶然,我检查生产系统发现sys.aud$存在大量记录,文件已经达到342M。按照道理12c开始使用UNIFIED AUDIT, --//sys.aud$就算有记录,应该也很少信息。 SYS@book01p> SELECT * FROM V$OPTION WHERE PARAMETER = 'Unified Auditing'; PARAMETER VALUE CON_ID ---------------- ----- ------ Unified Auditing FALSE 0 --//难道没有启用吗?但是确实有记录在AUDSYS.AUD$UNIFIED在表中.先不管这个问题.问题先集中在sys.aud$. --//我看了生产环境与19c的情况一样。 SYS@book01p> select obj$name,count(*) from sys.aud$ group by obj$name ; OBJ$NAME COUNT(*) ------------------------------ ---------- SCOTT 12 HIST_HEAD$ 79 --//注:我的测试环境使用较少,出现HIST_HEAD$的次数也很少(生产系统大部分都是该信息)。 --//我看了生产系统的AUDSYS.AUD$UNIFIED,我发现出现问题集中在1台机器,应该是开发使用的,program执行的是DBeaver的相关程序。 --//网上检索发现DBeaver,软件简介如下: --//DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, --//Derby, 以及其他兼容 JDBC 的数据库。 --//DBeaver 提供一个图形界面用来查看数据库结构、执行 SQL 查询和脚本,浏览和导出数据,处理 BLOB/CLOB 数据,修改数据库结构 --//等等。 --//使用它大量的涉及ALL_TAB_COLS视图的访问,导致审计记录许多信息。 SYS@book01p> select sql_text ,sql_binds c30 from AUDSYS.AUD$UNIFIED where obj_name='HIST_HEAD$' and rownum=1; SQL_TEXT C30 ------------------------------------------------------------ ------------------------------ SELECT COLUMN_NAME, DATA_TYPE, NUM_DISTINCT, DENSITY, NUM_NU #1(4):DEPT #2(5):SCOTT LLS, NUM_BUCKETS, LAST_ANALYZED, AVG_COL_LEN, RAWTOHEX(LOW_V ALUE) LOW, RAWTOHEX(HIGH_VALUE) FROM ALL_TAB_COLUMNS WHERE T ABLE_NAME = :B2 AND OWNER = :B1 --//基本都是类似的语句。也就是如果开发访问ALL_TAB_COLUMNS,ALL_TAB_COLS视图涉及HIST_HEAD$表就会触发审计记录相关信息。 --//在我的测试环境也是类似的情况,例子: --//在cdb层面查询: SYS@book> select * from CDB_OBJ_AUDIT_OPTS where object_name='HIST_HEAD$'; no rows selected --//并没有审计HIST_HEAD$表,为什么出现这样的情况。 SYS@book01p> select * from hist_head$ where rownum=1; select * from hist_head$ where rownum=1 * ERROR at line 1: ORA-01031: insufficient privileges --//以前遇到类似问题。 SYS@book01p> select obj# from hist_head$ where rownum=1; OBJ# ---------- 4 SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate); SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT -------------- ------------------- ----------------------------- --------------------------------------- 4039442264 2024-12-30 17:59:14 2024-12-30 09:41:47.801199 select * from hist_head$ where rownum=1 4039442264 2024-12-30 17:59:14 2024-12-30 09:41:58.583453 select * from hist_head$ where rownum=1 --//EVENT_TIMESTAMP记录的UTC时钟。 --//视乎很奇怪该session仅仅记录2次,改写成select count(*) from hist_head$;并没有记录,到这里突然反应过来,执行报错审计才 --//有记录。 --//参考[20240826]奇怪ORA-01031 insufficient privileges报错.txt,当时的测试如下: select OBJ# ,COL# ,BUCKET_CNT ,ROW_CNT ,CACHE_CNT ,NULL_CNT ,TIMESTAMP# ,SAMPLE_SIZE --,MINIMUM --,MAXIMUM ,DISTCNT --,LOWVAL --,HIVAL ,DENSITY ,INTCOL# ,SPARE1 ,SPARE2 ,AVGCLN ,SPARE3 ,SPARE4 ,MINIMUM_ENC ,MAXIMUM_ENC from hist_head$ ; --//当时的测试确定只要不包括这4个字段,查询不存在问题,涉及MINIMUM,MAXIMUM,LOWVAL,HIVAL就会报错。 SELECT COLUMN_NAME ,DATA_TYPE ,NUM_DISTINCT ,DENSITY ,NUM_NULLS ,NUM_BUCKETS ,LAST_ANALYZED ,AVG_COL_LEN ,RAWTOHEX (LOW_VALUE) LOW ,RAWTOHEX (HIGH_VALUE) FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'; --//执行成功,输出略。 SELECT COLUMN_NAME,LOW_VALUE from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'; SYS@book01p> SELECT COLUMN_NAME,LOW_VALUE c30 from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT'; COLUMN_NAME C30 ------------------------------ ------------------------------ DEPTNO C10B DNAME 4143434F554E54494E47 LOC 424F53544F4E --//执行是成功的,但是实际上在访问hist_head$有问题,显示不出来!! SELECT COLUMN_NAME from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT' ~~~~~~~~~~ SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24; SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT -------------- ------------------- ----------------------------- ------------------------------------------------------------ 4039442264 2024-12-30 18:33:35 2024-12-30 09:41:47.801199 select * from hist_head$ where rownum=1 4039442264 2024-12-30 18:33:35 2024-12-30 09:41:58.583453 select * from hist_head$ where rownum=1 1494506491 2024-12-30 18:33:35 2024-12-30 10:12:37.135743 select * from hist_head$ where rownum=1 1622741797 2024-12-30 18:33:35 2024-12-30 10:23:26.431348 SELECT COLUMN_NAME ,DATA_TYPE ,NUM_DISTINCT ,DENSITY ,NUM_NULLS ,NUM_BUCKETS ,LAST_ANALYZED ,AVG_COL_LEN ,RAWTOHEX (LOW_VALUE) LOW ,RAWTOHEX (HIGH_VALUE) FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT' 4143611800 2024-12-30 18:33:35 2024-12-30 10:33:18.828871 SELECT COLUMN_NAME,LOW_VALUE from ALL_TAB_COLUMNS WHERE TAB LE_NAME = 'DEPT' AND OWNER = 'SCOTT' 4143611800 2024-12-30 18:33:35 2024-12-30 10:33:31.099445 SELECT COLUMN_NAME,LOW_VALUE c30 from ALL_TAB_COLUMNS WHERE TABLE_NAME = 'DEPT' AND OWNER = 'SCOTT' --//下划线的语句没有记录,没有访问涉及的相关4个字段。 --//hist_head$只要涉及MINIMUM,MAXIMUM,LOWVAL,HIVAL4个字段,审计就会有记录。 --//相关视图最终访问的是视图all_tab_cols_v$,该视图存在如下内容: ... ,CASE WHEN SYS_OP_DV_CHECK ( o.name ,o.owner#) = 1 THEN h.lowval ELSE NULL END ,CASE WHEN SYS_OP_DV_CHECK ( o.name ,o.owner#) = 1 THEN h.hival ELSE NULL END --//继续昨天的测试: SYS@book01p> select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum<=1; LOW_VALUE HIGH_VALUE ---------- ---------- C105 C3084527 --//执行并不报错,但是审计有记录: SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24; SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT -------------- ------------------- ----------------------------- ------------------------------------------------------------ 296253975 2024-12-31 08:48:54 2024-12-31 00:47:56.708845 select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum<=1 SYS@book01p> select owner,table_name,COLUMN_NAME,DENSITY from all_tab_cols_v$ where rownum<=1; OWNER TABLE_NAME COLUMN_NAME DENSITY ------------------------------ ------------------------------ ------------------------------ ---------- SYS TAB$ TAB# .058823529 SYS@book01p> select sessionid,sysdate,event_timestamp,sql_text from AUDSYS.AUD$UNIFIED where event_timestamp>=trunc(sysdate)-8/24; SESSIONID SYSDATE EVENT_TIMESTAMP SQL_TEXT -------------- ------------------- ----------------------------- ------------------------------------------------------------ 296253975 2024-12-31 08:48:54 2024-12-31 00:47:56.708845 select LOW_VALUE,HIGH_VALUE from all_tab_cols_v$ where rownum<=1 --//只要不涉及hist_head$基表的LOWVAL,HIVAL字段的相关视图,查询审计没有记录。 SYS@book01p> select user# from user$ where name='SYS'; USER# ---------- 0 --//执行如下: select h.obj# ,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.obj# else null end n10 --,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.lowval ELSE NULL END low --,CASE WHEN SYS_OP_DV_CHECK ( 'TAB$' ,0) = 1 THEN h.hival ELSE NULL END high from hist_head$ h where rownum=1; --//只要打开注解就报ORA-01031: insufficient privileges错,结果不再贴出。 3.小结: --//总之找到问题的出处,但是不知道如何产生,为什么出现这样的现象。实际上只要19c,21c的版本,查询审计都应该发现我遇到的情况。 --//也就是审计会记录OBJ$NAME=hist_head$的相关信息,除非不访问相关hist_head$的相关视图.
[20241230]21c HIST_HEAD$ UNIFIED AUDIT.txt
来源:这里教程网
时间:2026-03-03 21:11:31
作者:
编辑推荐:
- [20241230]21c HIST_HEAD$ UNIFIED AUDIT.txt03-03
- 湖南家具年终盛宴,清样狂欢火热开启中03-03
- 一文了解Oracle数据库如何连接(1)03-03
- 年终清样:品质家具盛宴,风格多样任你选03-03
- 一个数据库进程到底会消耗多少内存?03-03
- 治愈系奶油风,你只差一个泡芙沙发03-03
- 布达佩斯沙发,打造潮流家居的不二之选03-03
- 区块链开发工程师和人工智能算法工程师,哪个会在未来5年收入更高03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 没想到Oracle 8i 到19c 还有这个缺陷
没想到Oracle 8i 到19c 还有这个缺陷
26-03-03 - 数据库管理-第273期 Oracle Enterprise Manager 24ai保姆级部署手册(20241220)
- 一文了解Oracle数据库如何连接(1)
一文了解Oracle数据库如何连接(1)
26-03-03 - 一个数据库进程到底会消耗多少内存?
一个数据库进程到底会消耗多少内存?
26-03-03 - 泰坦军团 KG227S PLUS 显示器开启新品预约:27 英寸 2K 275Hz FastIPS 面板,1110 元
- ora-00600 [qosdExpStatRead: expcnt mismatch]处理
- 记一次rac故障原因分析(虚拟化平台)
记一次rac故障原因分析(虚拟化平台)
26-03-03 - Oracle 19C ADG 备库 TEMP 临时表空间,报ORA-01157,ORA-01110 错误
- 一文了解Oracle数据库如何连接(2)
一文了解Oracle数据库如何连接(2)
26-03-03 - 数据库响应缓慢问题排查
数据库响应缓慢问题排查
26-03-03
