在以前的练习中,我们讨论了归档重做日志文件,对归档重做日志文件进行了备份并用于恢复操作,利用这些文件可以把改变传递到一个备用数据库中并将一个表空间及时恢复到一个特定的时间点。你是否考虑到什么方法可以直接观察一个重做日志文件的内部结构?从8i开始可以是用LogMiner工具查看一个或者多个日志文件的内容,包括一些数据字典视图和过程。在本练习中将练习安装LogMiner,并使用LogMiner来查看和分析数据库重做日志文件的内容。
当Oracle改变数据块时,它把重做信息写入当前的联机重做日志文件。重做日志文件包括更改时间、对象标识符、更改的SCN号、数据块发生的操作和其他的重要信息,该文件不但包括使用者对数据块所做的更改,也包括回退段中恢复块的更改。Oracle在数据字典中使用数字标识符来标识对象的相关信息,例如为一个表制定一个对象号,并且每列有一个列标志符,每列都有一个相应的数据类型标识符,表示该列是varchar2、date、number等变量。使用LogMiner,可以读出重做文件的内容,然后重新产生或恢复产生原始重做信息的SQL表达式,使用数据字典文件,LogMiner将Oracle对象标识符翻译成可以看得懂的表和列。
在进行本练习之前对相关数据进行解释:
本文来自Sqlclub
- 当前数据库(Current database):当LogMiner使用产生日志文件的来分析重做日志文件时,重做日志文件来自当前数据库;
- 外部数据库(Foreign database):当LogMiner可以分析异于当前数据库的其他数据库产生的重做日志文件,该数据库就是有一个外部数据库;
- 字典文件(Dictionary file):LogMiner使用字典文件将Oracle内部对象标识与表名称、列、数据类型以及其他对象关联起来,需要注意的是字典文件必须由创建重做日志文件的数据库产生。
很多情况下需要使用LogMiner:如数据库表中的数据莫名其妙被修改了,使用LogMiner可以检查哪个改变的运行细节,也可以使用LogMiner来撤销这些更改;可以使用LogMiner检查一个或多个表中SQL改变发生的次数,从而检查表上的工作量;通过进一步检查,LogMiner可以指出一个错误的DROP TABLE或者一个DDL语句发生的准确时间和SCN。 本文来自Sqlclub
使用LogMiner需要理解以下要点: copyright Sqlclub
- 可以在一个已经加载或者未加载的数据库上使用LogMiner;
- 分析一个来自外来数据库重做日志文件时,当前数据库的块大小必须和外部数据库一样的或者更大,因为在热备份模式,表空间中一个块的首次改变作为一个单独的重做记录在重做流中创建一个完整的镜像。如果LogMiner使用较小的块尺寸的数据库读取重做会发生错误,因为单独的重做记录无法放入一个块中;
- 虽然LogMiner不解释重做日志的DDL语句,如DROP TABLE这样的DDL语句,但仍旧会在数据字典创建DML,这些字典DML语句可以用来检查对数据库发布的DDL命令;
- LogMiner不会重构原始的无日志的SQL操作,但在数据字典上的DML操作结果将记录到日志文件里;
- 虽然LogMiner可以偶然用来日志文件分析,但不能当做常规意义上使用的一种功能,特别是一个产生庞大数量重做信息的数据库挖掘重做信息,使用LogMiner分析庞大数量的重做信息是一件非常耗费时间的事情;
- 如果LogMiner用来从其他数据库的日志文件里挖掘信息,无论原数据库还是被分析的数据库都必须在使用相同的硬件平台和操作系统,而且原数据库和被分析数据库必须使用相同的字符集;
- LogMiner无法分析某些数据库对象或数据类型产生的重做,例如:按索引组织的表、成簇的表/索引、非标量数据类型和链接的行;
- 尽管可以创建数据字典DML,但LogMiner无法从直接的路径插入操作中生成原始的SQL;
- LogMiner将显示为提交的事务,因为重做日志包含提交的和未提交的数据。
Sqlclub.cn
练习18:分析重做文件
Sqlclub
通过LogMiner读取重做日志事务涉及使用Oracle提供的包过程、数据字典视图和一个数据字典外部文件。下面是应用LogMiner分析重做日志文件的操作过程:使用LogMiner过程创建一个外部数据字典文件;然后使用另一个存储过程创建一个分析重做文件的列表;最后,执行另一个存储过程来启动LogMiner。在完成这些步骤以后,从一个显示日志文件内容的数据字典视图里进行选择,当查询这个视图时,Oracle读取日志文件,然后以特定格式返回结果,一旦分析列出的日志文件,就调用另一个存储过程停止LogMiner。
|
类型 Sqlclub |
过程名 Sqlclub |
用途 Sqlclub.cn |
|
过程 Sqlclub |
Dbms_logmnr_d.build Sqlclub |
创建一个数据字典文件 Sqlclub.cn |
|
过程 内容来自Sqlclub.cn |
Dbms_logmnr.add_logfile Sqlclub.cn |
在类表中增加日志文件以供分析 Sqlclub.cn |
|
过程 copyright Sqlclub |
Dbms_logmnr.start_logmnr 本文来自Sqlclub |
使用一个可选的字典文件和前面确定要分析日志文件来启动LogMiner 本文来自Sqlclub |
|
过程 内容来自Sqlclub.cn |
Dbms_logmnr.end_logmnr Sqlclub |
停止LogMiner分析 本文来自Sqlclub |
|
视图 copyright Sqlclub |
V$logmnr_dictionary Sqlclub学习社区 |
显示用来决定对象ID名称的字典文件的信息 本文来自Sqlclub |
|
视图 copyright Sqlclub |
V$logmnr_logs Sqlclub |
在LogMiner启动时显示分析的日志列表 内容来自Sqlclub.cn |
|
视图 内容来自Sqlclub.cn |
V$logmnr_contents copyright Sqlclub |
LogMiner启动后,可以使用该视图在SQL提示符下输入SQL语句来查询重做日志的内容 Sqlclub.cn |
在本练习中,将观察SCOTT.EMP表中一行记录的特定改变的详细情况,然后看到如何通过分析一个特定表上记录改变操作的重做日志文件来检查这个表数据库更改操作,最后将学会怎样为一个特定的DROP TABLE命令确定准确的时间和SCN。 Sqlclub
步骤一:创建数据字典文件 内容来自Sqlclub.cn
使用LogMiner创建数据字典是一个可选步骤,字典文件极大增加了日志文件内容的可读性。
数据字典建立Oracle内部对象ID数据到表、列以及其他数据类型名称之间的对应关系,数据字典是一个文本文件,相当于数据字典的相关部分。本步骤中将创建一个数据字典文件,然后指示LogMiner应用该文件把内容的数据翻译成步骤四中分析日志文件能够识别的名称。 Sqlclub
- 字典文件应该和日志文件的日期一致,如果LogMiner分析的一个对象无法在字典文件中找到,LogMiner将无法显示数据库对象的表和列的名称;
- 建立字典文件的数据库必须和建立日志文件的数据库相同,例如,不能使用克隆数据库中的字典文件来分析PRACTICE数据库中的日志文件。
在建立数据字典文件之前,PRACTICE数据库必须写到硬盘的一个目录下。Oracle10g之前数据库参数文件内设置UTL_FILE_DIR这个参数运行为Orace可以使用的PL/SQL文件I/O定义一个或多个目录,可以在这个参数文件里连续地分行输入UTL_FILE_DIR,以定义更多的目录,如下所示:
Sqlclub.cn
内容来自Sqlclub.cn
本文来自Sqlclub
[1] Sqlclub.cn
百度中搜索:
Google中搜索: