[20141208]使用logminer看远程归档文件.txt

[20141208]使用logminer看远程归档文件.txt

--如果要在本机看其他主机的归档或者日志文件,由于dbid不一样,是无法查看的.必须要包括字典信息.
--如果需要查看别的数据库的归档文件,必须要有别的数据字典文件。正常需要使用utl_file_dir,而经常这个参数没有设置。
--在使用如下命令建立数据字典。

exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle11g/testd/dict_test.ora');

--如果没有建立参数utl_file_dir:

SYS@test> show parameter utl_file_dir

NAME           TYPE     VALUE
-------------- -------- --------------------
utl_file_dir   string

SYS@test> exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle11g/testd/dict_test.ora');
BEGIN dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle11g/testd/dict_test.ora'); END;

*
ERROR at line 1:
ORA-01292: no log file has been specified for the current LogMiner session
ORA-06512: at "SYS.DBMS_LOGMNR", line 58
ORA-06512: at line 1

--实际上可以使用EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);前提是建立附加日志。
--就可以把字典放在日志文件中。把归档以及日志在拷贝过了就可以了。自己做一个测试:

1.建立测试环境:
SYS@test> alter system switch logfile ;
System altered.

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     9
Next log sequence to archive   11
Current log sequence           11

SYS@test> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
BEGIN DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS); END;

*
ERROR at line 1:
ORA-01354: Supplemental log data must be added to run this command
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3669
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3755
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 1

--要求打开附件日志。
SYS@test> alter database add supplemental log data;
Database altered.

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     13
Next log sequence to archive   15
Current log sequence           15

SYS@test> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
PL/SQL procedure successfully completed.

SYS@test> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     15
Next log sequence to archive   17
Current log sequence           17

$  ls -l 2014_12_08/
total 18704
-rw-r----- 1 oracle oinstall 9434112 2014-12-08 12:00:16 o1_mf_1_14_b8b8lj2y_.arc
-rw-r----- 1 oracle oinstall   12288 2014-12-08 12:00:55 o1_mf_1_15_b8b8mq3g_.arc
-rw-r----- 1 oracle oinstall 9432064 2014-12-08 12:00:58 o1_mf_1_16_b8b8mt39_.arc

--可以发现发生了两次arhcive log 切换。我估计执行前先切换1次,执行完成后再切换1次。这样数据字典在o1_mf_1_16_b8b8mt39_.arc
--中。

2.建立测试数据:
create table t1 ( id number,name varchar2(20));
insert into t1 values (1,'aaaa');
insert into t1 values (2,'bbbb');
insert into t1 values (3,'cccc');
commit ;
update t1 set name='BBBB' where id=2;
commit ;
delete t1  where id=3;
commit ;
alter system switch logfile ;

3.拷贝archive log文件:
$  scp o1_mf_1_1[67]_*.arc oracle11g@192.168.100.40:/home/oracle11g/testd/
oracle11g@192.168.100.40's password:
o1_mf_1_16_b8b8mt39_.arc  100% 9211KB   9.0MB/s   00:00
o1_mf_1_17_b8b9565v_.arc  100%  977KB 977.0KB/s   00:00

4.使用logminer查看:

--我以前都是在toad里面使用logminer,在sqlplus测试看看。

exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_16_b8b8mt39_.arc',  sys.dbms_logmnr.New);
exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_17_b8b9565v_.arc',  sys.dbms_logmnr.AddFile);

exec  SYS.DBMS_LOGMNR.START_LOGMNR ( Options => sys.dbms_logmnr.DICT_FROM_REDO_LOGS  );
--很慢不知道为什么?

SCOTT@test> SELECT scn, operation, row_id, sql_redo FROM V$LOGMNR_CONTENTS WHERE seg_owner = 'SCOTT' AND table_name = 'T1' ORDER BY 1;
       SCN OPERATION                        ROW_ID             SQL_REDO
---------- -------------------------------- ------------------ ------------------------------------------------------------
    933853 DDL                              AAAAAAAAAAAAAAAAAB create table t1 ( id number,name varchar2(20));

--仅仅看到建表语句。
exec dbms_logmnr.end_logmnr;

