Oracle架构之物理存储之日志文件

文章目录

  • 1 日志文件
    • 1.1 重做日志文件(Redo Log Files)
      • 1.1.1 定义
      • 1.1.2 联机日志的相关概念
      • 1.1.3 动态性能视图
      • 1.1.4 手工切换日志
      • 1.1.5 添加日志文件组和日志组成员
      • 1.1.6 删除日志组和日志组成员
        • 1.1.6.1 前言
        • 1.1.6.2 删除日志组
        • 1.1.6.3 删除日志组成员
      • 1.1.7 移动日志文件的位置
        • 1.1.7.1 重新启动数据库为 mount 状态
        • 1.1.7.2 在节点1执行以下操作
        • 1.1.7.3 修改控制文件中的日志信息
        • 1.1.7.4 打开数据库并查看
    • 1.2 归档日志文件(Archived Log files)
      • 1.2.1 定义
      • 1.2.2 查看数据库是否为归档模式
      • 1.2.3 打开或关闭归档模式
      • 1.2.4 配置归档的位置
      • 1.2.5 配置归档日志文件的名称格式
        • 1.2.5.1 配置格式
        • 1.2.5.2 归档日志名称格式导致数据库无法启动问题
      • 1.2.6 删除归档日志
        • 1.2.6.1 手工删除归档日志文件
        • 1.2.6.2 用 RMAN 删除数据库记录的归档列表信息
        • 1.2.6.3 清除 v$archived_log 视图中过期信息

1 日志文件

日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中。
在出现问题时,可以通过日志文件得到原始数据,从而保障不丢失已有操作成果。 Oracle 的日志文件包括重做日志文件(Redo Log File)和归档日志文件(Archive Log File),它们是 Oracle 系统的主要文件之一,尤其是重做日志文件,它是 Oracle 数据库系统正常运行所不可或缺的。

1.1 重做日志文件(Redo Log Files)

1.1.1 定义

联机日志文件又叫重做日志文件,记录了对数据库修改的信息,一个 Oracle 实例有一组或多组联机日志文件,每组包含一个或多个日志成员,同一组的日志成员内容相同,存放位置不同,防止日志文件组内某个日志文件损坏导致数据丢失。
重做日志(联机日志)文件用来记录数据库所有发生过的更改信息(修改、添加、删除等信息)及由 Oracle 内部行为(创建数据表、索引等)而引起的数据库变化信息,主要作用是支持数据库的恢复和故障恢复。通常存储在操作系统的文件系统中,如$ORACLE_HOME/dbs目录下的redo01.log文件。
联机日志文件的作用:记录数据文件的每一个变化过程,保证数据库一致性。

lgwr 进程负责将数据写入日志文件,如果一组日志文件被写满,会自动切换到下一组日志文件。当所有的日志文件都被写满时,如果数据库为非归档模式,则直接覆盖 sequence 最小的日志组;如果数据库为归档模式,lgwr 进程开始等待归档进程将日志信息写入到归档日志中,然后覆盖 sequence 最小的日志组。

联机日志文件具有如下特点:

  • 联机日志文件以组为单位工作;
  • 数据库正常工作至少需要两组联机日志;
  • 联机日志记录所有数据块的变化,用来做实例恢复(recover);
  • 同一组可以有多个成员;
  • 同一组的成员之间是镜像关系;
  • 默认情况下,日志成员写满 redo 时发生切换;
  • 日志切换时优先覆盖 sequence 最小的组;
  • 成员的位置和数量由控制文件决定。

在数据库恢复时,可以从该日志文件中读取原始记录。在数据库运行期间,当用户执行 COMMIT 命令(数据库提交命令)时,数据库首先将每笔操作的原始记录写入到日志文件中,写入日志文件成功后,才把新的记录传递给应用程序。所以,在日志文件上可以随时读取原始记录以恢复某些数据。

为了保障数据库系统的安全,每个Oracle实例都启用一个日志线程来记录数据库的变化。日志线程由若干 日志组 构成,而每个日志组又由一个或者多个日志文件构成。

