第二个灵魂 发表于 2015-1-16 22:48:52

MYSQL编程:浅谈LogMiner的利用

MySQL部署迅速,因此移植过程不会导致生产中断。而且,较短的学习曲线可以让你的系统管理员迅速掌握它的运行和维护。而且,MySQL的易于维护和管理意味着目前的职员可以处理目前的工作。
Logminer是每一个Dba都应熟习的工具,当一天因为用户的误操纵你必要做不完整的恢复时,因为你没法断定这个操纵是哪一个工夫做的,以是这对你的恢复就带来的很年夜的难度,丧失的数据也不克不及完整恢复返来。而LogMiner就能够帮你断定这个误操纵的正确工夫。

我的测试情况是Aix4.3.3的操纵体系,Oracle9.2.0.3的测试库。

1、LogMiner的几点申明
1、LogMiner能够帮你断定在某段工夫所发的各类DML,DDL操纵的详细工夫和SCN号,它所根据的是回档日记文件及联机日记文件。
2、它只能在Oracle8i及今后的版本中利用,不外它能够剖析Oracle8的日记。
3、Oracle8i只能用于剖析DML操纵,到Oracle9i则能够剖析DDL操纵了。
4、LogMiner不撑持索引构造表、Long、LOB及汇合范例。
5、MTS的情况也不克不及利用LogMiner.

2、操纵步骤
1、设定用于LogMiner剖析的数据文件寄存的地位
这是设定utl_file_dir参数的历程,我的示例:
a、在initctc.ora文件中到场以下一行
utl_file_dir=/u01/arch
b、得启数据库
oracle>sqlplus/nolog
sql>conn/assysdba
sql>shutdownimmediate
sql>statup

2、天生数据字典文件,是经由过程dbms_logmnr_d.build()来完成。
SQL>BEGIN
2dbms_logmnr_d.build(
3dictionary_filename=>logminer_dict.dat,
4dictionary_location=>/u01/arch
5);
6END;
7/

dictionary_location指的是Logminer数据字典文件寄存的地位,它必需婚配utl_file_dir的设定。
个中的dictionary_filename指的是放于寄存地位的字典文件的名字,名字能够恣意取。

3、创建一个日记剖析表
a、创建日记剖析表数据库必需在mount或nomount形态,启动数据库到mount形态。
sqlplus/nolog
sql>conn/assysdba
sql>shutdownimmediate
sql>starupmount

b、创建日记剖析表,利用dbms_logmnr.add_logfile()
SQL>BEGIN
2dbms_logmnr.add_logfile(
3options=>dbms_logmnr.new,
4logfilename=>/u01/arch/arc_ctc_0503.arc
5);
6END;
7/
个中的options有三种取值,dbms_logmnr.new用于建一个日记剖析表;dbms_logmnr.addfile用于到场用于剖析的的日记文件;dbms_logmnr.removefile用于移出用于剖析的日记文件。


4、增加用于剖析的日记文件。
SQL>BEGIN
2dbms_logmnr.add_logfile(
3options=>dbms_logmnr.addfile,
4logfilename=>/u01/arch/arc_ctc_0504.arc
5);
6END;
7/

利用则能够把这个文件从日记剖析表中移除,从而不举行剖析。
SQL>BEGIN
2dbms_logmnr.add_logfile(
3options=>dbms_logmnr.removefile,
4logfilename=>/u01/arch/arc_ctc_0503.arc
5);
6END;
7/


5、启动LogMiner举行剖析。
SQL>BEGIN
2dbms_logmnr.start_logmnr(
3dictfilename=>/u01/arch/logminer_dict.dat,
4starttime=>to_date(2003050112:15:00,yyyymmddhh24:mi:ss),
5endtime=>to_date(2003050115:40:30,yyyymmddhh24:mi:ss)
6);
7END;
8/

即剖析2003年5月1日是日12:15至15:40这段工夫,并把剖析了局放到数据字典中以用于查询。另有两个参数StartScn(肇端scn号)及EndScn(停止Scn)号。

6、检察日记剖析的了局,经由过程查询v$logmnr_contents能够查询到
a、检察DML操纵,示例:
SELECToperation,
sql_redo,
sql_undo,
FROMV$logmnr_contents
WHEREseg_name=QIUYB;

OPERATIONSQL_REDOSQL_UNDO
--------------------------------------------------------------
INSERTinserintoqiuyb.qiuyb...deletefromqiuyb.qiuyb...

个中operation指的是操纵,sql_redo指的是实践的操纵,sql_undo指的是用于作废的相反的操纵。

b、检察DDL操纵,示例:
SELECTtimstamp,
sql_redo
FROMv$logmnr_contents
WHEREupper(sql_redo)like%TRUNCATE%;

7、停止LogMiner的剖析。
SQL>BEGIN
2dbms_logmnr.end_logmnr;
3end;
4/

3、与LogMiner相干的数据字典。
1、v$loglist它用于显现汗青日记文件的一些信息
2、v$logmnr_dictionary因logmnr能够有多个字典文件,该视图用于显现这方面信息。
3、v$logmnr_parameters它用于显现logmnr的参数
4、v$logmnr_logs它用于显现用于剖析的日记列表信息。

(全文完)
解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。

乐观 发表于 2015-1-20 05:03:10

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

老尸 发表于 2015-1-25 16:52:41

SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)

莫相离 发表于 2015-2-3 11:19:24

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。

小妖女 发表于 2015-2-8 20:15:56

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

只想知道 发表于 2015-2-26 03:30:26

大家注意一点。如下面的例子:

再见西城 发表于 2015-3-8 11:41:19

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

兰色精灵 发表于 2015-3-15 22:25:35

同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。

透明 发表于 2015-3-22 17:09:30

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
页: [1]
查看完整版本: MYSQL编程:浅谈LogMiner的利用