5.改用如下方式:
exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_16_b8b8mt39_.arc',  sys.dbms_logmnr.New);
exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_17_b8b9565v_.arc',  sys.dbms_logmnr.AddFile);
exec  SYS.DBMS_LOGMNR.START_LOGMNR ( Options => sys.dbms_logmnr.DICT_FROM_REDO_LOGS+sys.dbms_logmnr.COMMITTED_DATA_ONLY+sys.dbms_logmnr.DDL_DICT_TRACKING  );
-- 我最后的测试exec  SYS.DBMS_LOGMNR.START_LOGMNR ( Options => sys.dbms_logmnr.DICT_FROM_REDO_LOGS+sys.dbms_logmnr.DDL_DICT_TRACKING  );
-- 应该可以看到执行的dml语句
-- 补充资料:(来源包本身)
-- Constants for start_logmnr options flag
NO_DICT_RESET_ONSELECT    CONSTANT BINARY_INTEGER := 1;
COMMITTED_DATA_ONLY       CONSTANT BINARY_INTEGER := 2;
SKIP_CORRUPTION           CONSTANT BINARY_INTEGER := 4;
DDL_DICT_TRACKING         CONSTANT BINARY_INTEGER := 8;
DICT_FROM_ONLINE_CATALOG  CONSTANT BINARY_INTEGER := 16;
DICT_FROM_REDO_LOGS       CONSTANT BINARY_INTEGER := 32;
NO_SQL_DELIMITER          CONSTANT BINARY_INTEGER := 64;
PRINT_PRETTY_SQL          CONSTANT BINARY_INTEGER := 512;
CONTINUOUS_MINE           CONSTANT BINARY_INTEGER := 1024;
NO_ROWID_IN_STMT          CONSTANT BINARY_INTEGER := 2048;
STRING_LITERALS_IN_STMT   CONSTANT BINARY_INTEGER := 4096;
--

SCOTT@test> SCOTT@test> SELECT scn, operation, row_id, sql_redo FROM V$LOGMNR_CONTENTS WHERE seg_owner = 'SCOTT' AND table_name = 'T1' ORDER BY 1;
    SCN OPERATION   ROW_ID             SQL_REDO
------- ----------- ------------------ ---------------------------------------------------------------------------------------------
933853 DDL         AAAAAAAAAAAAAAAAAB create table t1 ( id number,name varchar2(20));
933862 INSERT      AAANDuAAEAAAAGeAAA insert into "SCOTT"."T1"("ID","NAME") values ('1','aaaa');
933977 INSERT      AAANDuAAEAAAAGeAAB insert into "SCOTT"."T1"("ID","NAME") values ('2','bbbb');
933979 INSERT      AAANDuAAEAAAAGeAAC insert into "SCOTT"."T1"("ID","NAME") values ('3','cccc');
933988 UPDATE      AAANDuAAEAAAAGeAAB update "SCOTT"."T1" set "NAME" = 'BBBB' where "NAME" = 'bbbb' and ROWID = 'AAANDuAAEAAAAGeAAB';
933994 DELETE      AAANDuAAEAAAAGeAAC delete from "SCOTT"."T1" where "ID" = '3' and "NAME" = 'cccc' and ROWID = 'AAANDuAAEAAAAGeAAC';
6 rows selected.

exec dbms_logmnr.end_logmnr;

6.补充测试:
--前面的测试先建立数据字典在redo文件中,后面建立的表自然不在数据字典中,仅仅获得ddl语句,无法获取dml语句,必须加入参数sys.dbms_logmnr.DDL_DICT_TRACKING。
--现在在最后建立数据字典在redo文件中,重复测试:

SYS@test> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
PL/SQL procedure successfully completed.

-- scp o1_mf_1_19_b8b9qhjd_.arc oracle11g@192.168.100.40:/home/oracle11g/testd/

exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_17_b8b9565v_.arc',  sys.dbms_logmnr.New);
exec  SYS.DBMS_LOGMNR.ADD_LOGFILE( '/home/oracle11g/testd/o1_mf_1_19_b8b9qhjd_.arc',  sys.dbms_logmnr.AddFile);
exec  SYS.DBMS_LOGMNR.START_LOGMNR ( Options => sys.dbms_logmnr.DICT_FROM_REDO_LOGS );
--这步特别慢,不知道问题在哪里。

SCOTT@test> SELECT scn, operation, row_id, sql_redo FROM V$LOGMNR_CONTENTS WHERE seg_owner = 'SCOTT' AND table_name = 'T1' ORDER BY 1;
    SCN OPERATION  ROW_ID             SQL_REDO