1.1.2 联机日志的相关概念

  • 日志文件的工作方式
    日志文件采用按顺序循环写的方式。当一组联机日志组写满,LGWR 则将日志写入到下一组,当最后一组写满则从第一组开始写入。写入下一组的过程称为日志切换切换时产生检查点,检查点的信息同时写入控制文件
  • 联机重做日志组
    由一个或多个相同的联机日志文件组成一个联机重做日志组。数据库正常工作至少需要两个日志组,每组至少一个成员(生产环境建议每组至少两个成员,并放到不同的磁盘)。由 LGWR 后台进程同时将日志内容写入到一个组的所有成员。
  • 联机重做日志成员
    联机重做日志组内的每一个联机日志文件称为一个成员。一个组内的所有成员具有相同的日志序列号(log sequence number)且成员的大小相同。
    每次日志切换时,Oracle 服务器分配一个新的 LSN 号给即将写入日志的日志文件组。LSN 号用于唯一区分每一个联机日志组和归档日志处于归档模式的联机日志,LSN 号在归档时也被写入到归档日志之中。
  • 禁止日志记录
    通过对表或者整个表空间设定 NOLOGGING 属性时,使基于表或表空间中所有的DML操作(如创建表、删除视图、修改索引等)都不会生成日志信息,这样就会减少了日志信息的产生。
  • 产生日志信息条件
    Oracle 系统在运行过程中产生的日志信息,首先被临时存放在系统全局区的重做日志缓冲区中,当发出 Commit 命令(或日志缓冲区信息满 1/3)时, LGWR 进程(日志写入进程)将日志信息从重做日志缓冲区中读取出来,并将读取的日志信息写入到日志文件组中序列号较小的文件里,一个日志组写满后接着写另外一个日志组。当 LGWR 进程将所有能用的日志文件都使用过一遍之后,它将再次转向第一个日志组重新覆写。

1.1.3 动态性能视图

查看日志文件的信息
select * from v$logfile;查看日志组的信息
select group#,thread#,sequence#,status from v$log;GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------1	    1	       7 INACTIVE2	    1	       8 CURRENT3	    2	       1 INACTIVE4	    2	       2 CURRENT5	    1	       6 INACTIVE6	    2	       0 UNUSED
6 rows selected.说明:
THREAD#:实例号,rac 集群环境每个实例都有对应的日志组。status 选项值
UNUSED: 表示该联机日志文件组对应的文件还从未被写入过数据。一般情况下,新创建的联机日志文件组会显示为这一状态。当日志切换到这一组时,状态会改变; 
CURRENT:表示当前正在使用的日志文件组,该联机日志组是活动的; 
ACTIVE:该组是活动的但不是当前组,实例恢复时需要这组日志。处于这一状态,虽然不是当前组,但该文件中内容尚未归档,或者文件中的数据没有全部写入数据文件,一旦需要实例恢复,必须借助该文件中保存的内容;
INACTIVE:实例恢复已不再需要这组联机日志组。对应的联机日志文件中的内容已被妥善处理,该组联机重做日志当前处于空闲状态;
CLEARING:表示该组日志文件正被重建,重建后该状态会变成UNUSED;
CLEARING_CURRENT:表示该组日志重建时出现错误。

1.1.4 手工切换日志

日志切换就是停止写入当前日志组,去写另外一个新的日志组。
系统可以自动切换,也可以手工切换。当发生 switch logfile 时,系统会在后台完成 checkpoint 操作。
checkpoint 是一个事件,当 checkpoint 事件发生时,会触发 DBWR 进程,把 database buffer 中发生变化的脏数据写入数据文件,同时 chkp 进程更新控制文件(control file)和数据文件头(datafile header),使它们保持一致。

-- 手工切换日志文件的命令如下:alter system switch logfile;-- 查看日志组状态
SQL> select group#,thread#,sequence#,status from v$log;-- 在 节点1 切换日志
SQL> alter system switch logfile;
System altered.-- 在 节点2 切换日志
SQL> alter system switch logfile;
SQL> select group#,thread#,sequence#,status from v$log;-- 手工产生检查点,强制脏数据写盘
SQL> ALTER SYSTEM CHECKPOINT;
System altered.

