比较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!');
相关推荐
在Oracle数据库的Real Application Clusters (RAC)环境中,REDO和UNDO管理扮演着至关重要的角色,确保数据的安全性、事务处理以及数据恢复。在RAC架构中,多个实例共享同一物理数据库,这就需要对REDO和UNDO管理进行...
Oracle Logminer 是一个强大的工具,自 Oracle 8i 版本起就提供了对重做日志文件(redo log file)和归档日志文件(archive log file)的分析能力。这个工具主要由两个包组成:DBMS_LOGMNR 和 DBMS_LOGMNR_D,后者...
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 ...
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 11g中,Oracle引入了Flashback Data Archive (FDA)特性,这是一个独立于常规Undo管理的存储机制。FDA允许用户长期保存特定表或对象的历史数据,并可以设定不同的存储策略,以便在不影响当前Undo策略的情况...
7. Redo日志和Flashback Log(闪回日志):Redo日志记录了所有对数据库的更改,是恢复和闪回的关键。Flashback Log则是在闪回数据库时使用的,它保存了更详细的信息,包括闪回所需的所有更改记录。 RMAN(恢复管理...
- 设置合理的redo log大小和数量,以平衡写入性能和磁盘空间占用。 #### 3.3 并发控制 - 通过设置UNDO_RETENTION参数来控制undo数据的保留时间,从而更好地平衡并发性能和undo空间使用率。 ### 四、Oracle故障诊断...
日志文件有两种类型:重做日志(Redo Log)和撤销日志(Undo Log)。重做日志用于推迟数据库的修改,而撤销日志用于记录即时的数据库修改。 3. 重做日志文件的结构 重做日志文件由一个或多个日志文件组成,每个...
在Oracle中,LogMiner是一个实用工具,用于分析redo log和archive logs,以获取关于数据库操作的信息。以下是如何使用LogMiner进行日志分析的详细步骤: 1. **建立日志分析列表**: 首先,我们需要创建一个分析...
- 在Oracle中,UNDO表空间用于存储回滚信息,用于事务回退和读一致性。在自动管理下,通常由SYS用户管理,但用户也可以创建自己的UNDO表空间。 综上所述,这些题目涉及了Oracle数据库管理的关键方面,包括表空间...
异步模式基于 Oracle 流复制技术,通过从重做日志(redo log)中读取记录来捕获数据变化。 ##### 异步在线日志 CDC (Asynchronous Hotlog) - 使用在线重做日志作为数据来源。 - 源表和目标表必须在同一数据库中。 ...
- **THREAD**: 指定当前实例的REDOLOG线程号。 - **UNDO_TABLESPACE**: 如果使用自动回滚管理(AUM),则需要为每个实例指定不同的UNDO表空间。 这些参数确保了每个实例能够独立运行,同时又能在集群层面协同工作。 ...
文件名中提到的"Oracle10g flash_recovery_area 与archive_log",这部分涉及的是Oracle数据库的归档日志管理和Flash Recovery Area。Flash Recovery Area是一个特殊的位置,用于存储闪回所需的所有文件,包括归档...
在归档模式下,重做日志(redolog)会写入归档日志(archivelog)。而在非归档模式下,重做日志文件会被循环覆盖,一旦数据文件丢失,无法使用recover命令进行恢复,必须执行完整的数据库还原。 六、手工备份与恢复...
- **归档日志(Archive Logs)**:用于备份和恢复。 - **实例恢复(Instance Recovery)**:确保在故障后可以恢复到一致状态。 - **数据保护代理(Data Guard Broker)**:管理主备数据库之间的同步和复制。 ###...
- **Oracle数据库**:Oracle使用redo log和undo log,以及归档日志模式提供高可用性和灾难恢复。 - **MySQL数据库**:MySQL的InnoDB存储引擎有类似的重做日志和回滚日志机制,并支持binlog(二进制日志)用于复制...
- **Redo Log Manager**:介绍了重做日志管理器的使用方法。 #### 十二、导入与导出数据 - **Importing and Exporting Data**:涵盖了导入与导出数据的各种方法。 - **Data Pump**:介绍了数据泵的使用方法。 - **...