- 浏览: 82959 次
- 性别:
- 来自: 北京
最新评论
-
streamsong:
王雨尘 写道
的确是说索引是排序的,我漏掉啦
我们为什么要用索引,用索引为什么比不用索引快 -
heerwa:
...
我们为什么要用索引,用索引为什么比不用索引快 -
liulanghan110:
那么用索引为什么会提高性能呢?因为索引(以B树索引为例)是树状 ...
我们为什么要用索引,用索引为什么比不用索引快 -
王雨尘:
我们为什么要用索引,用索引为什么比不用索引快 -
pangpang514:
居然和强哥合影过。。。。佩服!
我们为什么要用索引,用索引为什么比不用索引快
朋友遇到了非常经典的ORACLE事故——误删除,开发人员告诉他,昨天下午五点-六点不小心误删了几条数据,问是否可以恢复,朋友的环境是ORACLE 10gR2,没有备份,但有开归档和闪回,这个是可以找回数据的。
以下为找回误删除数据的实验。
SQL> create table t1(id number,name varchar2(20));
Table created
SQL> insert into t1 values(1,'zhangsan');
1 row inserted
SQL> insert into t1 values(2,'zhangsi');
1 row inserted
SQL> insert into t1 values(3,'zhangwu');
1 row inserted
SQL> commit;
Commit complete
删除部分数据,并记录SCN。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
4354137
SQL> delete from t1 where id=3;
1 row deleted
SQL> commit;
Commit complete
创建一张大表,用于测试。
SQL> create table t2 as select * from dba_objects;
Table created
SQL> INSERT INTO T2 SELECT * FROM T2;
75068 rows inserted
SQL> /
150136 rows inserted
SQL> /
300272 rows inserted
SQL> /
600544 rows inserted
对T2表做大量的update操作,模拟回滚段被回收。
UPDATE T2 SET OWNER=OWNER,OBJECT_NAME=OBJECT_NAME,SUBOBJECT_NAME=SUBOBJECT_NAME,OBJECT_ID=OBJECT_ID,
DATA_OBJECT_ID=DATA_OBJECT_ID,OBJECT_TYPE=OBJECT_TYPE,CREATED=CREATED,LAST_DDL_TIME=LAST_DDL_TIME,
TIMESTAMP=TIMESTAMP,STATUS=STATUS,TEMPORARY=TEMPORARY,GENERATED=GENERATED,SECONDARY=SECONDARY,
NAMESPACE=NAMESPACE,EDITION_NAME=EDITION_NAME;
已更新1201104行。
SQL> /
已更新1201104行。
SQL> /
已更新1201104行。
SQL> /
已更新1201104行。
SQL> /
已更新1201104行。
SQL> /
已更新1201104行。
如果回滚段足够大,此时可以查询到SCN4354137之前的信息。
SQL> select * from t1 as of scn 4354137;
ID NAME
---------- --------------------
1 zhangsan
2 zhangsi
3 zhangwu
此时可以使用闪回表技术找回数据。
SQL> flashback table t1 to scn 4354137;
闪回完成。
SQL> select * from t1;
ID NAME
---------- --------------------
1 zhangsan
2 zhangsi
3 zhangwu
如果回滚段不够大,回滚段SCN4354137之前的空间将被回收,此时将无法查询SCN4354137之前的信息。
SQL> select * from t1 as of scn 4354137;
select * from t1 as of scn 4354137
ORA-01555: 快照过旧: 回退段号 8 (名称为 "_SYSSMU8_2456689326$") 过小
此时如果数据库开闪回,并且误删除的时间在db_flashback_retention_target参数范围内,可以利用闪回数据库技术,将整个数据库回退到之前的状态。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 313860096 bytes
Fixed Size 1374304 bytes
Variable Size 201328544 bytes
Database Buffers 104857600 bytes
Redo Buffers 6299648 bytes
数据库装载完毕。
SQL> flashback database to scn 4354137;
闪回完成。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from t1;
ID NAME
---------- --------------------
1 zhangsan
2 zhangsi
3 zhangwu
如果误删除的时间超出了db_flashback_retention_target参数的范围,可能数据库无法闪回到scn 4354137状态,即使可以闪回到误删除之前的状态,无论是闪回表还是闪回数据库,必然对scn 4354137之后的操作有影响,闪回表到scn 4354137,scn 4354137之后对这个表所做的所有操作都将回退,如果是闪回数据库,整个数据库scn 4354137之后的操作都将被回退。误删除的数据重要,误删除之后的数据也重要,这时候如果选择闪回技术就要权衡哪个更重要的问题啦,还好ORACLE自8i开始,推出了LOGMNR日志分析工具,借用 LOGMNR工具,可以在不影响其他数据的同时找回误删除的数据。
初次使用,需要安装,很简单,只需要执行以下2个脚本即可。
SQL> conn / as sysdba
已连接。
SQL> @?/rdbms/admin/dbmslm
程序包已创建。
授权成功。
同义词已创建。
SQL> @?/rdbms/admin/dbmslmd
程序包已创建。
同义词已创建。
查看utl_file_dir设置
SQL> show parameter utl_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string D:\oracle\arch
可以通过命令行修改此参数,也可以通过修改pfile文件设置此参数。
SQL> alter system set utl_file_dir='D:\oracle\arch' scope=spfile;
系统已更改。
该参数为静态参数,需重启数据库后生效。
创建LOGMNR数据字典。
SQL> exec dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => 'd:\oracle\arch');
PL/SQL 过程已成功完成。
添加需要分析的归档日志。
SQL> exec dbms_logmnr.add_logfile(LogFileName =>'D:\oracle\arch\O1_MF_1_117_79SR4KVR_.ARC',Options => dbms_logmnr.new);
PL/SQL 过程已成功完成。
开始日志挖掘,分析日志。
SQL> execute dbms_logmnr.start_logmnr (DictFileName => ’G:\oracle\logs\dict.ora’);
PL/SQL procedure successfully completed
查看日志信息
SQL> select SCN,OPERATION,SEG_OWNER, TABLE_NAME,SEG_TYPE_NAME, SQL_REDO,SQL_UNDO from v$logmnr_contents where scn>5533530 and scn<5533541 and sql_redo like'delete%';
SCN:4354137
OPERATION:DELETE
SEG_OWNER:STREAM
TABLE_NAME:T1
SEG_TYPE_NAME:TABLE
SQL_REDO:delete from "STREAM"."TEST01" where "ID" = '3' and "NAME" = 'zhangwu'
SQL_UNDO:insert into "STREAM"."TEST01"("ID","NAME") values ('3','zhangwu');
SQL_REDO即之前做的模拟误删除的操作,SQL_UNDO就是还原应该做的操作,ORACLE LOGMNR工具真的是很黄很暴力。
发表评论
-
将博客搬至CSDN
2013-12-06 15:49 56将博客搬至CSDN -
博客地址更换通知
2012-09-29 09:23 638自2011年8月,博客使用新地址www.dbdream.org ... -
如何追踪其他SESSION会话信息
2012-02-21 20:35 1383今天测试说在加载条目数据、校验数据和质检数据的时候很慢, ... -
SHM不足导致导致数据库宕机
2012-02-21 20:17 1295今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不 ... -
PCTFREE和PCTUSED及将LOB存到行外
2012-02-17 11:14 1496今天的ADDM报告建议重建存放图片的表并增大PCTFREE,这 ... -
SGA_TARGET大于SGA_MAX_SIZE的真实案例
2012-02-17 11:05 1431今天在给库户数据库健康检查的时候,发现个很奇怪的问题,S ... -
ORACLE随机取数据
2011-10-25 23:53 968目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取2 ... -
oracle将一行拆分为多行
2011-10-12 00:51 2207客户的业务涉及大量的图片信息,之前这些图片信息只在数据库里存着 ... -
ORA-01034、ORA-27101和ORA-28056错误解决方法
2011-10-11 00:40 2286今天登录数据库的时候遇到了ORA-01034和ORA-2710 ... -
查看某个用户下的所有空表
2011-10-09 15:01 1102今天在群里有人问如何 ... -
SQL*LOADER加载图片、TXT
2011-10-09 15:02 1179朋友打电话问我如何利 ... -
oracle10gR2新特性--透明加密(TDE)
2011-10-09 15:02 2023从10gR2开始,oracle推出了透明数据加密技术(Tran ... -
NAMES.DIRECTORY_PATH客户端连接参数
2011-10-08 22:38 3932今天在做oracle10gR2新特性透明加密(TDE)的时候, ... -
tnsping通却连接不上数据库
2011-10-08 22:26 2516今天在Windows XP上装可个11gR2数据库,却出现个很 ... -
ORACLE字符集检查工具CSSCAN
2011-10-08 22:22 1927我们在创建数据库的时候,通常会把字符集设置为ZHS16GBK, ... -
SQL*LOADER和外部表加载
2011-10-08 22:17 1370最近一直在用SQL*LOADER加载数据,用外部表也可以实现, ... -
创建本地Duplicate数据库
2011-10-08 22:14 1087Duplicate是RMAN的一个组成部分,利用Duplica ... -
由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN China Tour 2011)“活动已经正式拉开帷幕。
2011-09-01 12:00 830由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN ... -
enq: TX - row lock contention
2011-07-19 17:52 1168今天,收到客户的邮件说上周每天早上10点多,数据库都会有很多锁 ... -
ORA-600汇总(上)
2011-07-04 15:28 1328此文转载 http://space.itpub.net/135 ...
相关推荐
本文将详细介绍如何利用logmnr找回误删数据。 首先,了解logmnr的基本概念。Log Miner是Oracle数据库内置的一个实用工具,它可以分析Redo Log文件,从中提取出数据库的变更历史信息。当数据被删除时,这些变更信息...
- **回退数据库变化**:通过LogMiner,可以针对特定的数据库变化进行回退,从而减少point-in-time recovery的时间和工作量。 - **性能优化和容量规划**:通过对日志文件中的数据进行分析,可以帮助管理员更好地理解...
这些更改可以包括插入、更新和删除操作,通过解析这些信息,Logmnr能够帮助用户了解数据库中数据的变化历史,这对于数据恢复、审计追踪和性能分析等场景极为重要。 ### Logmnr的工作流程 Logmnr的工作流程主要包括...
DBMS_LOGMNR 包用于分析日志文件,而 DBMS_LOGMNR_D 包用于创建数据字典文件。 使用 LogMiner 工具之前,需要在 init.ora 初始化参数文件中添加一个参数 UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。...
通常情况下,推荐使用在线字典模式,因为它可以利用当前数据库的数据字典来解析归档日志中的变化信息,而不需要额外维护字典文件。 #### 三、环境准备 为了使用LogMiner进行归档日志分析,需要满足以下条件: 1. *...
logmnr日志挖掘,分析redo里面做了哪些操作,可以显示出语句
【DM8 数据库误操作恢复】是数据库管理中的一项重要任务,目的是在出现错误或意外删除后恢复数据到正确状态。以下是对DM8数据库误操作恢复的详细步骤: 1. **开启归档模式**:归档模式对于实现精确的数据恢复至关...
oracle 日志
这些功能使得在错误删除、误更新等情况下能快速恢复数据,无需依赖备份。闪回数据库甚至可以在未进行RMAN备份的情况下,从最近的归档日志恢复到某个时间点。 日志挖掘是Oracle提供的一个高级特性,它允许分析重做...
1. 查明数据库的逻辑更改:确定哪些数据被修改、插入或删除。 2. 侦察并更正用户的误操作:如果用户进行了错误的操作,LogMiner 可以帮助追踪并可能地恢复这些操作。 3. 执行事后审计:对于合规性要求高的环境,...
它们记录了数据库的所有事务操作,是实现数据恢复的关键。本文将围绕“Oracle日志丢失的恢复”这一主题,详细介绍如何处理日志文件丢失的情况,并提供具体的步骤和示例。 #### 一、切换当前日志到新的日志组 当...
达梦数据库20241010,x86 环境驱动包dotNet,dpi,fldr,go,jdbc,logmnr,msgparse,odbc,php_pdo,python,r2dbc
使用DBMS_LOGMNR的这些常量选项可以灵活配置LogMiner的行为,满足不同的分析需求,如只查看已提交事务、忽略损坏数据、跟踪DDL变化等。正确选择和组合这些常量可以有效地提高分析效率和准确性。在实际操作中,应根据...
这种功能使得DBA能够追踪并恢复误操作导致的数据变化,如数据修改、删除或插入,甚至可以确定执行操作的具体人员,从而有效地应对数据安全问题。 Logminer首次出现在Oracle 8i版本中,但可以分析从Oracle 8.0开始的...
2. 恢复丢失的数据:在无法使用Flashback功能时,Logmnr可以作为数据恢复的辅助工具,只要拥有归档日志,就能帮助找回丢失的数据。 3. 跟踪数据库的变化:离线跟踪数据库的变化,不影响在线系统的性能。 4. 回退特定...
同时,启用闪回功能(Flashback)也是一种有效的应急措施,它可以在事务级别或时间点上快速恢复数据,但需要额外的空间存储闪回日志。 此外,为防止数据丢失,还应建立严格的权限管理和操作审计,避免误操作的发生...
自8i版本开始,Oracle引入了LOGMINER,使得数据库管理员能够更有效地理解和利用重做日志文件(redo logs),这些文件记录了所有对数据库的DML(插入、更新、删除)操作,以及DDL(数据定义语言)更改。LOGMINER不仅...
Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMiner dictionary. 指定Logminer字典 <2>. Specify a list of redo log files for analysis. ...
最后,使用LogMiner进行日志分析后,能够获得对数据库变化的深入理解,从而指导管理员快速有效地恢复误操作数据,解决数据错误问题。这一点对于保障医院信息系统安全、维护医院信息的准确性和完整性至关重要。 ...