日志切换的频率与日志成员的大小、数据更新的频率等有关。一般日志组的大小应满足自动切换间隔 15-20 分钟左右的业务需求。可以使用以下语句查看日志文件的历史切换频率:

SQL> select to_char(first_time,'yyyymmddhh24') fist_time, count(*) from v$log_history group by to_char(first_time,'yyyymmddhh24') order by 1;

1.1.5 添加日志文件组和日志组成员

添加日志文件组的方法如下:

1、添加日志组时不指定日志成员,自动在相关位置添加日志组成员
alter database add logfile thread m group n size 50M;
此命令会自动在相关位置添加日志组成员,参数说明:
thread 选项:指定给哪一个实例添加日志组
group:添加的日志组编号
size:指定日志成员的大小2、添加日志组时指定日志成员
alter database add logfile thread m group n ('成员1', '成员2') size 50m;
参数说明:
成员1、成员2格式:+BAK/orcl/onlinelog/redo01.log
thread 选项:指定给哪一个实例添加日志组
group:添加的日志组编号
size:指定日志成员的大小3、添加日志组成员:可实现日志文件的多路复用
alter database add logfile member '成员' to group n;

1.1.6 删除日志组和日志组成员

1.1.6.1 前言

删除日志组的说明:

  • 一个实例至少需要两个联机日志文件组;
  • 活动的或当前的日志组不能被删除;
  • 组内成员状态有 NULL 值或 INVALID 状态并存,组不可删除;
  • 日志组被删除后,物理文件需要手动删除。

删除日志组成员的说明:

  • 不能删除组内唯一的成员;
  • 不能删除处于 active 和 current 状态组内的成员;
  • 要删除处于 active 和 current 状态组内的成员,应使用日志切换使其处于 INACTIVE 状态后再删除;
  • 对于组内如果一个成员为 NULL 值,一个为 INVALID,且组处入 INACTIVE,仅能删除 INVALID 状态成员;
  • 删除日志文件后,控制文件被更新;
  • 对处于归档模式下的数据库,删除成员时确保日志已被归档,查看 v$log 视图获得归档信息。
1.1.6.2 删除日志组

删除日志组命令的语法如下:ALTER DATABASE DROP LOGFILE GROUP n;
删除日志组时先查看要删除的日志组的状态:状态为 INACTIVE 的日志组可以被删除,状态为 CURRENTACTIVE 的日志组不能被删除。

SQL> select group#,thread#,sequence#,status from v$log;GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------1	    1	      12 INACTIVE2	    1	      13 CURRENT3	    2	       6 CURRENT4	    2	       2 INACTIVE5	    1	       9 INACTIVE6	    2	       3 INACTIVE7	    1	      10 INACTIVE8	    2	       4 INACTIVE9	    1	      11 INACTIVE10	    2	       5 INACTIVE
10 rows selected.
删除编号为 910 的日志组:SQL> ALTER DATABASE DROP LOGFILE GROUP 9;
Database altered.SQL> ALTER DATABASE DROP LOGFILE GROUP 10;
Database altered.

查看日志组对应的日志文件并手动删除:

ASMCMD> ls -l +DATA/orcl/onlinelog
Type       Redund  Striped  Time             Sys  Name
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_1.261.1070471997
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_10.274.1079976131N    group_10_redo_log.log => +DATA/ORCL/ONLINELOG/group_10.274.1079976131
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_2.262.1070472003
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_3.265.1070472253
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_4.266.1070472257
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_5.268.1079737919
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_6.269.1079737941
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_7.271.1079974733
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_8.272.1079975081
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_9.273.1079976053N    group_9_redo_log.log => +DATA/ORCL/ONLINELOG/group_9.273.1079976053-- 删除文件:group_9_redo_log.log
ASMCMD> rm +DATA/orcl/onlinelog/group_9_redo_log.log
-- 删除文件:group_10_redo_log.log
ASMCMD> rm +DATA/orcl/onlinelog/group_10_redo_log.log
ASMCMD> ls -l +DATA/orcl/onlinelog/
Type       Redund  Striped  Time             Sys  Name
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_1.261.1070471997
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_2.262.1070472003
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_3.265.1070472253
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_4.266.1070472257
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_5.268.1079737919
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_6.269.1079737941
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_7.271.1079974733
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_8.272.1079975081
ASMCMD> ls -l +BAK/orcl/onlinelog/
Type       Redund  Striped  Time             Sys  Name
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_1.257.1070471999
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_10.297.1079976133N    group_10_redo_log.log => +BAK/ORCL/ONLINELOG/group_10.297.1079976133
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_2.258.1070472005
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_3.259.1070472255
ONLINELOG  UNPROT  COARSE   AUG 07 06:00:00  Y    group_4.260.1070472261
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_5.263.1079737919
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_6.264.1079737943
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_7.294.1079974737
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_8.295.1079975081
ONLINELOG  UNPROT  COARSE   AUG 07 17:00:00  Y    group_9.296.1079976053N    group_9_redo_log.log => +BAK/ORCL/ONLINELOG/group_9.296.1079976053-- 删除文件:group_9_redo_log.log
ASMCMD> rm +BAK/orcl/onlinelog/group_9_redo_log.log
-- 删除文件:group_10_redo_log.log
ASMCMD> rm +BAK/orcl/onlinelog/group_10_redo_log.log
1.1.6.3 删除日志组成员

删除日志组成员的语法如下:ALTER DATABASE DROP LOGFILE MEMBER '成员';
查看日志组及日志组成员的状态:

SQL> select group#,thread#,sequence#,status from v$log;GROUP#    THREAD#  SEQUENCE# STATUS
---------- ---------- ---------- ----------------1	    1	      12 INACTIVE2	    1	      13 CURRENT3	    2	       6 CURRENT4	    2	       2 INACTIVE5	    1	       9 INACTIVE6	    2	       3 INACTIVE7	    1	      10 INACTIVE8	    2	       4 INACTIVE
8 rows selected.SQL> select * from v$logfile;GROUP# STATUS  TYPE    MEMBER					      IS_
---------- ------- ------- -------------------------------------------------- ---2	   ONLINE  +DATA/orcl/onlinelog/group_2.262.1070472003	      NO2	   ONLINE  +BAK/orcl/onlinelog/group_2.258.1070472005	      YES1	   ONLINE  +DATA/orcl/onlinelog/group_1.261.1070471997	      NO1	   ONLINE  +BAK/orcl/onlinelog/group_1.257.1070471999	      YES3	   ONLINE  +DATA/orcl/onlinelog/group_3.265.1070472253	      NO3	   ONLINE  +BAK/orcl/onlinelog/group_3.259.1070472255	      YES4	   ONLINE  +DATA/orcl/onlinelog/group_4.266.1070472257	      NO4	   ONLINE  +BAK/orcl/onlinelog/group_4.260.1070472261	      YES5	   ONLINE  +DATA/orcl/onlinelog/group_5.268.1079737919	      NO5	   ONLINE  +BAK/orcl/onlinelog/group_5.263.1079737919	      YES6	   ONLINE  +DATA/orcl/onlinelog/group_6.269.1079737941	      NO6	   ONLINE  +BAK/orcl/onlinelog/group_6.264.1079737943	      YES7	   ONLINE  +DATA/orcl/onlinelog/group_7.271.1079974733	      NO7	   ONLINE  +BAK/orcl/onlinelog/group_7.294.1079974737	      YES8	   ONLINE  +DATA/orcl/onlinelog/group_8.272.1079975081	      NO8	   ONLINE  +BAK/orcl/onlinelog/group_8.295.1079975081	      YES
16 rows selected.

删除第7 组日志的成员:+BAK/orcl/onlinelog/group_7.294.1079974737
删除第8 组日志的成员:+BAK/orcl/onlinelog/group_8.295.1079975081

SQL> ALTER DATABASE DROP LOGFILE MEMBER '+BAK/orcl/onlinelog/group_7.294.1079974737';
Database altered.SQL> ALTER DATABASE DROP LOGFILE MEMBER '+BAK/orcl/onlinelog/group_8.295.1079975081';
Database altered.

