Oracle在线重做日志文件详解

    xiaoxiao2021-03-25  106

    Oracle在线重做日志文件详解 1:查看数据库在线重做日志文件的归档方式 ARCHIVE LOG list; 2:查看日志组 SELECT * FROM v$log; 3:查看日志组成员 SELECT * FROM v$logfile; --备注:经分系统BONCBI数据库日志没做归档就不说了,既然只有3个日志组,而且既然每个日志组只有一个成员,悲剧啊! 4:新增一个日志组: ALTER DATABASE ADD LOGFILE GROUP 4 ('/dev/rlv_vgdb9_data22','/dev/rlv_vgdb9_data23','/dev/rlv_vgdb9_data24') SIZE 8191m; --这样,就最增一个日志组,且这个日志组里有3个成员每个成员8191MB大小。 5:给某个日志组新增一个成员 ALTER DATABASE ADD LOGFILE MEMBER '/dev/rlv_vgdb9_data25' TO GROUP 4; --注意,这里不需要指定日志组成员的大小。 6:删除日志组 ALTER DATABASE DROP LOGFILE GROUP 4; --注意:当前日志组不能删,活动的日志组不能删,没有归档的日志组不能删。 7:删除日志组成员 ALTER DATABASE DROP LOGFILE MEMBER '/dev/rlv_vgdb9_data25'; --注意:每个组至少要保留一个成员; 8:两个概念需要注意: 8.1:日志切换 ALTER SYSTEM SWITCH LOGFILE; --所谓日志切换就是停止写当前组,转而写一个新组,系统可以自动发生,也可以手工完成。 --当发生SWITCH LOGFILE时,系统会在后台完成CHECKPOINT的操作 --手动切换日志组 --日志组A:当前正在写。 --日志组B:可写。 --CHECKPOINT保证控制文件,数据文件头,日志文件头的SCN一致是数据库保持数据完整性的一个重要机制 --手动切换日志组后,ORACLE开始往日志组B写日志,并进行一次CHECKPOINT,把日志组A里没有经过CHECKPOINT的那部分日志对应的DIRTY BUFFER从BUFFER CACHE里写到 --数据文件里。CHECKPOING完成后 --日志组A:可写。 --日志组B:当前正在写。 --另外,ALTER TABLESPACE USER BEGIN BACKUP,DROP TABLE,TRUNCATE TABLE都会引发CHECKPOINT操作 --除了以上所手动,及自动CHECKPOINT之外,还可以通过一些参数来控制CHECKPOINT --FAST_START_MTTR_TARGET(MTTR:数据恢复的时间间隔) --checkpoints用来同步,同步频率越高,发生系统错误时所需RECOVERY时间越短 --同步相关的参数:FAST_START_MTTR_TARGET(数据库通过它来改变后面3个参数),fast_start_io_target,log_checkpoint_interval,log_checkpoint_timeout 9:初始化日志文件 ALTER DATABASE CLEAR LOGFILE GROUP 1; ALTER DATABASE CLEAR LOGFILE '/dev/rlv_vgdb9_data25'; ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 5(清空没有归档的日志文件,实际备份产生断点) 10:重命名日志文件 1>:在操作系统上把文件改名或移动(如果有OMF就不需要这样做了) 2>:ALTER DATABASE RENAME FILE '/dev/rlv_vgdb9_data25' TO '/dev/rlv_vgdb9_data26'; 11:通过OMF管理REDO LOG 文件 SHOW PARAEMTERS DB_CREATE_ONLINE ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_1='/ORACLE/ORALOG/OMF'; ALTER DATABASE ADD LOGFILE GROUP 6;(名子由ORACLE派生,大小100M) ALTER DATABASE DROP LOGFILE GROUP 6;(自己删除)

    两个专题 一:查看oracle数据库是否归档和修改归档模式 首先查看数据库现有模式可使用以下语句 select name,log_mode from v$database; 也可以用下面的语句 archive log list;(该方法需要as sysdba) 对于非归档模式的数据库该为归档模式(主要以Oracle 10g为参考通过OMF来管理)使用以下步骤: 1. SQL> alter system set log_archive_dest_1='location=/oracle/oracle10g/log/archive_log'; 该语句含义是确定归档日志的路径,实际上Oracle 10g可以生成多份一样的日志,保存多个位置,以防不测 例如再添加一个日志位置可使用以下语句 SQL>alter system set log_archive_dest_2='location=/oracle/oracle10g/log2/archive_log'; 2.关闭数据库 SQL> shutdown immediate  3.启动数据mount状态: SQL> startup mount; 4、修改数据库为归档模式: SQL> alter database archivelog;  5、打开数据库,查询: SQL> alter database open; 修改日志文件命名格式: SQL> alter system set log_archive_max_processes = 5; SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile; 修改完成后可以查看日志模式是否修改成功! 特别指出的是在Oracle 9i中还要修改参数log_archive_start = true才能生效,oracle 10g中已经废除了该参数,所以不需要设置该参数。

    二:修改oracle日志文件大小  1、创建2个新的日志组 alter database add logfile group 4 ('D:ORACLEORADATAORADBREDO04_1.LOG') size 1024k; alter database add logfile group 5 ('D:ORACLEORADATAORADBREDO05_1.LOG') size 1024k; 2、切换当前日志到新的日志组 alter system switch logfile; alter system switch logfile; 3、删除旧的日志组 alter database drop logfile group 1; alter database drop logfile group 2; alter database drop logfile group 3; 4、操作系统下删除原日志组1、2、3中的文件 5、重建日志组1、2、3 alter database add logfile group 1 ('D:ORACLEORADATAORADBREDO01_1.LOG') size 10M; alter database add logfile group 2 ('D:ORACLEORADATAORADBREDO02_1.LOG') size 10M; alter database add logfile group 3 ('D:ORACLEORADATAORADBREDO03_1.LOG') size 10M; 6、切换日志组 alter system switch logfile; alter system switch logfile; alter system switch logfile; 7、删除中间过渡用的日志组4、5 alter database drop logfile group 4; alter database drop logfile group 5; 8、到操作系统下删除原日志组4、5中的文件 9、备份当前的最新的控制文件 SQL> connect / as sysdba SQL> alter database backup controlfile to trace resetlogs

    转载请注明原文地址: https://ju.6miu.com/read-20173.html

    最新回复(0)