【数据库管理】④重做日志Redo Log

这篇具有很好参考价值的文章主要介绍了【数据库管理】④重做日志Redo Log。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Redo log(重做日志)的功能

重做日志(Redo log)是数据库管理系统中的一种机制,主要作用包括:

  1. 提供事务的持久性支持:重做日志记录了每个事务对数据库所做的修改操作,以便在系统故障或崩溃时,通过重新执行重做日志中未提交的事务来恢复数据。

  2. 支持数据库备份和恢复:重做日志可以用于还原数据库到某个时间点的状态,同时也是实现增量备份和差异备份等备份策略的重要基础。

  3. 提高数据库性能:数据库管理系统可以将多个操作合并为一个批处理操作,并将其写入重做日志中,从而减少磁盘I/O操作的次数,提高数据库的性能。

  4. 保证数据的一致性:重做日志的使用可以确保数据库的数据一致性,因为当数据库管理系统在执行事务期间出现错误时,可以使用重做日志回滚到之前的状态。

 2. Redo log特征

重做日志(Redo log)是数据库管理系统中的一种机制,具有以下特征:

  1. 持久性:重做日志中记录的操作必须能够在数据库系统崩溃或停机后仍然存在,以便恢复数据库状态。

  2. 顺序写入:重做日志要求数据顺序写入,以提高写入效率和减少磁盘寻址开销。

  3. 循环利用:重做日志空间是有限的,它可以被循环利用,使得旧的日志可以被覆盖而不会导致数据丢失。

  4. 非常规刷盘策略:重做日志的写入不需要等待数据写入磁盘后才返回结果,而是采用非常规刷盘策略,通过缓存日志、延迟刷盘等方式保证高效率写入。

  5. 压缩:重做日志可以压缩记录的操作,以减少日志文件大小,提高存储效率。

  6. 多线程:重做日志可以使用多个线程并行写入,提高写日志的效率。

     

    1)记录数据库的变化(DML、DDL)

    2)用于数据块的recover

    3)以组的方式管理redo file ,最少两组redo ,循环使用

    4)和数据文件存放到不同的磁盘上,需读写速度快的磁盘(比如采用RAID10)

3. 日志切换

日志切换是数据库管理系统中的一个重要概念,它指的是在重做日志(Redo log)空间用尽时,将当前正在写入的日志文件关闭,并开始写入新的日志文件。

在进行日志切换时,数据库管理系统会确保当前正在执行的事务将其所有修改操作都写入日志文件中,并等待这些操作被持久化到磁盘上。然后,系统会将当前的日志文件关闭,并创建一个新的日志文件开始记录后续的操作。

日志切换的目的是确保重做日志空间不会用尽,从而避免数据库出现故障或崩溃时无法恢复数据的情况。通常情况下,数据库管理系统会定期进行日志切换操作,以便及时释放旧的日志文件,同时保证足够的日志空间供未来使用。

Oracle 日志切换的命令是:
 

ALTER SYSTEM SWITCH LOGFILE;

Oracle 日志切换有以下几种模式:

  1. 自动日志切换模式(Automatic Log Switch Mode):当当前联机日志组满时,系统会自动切换到下一个可用的联机日志组。

  2. 手动日志切换模式(Manual Log Switch Mode):需要手动执行 ALTER SYSTEM SWITCH LOGFILE; 命令来进行日志切换。

  3. 强制日志切换模式(Force Log Switch Mode):执行 ALTER SYSTEM SWITCH LOGFILE; 命令后,即使当前联机日志组没有满,系统也会强制切换到下一个可用的联机日志组。这种模式一般用于备份或紧急维护等场景。

在数据库管理系统中,根据日志文件的归档方式,日志切换可以分为归档(Archive)和非归档(No Archive)两种模式。

在归档模式下,数据库管理系统会将当前联机日志组满后的日志文件自动复制到一个预定的归档目录中,并给这些归档日志文件命名。这样做的目的是为了保留历史日志数据,以便备份、还原或查询之用。此外,归档还能提供数据库恢复所需的所有日志文件,以便在完全崩溃的情况下恢复数据库。

在非归档模式下,日志文件不会被自动复制到归档目录中,而是直接覆盖旧的日志文件。这种模式下,用户只能访问当前的联机日志组和最后一次完整备份后的增量备份,不能访问历史日志数据。如果数据库出现灾难性故障,将可能导致无法进行有效的数据库恢复。

