首页 > 数据库 >Oracle重做、归档日志

Oracle重做、归档日志

时间:2023-07-17 12:23:32浏览次数:33  
标签:log archive oracle 归档 Oracle 日志 alter 重做

日志文件

oracle日志文件分为两种:

  • 重做日志文件(redo),或者称为“在线重做日志”
  • 归档日志文件(arch),或者称为“归档重做日志”

在线重做日志文件

全称:Online Redo Log File。

用来记录数据发生事务transaction的信息以及Oracle内部行为引起的数据库变化信息。

在数据库恢复时,可以从重做日志中读取原来的数据信息并应用以还原。

如果对表空间设置NOLOGGING属性时,那么对表空间中所有的表进行DML操作都不会产生日志信息

查看重做日志文件SQL语句

select * from v$logfile;

例子:

SQL> col member for a48;
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                           IS_
---------- ------- ------- ------------------------------------------------ ---
         3         ONLINE  /data/u01/app/oracle/oradata/orcl/redo03.log     NO
         2         ONLINE  /data/u01/app/oracle/oradata/orcl/redo02.log     NO
         1         ONLINE  /data/u01/app/oracle/oradata/orcl/redo01.log     NO

查看日志文件的组号、状态、大小

-- GROUP# 日志文件组号
-- MEMBERS 日志文件组内的成员数
select GROUP#,MEMBERS,ARCHIVED,STATUS,BYTES from V$log
SQL> select GROUP#,ARCHIVED,STATUS from V$log;

    GROUP# ARC STATUS
---------- --- ----------------
         1 YES INACTIVE
         2 YES INACTIVE
         3 NO  CURRENT

其中GROUP#就是组ID、STATUS就是该日志组的状态,CURRENT表示当前日志进程正在使用日志组。INACTIVE就是非活动状态。

日志文件组和文件组成员

为了安全,每个oracle实例用一个日志线程来记录变化。

日志线程由多个日志组(group)构成,而日志组中可以由一个或者多个日志成员构成。

创建新的日志文件组

建议:一个oracle实例至少需要两组以上的日志文件。

默认情况下实例在创建后会建立3组日志文件。每组里面只有一个日志文件(也就是每组里面只有一个成员)。

- 添加日志组,ID为4,文件大小为50M。
alter database add logfile group 4 '/data/u01/app/oracle/oradata/orcl/redo04.log' size=50m;

向日志组中添加新的日志文件成员

每个日志组中建议有两个日志成员,并且日志成员在不同位置比较好。

- 向日志组ID为4的中添加日志文件成员redo04c。
alter database add logfile member '/data/u01/app/oracle/mylog/redo04c.log' to group 4;

alter database add logfile member '/mylognew/redo04b.log' to group 4;

删除日志组

- 删除日志组ID为4的日志组
alter database drop logfile group 4

归档日志文件

oracle运行可以分为两种模式:归档模式 和 非归档模式(默认)。

  • 非归档模式:在系统运行期间产生的日志信息被写满后会覆盖原信息。
  • 归档模式:在系统运行期间产生的日志信息被写满后会先由归档程序arch将信息写出到归档日志文件中去保留,以便后续查找恢复。

查看系统是否开启了归档模式:

select name,log_mode from v$database;

; 或者 

archive log list

启用/关闭归档模式

shutdown immediate;

startup mount;

- 启用归档模式
alter database archivelog;

- 关闭归档模式
alter database noarchivelog;

- 打开数据库
alter database open;

- 查看系统是否启动归档模式
archive log list;

归档日志存放目录

关键字USE_DB_RECOVERY_FILE_DEST表示快速恢复区。

如果配置了FLASH_RECOVERY(通过设置参数DB_RECOVERY_FILE_DESTDB_RECOVERY_FILE_DEST_SIZE参数),且没有指定任何本地归档目的地,数据库会自动选择快速恢复区域作为本地归档目的地,并将LOG_ARCHIVE_DEST_1设置为USE_DB_RECOVERY_FILE_DEST。

因此,归档日志存放路径和存放的目录大小收到以下两个参数影响:

SQL> show parameter DB_RECOVERY

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /data/u01/app/oracle/flash_rec
                                                 overy_area
db_recovery_file_dest_size           big integer 3882M


如果需要修改flash recovery的大小,需要执行以下命令:

shutdown immediate;
startup mount;
- 将大小改为10G
alter system set db_recovery_file_dest_size = 10G;
alter database open

实际一般我们开启归档后,都会显示设置LOG_ARCHIVE_DEST_n参数去指定规划的归档目录。

n为1 ~ 31之间的整数。1到10可用于本地或远程位置。11至31只适用于远程位置。

具体路径可以是文件系统目录、ASM磁盘组、远端(通过网络服务名)。

比如:

LOG_ARCHIVE_DEST_1 = 'LOCATION=/disk1/arc'

LOG_ARCHIVE_DEST_2 = 'LOCATION=+DGROUP1/orcl/arc_1'

LOG_ARCHIVE_DEST_3 = 'SERVICE=standby1'

LOG_ARCHIVE_DEST_n = 'LOCATION=USE_DB_RECOVERY_FILE_DEST'

归档模式的其他参数设置

设置归档日志的存储路径。

log_archive_dest_n,类型:string

设置改归档日志存储路径是否可用,类型:string,可用值:

log_archive_dest_state_n

  • ENABLE :启用
  • DEFER:推迟使用,也就是禁用。
  • ALTERNATE:表示是备用的。备用目的地的可用性状态是DEFER。如果它的父目标失败,备用服务器的可用性状态变为ENABLE。

log_archive_format

设置归档日志的存储文件格式,默认为:%t_%s_%r.dbf

手动切换日志

