深入分析Oracle数据库日志文件(2)

深入分析Oracle数据库日志文件(2),第1张

四 如何利用LogMiner分析Oracle 的日志文件 虽然说LogMiner是Oracle i才推出来 但我们同样可以用它来分析Oracle 的日志文件 只不过稍微麻烦了一点 并且有一定的限制 下面是具体做法 我们首先复制Oracle i的$ORACLE_HOME/rdbms/admin/dbmslmd sql脚本到Oracle 数据库所在主机的同样目录 这个脚本用于创建dbms_logmnr_d包(注意 Oracle i中还将创建dbms_logmnr包) 如果是 脚本名字为dbmslogmnrd sql 然后在Oracle 的数据库上运行这个脚本 之后使用dbms_logmnr_d build过程创建字典信息文件 现在我们就可以把Oracle 的归档日志连同这个字典信息文件复制到Oracle i数据库所在的主机上 之后在Oracle i数据库中从上面分析过程的第三步开始分析Oracle 的日志 不过 dbms_logmnr start_logmnr()中使用的是Oracle 的字典信息文件 按照我前面所说的那样 如果不是字典文件 我们则可以直接将Oracle 的归档日志复制到Oracle i数据库所在主机 然后对它进行分析 其实这里涉及到了一个跨平台使用LogMiner的问题 笔者做过试验 也可以在Oracle i中来分析Oracle i的日志 但这些都是有所限制的 主要表现在 LogMiner所使用的字典文件必须和所分析的日志文件是同一个数据库所产生的 并且该数据库的字符集应和执行LogMiner数据库的相同 这很好理解 如果不是同一个数据库所产生就不存在对应关系了 生成日志的数据库硬件平台和执行LogMiner数据库的硬件平台要求一致 *** 作系统版本可以不一致 笔者做试验时(如果读者有兴趣可以到我网站上下载试验全过程 因为太长就不放在这里了) 所用的两个数据库 *** 作系统都是Tru UNIX 但一个是 V A 另一个则是V F 如果 *** 作系统不一致则会出现下面的错误 ORA : file /data /cyx/logmnr/arch_ _ arc cannot be openedORA : cannot open archived log /data /cyx/logmnr/arch_ _ arc ORA : skgfifi: file header information is invalidORA : at SYS DBMS_LOGMNR line ORA : at line 五 分析v$logmnr_contents 前面我们已经知道了LogMiner的分析结果是放在v$logmnr_contents中 这里面有很多信息 我们可以根据需要追踪我们感兴趣的信息 那么我们通常感兴趣的有哪些呢? 追踪数据库结构变化情况 即DDL *** 作 如前所述 这个只有Oracle i才支持 SQL> select timestamp sql_redo from v$logmnr_contents where upper(sql_redo) like %CREATE% ;TIMESTAMP SQL_REDO : : create table t (c number); 追踪用户误 *** 作或恶意 *** 作 例如我们现实中有这样需求 有一次我们发现一位员工通过程序修改了业务数据库信息 把部分电话的收费类型改成免费了 现在就要求我们从数据库中查出到底是谁干的这件事?怎么查?LogMiner提供了我们分析日志文件的手段 其中v$logmnr_contents的SESSION_INFO列包含了下面的信息 login_username=NEW_ client_info= OS_username=oracle Machine_name=phoenix OS_terminal=ttyp OS_process_id= OS_program name=sqlplus@phoenix (TNS V V ) 虽然其中信息已经很多了 但在我们的业务数据库中 程序是通过相同的login_username登录数据库的 这样单从上面的信息是很难判断的 不过我们注意到 因为公司应用服务器不是每个人都有权限在上面写程序的 一般恶意程序都是直接通过他自己的PC连到数据库的 这就需要一个准确的定位 IP追踪是我们首先想到的 并且也满足我们的实际要求 因为公司内部IP地址分配是统一管理的 能追踪到IP地址我们就可以准确定位了 但从面的SESSION_INFO中我们并不能直接看到IP 不过我们还是有办法的 因为这个SESSION_INFO里面的内容其实是日志从V$SESSION视图里提取的 我们可以在生产数据库中创建一个追踪客户端IP地址的触发器 create or replace trigger on_logon_triggerafter logon on databasebegin dbms_application_info set_client_info(sys_context( userenv ip_address ));end;/现在 我们就可以在V$SESSION视图的CLIENT_INFO列中看到新登录的客户端IP地址了 那么上面的提出的问题就可以迎刃而解了 假如被更新的表名为HMLX 我们就可以通过下面的SQL来找到所需信息 SQL > select session_info sql_redo from v$logmnr_contents where upper(operation) = UPDATEand upper(sql_redo) like %HMLX% /SESSION_INFO SQL_REDO login_username=C client_info= OS_username=sz xjs chengyx Machine_name=GDTEL\SZ XJS CHENGYXupdate C HMLX set NAME = free where NAME = and ROWID = AAABhTAAFAAABRaAAE ; lishixinzhi/Article/program/Oracle/201311/17810