一般来说,建议使用归档模式,以便保留历史日志数据并提供完整的数据库恢复能力。

4. Redo log组 

重做日志组(Redo log group)是指在数据库管理系统中一组相互独立的重做日志文件,它们通常被组合在一起以提供足够的重做日志空间。

每个重做日志组包含一个或多个重做日志文件,并且每个日志组的大小和数量可以在数据库创建时进行配置。当当前日志组的空间用尽时,数据库将自动切换到下一个可用的重做日志组,以继续记录重做日志。

使用多个重做日志组的好处是可以增加重做日志的容量和提高系统的可靠性。如果只有一个重做日志组且其已满,则数据库将无法继续执行任何修改操作,这会导致系统崩溃或停机。通过使用多个重做日志组,可以最大限度地减少这种情况的发生。

另外,可以在不同的物理设备上分布重做日志组,从而提高系统的可靠性和可用性。如果一个设备出现故障,其他设备上的重做日志组仍然可用,并且数据库可以继续正常运行。

 

最少两组(NOTE),最好每组有两个成员(NOTE),并存放到不同的磁盘上,大小形同,互相镜像

日志在组写满时发生切换,或手工切换: alter system switch logfile ;

在归档模式,日志进行归档,并把相关的信息写入controlfile

5. 如何添加日志组

5.1 查询日志组信息

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        400   52428800        512          1 NO        CURRENT                                               31459677 31-MAR-23         1.8447E+19                   0
         2          1        398   52428800        512          1 YES       INACTIVE                                              23851789 30-MAR-23           31445128 30-MAR-23         0
         3          1        399   52428800        512          1 YES       INACTIVE                                              31445128 30-MAR-23           31459677 31-MAR-23         0

SQL> 

5.2 查询日志路径

SQL> 
SQL> col member for a50
SQL> select group#,member from v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log

SQL> 
-- 增加一个组group4,大小和之前三组 的BYTES一样

5.3 添加日志组

SQL> 
SQL> alter database add logfile '/u02/oradata/CDB1/redo04.log' size 50m;

Database altered.

SQL> select group#, member from v$logfile order by group#;

    GROUP# MEMBER
---------- --------------------------------------------------
         1 /u02/oradata/CDB1/redo01.log
         2 /u02/oradata/CDB1/redo02.log
         3 /u02/oradata/CDB1/redo03.log
         4 /u02/oradata/CDB1/redo04.log

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        400   52428800        512          1 NO        CURRENT                                               31459677 31-MAR-23         1.8447E+19                   0
         2          1        398   52428800        512          1 YES       INACTIVE                                              23851789 30-MAR-23           31445128 30-MAR-23         0
         3          1        399   52428800        512          1 YES       INACTIVE                                              31445128 30-MAR-23           31459677 31-MAR-23         0
         4          1          0   52428800        512          1 YES       UNUSED                                                       0                            0                   0

SQL>

6. 如何添加日志组的成员

6.1 先建好目录

准备放在/u01/disk2/maxwell/下

加member为每个组(一共是4个组)

[oracle@oracle-db-19c CDB1]$ $ mkdir -p /u02/disk2/maxwell

6.2 添加日志组成员

SQL> 
SQL> show user;
USER is "SYS"
SQL> 
SQL> alter database add logfile member
  2  '/u02/disk2/maxwell/redo01b.log' to group 1,
  3  '/u02/disk2/maxwell/redo02b.log' to group 2,
  4  '/u02/disk2/maxwell/redo03b.log' to group 3,
  5  '/u02/disk2/maxwell/redo04b.log' to group 4;

Database altered.

SQL> 


6.3 查看v$logfile显示invalid

SQL> col member format a40
SQL> select group#, member, status from v$logfile;

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log
         4 /u02/oradata/CDB1/redo04.log
         1 /u02/disk2/maxwell/redo01b.log           INVALID
         2 /u02/disk2/maxwell/redo02b.log           INVALID
         3 /u02/disk2/maxwell/redo03b.log           INVALID
         4 /u02/disk2/maxwell/redo04b.log           INVALID

8 rows selected.

SQL> 

6.4 日志切换即可同步

-- 多切几次, 消除invalid

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /
/


System altered.

SQL> 
System altered.

SQL> SQL> 
SQL> 
SQL> /

System altered.

6.5 再次查看 status

