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 的缓存问题。
分享到:
相关推荐
Oracle重做日志(Redo Log)是Oracle数据库的一个关键组成部分,它记录了数据库的所有操作变化,保证了数据的完整性和一致性。在了解Oracle redo log之前,首先需要了解几个基础概念: 1. 数据库变化历史:Oracle ...
在Oracle RAC (Real Application Clusters) 数据库环境中,Redo Log 日志是记录数据库事务更改的关键组件之一。Redo Log日志用于在数据库崩溃后恢复数据,并且对于保证数据的一致性和持久性至关重要。在实际应用中,...
本文将详细介绍Oracle数据库中Archive Log的相关知识点,包括其基本概念、在RAC环境下的应用特点以及如何通过`ALTER SYSTEM ARCHIVELOG CURRENT`命令来手动归档当前redo log文件组等内容。 #### Archive Log简介 ...
2. **CURRENT** - 当前redo log组,正接收写入操作。 3. **INACTIVE** - 表示redo log组不再用于实例恢复,可能已归档或未归档。 4. **UNUSED** - redo log文件未被写入过,可能是新添加或resetlogs操作后的状态。 5...
Oracle数据库系统的重做日志(REDO LOG)是其核心组件之一,用于记录数据库的所有更改,确保在系统崩溃或故障后能够恢复数据的一致性。本文将深入解析Oracle REDO LOG文件的结构,并通过C语言描述相关数据结构,探讨...
- 归档日志切换:当redo log group切换时,会自动触发归档操作,也可以手动通过`ALTER SYSTEM ARCHIVE LOG CURRENT`命令进行。 4. **归档日志和RMAN备份**: - RMAN(Recovery Manager)是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; ``` #### 五、在线重做日志文件的存储位置 - ...
**Checkpoint 是 Oracle 数据库的一个关键机制**,用于同步 Data Files、Control File 和 Redo Log Files,确保它们之间的 SCN 保持一致。Checkpoint 过程主要包括以下几个步骤: 1. **Redo Buffer 刷盘**:Redo ...
### Oracle数据库日志文件损坏时修复方法的实验研究 #### 引言与背景 Oracle数据库作为全球领先的企业级数据库管理系统之一,其数据安全性和可靠性至关重要。数据库日志文件,包括重做日志(Redo Log)和归档日志...
手动切换当前redo日志的命令是`ALTER SYSTEM ARCHIVE LOG CURRENT`,这有助于确保数据库在发生故障时能够恢复到特定时间点。 接下来,查询归档日志的时间范围至关重要,因为我们需要确定要分析的具体日志文件。可以...
联机重做日志(Online Redo Log)分为当前联机重做日志(Current Online Redo Log)和非当前联机重做日志(Non-Current Online Redo Log)。当前联机重做日志是指正在被使用的重做日志文件,而非当前联机重做日志则...
归档模式下,数据库的所有事务日志(redo log)都会被归档保存,这意味着即使主数据库文件损坏或丢失,也能够通过归档的日志文件进行数据恢复。 #### 二、如何判断Oracle是否处于归档模式 要确定Oracle数据库是否...
1. 手动切换当前 redo 日志:使用 alter system archive log current; 语句可以手动切换当前 redo 日志,以便开始归档日志的挖掘。 2. 查询归档日志的时间范围:使用 select 语句可以查询归档日志的时间范围,例如...
实例因为断电异常中止。哪些是关于 redo 日志在实例恢复期间的正确描述? A. Inactive 和 current 状态的 redo 日志需要完成...实例恢复是进程应用记录在 online redo log 的信息去重建最近一次检查点的之后的变更。
ALTER DATABASE MODIFY LOGFILE GROUP 2 ('/path/to/redo02a.log', '/path/to/redo02b.log') SIZE 50M; ``` **临时表空间迁移** 临时表空间通常用于临时存储和排序操作。迁移临时表空间的步骤如下: 1. 将临时表...
在Oracle数据库系统中,联机重做日志(Online Redo Log)是记录数据库事务操作的关键组件,它保存了对数据库的所有修改记录。每个数据库至少包含两个重做日志组,以便在一组填满后进行日志切换。 在非归档模式...
Oracle 11G 数据库 DataGuard 灾备切换方案 本文档介绍了 Oracle 11G 数据库 DataGuard 灾备切换方案,旨在帮助数据库管理员快速实现灾备切换,确保数据安全和可用性。 一、检查 在进行灾备切换之前,需要检查...
这些通常位于数据库的ORACLE_HOME下的datafile和redo log file子目录。 6. **清理监听配置**:如果Oracle监听器也在卸载范围内,编辑`listener.ora`和`tnsnames.ora`文件,删除相关条目,或者从网络服务中移除监听...
在Oracle数据库的Real Application Clusters (RAC)环境中,REDO和UNDO管理扮演着至关重要的角色,确保数据的安全性、事务处理以及数据恢复。在RAC架构中,多个实例共享同一物理数据库,这就需要对REDO和UNDO管理进行...
如果不需要保留旧的数据,可以删除数据文件(.dbf)、控制文件(.ctl)、redo日志(.log)以及归档日志。这些文件通常位于ORACLE_HOME的`database`或`oradata`子目录下。 6. **移除监听配置**: 删除`listener....