当前位置: 首页 > news >正文

【数据库管理】④重做日志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                   02          1        398   52428800        512          1 YES       INACTIVE                                              23851789 30-MAR-23           31445128 30-MAR-23         03          1        399   52428800        512          1 YES       INACTIVE                                              31445128 30-MAR-23           31459677 31-MAR-23         0SQL> 

5.2 查询日志路径

SQL> 
SQL> col member for a50
SQL> select group#,member from v$logfile;GROUP# MEMBER
---------- --------------------------------------------------3 /u02/oradata/CDB1/redo03.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.logSQL> 
-- 增加一个组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.log2 /u02/oradata/CDB1/redo02.log3 /u02/oradata/CDB1/redo03.log4 /u02/oradata/CDB1/redo04.logSQL> 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                   02          1        398   52428800        512          1 YES       INACTIVE                                              23851789 30-MAR-23           31445128 30-MAR-23         03          1        399   52428800        512          1 YES       INACTIVE                                              31445128 30-MAR-23           31459677 31-MAR-23         04          1          0   52428800        512          1 YES       UNUSED                                                       0                            0                   0SQL>

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 member2  '/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.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.log4 /u02/oradata/CDB1/redo04.log1 /u02/disk2/maxwell/redo01b.log           INVALID2 /u02/disk2/maxwell/redo02b.log           INVALID3 /u02/disk2/maxwell/redo03b.log           INVALID4 /u02/disk2/maxwell/redo04b.log           INVALID8 rows selected.SQL> 

6.4 日志切换即可同步

-- 多切几次, 消除invalidSQL> 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.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.log4 /u02/oradata/CDB1/redo04.log1 /u02/disk2/maxwell/redo01b.log2 /u02/disk2/maxwell/redo02b.log3 /u02/disk2/maxwell/redo03b.log4 /u02/disk2/maxwell/redo04b.log8 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         02          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   03          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         04          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0SQL> 

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         02          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   03          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         04          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0SQL> -- 说明一下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         02          1        406   52428800        512          2 NO        CURRENT                                               31463546 31-MAR-23         1.8447E+19                   03          1        403   52428800        512          2 YES       INACTIVE                                              31463537 31-MAR-23           31463540 31-MAR-23         04          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0SQL> 

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         02          1        406   52428800        512          2 YES       INACTIVE                                              31463546 31-MAR-23           31564324 31-MAR-23         03          1        407   52428800        512          2 NO        CURRENT                                               31564324 31-MAR-23         1.8447E+19                   04          1        405   52428800        512          2 YES       INACTIVE                                              31463543 31-MAR-23           31463546 31-MAR-23         0SQL> 

8.1.3 v$logfile查询


SQL> select group#, member, status from v$logfile;GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- ---------------------3 /u02/oradata/CDB1/redo03.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.log4 /u02/oradata/CDB1/redo04.log1 /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.log8 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.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.log4 /u02/oradata/CDB1/redo04.log1 /u02/disk2/maxwell/redo01b.log2 /u02/disk2/maxwell/redo02b.log3 /u02/disk2/maxwell/redo03b.log4 /u02/disk2/maxwell/redo04b.log8 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         02          1        395   52428800        512          1 YES       INACTIVE                                              23718839 31-MAR-23           23718973 31-MAR-23         03          1        396   52428800        512          1 NO        CURRENT                                               23718973 31-MAR-23         1.8447E+19                   0SQL> 

9.2 删除日志组

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

可以切换检查点, 使active的日志文件组变成inactive的日志文件组

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.log2 /u02/oradata/CDB1/redo02.log1 /u02/oradata/CDB1/redo01.logSQL> 

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

1. Redo log(重做日志)的功能 重做日志(Redo log)是数据库管理系统中的一种机制,主要作用包括: 提供事务的持久性支持:重做日志记录了每个事务对数据库所做的修改操作,以便在系统故障或崩溃时,通…...

5-python文件操作