SQL> select group#, member, status from v$logfile;

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log
         4 /u02/oradata/CDB1/redo04.log
         1 /u02/disk2/maxwell/redo01b.log
         2 /u02/disk2/maxwell/redo02b.log
         3 /u02/disk2/maxwell/redo03b.log
         4 /u02/disk2/maxwell/redo04b.log

8 rows selected.

SQL> 
SQL> select * from v$log;      - 看到MEMBERS值已经是2了

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        404   52428800        512          2 YES       INACTIVE                                              31463540 31-MAR-23           31463543 31-MAR-23         0
         2          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   0
         3          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         0
         4          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0

SQL> 

7. 日志视图信息

SQL> 
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        404   52428800        512          2 YES       INACTIVE                                              31463540 31-MAR-23           31463543 31-MAR-23         0
         2          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   0
         3          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         0
         4          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0

SQL> 

-- 说明一下v$log这个重要的视图
-- status有四种状态:
unused		-- :新添加的日志组,还没有使用
inactive	-- :日志组对应的脏块已经从data buffer写入到data file ,可以覆盖
active		-- :日志组对应的脏块还没有从data buffer写入到data file,不能被覆盖
current		-- :当前日志组,日志组对应的脏块还没有从data buffer写入到data file,不能被覆盖
thread		-- :线程(通过后台进程LGWR 启动),在单实例的环境下,thread# 永远是1
sequence	-- :日志序列号.在日志切换时会递增.
FIRST_CHANGE# -- :在当前日志中记录的首个数据块的 scn.(当事务完成的时候会在数据块上写入一个scn,代表数据块的变化).

8. 日志恢复

8.1 例1多元化成员(多个member),单个成员( inactive)日志组丢失

SQL> 
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        404   52428800        512          2 YES       INACTIVE                                              31463540 31-MAR-23           31463543 31-MAR-23         0
         2          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   0
         3          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         0
         4          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0

SQL> 

8.1.1 删除INACTIVE组的member日志

[oracle@oracle-db-19c CDB1]$ cd /u02/disk2/maxwell
[oracle@oracle-db-19c maxwell]$ ls -ltr
total 204816
-rw-r-----. 1 oracle oinstall 52429312 Mar 31 10:05 redo03b.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 31 10:05 redo01b.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 31 10:05 redo04b.log
-rw-r-----. 1 oracle oinstall 52429312 Mar 31 10:08 redo02b.log
[oracle@oracle-db-19c maxwell]$ rm redo01b.log 
[oracle@oracle-db-19c maxwell]$ 

8.1.2 重启数据库

SQL> 
SQL> startup force
ORACLE instance started.

Total System Global Area  629145392 bytes
Fixed Size                  9137968 bytes
Variable Size             419430400 bytes
Database Buffers          184549376 bytes
Redo Buffers               16027648 bytes
Database mounted.
Database opened.
SQL> set pagesize 300 linesize 300
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        404   52428800        512          2 YES       INACTIVE                                              31463540 31-MAR-23           31463543 31-MAR-23         0
         2          1        406   52428800        512          2 YES       INACTIVE                                              31463546 31-MAR-23           31564324 31-MAR-23         0
         3          1        407   52428800        512          2 NO        CURRENT                                               31564324 31-MAR-23         1.8447E+19                   0
         4          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0

SQL> 

8.1.3 v$logfile查询


SQL> select group#, member, status from v$logfile;

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log
         4 /u02/oradata/CDB1/redo04.log
         1 /u02/disk2/maxwell/redo01b.log        INVALID	-- 表明该文件不可访问
         2 /u02/disk2/maxwell/redo02b.log        INVALID	-- 表明该文件不可访问
         3 /u02/disk2/maxwell/redo03b.log        INVALID	-- 表明该文件不可访问
         4 /u02/disk2/maxwell/redo04b.log

8 rows selected.

SQL> 

8.1.4 拷贝日志做恢复

[oracle@oracle-db-19c maxwell]$ cp /u02/oradata/CDB1/redo01.log /u02/disk2/maxwell/redo01b.log
[oracle@oracle-db-19c maxwell]$ cp /u02/oradata/CDB1/redo02.log /u02/disk2/maxwell/redo02b.log 
[oracle@oracle-db-19c maxwell]$ cp /u02/oradata/CDB1/redo03.log /u02/disk2/maxwell/redo03b.log 
[oracle@oracle-db-19c maxwell]$ 

8.1.5 日志切换

SQL>  alter system switch logfile;

System altered.