------- ---------- ------------------ -----------------------------------------------------------------------------------------------
933853 DDL        AAAAAAAAAAAAAAAAAB create table t1 ( id number,name varchar2(20));
933862 INSERT     AAANDuAAEAAAAGeAAA insert into "SCOTT"."T1"("ID","NAME") values ('1','aaaa');
933977 INSERT     AAANDuAAEAAAAGeAAB insert into "SCOTT"."T1"("ID","NAME") values ('2','bbbb');
933979 INSERT     AAANDuAAEAAAAGeAAC insert into "SCOTT"."T1"("ID","NAME") values ('3','cccc');
933988 UPDATE     AAANDuAAEAAAAGeAAB update "SCOTT"."T1" set "NAME" = 'BBBB' where "NAME" = 'bbbb' and ROWID = 'AAANDuAAEAAAAGeAAB';
933994 DELETE     AAANDuAAEAAAAGeAAC delete from "SCOTT"."T1" where "ID" = '3' and "NAME" = 'cccc' and ROWID = 'AAANDuAAEAAAAGeAAC';
6 rows selected.
exec dbms_logmnr.end_logmnr;

--总结:
1.执行EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
  可以把数据字典放在redo文件中。前提是要求打开附件日志。
  SYS@test> alter database add supplemental log data;
2.必要时加入  sys.dbms_logmnr.COMMITTED_DATA_ONLY+sys.dbms_logmnr.DDL_DICT_TRACKING参数。
3.本地 使用DICT_FROM_ONLINE_CATALOG参数,不需要建立数据字典。
4.不知道为什么这么慢,差不多11X秒才完成exec  SYS.DBMS_LOGMNR.START_LOGMNR ( Options => sys.dbms_logmnr.DICT_FROM_REDO_LOGS );
5.做了10046跟踪:发现
SQL ID: a5w8kbk6udsn5 Plan Hash: 0