1.1.7 移动日志文件的位置

希望把第 7 组和第 8 组的日志文件修改为另一个名称,并添加一个成员,使每组日志具有两个成员。可以进行如下操作:

1.1.7.1 重新启动数据库为 mount 状态

如果是rac 集群,要移动多个节点对应的日志文件的位置,则涉及到的节点数据库都要处于 mount 状态。如果在节点1 操作,也可以使节点1 处于 mount 状态,其他节点先关闭。

1.1.7.2 在节点1执行以下操作
-- 更改日志文件的名称
ASMCMD> cp +DATA/orcl/onlinelog/group_7.271.1079974733 +DATA/orcl/onlinelog/group_7_redo7_01.log
copying +DATA/orcl/onlinelog/group_7.271.1079974733 -> +DATA/orcl/onlinelog/group_7_redo7_01.logASMCMD> cp +DATA/orcl/onlinelog/group_8.272.1079975081  +DATA/orcl/onlinelog/group_8_redo8_01.log
copying +DATA/orcl/onlinelog/group_8.272.1079975081 -> +DATA/orcl/onlinelog/group_8_redo8_01.log-- 删除原来的日志文件
ASMCMD> rm +DATA/orcl/onlinelog/group_7.271.1079974733
ASMCMD> rm +DATA/orcl/onlinelog/group_8.272.1079975081
1.1.7.3 修改控制文件中的日志信息
-- 修改日志成员的名称
SQL> alter database rename file '+DATA/orcl/onlinelog/group_7.271.1079974733' to '+DATA/orcl/onlinelog/group_7_redo7_01.log';
Database altered.SQL> alter database rename file '+DATA/orcl/onlinelog/group_8.272.1079975081' to '+DATA/orcl/onlinelog/group_8_redo8_01.log';
Database altered.-- 添加日志组成员
SQL> alter database add logfile member '+bak/orcl/onlinelog/group_7_redo7_02.log' to group 7;
Database altered.SQL> alter database add logfile member '+BAK/orcl/onlinelog/group_8_redo8_02.log' to group 8;
Database altered.
1.1.7.4 打开数据库并查看
-- 节点1
SQL> alter database open;
Database altered.-- 节点2
SQL> startup
ORACLE instance started.查看
SQL> select group#,thread#,sequence#,status,members from v$log;
select * from v$logfile;

1.2 归档日志文件(Archived Log files)

1.2.1 定义

归档是将联机重做日志以文件的形式保存到硬盘,联机重做日志归档的前提条件是数据库要处于归档模式。当数据库处于 ARCHIVELOG 模式并进行日志切换时,后台进程 ARCH 会将联机重做日志的内容保存到归档日志中,当数据库出现介质故障时,使用数据文件备份、归档日志和联机重做日志可以完全恢复数据库到正常状态。
Oracle 数据库设置为归档模式之后,如果归档空间写满,数据库的 redo 文件不能归档,会出现数据库挂起的问题,导致 数据库无法使用。

归档日志可以存储在与数据文件不同的磁盘上,以提高可靠性和冗余性

在所有的日志文件被写入一遍之后, LGWR 进程将再次转向第一个日志组进行重新覆写,这样势必会导致一部分较早的日志信息被覆盖掉,但 Oracle 通过归档日志文件解决了这个问题。Oracle 数据库可以运行在两种模式下,即归档模式非归档模式

  • 非归档模式 是指在系统运行期间,所产生的日志信息不断地记录到日志文件组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写。
  • 归档模式是在各个日志文件都被写满而即将被覆盖之前,先由归档进程(ARCH)将即将被覆盖的日志文件中的日志信息读出,并将读出的日志信息写入到归档日志文件中,而这个过程又被称为归档操作
    在归档操作进行的过程中,日志写入进程(LGWR)需要等待归档进程(ARCH)的结束才能开始覆写日志文件,这样就延迟了系统的响应时间,而且归档日志文件本身又会占用大量的磁盘空间,这些都会影响系统的整体性能。所以在默认情况下, Oracle 系统不采用归档模式运行。

