`
wuhuizhong
  • 浏览: 684499 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

关于Oracle的UNDO,REDO和archive log

 
阅读更多

比较INSERT,UPDATE,DELETE产生UNDO和REDO大小,一般情况:

UNDO: INSERT < UPDATE < DELETE

REDO: INSERT < DELETE < UPDATE

DDL既产生UNDO也产生REDO.

SELECT不产生UNDO和REDO.

 

最小化REDO的方法:

1.使用Nologging

2.DIRECT PATH INSERT

3.SQL*Loader

4.使用临时表

5.在DIRECT LOAD时,如果有索引,需要先把索引改成unusable状态,产生数据之后使用Nologging重建。

 

redo logs VS. archive log

归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用。

 

-- 测试表
CREATE TABLE TEST(ID NUMBER,NAME VARCHAR2(20)); 
-- 计算 redo 大小
CREATE OR REPLACE FUNCTION GET_STAT_VAL(P_NAME VARCHAR2) RETURN NUMBER IS
  L_VAL NUMBER;
BEGIN
  SELECT B.VALUE
    INTO L_VAL
    FROM V$STATNAME A, V$MYSTAT B
   WHERE A.STATISTIC# = B.STATISTIC#
     AND A.NAME = P_NAME;
  RETURN L_VAL;
END GET_STAT_VAL;

-- INSERT: 在Undo中记录插入行ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> INSERT INTO TEST VALUES(1,'TEST1');
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

-- UPDATE: 在Undo中记录被更新列的前镜像和被更新行ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> UPDATE TEST SET NAME = 'TEST TEST' WHERE ID = 1;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

-- DELETE: 在Undo中记录被删除行所有列的前镜像和其ROWID.
SQL> SET SERVEROUTPUT ON
SQL> variable redo number;
SQL> variable undo number;
SQL> exec :redo := GET_STAT_VAL('redo size');
SQL> exec :undo := GET_STAT_VAL('undo change vector size');
SQL> DELETE TEST WHERE ID = 1;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('undo change vector size') - :undo)||' byes of undo generated!');
SQL> COMMIT;
SQL> exec DBMS_OUTPUT.PUT_LINE((GET_STAT_VAL('redo size') - :redo)||' byes of redo generated!');

 

分享到:
评论

相关推荐

    RAC下的REDO和UNDO管理

    在Oracle数据库的Real Application Clusters (RAC)环境中,REDO和UNDO管理扮演着至关重要的角色,确保数据的安全性、事务处理以及数据恢复。在RAC架构中,多个实例共享同一物理数据库,这就需要对REDO和UNDO管理进行...

    Oracle Logminer

    Oracle Logminer 是一个强大的工具,自 Oracle 8i 版本起就提供了对重做日志文件(redo log file)和归档日志文件(archive log file)的分析能力。这个工具主要由两个包组成:DBMS_LOGMNR 和 DBMS_LOGMNR_D,后者...

    Oracle 11g datagurd搭建实战

    set standby_logfile ('/u01/app/oracle/oradata/prodstd/redo01a.log', '/u01/app/oracle/oradata/prodstd/redo02a.log', '/u01/app/oracle/oradata/prodstd/redo03a.log') set db_unique_name to prodstd set ...

    oracle 手工创建数据库完整步骤

    LOGFILE GROUP 1 ('C:\oracle\oradata\web\redo01.log') SIZE 100M, GROUP 2 ('C:\oracle\oradata\web\redo02.log') SIZE 100M, GROUP 3 ('C:\oracle\oradata\web\redo03.log') SIZE 100M; spool off exit; ``` ###...

    Oracle Flashback 技术总结

    在Oracle 11g中,Oracle引入了Flashback Data Archive (FDA)特性,这是一个独立于常规Undo管理的存储机制。FDA允许用户长期保存特定表或对象的历史数据,并可以设定不同的存储策略,以便在不影响当前Undo策略的情况...

    Oracle Flashback技术

    7. Redo日志和Flashback Log(闪回日志):Redo日志记录了所有对数据库的更改,是恢复和闪回的关键。Flashback Log则是在闪回数据库时使用的,它保存了更详细的信息,包括闪回所需的所有更改记录。 RMAN(恢复管理...

    《Oracle内核技术揭秘》PDF版本下载.txt

    - 设置合理的redo log大小和数量,以平衡写入性能和磁盘空间占用。 #### 3.3 并发控制 - 通过设置UNDO_RETENTION参数来控制undo数据的保留时间,从而更好地平衡并发性能和undo空间使用率。 ### 四、Oracle故障诊断...

    Oracle数据库重做日志文件的分析及其应用.pdf

    日志文件有两种类型:重做日志(Redo Log)和撤销日志(Undo Log)。重做日志用于推迟数据库的修改,而撤销日志用于记录即时的数据库修改。 3. 重做日志文件的结构 重做日志文件由一个或多个日志文件组成,每个...

    oracle 从日志文件进行分析

    在Oracle中,LogMiner是一个实用工具,用于分析redo log和archive logs,以获取关于数据库操作的信息。以下是如何使用LogMiner进行日志分析的详细步骤: 1. **建立日志分析列表**: 首先,我们需要创建一个分析...

    广药oracle选择题复习.doc

    - 在Oracle中,UNDO表空间用于存储回滚信息,用于事务回退和读一致性。在自动管理下,通常由SYS用户管理,但用户也可以创建自己的UNDO表空间。 综上所述,这些题目涉及了Oracle数据库管理的关键方面,包括表空间...

    oracle cdc

    异步模式基于 Oracle 流复制技术,通过从重做日志(redo log)中读取记录来捕获数据变化。 ##### 异步在线日志 CDC (Asynchronous Hotlog) - 使用在线重做日志作为数据来源。 - 源表和目标表必须在同一数据库中。 ...

    ORACLE_RAC数据库中的初始化参数的设置

    - **THREAD**: 指定当前实例的REDOLOG线程号。 - **UNDO_TABLESPACE**: 如果使用自动回滚管理(AUM),则需要为每个实例指定不同的UNDO表空间。 这些参数确保了每个实例能够独立运行,同时又能在集群层面协同工作。 ...

    oracle flash back stop

    文件名中提到的"Oracle10g flash_recovery_area 与archive_log",这部分涉及的是Oracle数据库的归档日志管理和Flash Recovery Area。Flash Recovery Area是一个特殊的位置,用于存储闪回所需的所有文件,包括归档...

    Oracle DBA关键技能 备份与恢复最佳实践

    在归档模式下,重做日志(redolog)会写入归档日志(archivelog)。而在非归档模式下,重做日志文件会被循环覆盖,一旦数据文件丢失,无法使用recover命令进行恢复,必须执行完整的数据库还原。 六、手工备份与恢复...

    Oracle 架构全图 Oracle 架构全图

    - **归档日志(Archive Logs)**:用于备份和恢复。 - **实例恢复(Instance Recovery)**:确保在故障后可以恢复到一致状态。 - **数据保护代理(Data Guard Broker)**:管理主备数据库之间的同步和复制。 ###...

    数据库日志操作相关信息

    - **Oracle数据库**:Oracle使用redo log和undo log,以及归档日志模式提供高可用性和灾难恢复。 - **MySQL数据库**:MySQL的InnoDB存储引擎有类似的重做日志和回滚日志机制,并支持binlog(二进制日志)用于复制...

    最完整的Toad For Oracle使用手册

    - **Redo Log Manager**:介绍了重做日志管理器的使用方法。 #### 十二、导入与导出数据 - **Importing and Exporting Data**:涵盖了导入与导出数据的各种方法。 - **Data Pump**:介绍了数据泵的使用方法。 - **...

Global site tag (gtag.js) - Google Analytics