1,默认情况下,oracle的日志文件记录在$ORACLE/rdbms/log目录下

[plain] view plaincopy

[oracle@oracle log]$ pwd

/home/oracle/oracle/product/1020/db_1/rdbms/log

日志文件为(alert_<ORACLE_SID>log):

[plain] view plaincopy

[oracle@oracle log]$ ll

总计 848

-rw-rw-r-- 1 aaa aaa 962 06-20 15:57 alert_TESTDBlog

2,如果不是在默认位置,则可通过sql查询日志文件位置:

[plain] view plaincopy

SQL> show parameter dump_dest

NAME TYPE

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

VALUE

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

background_dump_dest string

/home/oracle/oracle/admin/TESTDB/bdump

core_dump_dest string

/home/oracle/oracle/admin/TESTDB/cdump

user_dump_dest string

/home/oracle/oracle/admin/TESTDB/udump

其中background_dump_dest的value值即为日志文件存放位置

是的,数据库可以查看日志。数据库会记录所有对其进行的 *** 作和事件,这些记录被称为“日志”。数据库日志可以用于多种用途,例如:

恢复:如果数据库崩溃或发生其他问题,可以使用日志来还原数据库到崩溃前的状态。

故障排除:日志可以帮助确定发生故障的原因。如果数据库中的某些 *** 作失败了,可以查看日志以了解是哪个 *** 作出了问题。

安全审计:日志可以记录数据库中的所有活动,包括登录尝试、查询和更新 *** 作等。这些记录可以用于安全审计和法律合规性。

在大多数数据库系统中,可以使用特定的命令或工具来查看日志文件。例如,在MySQL中,可以使用“SHOW BINARY LOGS”命令来查看二进制日志文件。

管理数据库主要做好以下3方面的内容:

一、数据库定期备份

首先利用数据库自带的命令行工具将数据库备份下来,然后将该文件以日期参量重命名。

数据库定期备份的原因:

1)、有些数据是随时变化的,备份可以记录某时间点的数据;

2)、如数据库故障,可以随时还原。

二、数据库优化

1)、进行sql语句的执行优化;

2)、减少应用和数据库的交互次数、同一个sql语句的执行次数;

3)、整理数据库实体的碎片(特别是对某些表经常进行insert和delete动作,尤其注意,索引字段为系列字段、自增长字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次);

4)、减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力(java处理批量数据不可取,尽量用c或者c++ 进行处理,效率大大提升);

5)、对访问频繁的数据,充分利用数据库cache和应用的缓存;

6)、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。

三、数据库日志文件管理

1、查看数据库中日志文件;

默认是三个组,这是数据库创建时自己添加的三个日志文件组;

2、添加日志文件组并添加成员。

以上就是关于深入分析Oracle数据库日志文件(2)全部的内容,包括:深入分析Oracle数据库日志文件(2)、oracle数据库日志文件在哪、数据库能查看日志吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9371981.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存