热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

分析ROLLBACK是否产生日志信息

分析ROLLBACK是否产生日志信息首先介绍分析日志的方法,采用LOGMNR流程如下:www.2cto.com[sql]SQL>@F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql程序包已创建。授权成功。...

分析ROLLBACK是否产生日志信息
 
首先介绍分析日志的方法,采用LOGMNR
 
流程如下:
  www.2cto.com  
[sql] 
SQL> @F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslm.sql  
  
程序包已创建。  
  
授权成功。  
 
同义词已创建。  
  
SQL> @F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslmd.sql  
  
程序包已创建。  
  
同义词已创建。  
 
SQL> select log_mode from v$database;  
www.2cto.com  
LOG_MODE                                                                          
------------                                                                      
NOARCHIVELOG                                                                      
  
SQL> @F:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\dbmslms.sql  
  
程序包已创建。  
  
没有错误。  
  
授权成功。  
  
SQL> shutdown immediate;  
数据库已经关闭。  
已经卸载数据库。  
ORACLE 例程已经关闭。  
SQL> startup mount;  
ORACLE 例程已经启动。  
www.2cto.com  
Total System Global Area  778387456 bytes                                         
Fixed Size                  1374808 bytes                                         
Variable Size             301991336 bytes                                         
Database Buffers          469762048 bytes                                         
Redo Buffers                5259264 bytes                                         
数据库装载完毕。  
--开启归档  
SQL> alter database archivelog;  
  
数据库已更改。  
  
SQL> alter database open;  
  
数据库已更改。  
--创建日志字典路径  
SQL> alter system set utl_file_dir='d:\logmin' scope=spfile;  
  
系统已更改。  
  
SQL> shutdown immediate;  
数据库已经关闭。  
已经卸载数据库。  
ORACLE 例程已经关闭。  
SQL> startup  
ORACLE 例程已经启动。  
www.2cto.com  
Total System Global Area  778387456 bytes                                         
Fixed Size                  1374808 bytes                                         
Variable Size             301991336 bytes                                         
Database Buffers          469762048 bytes                                         
Redo Buffers                5259264 bytes                                         
数据库装载完毕。  
数据库已经打开。  
SQL> begin  
  2  dbms_logmnr_d.build(  
  3  dictionary_filename=>'logmin_dict.dat',  
  4  dictionary_location=>'d:\logmin');  
  5  end;  
  6  /  
  
PL/SQL 过程已成功完成。  
  
SQL> execute dbms_logmnr.add_logfile(optiOns=>dbms_logmnr.new,logfilename=>
'F:\app\Administrator\oradata\orcl\REDO01.LOG');  
  
PL/SQL 过程已成功完成。  
                                                               
SQL> begin  
  2  dbms_logmnr.start_logmnr(  
  3   dictfilename=>'d:\logmin\logmin_dict.dat'  
  4  );  
  5  end;  
  6  /  
www.2cto.com  
PL/SQL 过程已成功完成。  
  
SQL> select count(*) from v$logmnr_contents;  
  
  COUNT(*)                                                                        
----------                                                                        
     50496                                                                        
  
SQL> create table log_back as select * from v$logmnr_contents;  
  
表已创建。  
  
SQL>execute dbms_logmnr.end_logmnr();  
PL/SQL 过程已成功完成。  
  
SQL> spool off  
 
直接使用包来分析日志(11g r2的版本)
  www.2cto.com  
[sql] 
--使用包分析日志的方法  
exec dbms_logmnr.add_logfile('/data/archive/redo001.log',dbms_logmnr.new);  
exec dbms_logmnr.start_logmnr(optiOns=>dbms_logmnr.dict_from_online_catalog);  
--查询日志信息  
select timestamp,scn,sql_redo  
from v$logmnr_contents  
where lower(sql_redo) like '%insert%'  
and seg_name='TEST'  
and seg_owner='TEST';  
  
