基于Oracle日志分析的数据还原操作的设计及实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:itliutao123
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:基于日志分析的数据还原操作的设计增加了一种关于Oracle分布式数据库的同步方法,在不增加前台应用程序的前提下,通过对数据库进行日志分析,使分数据库与主节点数据库达到同步的效果。本文通过对LogMiner工具的详细介绍,并结合實际对Oracle数据库归档日志文件进行分析和还原DML语句的设计后,最终达到分布式数据库进行同步的效果。
  关键词:Oracle;日志分析;LogMiner;数据还原
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10626-03
  
  1 引言
  
  在Oracle8i版本以后增加了一个新的工具,即LogMiner。该工具是为了解决通过分析重做日志和归档日志的所有事务变化,并且能够准确获得各种DML、DDL操作的数据变化提交时间、元操作语句以及SCN值。笔者在分布式数据库环境中,在分接点使用LogMiner的强大分析功能对数据操作进行还原,然后形成文件后进行传输到主接点库,执行后做到数据库的良好同步。
  
  2 设计思想和关键技术
  
  主要利用LogMiner的强大的分析功能,还原出元操作,进而做还原或者重做操作的语句集,依次用来达到分布式数据库同步和误操作的恢复的作用。其关键技术是如何确定分析日志的范围,如何还原出元操作的重做语句以及回滚语句,如何做到分析后的元语句转换成可以在数据库上进行操作的语句等等。
  通过LogMiner分析oracle日志主要分析两类日志:归档日志和重做日志,由于重做日志为实施联机状态,故本文假设在使用LogMiner进行分析的时候先进行强制归档,然后通过分析归档日志来还原元操作。
  
  3 Oracle日志的介绍及分析
  
  Oracle数据库主要由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成,其中重做日志文件和归档文件记录所有数据库操作,保证数据库的完整性和安全性。Oracle数据库所使用的一组重做日志中至少需要包含两个重做日志文件组。只有当某个事务所产生的重做记录全部被写入重做日志文件之后,Oracle才认为这个事务已经成功提交.重做记录也可能会在事务提交之前就写入重做日志文件。由于重做日志是循环使用的,所以当重做日志组在写满的时候,数据库在归档模式下会将重做日志的内容写入归档日志文件,即归档文件是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
  在重做日志文件没有写满的时候也可以将内容通过强制归档的方式写入归档日志文件,所以对归档日志的分析是本文的重点。下面这些图示为显示SQL语句如果在数据库上执行并被写入重做日志文件和归档日志文件。
  图1主要表示SQL的DML语句如何被服务进程所执行,调用数据文件、控制文件、重做日志文件中的信息,在SGA中数据缓冲区、重做日志缓冲区中处理。
  图1
  图2主要表示在处理过SQL的DML操作后,有LGWR进程(重做写进程)将操作日志写入日志组,有ARCH进程(归档进程)将日志组中的信息写入归档日志文件中。
  图2
  
  4 LogMiner工具的介绍及使用
  
  Oracle LogMiner是Oracle公司在产品8i、9i、10g中均提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML、DDL语句,还可分析得到一些必要的回滚、重做SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务。
  4.1 LogMiner工具的安装
  在Oracle8i上要安装LogMiner工具,必须首先要运行下面两个脚本:
  (1)$oracle_home/rdbms/admin/dmslm.sql
  (2)$oracle_home/rdbms/admin/dbmslmd.sql
  在Oracle9i以及10g上已经不再需要这样创建了,因为LogMiner已经创建好了。
  4.2 LogMiner分析的过程
  LogMiner分析日志文件主要分类2类:分析重做日志文件、分析归档日志文件,由于原理及方法基本相同,本文主要通过分析归档日志文件来介绍分析过程。应用LogMiner分析重做日志文件的操作如下:
  (1)创建外部数据字典文件;
  (2)产生数据库操作;
  (3)为分析指定日志文件;
  (4)分析日志文件内容;
  (5)关闭LogMiner。
  4.2.1 创建外部数据字典文件
  使用LogMiner时,需要建立数据字典,用于将对象ID号和数据类型转变成对象名和外部数据格式。如果不使用LogMiner字典,则无法读懂LogMiner分析的结果,如下图:
  为了避免生成不可读取的DML和DDL格式,当使用LogMiner分析重做日志和归档日志时,需要使用LogMiner字典将对象ID号转变为对象名。在数据库实例ywsb下创建数据字典的过程如下:
  (1)设置字典文件的目录
  需要设置初始化参数UTL_FILE_DIR。通过设置此参数,可以指定Oracle要访问的I/O目录,在Initywsb.ora中增加如下设置:
  UTL_FILE_DIR=/oradata/ywsb/LogMiner
  (2)重启数据库
  由于这个新参数不是动态数据库参数,故需要重新启动数据库才能使设置生效。
  CMD>sqlplus /nolog
  SQL>connect sys/manager@ywsb as sysdba
  SQL>shutdown immediate
  SQL>startup pfile=%oracle_home%\database\initywsb.ora
  (3)创建字典文件
  创建字典文件方法如下:
  SQL>EXECUTE Dbms_logmnr_d.build(-
  Dictionary_filename => ‘dictionary.ora’,Dictionary_location => ‘/oradata/ywsb/LogMiner’,Dbms_logmnr_d.store_in_flat_file);
  其中Dictionary_filename是指定字典文件名;Dictionary_location是指定字典文件所在的目录,此目录要与UTL_FILE_DIR参数设置匹配;Dbms_logmnr_d.store_in_flat_file是表示要创建字典文件,为默认值。此过程执行后,字典生成在D:\oracle\oradata\ywsb\LogMiner目录下的dictionary.ora里。
  4.2.2 为分析指定日志文件
  由于本文主要侧重对归档日志文件的分析,故在分析之前需要对数据库进行强制归档,即将数据库进行强制日志切换:alter system switch logfile;下面解决如何确定分析日志范围的问题。由于只需要分析归档日志文件,我们可以建立一个表单独对应日志文件名以及是否已经分析过的标志,依此来判断那些归档日志文件已经进行过分析,我们只需要对未分析过的日志文件调用LogMiner,来还原数据操作即可。通过查
  询V$ARCHIVED_LOG表中提取出所有归档日志文件,由于提取的是一批日志文件,则可以通过cursor,将日志文件名存入游标中。
  cursor c_listlog is
  select name from V$ARCHIVED_LOG;
  打开cursor c_listlog,将提取的列表fetch到变量中;
  fetch c_listlog into ls_loglistname
  然后查询这些日志列表是否已经存在于ARCHIVED_LOG表(新建立表,主要为了存放处理日志文件的列表),将这些未分析过的日志文件逐条插入进ARCHIVED_LOG表,然后进行逐条的提取,提取出将要分析的文件名,进行分析。
  其中,ARCHIVED_LOG表中提取数据后包含如下类似据:
  LogMiner分析日志主要使用Dbms_logmnr. add_logfile将日志文件加入到分析队列:
  dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=> ls_loglistname);其中第一个参数dbms_logmnr.new,是用来创建将要分析的文件新列表的。第二个参数是新增加的日志文件,经过dbms_logmnr.add_logfile处理后,从V$ARCHIVED_LOG中提取出将要从日志文件提取的DDL和DML操作的起始时间、结束时间、起始SCN和结束SCN。
  Select low_time,high_time,low_scn, next_scn into ld_starttime,ld_endtime,ll_startscn,
  ll_endscn from v$logmnr_logs;
  然后执行Dbms_logmnr.start_logmnr开始分析日志文件,这时候需要传入从V$ARCHIVED_LOG中提取出来的参数。方法如下:
  dbms_logmnr.start_logmnr(dictfilename=>'d:\oracle\ywsb\logm
  nr\dictionary.ora ',starttime => ld_ starttime, endTime=>ld_ endtim
  e,startscn=>ll_ startscn,endscn=>ll_ endscn);
  分析后的,可以通過V$logmnr.contents查询重做日志的内容即可。V$logmnr_contents视图中包含以下列:
  
  5 建立重做语句文件
  
  由于在logmnr_contents表中,主要存在如下列对我们有用:
  此时,将元操作已经完全提取到logmnr_contents表中,对sql_redo进行分类转换,主要分类原则是根据操作类型,insert、update 、delete的不同进行转换,转换时要选择恰当的转换条件,保证原有数据操作的原汁原味。将转换过后的sql_redo写入到外部的文件中以备执行。转换方法如下:
  (1)insert语句可以直接使用;
  (2)update语句需要做一些更改,既where条件需要作进一步确定,其主要是依靠所在表的主键信息以及日志分析结果的rowid信息取出主健值替换原来的where条件,提取rowid的方法为:select substr(ls_sql,-20,18) into ls_rowid from dual;分析主键值的方法为从rowid确定为对那个表操作,然后在元数据库表中查询到此表的主键值及rowid对应的主键条数,对应为1条的情况下,继续提取出对应的主键名和主键值,这时候就确定update语句的where条件。
  (3)delete语句的处理方法为只需要将sql_redo语句中的rowid信息删除即可。根据如上转换方法后,即可将数据库上的所有的某时间段的所有的元操作进行还原,并且将还原出来的DML语句写入到文件中,可以将此文件传输到分布式数据库主节点库后进行执行后使得在主节点数据库上包含有各个分数据库的所有的操作。
  
  6 总结
  
  这种基于日志分析的数据还原操作的设计增加了一种基于ORACLE分布式数据库的同步方法,在不增加前台应用程序的前提下,通过对数据库进行日志分析,使分数据库与主节点数据库达到同步的效果,比较适用于非实时性业务的同步。在笔者单位使用这种设计方法运行有半年,已经取得了良好的效果。即节省了资金也达到了预期目的。
  参考文献:
  [1]王海亮,王海凤,等.精通Oracle10g备份与恢复[M].中国水利水电出版社,82-90,295-307.
  [2]Lanes L.Morris-Murphy.Oracle9i 数据库管理员Ⅱ:备份/恢复与网络管理[M].清华大学出版社,100-123.
  [3]陈雪,浅谈Oracle9i如何管理控制文件和日志文件[J].(福建工程学院计算机系 350014)科技交流,2006年05期,科技篇.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:自然灾害每年都给国家带来巨大的经济损失,而且还在以更快的速度增长,严重影响我国的可持续发展。长期以来,单项减灾系统相互独立,管理分散,综合减灾效果差。建立减灾综合系统有利于减灾各部门工作的统一协调,大大提高灾害应急快速反应能力。利用AJAX技术可以让减灾系统更加高效,降低对使用者的技术要求,增强使用者和系统的交互,让减灾综合系统发挥更大作用。AJAX在防灾减灾中的应用,稍加推广,即可应用到各