1.2.2 查看数据库是否为归档模式

如果将Oracle数据库系统设置成在归档模式下运行,则可以通过服务器参数文件SPFILELOG_ARCHIVE_DEST 参数来确定归档日志文件的所在路径。若显示SPFILE文件的指定参数的信息,则只需要使用show parameter +参数名即可。

SQL> archive log list;
SQL> select log_mode from v$database;

查看归档日志文件:

SQL> select sequence#, name from v$archived_log;

1.2.3 打开或关闭归档模式

如果需要打开或关闭归档模式,在数据库处于 mount 状态时使用如下命令:

-- 打开归档模式
alter database archivelog;-- 关闭归档模式
alter database noarchivelog;

1.2.4 配置归档的位置

当数据库处于归档模式时,进行日志切换时后台进程将自动生成归档日志。

初始化参数 LOG_ARCHIVE_MAX_PROCESSES 用于指定最大归档进程个数。通过改变该初始化参数的取值,可以动态地增加或减少归档进程的个数。

-- 查看归档进程数
SQL> show parameter LOG_ARCHIVE_MAX_PROCESSES

可以使用 LOG_ARCHIVE_DEST_n 配置多个归档位置:该参数最多可以指定 10 个归档位置。格式如下:

ALTER SYSTEM SET log_archive_dest_1 = 'location = 路径1';
ALTER SYSTEM SET log_archive_dest_2 = 'location = 路径2';

手工切换日志:

SQL> alter system switch logfile;
System altered.SQL> alter system switch logfile;
System altered.

1.2.5 配置归档日志文件的名称格式

1.2.5.1 配置格式

初始化参数 LOG_ARCHIVE_FORMAT 用于指定归档日志文件的名称格式。设置该初始化参数时,可以指定以下匹配符:

  • %s:日志序列号;
  • %S:日志序列号(带有前导 0);
  • %t:线程编号;
  • %T:线程编号(带有前导 0);
  • %a:活动 ID 号;
  • %d:数据库 ID 号;
  • %r:RESETLOGS的ID值。

归档日志的文件名称格式设置如下:

SQL> alter system set LOG_ARCHIVE_FORMAT = 'thread_%T_seq_%S.%a.%r.%d' scope = spfile sid='*';
1.2.5.2 归档日志名称格式导致数据库无法启动问题

具体报错:ORA-19905: log_archive_format must contain %s, %t and %r
由于该参数错误导致参数文件无法加载,无法通过 alter system 命令修改参数值,也无法启动数据库到 nomount 状态。

由于 LOG_ARCHIVE_FORMAT 参数设置错误导致数据库无法启动到 nomount ,无法使用 alter system 命令重置参数值,可以采用如下方法解决:

根据 spfile 文件生成 pfile 文件
SQL> create pfile='/home/oracle/a.ora' from spfile='+data/orcl/spfileorcl.ora';
File created.使用文本编辑器修改 pfile 文件
[oracle@rac1 ~]$ vi /home/oracle/a.ora
...........
orcl2.instance_number=2
orcl1.instance_number=1
*.log_archive_dest_1='location=/home/oracle/archivelog'
*.log_archive_format='thread_%T_seq_S.%a.%r.%d'  直接修改该参数的值
*.memory_target=838860800
*.open_cursors=300
*.processes=150
*.remote_listener='rac-scan:1521'
*.remote_login_passwordfile='exclusive'
..........根据修改之后的 pfile 文件重新生成 spfile 文件
SQL> create spfile='+data/orcl/spfileorcl.ora' from pfile='/home/oracle/a.ora';
File created.重新启动数据库
SQL> startup nomount
SQL> alter database mount;
SQL> alter database open;

1.2.6 删除归档日志

1.2.6.1 手工删除归档日志文件