dbms_logmnr.end_logmnr(); --停止日志分析  
  www.2cto.com  
注意:
如果所有操作只回滚不提交的话,最后生成的归档日志是不会有任何人工操作数据的(可能会
有一些系统操作的数据信息),因为没有永久改变的操作.
SQL> select group#,archived,status,first_time from v$log;
 
    GROUP# ARC STATUS           FIRST_TIME
---------- --- ---------------- -------------------
         1 YES INACTIVE         2012-10-25 11:17:50
         2 NO  CURRENT          2012-10-25 11:17:57
         3 YES INACTIVE         2012-10-25 11:17:39
也就是现在分析1和3,v$logmnr_contents表里没有任何信息(之前我只有做rollback,未做任何
commit事务).只有分析2、CURRENT状态的才有数据.
 
还要注意的是如果分析活动的日志(如现在分析GROUP 2),有时候不能使用INSERT INTO TT
select * from v$logmnr_contents,来保存日志数据,它会提示如下错误:
  www.2cto.com  
第 1 行出现错误:
ORA-00310: 归档日志包含序列 290; 要求序列 287
ORA-00334: 归档日志: 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'
 
这个不是很清楚原因,个人猜想可能是ARC进程正在归档造成的,此时查询V$LOG发现如下:
 
SQL> select group#,archived,status,first_time from v$log
 
    GROUP# ARC STATUS           FIRST_TIME
---------- --- ---------------- -------------------
         1 YES ACTIVE           2012-10-25 12:08:45
         2 YES ACTIVE           2012-10-25 12:09:41
         3 NO  CURRENT          2012-10-25 12:09:45
 
在分析日志组2(状态为:CURRENT)的数据时发现,如果insert操作后(
语句为:
begin
  for i in 1..1000 loop
INSERT into tt002 values(i,'aa');
end loop;
end;)
不rollback,也不commit.分析后的日志信息如下:
TIMESTAMP                  SCN                                                  
------------------- ----------                                                  
SQL_REDO                                                                        
--------------------------------------------------------------------------------
2012-10-25 11:34:38    3813555                                                  
insert into "TEST"."TT002"("I","J") values ('1','aa');                  
                                                                                
2012-10-25 11:34:38    3813555                                                  
insert into "TEST"."TT002"("I","J") values ('2','aa');                  
                                                                                
2012-10-25 11:34:38    3813555                                                  
insert into "TEST"."TT002"("I","J") values ('3','aa');  
 
......
  www.2cto.com  
如果ROLLBACK之后,产生的日志信息如下:
SQL> select timestamp,scn,sql_redo
  2  from v$logmnr_contents
  3  where lower(sql_redo) like '%tt002%' and lower(sql_redo) like '%delete%';
 
TIMESTAMP                  SCN                                                 
------------------- ----------                                                  
SQL_REDO                                                                        
--------------------------------------------------------------------------------
2012-10-25 11:36:26    3813606                                                  
delete from "TEST"."TT002" where ROWID = 'AAAS0lAAEAAAAFbAGB';          
                                                                                
2012-10-25 11:36:26    3813606                                                  
delete from "TEST"."TT002" where ROWID = 'AAAS0lAAEAAAAFbAGA';          
                                                                                
2012-10-25 11:36:26    3813606                                                  
delete from "TEST"."TT002" where ROWID = 'AAAS0lAAEAAAAFbAF/';  
 
也就是说回滚INSERT对应产生了DELETE的日志信息.
 

推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了美国最具影响力的十大财团,包括洛克菲勒、摩根、花旗银行等。这些财团在历史发展过程中逐渐形成,并对美国的经济、政治和社会产生深远影响。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 在网页开发中,页面加载速度是一个关键的用户体验因素。为了提升加载效率,避免在PageLoad事件中进行大量数据绑定操作,可以采用异步加载和特定控件来优化页面加载过程。 ... [详细]
author-avatar
昀尧约_146
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有