SQL> select group#, member, status from v$logfile;

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log
         4 /u02/oradata/CDB1/redo04.log
         1 /u02/disk2/maxwell/redo01b.log
         2 /u02/disk2/maxwell/redo02b.log
         3 /u02/disk2/maxwell/redo03b.log
         4 /u02/disk2/maxwell/redo04b.log

8 rows selected.

SQL> 

8.2 例2 group (inactive)组全部丢失

SQL> select * from v$log;
GROUP# THREAD#	SEQUENCE# BYTES	BLOCKSIZE	MEMBERS	ARC	STATUS	FIRST_CHANGE# FIRST_TIM	NEXT_CHANGE#	NEXT_TIME	CON_ID
-----  -------	--------- -----	---------	-------	---	------	------------- ---------	------------	---------	-----
1		1		265		52428800	512		2		NO	INACTIVE8004446		  14-SEP-20	8004453			14-SEP-20	0
2		1		266		52428800	512		2		NO	CURRENT	8004453		  14-SEP-20	281474976710655				0
3		1		264		52428800	512		2		NO	INACTIVE8003348		  13-SEP-20	8004446			14-SEP-20	0
4		1		253		52428800	512		2		NO	INACTIVE7901812		  14-SEP-20	8003348			14-SEP-20	0

[oracle@oracle-db-19c maxwell]$ rm /u02/oradata/CDB1/redo03.log
[oracle@oracle-db-19c maxwell]$ rm /u02/disk2/maxwell/redo03b.log
[oracle@oracle-db-19c maxwell]$ ll
total 153612
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:32 redo01b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:48 redo02b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:27 redo04b.log
-- 实例没有奔溃的情况下,使用clear命令
SQL> alter database clear logfile group 3;	-- 注意:这一步使刚才在OS里删掉的那两个group2的文件又建立上了.
Database altered.
[oracle@oracle-db-19c maxwell]$ ll
total 204816
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:32 redo01b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:53 redo02b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:53 redo03b.log
-rw-r----- 1 oracle oinstall 52429312 Sep 14 22:27 redo04b.log

8.3 例3 active日志组丢失

-- 注:  本例日志组3状态是ACTIVE状态的.
[oracle@oracle-db-19c maxwell]$ rm /u01/oradata/CDB1/redo03.log
[oracle@oracle-db-19c maxwell]$ rm /u01/disk2/maxwell/redo03b.log
SQL> alter database clear logfile group 3;
alter database clear logfile group 3
*
第 1 行出现错误:
ORA-01624:   日志 3 是紧急恢复实例 CDB1 (线程 1) 所必需的
ORA-00312:   联机日志 3 线程 1:   '/u01/oradata/CDB1/redo03.log'
ORA-00312:   联机日志 3 线程 1:   '/u01/disk2/maxwell/redo03b.log'
-- Active日志损坏,Oracle 建议此时先做一个手工检查点切换
SQL> alter system checkpoint;
-- 如果转为inactive,则按照clear方法处理;如果halt了(挂住了),则转为 clear unarchived(current)处理.
-- (可能会出现各种现象,教材没出现过的,进也不成,退也不成)
SQL> alter database clear logfile group 3;

8.4 例4 current日志组丢失.

--- 注:  本例日志组1状态是ACTIVE状态的.
[oracle@oracle-db-19c maxwell]$ rm /u02/oradata/CDB1/redo01.log
[oracle@oracle-db-19c maxwell]$ rm /u02/disk2/maxwell/redo01b.log
SQL> alter system switch logfile; 切换几次,触动它一下.
-- 告警日志会记录有关信息
-- 暂时好像没有什么问题发生,继续切换,当current 又转会到group1时,死机!

当前日志损坏的问题比较复杂,可以分以下几种情况讨论

8.4.1 如果数据库没有崩溃

第一步,可以做一个完全检查点,将db buffer中的所有dirty buffer全部刷新到磁盘上.

SQL> alter system checkpoint;

第二步,尝试数据库在打开状态下进行不做归档的强制清除.

SQL> alter database clear unarchived logfile group n;

数据库此时为打开状态,这步若能成功,一定要做一个新的数据库全备(NOTE).因为当前日志没有归档,归档日志sequence已无法保持连续性.

8.4.2 如果数据库已经崩溃,准备做传统的基于日志的不完全恢复或闪回数据库.

SQL> recover database until cancel;
SQL> alter database open resetlogs;

