`
1enny
  • 浏览: 69905 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

归档方式和日志文件

 
阅读更多
oracle218


归档方式和日志文件

日志文件的概念1
Oracle数据库有联机重做日志,这个日志是记录对数据

库所做的修改,包括对表作的数据改变,对系统做的改变

等。可以使用它,来维护数据的完整性,以及进行数据库的

恢复,可以进行日志挖掘。

日志文件分为在线日志文件和归档日志文件两类。
归档日志文件是在线日志文件的历史备份。
在线日志文件、联机重做日志文件、联机文件 同一个意思。

日志按照组来组织,每一个组里面有多个文件。日志组按

照循环方式来工作,所以ORACLE中,至少应该有两个日志

组,当一个联机重做日志组被写满的时候,就会发生日志切

换,这时联机重做日志组2成为当前使用的日志,当联机重

做日志组2写满的时 候,又会发生日志切换,去写联机重做

日志组1,就这样反复进行。

如果数据库处于非归档模式,联机日志在切换时就会丢弃.

而在归档模式下,当发生日志切换的时候,被切换的日志会

进行归档。比如,当前在使用联机重做日志1,当1写满的时

候,发生日志切换,开始写联机重做日志 2,这时联机重做

日志1的内容会被拷贝到另外一个指定的目录下。这个目录

叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复。



归档方式:
qOracle 数据库可以运行在两种归档方式:
q非归档日志方式
q归档日志方式
q非归档日志方式可以避免实例故障,但无法避免介质故障。在此方式下,数据库只能实施冷备份
实例故障:内存突然崩溃了,计算机死机了。
介质故障:物理介质,数据文件所在的物理磁盘坏了。
q归档日志方式产生归档日志,用户可以使用归档日志完全恢复数据库

q归档日志方式下数据库的工作原理:

配置归档日志方式:
查看当前数据库的归档方式,以及归档位置

archive log list

改变非归档模式到归档模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
2)SQL>START MOUNT;
3)SQL>ALTER DATABASE ARCHIVELOG;
4)SQL>ALTER DATABASE OPEN;

使得数据库从归档模式调整到非归档模式,和上面步骤一样。


改变归档日志的目录:
alter system set log_archive_dest_1 = 'location=路径';
使日志存放的目录失效:
alter system set log_archive_dest_state_29 = 'defer';
日志的保存格式:
alter system setlog_archive_format = '格式';
切换归档日志:
alter system switch logfile/alter system archive log current;


他们的区别:

alter system switch logfile 是强制日志切换,不一定就归档当前的重做日志文件(若自动归档打开,就归档当前的重做日志,若自动归档没有打开,就不归档当前重做日志)

alter system archive log current 是归档当前的重做日志文件,不管自动归档有没有打都归档。

主要的区别在于:
ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换;
而ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换。

为什么执行热备后要执行alter system archive log current 这个语句,看到很多脚本都是这样写的。是不是必须的?
一般的RMAN脚本都是这样写的,因为RMAN是可以备份归档日志的。alter system archive log current 这样后就可以将所有的归档都备份出来了。这样做是为了保证数据的完整和一致。

ALTER SYSTEM SWITCH LOGFILE ;
SWITCH LOGFILE Clause lets you explicitly force Oracle to begin writing to a new redo log file group, regardless of whether the files in the current redo log file group are full. When you force a log switch, Oracle begins to perform a checkpoint but returns control to you immediately rather than when the checkpoint is complete. To use this clause, your instance must have the database open.

SWITCH LOGFILE 条款明确地指出强制oracle开始写入新的一个重做日志组,不管当前的重做日志文件是否写满了。当你强制切换重做日志时,oracle开始执行检查点并且立即返还管理权给你而不是等到检查点完成才返还你控制权。要是该条款生效,您的实例必须处于打开状态。

ALTER SYSTEM ARCHIVE LOG CURRENT ;
CURRENT Clause
Specify CURRENT to manually archive the current redo log file group of the specified thread(instance), forcing a log switch. If you omit the THREAD parameter, then Oracle archives all redo log file groups from all enabled threads(instances), including logs previous to current logs. You can specify CURRENT only when the database is open.

指定CURRENT参数来手动归档当前重做日志组并指定线程(实例),强制切换日志。如果你忽略THREAD参数,那么oracle将归档所有可用线程(实例)的所有重做日志组,包括当前重做日志以前的所有日志。你也可以只指定当前打开的数据库。

ALTER SYSTEM ARCHIVE LOG CURRENT NOSWITCH;
NOSWITCH
Specify NOSWITCH if you want to manually archive the current redo log file group without forcing a log switch. This setting is used primarily with standby databases to prevent data divergence when the primary database shuts down. Divergence implies the possibility of data loss in case of primary database failure.

指定不切换日志

You can use the NOSWITCH clause only when your instance has the database mounted but not open. If the database is open, then this operation closes the database automatically. You must then manually shut down the database before you can reopen it.


oracle归档模式设置

一 设置为归档方式
1 sql> archive log list; #查看是否是归档方式
2 sql> alter system set log_archive_start=true scope=spfile; #启用自动归档
sql> alter system set log_archive_dest_1='location=H:\archivelog\arch1' scope=spfile;
#设置归档路径1
sql> alter system set log_archive_dest_2='location=H:\archivelog\arch2' scope=spfile;
#设置归档路径2,一般情况下将路径2存放到其它盘中。

sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log'
#设置归档日志格式


3 sql> shutdown immediate;
4 sql> startup mount; #打开控制文件,不打开数据文件
5 sql> alter database archivelog; #将数据库切换为归档模式
6 sql> alter database open; #将数据文件打开
7 sql> archive log list; #查看此时便处于归档模式

8 查询以确定数据库位于archivelog模式中且归档进程正在进行

  1. SQL>selectlog_modefromv$database;
  2. LOG_MODE
  3. ------------
  4. ARCHIVELOG
  5. SQL>selectarchiverfromv$instance;
  6. ARCHIVE
  7. -------
  8. STARTED


9 执行一次日志切换
sql> alter system switch logfile;
10 此次日志切换将归档写到两个目的地,即第二步的H:\archivelog\arch1和H:\archivelog\arch2,如果希望对此确认,在oracle环境中运行如下查询:
sql> select name from v$archived_log;
然后在操作系统中确认查询所列出的文件

  1. SQL>altersystemswitchlogfile;
  2. Systemaltered.
  3. SQL>!ls-l$ORACLE_BASE/oradata/alice/arch
  4. total22836
  5. -rw-r-----1oracleoinstall23352320Feb2823:371_5_776453164.dbf
  6. SQL>!ls-l$ORACLE_BASE/oradata/alice_closed/arch
  7. total22836
  8. -rw-r-----1oracleoinstall23352320Feb2823:371_5_776453164.dbf
  9. SQL>selectnamefromv$archived_log;
  10. .................
  11. /u01/app/oracle/oradata/alice_closed/arch/1_5_776453164.dbf
  12. /u01/app/oracle/oradata/alice/arch/1_5_776453164.dbf


二 设置非归档方式
1 sql> archive log list; #查看是否是归档方式
2 sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档

3 sql> shutdown immediate;
4 sql> startup mount; #打开控制文件,不打开数据文件
5 sql> alter database noarchivelog; #将数据库切换为非归档模式
6 sql> alter database open; #将数据文件打开
7 sql> archive log list; #查看此时便处于非归档模式

三 归档相关命令
archive log stop;
archive log start;
archive log list;

show parameters;
show parameters log_archive_start;
show parameters log_archive_max_process; #归档进程数
alter system set log_archive_max_process=5; #将归档进程数改为5
select * from v$bgprocess; #查看后台进程

SQL>show parameters log_archive_start;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean FALSE
SQL>show parameters log_archive_max_process;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes integer 2
SQL>alter system set log_archive_start=true scope=spfile;

系统已更改。

SQL>show parameters log_archive_start;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean FALSE


SQL>startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。

Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 83886784 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
>show parameters log_archive_start;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_start boolean TRUE


查看初始化参数log_archive_dest,查看归档日志的存放

位置。

早期的初始化参数log_archive_start,已经不起作用了。

就是说:从Oracle10g开始,log_archive_start参数已经被废

弃,只要启动数据库的归档模式,Oracle就会启用自动归

档,这避免了10g以前由于用户疏忽所带来的一系列问题。

早期的初始化参数LOG_ARCHIVE_DEST ,已经不起作

用了。就是说:从Oracle10g开始, LOG_ARCHIVE_DEST

参数已经被废弃。

参数log_archive_dest_state_1=‘defer’; 表示停止向

log_archive_dest_1这个归档位置归档日志。



联机日志文件和联机日志文件组

q由于联机日志文件的重要性,因此应该以组的方式建立日志文件,数据库中至少要有两个日志文件组,同时每一个日志文件组至少要包含两个日志文件,每一个日志组里的所有的日志成员的内容都完全相同,如果一个日志文件损坏,只有组内的其他日志文件仍然可用,则该组仍然对外提供日志操作,不会宕机。

增加联机日志组中的文件
给一个联机日志组增加文件,可以使用
SQL> alter database add logfile member
2 '/u01/app/oracle/oradata/jiagulun/redo04.log'
3 to group 2;

添加新的日志组:

SQL> alter database add logfile group 4 '/u01/app/oracle/oradata/jiagulun/redo05.log' size 10m;
Database altered.
不同日志组可以不同大小,但是同一个组内的所有日志文件必须同样大小。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ -----------
1 1 73 52428800 512 1 NO CURRENT 2095552 15-1月-15 0: 281474976710
2 1 71 52428800 512 2 YES INACTIVE 2094885 15-1月-15 0: 2095403 15-1月-15 0:
3 1 72 52428800 512 1 YES INACTIVE 2095403 15-1月-15 0: 2095552 15-1月-15 0:

SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
3 ONLINE /u01/app/oracle/oradata/jiagulun/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/jiagulun/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/jiagulun/redo01.log NO
2 INVALID ONLINE /u01/app/oracle/oradata/jiagulun/redo04.log NO

SQL>
SQL>
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ -----------
1 1 73 52428800 512 1 NO CURRENT 2095552 15-1月-15 0: 281474976710
2 1 71 52428800 512 2 YES INACTIVE 2094885 15-1月-15 0: 2095403 15-1月-15 0:
3 1 72 52428800 512 1 YES INACTIVE 2095403 15-1月-15 0: 2095552 15-1月-15 0:
4 1 0 10485760 512 1 YES UNUSED 0 0

SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
3 ONLINE /u01/app/oracle/oradata/jiagulun/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/jiagulun/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/jiagulun/redo01.log NO
2 INVALID ONLINE /u01/app/oracle/oradata/jiagulun/redo04.log NO
4 ONLINE /u01/app/oracle/oradata/jiagulun/redo05.log NO

SQL>


联机日志文件组的四种常见状态
联机日志文件组有四种常见状态(v$log中查看)

1,CURRENT:表示这是当前正在使用的联机日志文件组

2,ACTIVE:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块还没有被完全写入到数据文件中。

3,INACTIVE:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已经被写入到数据文件中。

4,UNUSED:表示还没有被使用过。

从v$logfile中查看每一个联机日志文件的信息。


清除联机日志文件

使用alter database clear logfile group <group号>;可以

清除联机日志文件组内的所有成员,适用于日志文件组损坏

了部分成员的情况,被清除的日志组必须是INACTIVE状

态。清除后的日志组的状态变成UNUSED。


自动归档和手动归档

数据库的日志归档方式有两种:

1,手动归档允许用户手动归档非活动日志文件文件的已填充

组, alter system switch logfile;

2,自动归档



获取归档日志信息
q可以通过数据字典视图查看归档日志信息
qV$ARCHIVE_DEST - 显示当前所有归档日志存储位置及其状态
qV$ARCHIVE_LOG- 显示历史归档日志信息






分享到:
评论

相关推荐

    自动删除ORACLE归档日志文件

    #功能:自动删除ORACLE归档日志文件 #删除方式:rman ,deletearchivelog #调用方式:可单独调用,或在job_clean_archivlog.sh脚本中根据需要调用见另外的附件) ##############################################

    通用日志归档程序

    设置几个值之后就可以不用担心服务器的日志爆满了。...FileType默认将txt和log视为日志文件; ArchiveDays默认7天内日志归档成7z; RemoveDays默认归档后21天删除归档日志,即日志文件30天后删除。

    DB2 归档日志清理

    DB2的日志清理工作,db2 list history archive log all for CISFEDB 查看归档时间戳以及归档日志个数,Number of matching file entries = 6 表示有效日志个数 5.1、db2 force application all 停连接会话

    Oracle 12c实战归档日志文件

    Oracle 12c实战归档日志文件

    DB2数据库归档日志管理方案

    由于使用了LOGRETAIN=ON数据库配置,所以数据库日志文件将不会被数据库从活动日志目录中自动删除或循环利用,活动日志目录中的日志文件将会越来越多,所以需要对该目录下的日志文件进行归档。

    当空间占用率高于60%时自动删除ORACLE归档日志文件

    #功能:当空间占用率高于60%时自动删除ORACLE归档日志文件 # #删除方式:高于60%时使用rman+deletearchivelog,高于79%时使用武力删除 #调用方式:可单独调用,或配置定时任务自动执行脚本(会调用clean_archivelog....

    Oracle 删除归档日志实例

    数据库选择不归档,但开通flashback功能,如何清理归档日志。

    清理备库已经应用的归档日志

    清理备库已经应用的归档日志

    Oracle归档日志删除

    Ora我们都都知道在controlfile中记录着每一个archivelog的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的 controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化...cle归档日志删除

    Oracle归档和非归档模式

    所以有必要把数据文件和重做日志文件放在两块不同的硬盘上以防止硬盘物理损坏. 二:归档模式 数据重做日志记录数据库的所有动作.oracle在默认安装的时候会有三个重做日志文件. 当第一个日志文件达到一定数量时,就会...

    利用xp自带的计划任务自动删除oracle过期的归档日志

    (1)把两个文件复制到c盘根目录下,手动运行bat文件,删除20以前的归档日志(手动删除) (2)同样两个文件复制到c盘根目录下,利用xp自带计划任务功能,建立此任务来实现归档日志的自动删除; (3)以应用于实际项目...

    oracle RAC集群开启归档日志.docx

    oracle RAC集群开启归档日志,需修改集群参数文件,重启数据库

    oracle归档日志的开启及删除.docx

    oracle归档日志开启之后,会产生大量的日志,需要定时清理以及不重要的数据库可以不开启归档模式,下面介绍一下oracle归档开启、关闭以及日志的删除。

    rac to single rman手动注册归档日志备份集进行recover database

    本文主要描述Oracle DB 在使用rman进行恢复时,如何利用rman注册备份集的方式达到主库和目标库数据一致的目的。当然Oracle数据库的话使用DG或ADG技术、或者rman的duplicate技术都是非常好的选择。

    Oracle工作总结——日志文件切换频率的调整

    Oracle工作总结——日志文件切换频率的调整 Oracle工作总结——日志文件切换频率的调整

    springboot 日志配置文件(完整的中文注释)

    spring boot项目记录日志、每日日志归档、彩色日志都会在logback-spring.xml文件中进行配置。给大家分享完整的日志配置信息,以及各种配置的各种含义,有着完整的中文注释。 此logback.xml文件既有成彩色输出也有...

    oracle归档日志步骤+RMAN步骤

    oracle归档日志步骤+RMAN步骤 . set ORACLE_SID=EKP sqlplus /nolog conn / as sysdba SQL&gt; archive log list; show parameter db_reco show parameter log_archive alter system set db_recovery_file_...

    Oracle日志文件

    DBA技能之:日志文件,重做日志文件,归档日志文件,对数据库管理员来说非常重要!

    orcle归档日志满了解决办法.txt

    orcle归档日志满了解决办法,每步步骤详细说明,自己在工作中积累的文档

Global site tag (gtag.js) - Google Analytics