文章目录1.打开文件2.文件读取3.文件关闭4.文件写入/追加1.打开文件 当传参顺序不一致时,不能使用位置传参,应使用关键字传参 open(file, mode‘r’, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 通常使用&#xf…...

企业级Oracle入门Linux/Unix基础①

1、了解计算机系统的组成、操作系统介绍、IT技术发展与云计算、服务器的分类、存储设备介绍、常用的主机存储有哪些? 1.1 计算机系统的组成: 计算机系统由硬件和软件两部分组成。硬件包括中央处理器(CPU)、内存、输入输出设备、…...

NexNoSQL Client:Elasticsearch、Redis、MongoDB三合一的可视化客户端管理工具

背景: 工作中我们使用了Elasticsearch作为存储,来支持内容的搜索,Elasticsearch这个软件大家都耳熟能详,它是一个分布式、高扩展、高实时的搜索与数据分析引擎,不仅仅支持文本索引,还支持聚合操作&#xf…...

如果大学能重来,我绝对能吊打90%的大学生,早知道这方法就好了

最近收到很多大学生粉丝的私信,大多数粉丝们都迷茫着大学计算机该怎么学,毕业后才能找到好工作。 可能是最近回答这方面的问题有点多,昨晚还真梦回大学…其实工作了20多年,当过高管,创过业,就差没写书了。…...

FactoryBean是现在的执行时机

调用getBean方法,最终到org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons方法: for (String beanName : beanNames) {RootBeanDefinition bd getMergedLocalBeanDefinition(beanName);if (!bd.isAbstr…...

自定义注解使用

现象: 自定义注解使用 方法: 1:元注解 java.lang.annotation 下定义了元注解 Documented 文档相关 标注了此注解则会包含在javadoc文档中Retention 指定注解生命周期Target 指定注解作用范围Inherited 指定子类可以继承父类的注解Native …...

2023年全国最新高校辅导员精选真题及答案42

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 89.侵犯行为是一种故意伤害他人的行为,一般包括了动机、行为和后果。 答案&a…...

Python模拟星空

文章目录前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字模拟星空模拟星球浪漫星空尾声前言 Python模拟星空,你值得拥有!uu们一周不见啦,本周博主参考网上大佬们的星空,给大家带来了属于…...

IDE集成开发工具-IDEA(一)之IDE的概念

IDE的概念 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开…...

基于Java+Springboot+vue的汽车租赁系统设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

博主介绍:专注于Java技术领域和毕业项目实战 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例(200套) 目录 一、效果演示 二、…...

【笔记】关于Maven中<optional>标签的理解

之前我有个误区&#xff1a;子pom通过<parent>标签继承父pom&#xff0c;如果父pom中的依赖设置<optional>true</optional> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version&g…...

JavaScript函数及面向对象

JavaScript函数及面向对象 4.1、函数定义及变量作用域 定义方式一 绝对值函数 function abs(x){if(x>0){return x;}else{return -x;} }一旦执行到return代表函数结束&#xff0c;返回结果&#xff01; 如果没有执行return&#xff0c;函数执行完也会返回结果&#xff0c;…...

【chartGPT】我们要不要搞chartGPT?

话题:官兔子并未表态要研发chartGPT&#xff0c;chartGPT炒的很火&#xff0c;我们到底要不要投入研发呢&#xff1f; 问题起因:我个人是做技术的&#xff0c;也玩炒股。就昨天吧&#xff0c;看到一个热评【马斯克等呼吁暂停chartGPT5的研发&#xff0c;周鸿炜谈不发展才是最大…...

java——date时间类型操作

目录 1.date类型使用 2.获取想要的自定义时间点 3.date类型与String类型转换 4.date时间先后比较 1.date类型使用 在java中&#xff0c;日期时间用java.util.Date类来表示&#xff0c;调用默认构造器Date()&#xff0c;将会创建一个当前系统时间的Date对象&#xff0c;时间…...

应急响应——IDSIPSmsf流量后门分析

目录 0x01 网页篡改与后门攻击防范应对指南 0x02 主要需了解:日志存储,Webshel检测,分析思路等...

项目二:电子骰子

项目二&#xff1a;电子骰子 文章目录项目二&#xff1a;电子骰子一、导入(5分钟&#xff09;学习目的二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.电子骰子编程逻辑分析(25分钟)7.电…...

D. Genius‘s Gambit(很多情况)

Problem - D - Codeforces 已知三个整数a b k。求两个二进制整数z和y ( > y)满足1. y都由a个0和b个1组成;2. X - y(也是二进制形式)恰好有k个1。z和y不允许使用前导零。输入唯一的一行包含三个整数a, b和k (0 <a;1 <b;0<k < ab< 2- 105) -结果中0、1和1的个数…...

jsp824汽车维修保养管理系统javaEE+mysql

主要实现 1&#xff0e;车主信息管理&#xff1a;管理员发布车主信息后&#xff0c;普通用户查询到该车主信息&#xff0c;用户选择某个车主信息&#xff0c;查询车主信息&#xff0c;管理员审核添加&#xff0c;或删除车主信息。 2&#xff0e;保养信息管理&#xff1a;管理员…...

Linux下C/C++ redis协议(RESP)解析

Redis是一个开源的内存键值数据存储&#xff0c;最常用作主数据库、缓存、消息代理和队列。Redis提供了亚毫秒的响应时间&#xff0c;在游戏、金融科技、广告技术、社交媒体、医疗保健和物联网等行业实现了快速而强大的实时应用。 Redis连续五年成为开发人员最喜爱的数据库。开…...

IDEA 性能优化设置

在我们日常使用IDEA进行开发时&#xff0c;可能会遇到许多卡顿的瞬间&#xff0c;明明我们的机器配置也不低啊&#xff1f;为什么就会一直卡顿呢&#xff1f; “ 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限&#xff08;通常很小&#xff09;&#xff0c;…...

蓝桥杯刷题冲刺 | 倒计时4天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;倒计时4天&#xff0c;冲冲冲&#xff01;&#xff01;&#xff01;&#x1f43e; 文章目录1.整除序列2.走方格3.前缀和4.差分矩阵5.翻硬币1.整除序列 题目 链接&#xff1a; 2065. 整除序列 - Ac…...

阿里测试7年经验,从功能测试到自动化测试,我整理的超全学习指南

做测试七年多&#xff0c;有不少人问过我下面问题&#xff1a; 现在的手工测试真的不行了吗&#xff1f;测试工程师&#xff0c;三年多快四年的经验&#xff0c;入门自动化测试需要多久&#xff1f;自学自动化测试到底需要学哪些东西&#xff1f;不得不说&#xff0c;随着行业的…...

jar加密后当作SDK给别人使用(可maven引入)

1、不加密jar&#xff0c;进行提取公共代码&#xff0c;打成jar包&#xff0c;并用maven引入 参考文章&#xff1a;以maven添加依赖的方式导入自己写的项目。springboot 提取公共类&#xff0c;多服务共用 2、加密jar&#xff0c;使用ClassFinal进行jar的加密 官网地址:Clas…...

【编程基础】032、C语言中结构体在解题中的应用

文章目录C语言中结构体在解题中的应用1、结构体之时间设计2、结构体之成绩记录3、结构体之成绩统计2C语言中结构体在解题中的应用 1、结构体之时间设计 题目描述 定义一个结构体变量&#xff08;包括年、月、日&#xff09;。计算该日在本年中是第几天&#xff0c;注意闰年问…...

Kotlin 是后端开发的未来

Kotlin 是后端开发的未来 严格类型、命名参数、多范式语言 您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来&#xff0c;您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor&#xff0c;所…...

Vue3学习笔记(9.1)

Vue.js style&#xff08;内联样式&#xff09; 我们可以在v-bind:style直接设置样式&#xff0c;可以简写:style <!--* Author: RealRoad1083425287qq.com* Date: 2023-04-02 19:41:53* LastEditors: Mei* LastEditTime: 2023-04-03 15:41:44* FilePath: \vscode\Vue3_li…...

MinIO 环境变量泄漏漏洞(CVE-2023-28432)

漏洞描述 MinIO 是一个开源的对象存储服务器。 MinIO RELEASE.2023-03-20T20-16-18Z之前版本中的 bootstrap-peer-server.go#VerifyHandler 方法存在敏感信息泄漏漏洞&#xff0c;攻击者可向集群部署中的 MinIO 服务器的 /minio/bootstrap/v1/verify API发送POST请求&#xf…...

数组转字符串、字符串转数组的方法

一.数组转字符串方法 方法转化后类型用法特点toString()string将数组转换成了一个字符串默认用","隔开toLocaleString()string把数组转换成本地约定的字符串默认用","隔开join()string将数组元素连接起来以构建一个字符串 默认用","隔开 可以随…...

local fault和remote fault

1、什么是 local fault和remote fault? 在IEEE802.3协议中&#xff0c;local fault和remote fault是一种错误序列&#xff0c;在PCS层定义。 MAC RX侧收到local fault时&#xff0c;意味本地链路没有正常建立链路&#xff0c;MAC RX侧收到remote fault时&#xff0c;意味对端没…...