`
chinapkw
  • 浏览: 111297 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

男人oracle,current redo log 实验

阅读更多

oracle 是日志前写式数据库,即在写入数据文件一定先保证日志写完。
下面这个测试。是在没有当前日志组的情况,提交依然可以正常保存数据。
可以想想为什么,以便更深入理解oracle内部运做。

以sys用户登陆,查看当前redo log 信息

 

SYS->select group#,status from v$log;   

    GROUP# STATUS
---------- ------------------------------------------------
         1 UNUSED
         2 UNUSED
         3 CURRENT
SYS->select group#,member from v$logfile;

    GROUP# MEMBER
---------- ----------------------------------------
         3 /opt/app/oracle/oradata/orcl/redo03.log
         2 /opt/app/oracle/oradata/orcl/redo02.log
         1 /opt/app/oracle/oradata/orcl/redo01.log

 删除current log redo03.log

SYS->! rm /opt/app/oracle/oradata/orcl/redo03.log -rf

 确认是否删除了

SYS->! ls /opt/app/oracle/oradata/orcl/
control01.ctl  control03.ctl  redo01.log  sysaux01.dbf  temp01.dbf     users01.dbf
control02.ctl  example01.dbf  redo02.log  system01.dbf  undotbs01.dbf

 现在数据活的依然很健康,在没有current redo log的情况,那我们试一下在这样的情况,创建表,写入数据,会不会丢失。

SYS->create table test_redo(id number(1));

Table created.
SYS->insert into test_redo values(1);

1 row created.

SYS->insert into test_redo values(2);

1 row created.
SYS->select * from test_redo;

        ID
----------
         1
         2

 创建了一个测试表,并插入2条记录。没有报错,现在commit一下.

SYS->commit;

 Commit complete.
Commit 也没报错,下面正常 关闭数据库

SYS->shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

 启动时,报错了。

SYS->startup
ORACLE instance started.

Total System Global Area  243269632 bytes
Fixed Size                  1218748 bytes
Variable Size              83887940 bytes
Database Buffers          155189248 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/opt/app/oracle/oradata/orcl/redo03.log'

 我们恢复一下,重新生成redo log

SYS->recover database until cancel;
Media recovery complete.
SYS->alter database open resetlogs;

Database altered.

 可以看到。数据没有丢失。

SYS->select * from test_redo;

        ID
----------
         1
         2

 接下来的试验。就是alter system swith logfile
就是说。oracle打开日志后。就认为current log 存在,并直接写入物理上的log 就好
而linux rm 只是删除inode 而实在物理地址还在
oracle 并不知道,当你触发其它的动作重新要current log 时。会发现current log 已经不存了。

所以并不是网上有些人说的是os 的缓存问题。

 

0
0
分享到:
评论

相关推荐

    Redo Log之一:理解Oracle redo log

    Oracle重做日志(Redo Log)是Oracle数据库的一个关键组成部分,它记录了数据库的所有操作变化,保证了数据的完整性和一致性。在了解Oracle redo log之前,首先需要了解几个基础概念: 1. 数据库变化历史:Oracle ...

    rac数据库修改redolog日志组大小及数量.docx

    在Oracle RAC (Real Application Clusters) 数据库环境中,Redo Log 日志是记录数据库事务更改的关键组件之一。Redo Log日志用于在数据库崩溃后恢复数据,并且对于保证数据的一致性和持久性至关重要。在实际应用中,...

    Archive Log Current及Archive Log路线图

    本文将详细介绍Oracle数据库中Archive Log的相关知识点,包括其基本概念、在RAC环境下的应用特点以及如何通过`ALTER SYSTEM ARCHIVELOG CURRENT`命令来手动归档当前redo log文件组等内容。 #### Archive Log简介 ...

    Oracle日志介绍

    2. **CURRENT** - 当前redo log组,正接收写入操作。 3. **INACTIVE** - 表示redo log组不再用于实例恢复,可能已归档或未归档。 4. **UNUSED** - redo log文件未被写入过,可能是新添加或resetlogs操作后的状态。 5...

    ORACLEREDO LOG文件分析及C语言描述.pdf

    Oracle数据库系统的重做日志(REDO LOG)是其核心组件之一,用于记录数据库的所有更改,确保在系统崩溃或故障后能够恢复数据的一致性。本文将深入解析Oracle REDO LOG文件的结构,并通过C语言描述相关数据结构,探讨...

    Archive Log 学习笔记 --oracle 数据库

    - 归档日志切换:当redo log group切换时,会自动触发归档操作,也可以手动通过`ALTER SYSTEM ARCHIVE LOG CURRENT`命令进行。 4. **归档日志和RMAN备份**: - RMAN(Recovery Manager)是Oracle提供的备份和恢复...

    oracle归档日志笔记

    ALTER DATABASE ADD LOGFILE GROUP 5 ('/u01/app/oracle/oradata/ORCL/onlinelog/redo05.log', /u01/app/oracle/oradata/ORCL/onlinelog/redo05_2.log) SIZE 100M; ``` #### 五、在线重做日志文件的存储位置 - ...

    oracle scn概念解析

    **Checkpoint 是 Oracle 数据库的一个关键机制**,用于同步 Data Files、Control File 和 Redo Log Files,确保它们之间的 SCN 保持一致。Checkpoint 过程主要包括以下几个步骤: 1. **Redo Buffer 刷盘**:Redo ...

    Oracle数据库日志文件损坏时修复方法的实验研究

    ### Oracle数据库日志文件损坏时修复方法的实验研究 #### 引言与背景 Oracle数据库作为全球领先的企业级数据库管理系统之一,其数据安全性和可靠性至关重要。数据库日志文件,包括重做日志(Redo Log)和归档日志...

    oracle归档日志挖掘详细步骤.docx

    手动切换当前redo日志的命令是`ALTER SYSTEM ARCHIVE LOG CURRENT`,这有助于确保数据库在发生故障时能够恢复到特定时间点。 接下来,查询归档日志的时间范围至关重要,因为我们需要确定要分析的具体日志文件。可以...

    ORACLE联机日志文件丢失或损坏的处理方法

    联机重做日志(Online Redo Log)分为当前联机重做日志(Current Online Redo Log)和非当前联机重做日志(Non-Current Online Redo Log)。当前联机重做日志是指正在被使用的重做日志文件,而非当前联机重做日志则...

    oracle 归档模式

    归档模式下,数据库的所有事务日志(redo log)都会被归档保存,这意味着即使主数据库文件损坏或丢失,也能够通过归档的日志文件进行数据恢复。 #### 二、如何判断Oracle是否处于归档模式 要确定Oracle数据库是否...

    Oracle数据库归档日志挖掘步骤

    1. 手动切换当前 redo 日志:使用 alter system archive log current; 语句可以手动切换当前 redo 日志,以便开始归档日志的挖掘。 2. 查询归档日志的时间范围:使用 select 语句可以查询归档日志的时间范围,例如...

    Oracle 11g OCP-052 V9.02考试题库中英文对照详解

    实例因为断电异常中止。哪些是关于 redo 日志在实例恢复期间的正确描述? A. Inactive 和 current 状态的 redo 日志需要完成...实例恢复是进程应用记录在 online redo log 的信息去重建最近一次检查点的之后的变更。

    Oracle数据库常见维护问题手册-精典

    ALTER DATABASE MODIFY LOGFILE GROUP 2 ('/path/to/redo02a.log', '/path/to/redo02b.log') SIZE 50M; ``` **临时表空间迁移** 临时表空间通常用于临时存储和排序操作。迁移临时表空间的步骤如下: 1. 将临时表...

    oracle的归档模式

    在Oracle数据库系统中,联机重做日志(Online Redo Log)是记录数据库事务操作的关键组件,它保存了对数据库的所有修改记录。每个数据库至少包含两个重做日志组,以便在一组填满后进行日志切换。 在非归档模式...

    Oracle11G数据库DataGuard灾备切换方案.pdf

    Oracle 11G 数据库 DataGuard 灾备切换方案 本文档介绍了 Oracle 11G 数据库 DataGuard 灾备切换方案,旨在帮助数据库管理员快速实现灾备切换,确保数据安全和可用性。 一、检查 在进行灾备切换之前,需要检查...

    ORACLE完整卸载,避免二次安装失败

    这些通常位于数据库的ORACLE_HOME下的datafile和redo log file子目录。 6. **清理监听配置**:如果Oracle监听器也在卸载范围内,编辑`listener.ora`和`tnsnames.ora`文件,删除相关条目,或者从网络服务中移除监听...

    RAC下的REDO和UNDO管理

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

    oracle 卸载干净方法

    如果不需要保留旧的数据,可以删除数据文件(.dbf)、控制文件(.ctl)、redo日志(.log)以及归档日志。这些文件通常位于ORACLE_HOME的`database`或`oradata`子目录下。 6. **移除监听配置**: 删除`listener....

Global site tag (gtag.js) - Google Analytics