- 手动切换,看看日志是否归档成功
alter system switch logfile;

查看和修改归档日志目录

SQL> 
show parameter log_archive_dest;

提前创建好新目录和赋权

su - root
mkdir /oracle_archive_log_dir
chown -R oracle:oinstall /oracle_archive_log_dir
su - oracle

修改参数:

sqlplus / as sysdba
alter system set log_archive_dest_1='LOCATION=/oracle_archive_log_dir';

手动切换日志看看是否成功:

- 手动切换,看看日志是否归档成功
alter system switch logfile;

查看当前归档日志:(其实可以直接看文件夹即可)

SQL> select name from v$archived_log;

NAME
--------------------------------------------------------------------------------
/data/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2022_07_27/o1_mf_1_7_kg
1zts41_.arc

/data/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2022_07_27/o1_mf_1_8_kg
2lln6n_.arc

/data/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2022_07_28/o1_mf_1_9_kg
40csxy_.arc

/oracle_archive_log_dir/1_10_1111090312.dbf

删除归档日志

rman target/  (只安装了一个oracle10g数据库) ;否则,指定用户名/密码@服务名: rman target mes/mes@CTLMES

命令>
crosscheck archivelog all;  (列出归档日志信息)

命令>delete expired archivelog all;  (将上述列出的归档日志删除)

也可删除指定过期文档 delete archivelog until time 'sysdate-3'; 这里删除的是3天以前的所有文档,即保留3天。


RAC集群开启arch归档参考:

标签:log,archive,oracle,归档,Oracle,日志,alter,重做
From: https://www.cnblogs.com/juelian/p/17559754.html

相关文章

  • Oracle数据字典(各种视图、表)
    数据字典是存放整个数据库实例重要信息的一组表,这些数据字典大部分都是SYS用户所有。数据字典的构成Oracle数据字典名称由前缀和后缀组成,使用下画线“_”连接。其代表的含义如下。USER_:记录用户的对象信息。ALL_:记录用户的对象信息及被授权访问的对象信息。DBA_:包含数据......
  • Oracle密码文件、警告日志文件、跟踪文件
    密码文件oracle用于验证sysdba权限的二进制文件。警告日志文件警告日志文件是用来记录oracle数据库系统在运行期间的各种信息:oracle实例打开和关闭、建立表空间、增加数据文件等记录。警告日志文件名一般为:alert_<ORACLE_SID>.log。[oracle@swq~]$find/data-name"alert......
  • Oracle-Rman备份全解析
    RMAN备份数据库物理文件到备份集(backupset)中。在创建备份集时,仅备份已经使用的数据库(不备份空闲的数据块),而且还可以采用压缩功能。RMAN恢复时指当数据库出现介质失败时,使用RMAN命令转储(restore)并恢复(recover)数据库的方法,使用restore命令进行备份文件的转储,然后使用recover命......
  • Oracle 异常处理
    在编程语言中异常处理是必不可少的部分,plsql也不例外,一个良好的提示能让调试和排查中少走很多弯路,简单记录一下oracle异常处理中常用的部分:pragma用来定义异常标识符(系统已经定义了大部分异常标识符,即常量)语法:declaree_20001;初始化异常变量pragmaexception_init(e_2......
  • Oracle 12c for Linux安装手册
    Oracle安装前配置关闭防火墙及selinux、修改主机名和host文件vi/etc/selinux/configselinux=disabledserviceiptablesstopchkconfig iptables off/etc/sysconfig下面的network文件HOSTNAME=hostname在/etc/hosts文件最后添加x.x.x.xhostname安装依赖包yum-......
  • oracle pl/sql与lightdb plorasql面向对象支持
    虽说现在新系统pl/sql已经很少用了,但是在信创迁移过程中,仍然有很多oraclepl/sql过程、函数、包需要能够无缝的移植到信创数据库,比如在很多风控系统移植lightdb的过程中,就遇到了很多,甚至还有pro*c。所以才有了本文。--最常用,用于集合处理DECLARECURSORallrows_curISSELECT*......
  • 【Oracle】在PL/SQL中使用sql实现插入排序
    【Oracle】在PL/SQL中使用sql实现插入排序一般来说,SQL要排序的话直接使用orderby即可不一般来说,就是瞎搞,正好也可以巩固自己的数据结构基础,主要也发现没有人用SQL去实现这些算法(小声bb)使用SQL实现排序系列:使用SQL实现冒泡排序使用SQL实现选择排序以下是正文:规范:createor......
  • oracle数据库表常用分区创建
    按年进行分区createtabletest_part(IDNUMBER(20)notnull,REMARKVARCHAR2(1000),create_timeDATE)PARTITIONBYRANGE(CREATE_TIME)INTERVAL(numtoyminterval(1,'year'))(partitionpart_t01valueslessthan(to_date('2018-11-01','yyy......
  • oracle资源正忙,需指定nowait
    1.通过此语句查询正在锁定的SESSION_ID:SELECTdistinctSESSION_IDFROMV$LOCKED_OBJECT,USER_OBJECTSWHEREV$LOCKED_OBJECT.OBJECT_ID=USER_OBJECTS.OBJECT_ID2.通过第一步查询到的SESSION_ID查询SERIAL#:622928617SELECTSERIAL#FROMV$SESSIONWHERE......
  • Oracle、MySQL、HQL的语法差异
    Oracle、MySQL、HQL查询语句的差异SQL是结构化查询语言,执行Select(选择)、Update(更新)、Delete(删除)和Insert(插入)等数据任务。关系数据库是指基于关系模型的数据库。在关系模型中,用于存储数据的逻辑结构就是二维表(Table)。表由行和列组成,行也称为记录,代表了单个实体;列也称为字段,代表......