[oracle@rac1 ~]$ cd /home/oracle/archivelog/
[oracle@rac1 archivelog]$ ll
total 3576
-rw-r----- 1 oracle asmadmin 3208704 Aug  8 18:17 1_23_1079891135.dbf
-rw-r----- 1 oracle asmadmin    1024 Aug  8 18:17 1_24_1079891135.dbf
-rw-r----- 1 oracle asmadmin    1024 Aug  8 18:18 1_25_1079891135.dbf
-rw-r----- 1 oracle asmadmin  437248 Aug  8 19:47 thread_0001_seq_0000000026.5fd299b3.1079891135.5f4366b6
-rw-r----- 1 oracle asmadmin    1024 Aug  8 19:47 thread_0001_seq_0000000027.5fd299b3.1079891135.5f4366b6[oracle@rac1 archivelog]$ rm 1*[oracle@rac1 archivelog]$ ll
total 432
-rw-r----- 1 oracle asmadmin 437248 Aug  8 19:47 thread_0001_seq_0000000026.5fd299b3.1079891135.5f4366b6
-rw-r----- 1 oracle asmadmin   1024 Aug  8 19:47 thread_0001_seq_0000000027.5fd299b3.1079891135.5f4366b6

虽然物理文件已经删除,但是归档日志文件的信息还在。

1.2.6.2 用 RMAN 删除数据库记录的归档列表信息
进入 rman,查看归档日志文件的状态:
RMAN> list archivelog all;更新归档日志信息
RMAN> crosscheck archivelog all;删除失效的归档文件信息
RMAN> delete expired archivelog all;

使用 RMAN 命令删除归档后,v$archived_log 视图中的 name 列为空,但其他列的信息仍然存在。

1.2.6.3 清除 v$archived_log 视图中过期信息

使用 RMAN 命令删除归档后,v$archived_log 视图中的 name 列为空,但其他列的信息仍然存在。出现这种现象的原因是因为使用 RMAN 命令在删除归档日志的时候不能够清除控制文件中的内容。

清除控制文件中关于 v$archived_log 的信息
SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
PL/SQL procedure successfully completed.-- 查询发现  v$archived_log 视图中的信息全部被清除了
SQL> select sequence#, name from v$archived_log;
no rows selected

将未过期的归档文件信息重新注册到控制文件中(两个节点同时进行)

 RMAN> catalog start with '/home/oracle/archivelog/';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440072.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高阶2004-职员招聘人数

目录 题目 准备数据 分析数据 实现 题目 一家公司想雇佣新员工。公司的工资预算是 70000 美元。公司的招聘标准是: 雇佣最多的高级员工。在雇佣最多的高级员工后,使用剩余预算雇佣最多的初级员工。 编写一个SQL查询,查找根据上述标准雇…

男单新老对决:林诗栋VS马龙,巅峰之战

听闻了那场激动人心的新老对决,不禁让人热血沸腾。在这场乒乓球的巅峰之战中,林诗栋与马龙的对决无疑是一场视觉与技术的盛宴。 3:3的决胜局,两位选手的每一次挥拍都充满了策略与智慧,他们的每一次得分都让人心跳加速。 林诗栋&am…

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…

动态SLAM总结二

文章目录 Mapping the Static Parts of Dynamic Scenes from 3D LiDAR Point Clouds Exploiting Ground Segmentation:(2021)RF-LIO:(2022)RH-Map:(2023)Mapless Online …

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标&#x…

POLYGON Nature - Low Poly 3D Art by Synty 树木植物

一个低多边形资源包,包含可以添加到现有多边形风格游戏中的树木、植物、地形、岩石、道具和特效 FX 资源。 为 POLYGON 系列提供混合样式树这一新增功能。弥合 POLYGON 与更传统的层级资源之间的差距。还提供了一组经典的 POLYGON 风格的树木和植被以满足你的需求。 该包还附带…

系统安全 - Linux /Docker 安全模型及实践

文章目录 导图Linux安全Linux 安全模型用户层权限管理的细节多用户环境中的权限管理文件权限与目录权限 最小权限原则的应用Linux 系统中的认证、授权和审计机制认证机制授权机制审计机制 小结 内网安全Docker安全1. Docker 服务隔离机制Namespace 机制Capabilities 机制CGroup…

JavaWeb - 8 - 请求响应 分层解耦