INSERT INTO SYS.LOGMNRLT_110_COL$ ( COL#, SEGCOL#, NAME, TYPE#, LENGTH,
  PRECISION#, SCALE, NULL$, INTCOL#, PROPERTY, CHARSETID, CHARSETFORM, SPARE1,
   SPARE2, OBJ#, LOGMNR_UID )
VALUES
(:01, :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 , :10, :11, :12, :13, :14, :15,
  :16 )

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute  56243     52.63      54.80        660        804      62305       56243
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total    56244     52.63      54.81        660        804      62305       56243

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: SYS   (recursive depth: 1)
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  LOAD TABLE CONVENTIONAL  (cr=2 pr=5 pw=0 time=1650 us)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                       660        0.11          0.32
  latch: shared pool                              1        0.00          0.00
********************************************************************************

SQL ID: fa4kq3unwkka6 Plan Hash: 0

SQL ID: 2jv9waqgh5asr Plan Hash: 0

INSERT INTO SYS.LOGMNRLT_110_OBJ$ ( OBJV#, OWNER#, NAME, NAMESPACE, SUBNAME,
  TYPE#, OID$, REMOTEOWNER, LINKNAME, FLAGS, SPARE3, STIME, OBJ#, LOGMNR_UID )

VALUES
(:01, :2 , :3 , :4 , :5 , :6 , :7 , :8 , :9 , :10, :11, :12, :13, :14 )

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute  52018     40.15      43.35        710        931      58400       52018
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total    52019     40.15      43.35        710        931      58400       52018

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: CHOOSE
Parsing user id: SYS   (recursive depth: 1)
Number of plan statistics captured: 1

Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  LOAD TABLE CONVENTIONAL  (cr=2 pr=5 pw=0 time=26723 us)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                       710        0.30          0.90
  log file switch completion                      1        0.08          0.08
  latch: shared pool                              1        0.00          0.00

--主要慢在这里。

时间: 2024-11-14 10:53:29

[20141208]使用logminer看远程归档文件.txt的相关文章

[20141210]使用logminer看远程归档文件补充

[20141210]使用logminer看远程归档文件(补充).txt --如果要在本机看其他主机的归档或者日志文件,由于dbid不一样,是无法查看的.必须要包括字典信息. --如果需要查看别的数据库的归档文件,必须要有别的数据字典文件.正常需要使用utl_file_dir,而经常这个参数没有设置. --在使用如下命令建立数据字典. exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle11g/testd/dict_test.ora')

[20160805]logminer使用问题3.txt

[20160805]logminer使用问题3.txt --前一阵子看itpub有人想通过logminer来抽取归档同步数据库,实际上这个非常不科学,存在一定的风险,我觉得很多情况下会漏掉一些sql --语句,通过例子来说明. --首先说明logminer用来补救一些异常操作还是可行的. 1.测试环境说明: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------

董敬一:用远程读取TXT文本的方法维护链接群

我们都知道,外链对SEO很重要,其实真正做SEO的,到最后拼的都是链接资源,而不是什么别的技术,SEO新手由于缺乏资源,主要是外链资源,所以制约了效果,而SEO老手,往往通过时间的积累,手上拥有大量的优质外链资源,一般SEO老手都自己养着至少数十个高质的站点用来给自己欲优化的新站提供链接支持,所以在优化的初始阶段,SEO老手一般都不用为链接发愁.例如移不动网络营销,本身自己就运营着二十多个高质量的网站,通过这些自己的链接,新的网站可以短时间被收录并获得充足的链接支持. 在外链的形式中,首页明链的

远哥谈 使用WebSocket开发在线实时看远程服务器log日志的工具

我们开发软件的,通常会有一个测试环境/开发环境,但是系统开发完成后,还会有一个生产环境,也叫正式环境.正式环境我们一般是不能让开发人员去远程登录和维护的,一般正规的生产环境是专门的负责人员去负责更新,开发人员只能接触到测试环境/开发环境.   但是,如果生产环境上有错误,需要跟踪,怎么让开发人员不具有远程登录服务器的权限,但是又能让开发人员像tail命令一样实时查看日志文件呢?比如查看App的log4j日志文件.Tomcat的控制台日志文件等...   远哥也思考了许久,最近找到了一个解决办法,

[20160923]取出备份集的archivelog文件.txt

[20160923]取出备份集的archivelog文件.txt --这个测试来源1次帮别人解决问题时遇到的情况,当时需要使用logminer分析archivelog文件,因为要求对方把archivelog拿过来在我 --的电脑分析.前提是要使用 EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS); 生成数据字典文件在 --归档日志中,可以参考我以前写的blog,链接: http://blog.itpub

[20121128]传输表空间与scn.txt

[20121128]传输表空间与scn.txt 今天测试如果使用传输表空间,数据文件的scn的变化.如果传输表空间的数据文件scn很大,传过来后数据库的scn是否同步到最大的情况. 测试机器A(10g) SQL> select * from v$version where rownum BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edi

不可大意!小心三类危险的TXT文件

什么,TXT文件也有危险?是的!TXT文件不仅有危险,而且可以是非常的危险!不过,严格说来,应该给这个所谓的"TXT"文件加个引号,因为它们是看起来是TXT文件,实则是隐藏了其真实扩展名的其它文件,但在普通人看来它们的确是"TXT"文件!下面就让我们一起来了解一下这些危险的"TXT"文件. 一. 隐藏HTML扩展名的TXT文件 假如您收到的邮件附件中有一个看起来是这样的文件:QQ靓号放送.txt,您是不是认为它肯定是纯文本文件?我要告诉您,不一定

创建一个完整的远程协助会话的步骤

  远程协助的双方分别被称为"初学者"和"专家".要想使用远程协助,双方都需要使用windows xp之后的操作系统,而且都需要有互联网连接,或者位于同一个局域网内部.创建一个完整的远程协助会话可以釆取以下步骤. (1)初学者发起远程协助请求,主要可以使用Windows Live Messenger或电子邮件. (2)专家接受请求,打开一个用于显示初学者桌面的终端窗口. (3)最初专家只能查看初学者的桌面,并通过文字或语音交换信息.在专家可以对目标计算机进行操作之前

驱动器-怎么往远程服务器传送东西快

问题描述 怎么往远程服务器传送东西快 想往服务器上发个tomcat和jdk,发个jdk都慢的要死,远程连接用的驱动器好慢 解决方案 看远程服务器的地址在哪里.选取一个中间服务器作为跳板.比如说163或者qq信箱. 解决方案二: 登陆服务器下,直接在服务上下载 JDK 不行吗? 解决方案三: 建议你用百度云盘或者360云盘,把文件传送到你的云盘里,然后分享一下链接出来,远程再下载就行了,这样速度就快多了 解决方案四: 通过QQ发送文件也可以,在远程服务器上安装和登陆个QQ,直接发送文件,速度也比较