8.4.3 如果严重到以上方法都不能resetlogs打开数据库,可以试试下面的最后一招:

修改pfile文件,第一行添加_allow_resetlogs_corruption=TRUE

该参数的含义是: 允许在破坏一致性的情况下强制重置日志,打开数据库.

_allow_resetlogs_corruption将使用所有数据文件最旧的SCN打开数据库,所以通常来讲需要保证 SYSTEM TBS拥有最旧的 SCN.在强制打开数据库之后,可能因为各种原因会有 ora-600错误.

[oracle@maxwell dbs]$ vi inittest11g.ora
_allow_resetlogs_corruption=TRUE
*.audit_file_dest='/u01/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.1.0.0.0' ...
# 再以pfile 启动instance 到mount状态,然后 alter database open resetlogs  //这是在不一致状态下强行打开了数据库,建议做一个逻辑全备.

9. 使日志恢复到原来的配置

尝试使用OEM方式恢复原状.删除增加的member和group4,注意当前日志组要切换后才能删除,最后,验证无误后删掉/u02/disk2目录.

9.1 查询日志组

SQL> 
SQL> set pagesize 200 linesize 200
SQL> 
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED  STATUS                                           FIRST_CHANGE# FIRST_TIME      NEXT_CHANGE# NEXT_TIME           CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- --------------- ------------ --------------- ----------
         1          1        394   52428800        512          1 YES       INACTIVE                                              23709710 31-MAR-23           23718839 31-MAR-23         0
         2          1        395   52428800        512          1 YES       INACTIVE                                              23718839 31-MAR-23           23718973 31-MAR-23         0
         3          1        396   52428800        512          1 NO        CURRENT                                               23718973 31-MAR-23         1.8447E+19                   0

SQL> 

9.2 删除日志组

删除的日志组不能是current或者ACTIVE,处于active的日志文件组无法删除,因为这个日志文件组可能会在实例恢复的时候使用

可以切换检查点, 使active的日志文件组变成inactive的日志文件组文章来源地址https://www.toymoban.com/news/detail-404234.html

SQL> alter system checkpoint;
可以切换日志改变日志组
SQL> alter system switch logfile; 
SQL> alter database drop logfile group 4; 
SQL> select * from v$log;
GROUP# THREAD#	SEQUENCE# BYTES	BLOCKSIZE	MEMBERS	ARC	STATUS	FIRST_CHANGE# FIRST_TIM	NEXT_CHANGE#	NEXT_TIME	CON_ID
-----  -------	--------- -----	---------	-------	---	------	------------- ---------	------------	---------	-----
1		1		261		52428800	512		2		NO	INACTIVE7872212		  14-SEP-20	7893950			14-SEP-20	0
2		1		262		52428800	512		2		NO	CURRENT	7893950		  14-SEP-20	281474976710655				0
3		1		260		52428800	512		2		NO	INACTIVE7851184		  13-SEP-20	7872212			14-SEP-20	0

9.3 删除日志组成员

SQL> col member format a40
SQL> select group#, member, status from v$logfile;
GROUP#	MEMBER										STATUS
------	----------------------------------------	----------------------------------------
3		/u01/app/oracle/oradata/orcl/redo03.log
2		/u01/app/oracle/oradata/orcl/redo02.log
1		/u01/app/oracle/oradata/orcl/redo01.log
1		/u01/disk2/klausyao/redo01b.log
2		/u01/disk2/klausyao/redo02b.log
3		/u01/disk2/klausyao/redo03b.log
SQL> alter database drop logfile member '/u01/disk2/klausyao/redo01b.log';
ERROR at line 1:
ORA-01609: log 1 is the current log for thread 1 - cannot drop members
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
ORA-00312: online log 1 thread 1: '/u01/disk2/klausyao/redo01b.log'
-- 当前正在使用中,先删除其他的成员,再切换日志组后删除
SQL> alter database drop logfile member '/u01/disk2/klausyao/redo02b.log';
SQL> alter database drop logfile member '/u01/disk2/klausyao/redo03b.log';
Database altered.
SQL> alter system switch logfile; 
SQL> alter database drop logfile member '/u01/disk2/klausyao/redo01b.log';
Database altered.

9.4 查验

SQL> select group#, member, status from v$logfile;

    GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------
         3 /u02/oradata/CDB1/redo03.log
         2 /u02/oradata/CDB1/redo02.log
         1 /u02/oradata/CDB1/redo01.log

SQL> 