请求响应 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中,MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数,表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

水下声呐数据集,带标注

水下声呐数据集,带标注 水下声呐数据集 数据集名称 水下声呐数据集 (Underwater Sonar Dataset) 数据集概述 本数据集是一个专门用于训练和评估水下目标检测与分类模型的数据集。数据集包含大量的水下声呐图像,每张图像都经过专业标注,标明…

vSAN05:vSAN延伸集群简介与创建、资源要求与计算、高级功能配置、维护、故障处理

目录 vSAN延伸集群延伸集群创建延伸集群的建议网络配置vSAN延伸集群的端口见证主机的资源要求vSAN延伸集群中见证节点带宽占用vSAN延伸集群的允许故障数vSAN延伸集群不同配置下的空间占用 vSAN延伸集群的HA配置vSAN延伸集群的DRS配置vSAN存储策略以及虚拟机/主机策略的互操作vS…

华为最新业绩出炉!上半年营收4175亿元,同比增长34%!

华为2024年上半年经营业绩分析:稳健发展,符合预期 [中国,深圳,2024年8月29日] 今日,华为发布了其2024年上半年的经营业绩,整体表现稳健,结果符合预期。在复杂多变的全球市场环境下,华为凭借强大的创新能力和市场洞察力,实现了销售收入和净利润的显著增长。 上半年,华…

C语言:预编译过程的剖析

目录 一.预定义符号和#define定义常量 二.#define定义宏 三.宏和函数的对比 四、#和##运算符 五、条件编译 在之前,我们已经介绍了.c文件在运行的过程图解,大的方面要经过两个方面。 一、翻译环境 1.预处理(预编译) 2.编译 3…

Spring Boot 整合 Keycloak

1、概览 本文将带你了解如何设置 Keycloak 服务器,以及如何使用 Spring Security OAuth2.0 将 Spring Boot 应用连接到 Keycloak 服务器。 2、Keycloak 是什么? Keycloak 是针对现代应用和服务的开源身份和访问管理解决方案。 Keycloak 提供了诸如单…

Unity MVC框架演示 1-1 理论分析

本文仅作学习笔记分享与交流,不做任何商业用途,该课程资源来源于唐老狮 1.一般的图解MVC 什么是MVC我就不说了,老生常谈,网上有大量的介绍,想看看这三层都起到什么职责?那就直接上图吧 2.我举一个栗子 我有…

人工智能新闻和发展 (24001)- By 10/4/2024

1. 谷歌增强了搜索中的人工智能,允许对图像进行语音提问。 Google adding AI to answer voiced questions about images | AP NewsGoogle is pumping more artificial intelligence into its search engine. New features will enable people to voice questions a…

15分钟学 Python 第39天:Python 爬虫入门(五)

Day 39:Python 爬虫入门数据存储概述 在进行网页爬虫时,抓取到的数据需要存储以供后续分析和使用。常见的存储方式包括但不限于: 文件存储(如文本文件、CSV、JSON)数据库存储(如SQLite、MySQL、MongoDB&a…

无神论文解读之ControlNet:Adding Conditional Control to Text-to-Image Diffusion Models

一、什么是ControlNet ControlNet是一种能够控制模型生成内容的方法,能够对文生图等模型添加限制信息(边缘、深度图、法向量图、姿势点图等),在当今生成比较火的时代很流行。 这种方法使得能够直接提供空间信息控制图片以更细粒…

PCL 1.8.1 + VTK 1.8.0 + QT5.14.2+ VS2017 环境搭建

先看看效果: PCL 1.8.1下载安装: Tags PointCloudLibrary/pcl GitHub 安装完成后: 如果VTK想重新编译的,可以看我的这篇博客:

Spring14——案例:利用AOP环绕通知计算业务层接口执行效率

前面介绍了这么多种通知类型,具体该选哪一种呢? 我们可以通过一些案例加深下对通知类型的学习。 34-案例:利用AOP环绕通知计算业务层接口执行效率 需求分析 这个需求也比较简单,前面我们在介绍AOP的时候已经演示过: 需求:任意业务层接口…