期刊
摘要:本文主要讨论了Mysql数据库和Mssql系列数据库提供的几种SQL数据字段类型的不同定义、应用以及如何在不同类型字段之间转化的问题。  关键词:Mysql;Mssql;数据类型   中图分类号:TP311 文献标识码:A文章编号:1009-3044(2007)03-10632-01    1 引言    我们在创建表之前首先要讲一下数据库提供SQL数据字段类型的问题,因为在实际应用中它是建
期刊
摘要:随着数据仓库技术的发展和应用,OLAP技术已成为决策支持系统领域研究的热点。文章探讨了基于OLAP的多维分析模型设计,将OLAP技术应用于学生选课数据仓库中,阐述了具体的实现过程,并形成了客户端访问界面。  关键词: 联机分析处理(OLAP);维表;事实表;星型结构;客户端界面  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10625-01    1 引
期刊
摘要:本文根据C语言的教学重点和目的,探讨如何提高C语言课程的教学质量,使学生更好的掌握C语言的基本语法和程序设计算法,培养和提高学生的编程能力。  关键词:C语言;教学方法;多媒体教学  中图分类号:G642文献标识码:A文章编号:1009-3044(2007)04-11160-03    1 引言  C语言是国内外广泛使用的计算机语言,它兼顾了高级语言的易用性、可移植性好等优点,又具有低级语言
期刊
摘要:在介绍了XML的安全特性和其加密规范后,从Diffie-Hellman密钥协商的生成原理出发,运用XML加密规范所提供的对数据对象进行密钥协商的机制,并以经典的D-H密钥协商为例,依据规范所制定的原则,运用JCE所具有的安全特性为实现技术,就如何对密钥协商交换进行了探讨,从而为XML加密规范的实际应用探索了一种方式,并以此说明建立自主加密扩展的重要意义。  关键词:XML;数据加密;密钥协商
期刊
摘要:以Microsoft Visual FoxPro 6.0为关系数据库管理系统,以读者数据输入模块为例,详细分析与探讨了管理信息系统数据输入模块的设计思想与具体实现步骤及方法。  关键词:管理信息系统;数据输入模块;读者数据;VFP程序设计  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10606-04    1 引言    数据输入模块是管理信息系统最关
期刊
摘要:《C语言程序设计》课程,是计算机科学与技术专业本科的一门必修课,也是一门实践性很强的课程,有较高的实验要求。旧有的教学模式很难将的知识传授给学生,传统的教学方法和手段已不能适应发展的需要,我们在C语言程序设计课程的教学中引入改革措施,首先编写教材,并在实验教学环节进行一系列的改革措施,得到了较好的效果。  关键词:《C语言程序设计》;教材建设;教学改革;教学模式  中图分类号:TP312文献
期刊
摘要:学生学籍信息是学校的一项重要数据资源,在教育改革和素质教育促使学校的招生规模不断扩大的背景下,学生的各种信息量成倍增长,传统的手工管理已无法满足学校管理者对学籍管理的需要。因此,本文利用PowerBuilder强大的数据库操作特性和其Window plug技术设计了一个基于web学生学籍管理信息系统,较好的满足了学校管理者对学籍管理的需求,提高了管理的效率。  关键词:Web;学籍;管理信息
期刊
摘要:隨着网络资源的日益丰富,从中发现潜在的、有价值的信息的商业需求一直推动着数据挖掘技术不断向前发展,由于Web数据本身具有半结构化、组织性差的特点,使得Web数据挖掘工作变得十分困难,而XML的出现为Web数据挖掘技术带来了新的契机和巨大的发展。本文介绍了XML技术以及Web数据挖掘,阐述了XML技术在Web数据挖掘中的应用。由于基于XML的Web数据挖掘是一门新兴的技术,如何进一步充分利用W
期刊
摘要:PowerPoint电子讲义(下简称PPT)是如今学校课堂教学中非常常用的媒体形式和教学资源整合工具,许多学科教师的教学从某种程度上已十分依赖这一软件工具,但其对教学内容以页面为单位的呈现方式,却容易使学生在听讲过程中出现“迷航”现象。本文结合自身的教学实践,对PPT制作和使用中的“迷航”问题提出了几种解决策略和实用的建议。  关键词:Power Point电子讲义;迷航;解决策略  中图分
期刊