9.5 物理删除文件

[oracle@oracle-db-19c ~]$ cd /u02/disk2/maxwell
[oracle@oracle-db-19c maxwell]$ ll
total 204816
-rw-r----- 1 oracle oinstall 52429312 Oct 26 23:48 redo01b.log
-rw-r----- 1 oracle oinstall 52429312 Oct 26 23:35 redo02b.log
-rw-r----- 1 oracle oinstall 52429312 Oct 26 23:35 redo03b.log
-rw-r----- 1 oracle oinstall 52429312 Oct 26 23:41 redo04b.log
-- 删除文件夹
[oracle@oracle-db-19c oracle-db-19cyao]$ rm -rf /u02/disk2

到了这里,关于【数据库管理】④重做日志Redo Log的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL 三大日志(bin log、redo log、undo log)

    redo log (重做日志) 是 InnoDB 存储引擎独有的,它让 MySQL有了崩溃恢复的能力,是事务中实现 持久化的重要操作 比如 MySQL 实例宕机了,重启时, InnoDB 存储引擎会使用 redo log 恢复数据,保 证数据的持久性与完整性 。 MySQL 中数据时以页为单位,查询一条记录,会从硬盘中把该

    2024年02月07日
    浏览(53)
  • MySQL日志之binlog,redo log

    目录 1.binlog 概念: 作用: 格式: 写入操作: 2.redo log 概念: 作用: redo log在MySQL操作数据时的实现: 查询时: 更新时: 写入操作: 概念: 刷盘策略: 自动刷盘操作: binlog,记录所有语句的更新操作(即只要增删改,不包含查) 同步数据,保证 数据的一致性 statement:

    2024年02月16日
    浏览(43)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

    记录日志为文档 记录日志到数据库

    2024年02月20日
    浏览(50)
  • 必须了解的mysql三大日志-binlog、redo log和undo log

    MySQL实现事务、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL 本文主要讲述MySQL的三大日志系统,Redo Log(重做日志)、Undo Log(恢复日志)、Bin Log(备份日志) Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自

    2024年02月05日
    浏览(54)
  • 02_重要的两个日志 redo log 和 binlog

    MySQL 45 讲Note: 课程专栏名称:《MySQL实战45讲》课程 笔记参考:MYSQL45 讲 想要理解这两个日志 redo log 和 binlog ;我们需要对MySQL 的备份恢复机制有一个基本的了解。 之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,带着好奇的态度,这是怎样做到的呢

    2024年02月07日
    浏览(39)
  • MySQL知识学习03(三大日志详解 binlog、redo log、undo log)

    前言 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属 二进制日志 binlog(归档日志) 和 事务日志 redo log(重做日志) 和 undo log(回滚日志) 。 1、redo log? redo log (重做日志)是 InnoDB 存储引擎独有的,它让

    2024年02月02日
    浏览(44)
  • Mysql日志redo log、bin log、undo log 区别与作用及二阶段提交

    重做日志 作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 内容:物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中

    2024年02月03日
    浏览(46)
  • k8s创建数据库mysql MySQL数据库之日志管理

     本文使用的是本机挂载数据,这样存在一个弊端没有pvc挂载好  重点来了: 这种共享宿主机存储的方法似乎可以解决Mysql数据库数据恢复的场景,我们似乎可以万事大吉了! But ,有的老铁会问:如果我得宿主机挂了怎么办?或者Pod没有在上一次节点上拉起,而是在新的节点

    2023年04月27日
    浏览(79)
  • .net 6 web api项目添加日志(Serilog)管理,将日志输出到控制台、文件、数据库

    1.在nuget安装下面几个包 Serilog Serilog.AspNetCore //用于日志输出到控制台 Serilog.Formatting.Compact //用于日志输出到mysql数据库 Serilog.Sinks.MySQL //用于日志输出到文件 Serilog.Sinks.RollingFile 2.在Program.cs文件配置日志参数,依赖注入 别忘了在appsettings.json添加数据库连接字符串 3. 使用日志

    2024年02月10日
    浏览(72)
  • 第77讲:二进制方式搭建MySQL数据库5.7版本以及错误日志管理

    前面是使用的yum的方式安装的MySQL数据库,在企业生产环境中大多数都用二进制方式安装。 本次使用二进制方式搭建MySQL 5.7.36版本。 1.1.下载MySQL5.7版本的二进制文件 1.2.创建mysql用户管理MySQL服务

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包