Oracle记录运维人员的操作
在日常的工作过程中,需要记录运维人员的所有数据库修改操作,
可以建立行级的的触发器来完成。
select *from lsb_aa1 select *from lsb_bb1; update lsb_aa1 set ye=7000; delete from lsb_aa1 where id=1 create table lsb_aa1 (id number(20), ye number(12,2)); create table lsb_bb1 (id number(20), ye number(12,2)); insert into lsb_aa1 (id,ye) values(1,5000); insert into lsb_aa1 (id,ye) values(2,6000); create or replace trigger table_aud after insert or delete or update on lsb_aa1 FOR EACH ROW declare begin if UPDATING ('ye') then insert into lsb_bb1 (id,ye) values(:new.id,:new.ye); end if; if INSERTING then insert into lsb_bb1 (id,ye) values(:new.id,:new.ye); end if; if DELETING then insert into lsb_bb1 (id,ye) values(:old.id,:old.ye); end if; end;
但如果这里所需要监视的表是业务表,在日常业务运营过程中会有大量的数据插入和修改,
这些记录都应该认为是正常的业务数据,我们真正需要记录的是【运维人员做的DML语句】
那么怎么做呢,最重要的一个摆了出来
问题:对于众多的数据操作,怎样从数据库中区分修改来自A、程序操作数据库 B、PL/SQL或者其他数据库工具操作数据库
问题还没解决,步骤中可能用到的sql记录在这里
--查看全部session中SQL: select substr(s.username,1,18) username, s.sid,s.serial#,s.machine,y.sql_text from v$session s,v$process p,v$transaction t,v$rollstat r,v$rollname n,v$sql y where s.paddr = p.addr and s.taddr = t.addr (+) and t.xidusn = r.usn (+) and r.usn = n.usn (+) and s.username is not null and s.sql_address=y.address --and s.sid=56 order by s.sid,s.serial#,s.username,s.status
--最重要的是后边的两个字段 select SYS_CONTEXT('USERENV','TERMINAL') terminal, SYS_CONTEXT('USERENV','LANGUAGE') language, SYS_CONTEXT('USERENV','SESSIONID') sessionid, SYS_CONTEXT('USERENV','INSTANCE') instance, SYS_CONTEXT('USERENV','ENTRYID') entryid, SYS_CONTEXT('USERENV','ISDBA') isdba, SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory, SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency, SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar, SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format, SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language, SYS_CONTEXT('USERENV','NLS_SORT') nls_sort, SYS_CONTEXT('USERENV','CURRENT_USER') current_user, SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid, SYS_CONTEXT('USERENV','SESSION_USER') session_user, SYS_CONTEXT('USERENV','SESSION_USERID') session_userid, SYS_CONTEXT('USERENV','PROXY_USER') proxy_user, SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid, SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain, SYS_CONTEXT('USERENV','DB_NAME') db_name, SYS_CONTEXT('USERENV','HOST') host, SYS_CONTEXT('USERENV','OS_USER') os_user, SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name, SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address, SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol, SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type, SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data, SYS_CONTEXT('USERENV','CURRENT_SQL') current_sql, SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER') client_identifier, SYS_CONTEXT('USERENV','GLOBAL_CONTEXT_MEMORY'), --最重要的是后边的两个字段 SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id, SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id from dual
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人