Oracle 增加重做日志

合集下载

Oracle物化视图定时全量刷新导致归档日志骤增

Oracle物化视图定时全量刷新导致归档日志骤增

Oracle物化视图定时全量刷新导致归档⽇志骤增⼀、问题描述 某项⽬组来电,说有⼀个源表约2万多条的物化视图,每5分钟定时全量(Complete)刷新⼀次,⼀天下来,导致Oracle数据库归档⽇志骤增。

⼆、问题分析及解决 先明确⼀个问题:归档⽇志(Archive Log)和重做⽇志(REDO Log)的关系。

Oracle的重做⽇志是⼀组(或⼏组)⽂件,按⼀定的规则顺序循环写,当重做⽇志写满后,从头开始写之前,如果数据库在归档模式(Archive),则在重写之前,需要把当前的重做⽇志进⾏归档(Archive),形成归档⽇志。

即归档⽇志来⾃于重做⽇志。

基于此,可以通过减少产⽣重做⽇志的量来达到减少归档⽇志量的⽬的。

综合⼀下: 1、不要全量刷新,采⽤在源表上记录物化视图⽇志的⽅式,实现快速刷新,减少更新的数据量,达到减少重做⽇志的⽬的; 2、指定物化视图为nologging模式 3、减少或取消其上的索引(2W条记录,如果使⽤得⽐较频繁,甚⾄可以考虑把它cache到内存中) 4、如果⼀定要有索引,⾃⼰写刷新的Job,先disable索引,然后刷新,然后重建索引(唯⼀索引可能有问题)。

5、评估业务、技术要求,考虑取消物化视图,建⽴⼀般视图,在访问该视图时,直接从源表中查询。

三、验证过程 验证全量刷新的物化视图产⽣的REDO⽇志的⼤⼩:-- 建⽴源表create table big_table as select * from dba_objects;-- 我机器上(11g),⼤概8W条记录select count(*) from big_table;/*开始验证全量刷新产⽣的REDO⽇志的量*/-- 建⽴物化视图create materialized view big_table_mv as select * from big_table;-- 查看⽬前REDO⽇志的量(重新启动数据库会⾃动清理)-- 记录下数值,⽤于接下来的⽐较select , b.value from v$statname a, v$mystat b where a.statisti = b.statistic# and = 'redo size';--243964-- ⼿⼯全量刷新物化视图begindbms_mview.refresh( 'BIG_TABLE_MV', 'C' );end;-- 再查看REDO⽇志的量,⽐较⼀下-- 记录下数值,⽤于接下来的⽐较select , b.value, to_char( b.value-&V, '999999999999' ) diff from v$statname a, v$mystat b where a.statistic# = b.statistic# and = 'redo size';--value:38845196--diff:38601232,增加了约37M-- 还是⽐较可观的-- 把物化视图改为nologging模式alter table big_table_mv nologging;-- 再全量刷新begindbms_mview.refresh( 'BIG_TABLE_MV', 'C' );end;-- 再查看REDO⽇志的量,⽐较⼀下-- 记录下数值,⽤于接下来的⽐较select , b.value, to_char( b.value-&V, '999999999999' ) diff from v$statname a, v$mystat b where a.statistic# = b.statistic# and = 'redo size';--value:77495608--diff:38894376,增加了约37M,全量刷新时,指定nologging没有什么效果喔。

Oracle添加和删除联机重做日志文件

Oracle添加和删除联机重做日志文件

Oracle添加和删除联机重做日志文件作者:雨竹清风数据库管理员应该在每个重做日志组中保证至少两个,以防止重做日志的物理错误。

创建重做日志文件的命令为:alter database add logfile member‘路径’to group 组号;示例如下:SQL>desc v$logfile;名称是否为空?类型-----------------------------------------------------------------------------GROUP#NUMBERSTATUS VARCHAR2(7)TYPE VARCHAR2(7)MEMBER VARCHAR2(513)IS_RECOVERY_DEST_FILE VARCHAR2(3)SQL>col member for a50SQL>select GROUP#,STATUS,TYPE,MEMBER from v$logfile;GROUP#STATUS TYPE MEMBER--------------------------------------------------------------------------3ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG2ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG1ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOGSQL>alter database add logfile member 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01b.LOG'to group1;数据库已更改。

添加后查询一下是否成功。

oracle 重做日志文件

oracle 重做日志文件

重做日志文件重做日志文件记录的两类数据:1.修改前的数据2.修改后的数据当满足一定条件时先将修改操作所产生的重做记录写入重做日志文件中,然后才将内存中的修改结果成批的写入数据文件,最后在提交事务重做日志文件是由重做记录组成的,重做记录是由修改向量组成的。

当用户执行一条update 语句对某一个表中的记录进行修改时,会生成一条记录,这条记录用多个向量记录下了被这条语句修改过的各个db块中的信息。

重做记录采用循环的方式在SGA区的重做日志缓存区中进行缓冲,并且由后台进程LGWR 写入到其中的某个重做日志文件中。

用户无论何时提交事务,LGWR都会将该事务的重做记录从SGA的重做日志缓存区写入到某个重做日志文件中,并且为提交的每个事务分别分配一个识别重做记录的系统修改编号。

只有当与已知事务相关的所有重做记录都安全的写入重做日志文件后,用户进程才被告之已经提交。

LGWR进程在开始写入下一个重做日志文件之前,必须确保这个即将覆盖的重做日志文件已经完成了如下的工作:1.如果数据库处于“非归档日志模式(noarchivelog)”,则该重做日志文件中的所有重做记录所对应的修改结果,必须全部被写入到数据文件中。

2.如果数据库处于“归档日志模式(archivelog)”,则该重做日志文件中的所有重做记录所对应的修改结果,必须全部被写入到数据文件中,并且归档进程ARCH已经将该重做日志文件进行了归档。

活动的,非活动的,当前的联机重做日志文件LGWR当前写入的重做日志文件称为当前的联机重做日志文件,例程恢复时需要的重做日志文件称为活动的重做日志文件,例程恢复时不需要的重做日志文件称为非活动的重做日志文件。

如果已经能够进行归档,oracle就不能重新使用或重写活动的重做日志文件,知道ARCH 存储了这个文件的内容。

如果不能进行归档,当最后一个重做日志文件被填满是时,将通过重写的方法继续使用第一个可用的活动重做日志文件。

日志切换1.当一个重做日志文件被完全填满,必须填写下一个联机重做日志文件2.手动强制执行日志切换强制切换日志,需要有alter system权限,使用alter system switch logfile强制切换日志顺序号没次发生日志切换和LGWR开始进行填写时,oracle都会为每个联机重做日志文件分配一个新的日志序列号重做日志文件的归档归档就是在重做日志文件被覆盖之前,将该重做日志文件通过复制操作系统文件的方式,保存到指定的位置。

Oracle数据库启动与关闭各种方式详解整理

Oracle数据库启动与关闭各种方式详解整理

Oracle数据库启动与关闭各种⽅式详解整理概述只有具备sysdba和sysoper特权的⽤户才能启动和关闭。

在启动数据库之前应该启动监听程序,否则就不能利⽤命令⽅式来管理数据库,包括启动和关闭数据库。

虽然数据库正常运⾏,但如果没有启动监听程序,客户端就不能连接到数据库。

在oracle⽤户下:启动监听程序 lsnrctl start 关闭监听程序lsnrctl stop查询监听程序状态lsnrctl statusstartup⽀持参数STARTUP options | upgrade_optionsoptions为:[FORCE] [RESTRICT] [PFILE=filename] [QUIET] [ MOUNT [dbname]| [ OPEN [open_options] [dbname] ] | NOMOUNT ],NOMOUNT、MOUNT、OPEN为startup的三个阶段,不能在命令中同时存在。

其中,open_options为:READ {ONLY| WRITE [RECOVER]} | RECOVER。

upgrade_options为:[PFILE=filename] {UPGRADE | DOWNGRADE} [QUIET]的完整启动过程包含以下3个步骤:简单地说,就是:启动实例-->加载数据库-->打开数据库.------------------------------------------------------------------------------------------------------------------1.创建并启动与数据库对应的实例。

在启动实例时,将为实例创建⼀系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。

在实例启动的过程中只会使⽤到初始化参数⽂件,数据库是否存在对实例的启动没有影响。

如果初化参数设置有误,实例将⽆法启动。

ORACLE新增记录更新记录

ORACLE新增记录更新记录

ORACLE新增记录更新记录在ORACLE数据库中,新增记录和更新记录是两个主要的操作。

新增记录是将新的数据插入到数据库中,而更新记录是修改现有数据的内容。

下面将详细介绍如何在ORACLE中进行新增记录和更新记录的操作。

新增记录:在ORACLE数据库中新增记录有以下几种方式:1.使用INSERTINTO语句:INSERTINTO是最常用的新增记录的方法。

语法如下:```sqlINSERT INTO table_name (column1, column2, column3, ...)VALUES (value1, value2, value3, ...);```其中,table_name是要插入记录的表名,column1, column2, column3是要插入记录的列名,value1, value2, value3是要插入的值。

例如,要向名为"employees"的表中新增一条员工记录,可以使用以下语句:```sqlINSERT INTO employees (employee_id, first_name, last_name, hire_date)VALUES (1, 'John', 'Doe', SYSDATE);```这将向"employees"表中插入一行包含员工ID为1,名为"John",姓为"Doe",雇佣日期为当前日期的记录。

2.使用SELECTINTO语句:SELECTINTO语句可以从一个表中选择数据并插入到另一个表中。

语法如下:```sqlSELECT column1, column2, column3, ...INTO new_tableFROM old_tableWHERE condition;```其中,column1, column2, column3是要插入的列名,new_table是要插入记录的表名,old_table是要选择数据的表名,condition是选择数据的条件。

Oracle 改变重做日志位置或名称

Oracle  改变重做日志位置或名称

Oracle 改变重做日志位置或名称在所有后台进程中,LGWR进程活动最为频繁,它需要不断地将事务变化由重做日志缓冲区写入重做日志中。

在数据库文件、控制文件和重做日志这3种文件中,重做日志的I/O操作最频繁。

为了提高I/O性能,应将重做日志分布到I/O操作相对较少、速度最快的磁盘设备上。

规划重做日志时,应将同一个日志组的不同日志成员尽可能地分布到不同磁盘上,以防止磁盘损坏而导致所有日志成员丢失。

例如,假设在初始阶段,日志组二中的日志成员被放在同一块磁盘上,但是后来出于完全和性能方法的考虑,DBA为服务器新增加了一块磁盘,并且将日志组二中的一个日志成员移动到新磁盘上,此时就需要改变该日志成员的存放位置。

下面修改重做日志文件的名称和位置的具体操作步骤如下:(1)关闭数据库。

SQL> connect /as sysdbaSQL> shutdown(2)复制或移动日志成员到目标位置。

当闭数据库后,DBA就可以使用操作系统命令复制或移动日志成员到新位置。

例如,修改原日志文件的名称。

(3)重新启动数据库实例,加载数据库,但是不打开数据库。

SQL> startup mount;(4)使用带RENAME FILE子句的ALTER DATABASE语句重新设置重做日志文件的路径和名称。

SQL> alter database rename file2 'd:\app\Administrator\oradata\orcl\redo03.log',3 'd:\app\Administrator\oradata\orcl\redo02.log',4 'd:\app\Administrator\oradata\orcl\redo01.log'5 to6 'd:\app\Administrator\oradata\orcl\redo03a.log',7 'd:\app\Administrator\oradata\orcl\redo02a.log',8 'd:\app\Administrator\oradata\orcl\redo01a.log';数据库已更改。

OracleOracle日志分类

OracleOracle日志分类

Oracle-归档日志详解(运行模式、分类)一、Oracle日志分类分三大类:Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和redo log 重做日志(记录数据库的更改)。

本文主要关注Oracle的重做日志。

重做日志分为在线重做日志和归档重做日志。

online Redo log files--在线重做日志,又称联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,换句话说,实时保存已执行的SQL脚本到在线日志文件中(按特定的格式)。

Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化)。

重做日志的简单原理:在数据更新操作commit前,将更改的SQL脚本写入重做日志。

主要用于数据库的增量备份和增量恢复。

重做日志直接对应于硬盘的重做日志文件(有在线和归档二种),重做日志文件以组(Group)的形式组织,一个重做日志组包含一个或者多个日志文件。

二、关于在线重做日志(online redo log)在线重做日志的原理:对于在线重做日志,Oracle 11g默认对于每个数据库实例,建立3个在线日志组,每组一个日志文件,文件名称为REDO01.LOG,REDO02.LOG和REDO03.LOG。

(用户可以通过视图操作添加/修改/删除日志组和日志文件来自定义在线重做日志)每组内的日志文件的内容完全相同,且保存在不同的位置,用于磁盘日志镜像,以做多次备份提高安全性。

默认情况这3组通常只有一组处于活动状态,不断地同步写入已操作的脚本,当日志文件写满时(达到指定的空间配额),如果当前数据库处于归档模式,则将在线日志归档到硬盘,成为归档日志;若当前数据库处于非归档模式,则不进行归档操作,而当前在线日志的内容会被下一次重新写入覆盖而无法保存。

因此,通常数据库在运行时,是处于归档模式下的,以保存数据更新的日志。

oracle日志文件

oracle日志文件

分类:Oracle 体系结构2010-07-20 14:11 2259人阅读评论(5) 收藏举报--=========================================-- Oracle 联机重做日志文件(ONLINE LOG FILE)--=========================================一、Oracle中的几类日志文件Redo log files -->联机重做日志Archive log files -->归档日志Alert log files -->告警日志Trace files -->跟踪日志user_dump_dest -->用户跟踪日志backupground_dump_dest -->进程跟踪日志--查看后台进程相关目录SQL> show parameter dumpNAME TYPE VALUE------------------------------------ -----------------------------------------background_core_dump string partialbackground_dump_dest string/u01/app/oracle/admin/orcl/bdumpcore_dump_dest string/u01/app/oracle/admin/orcl/cdumpmax_dump_file_size string UNLIMITEDshadow_core_dump string partialuser_dump_dest string/u01/app/oracle/admin/orcl/udump关于Oracle 常用目录及路径请参考:Oracle 常用目录结构(10g)关于Oracle 体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构)二、联机重做日志的规划管理1.联机重做日志记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等)提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)可以被分组管理2.联机重做日志组由一个或多个相同的联机日志文件组成一个联机重做日志组至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)由LGWR后台进程同时将日志内容写入到一个组的所有成员LGWR的触发条件在事务提交的时候(COMMIT)Redo Log Buffer 三分之一满Redo Log Buffer 多于一兆的变化记录在DBWn写入数据文件之前3.联机重做日志成员重做日志组内的每一个联机日志文件称为一个成员一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组LSN号用于唯一区分每一个联机日志组和归档日志处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中4.日志文件的工作方式日志文件采用按顺序循环写的方式当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入写入下一组的过程称为日志切换切换时发生检查点过程检查点的信息同时写入到控制文件5.联机日志文件的规划总原则分散放开,多路复用日志所在的磁盘应当具有较高的I/O一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求建议使用rdo结尾的日志文件名,避免误删日志文件。

广药oracle选择题复习

广药oracle选择题复习

1.哪一个表空间不能切换为脱机状态DA 临时表空间temp b用户表空间userC 索引表空间index d系统表空间system2.假如一个表空间只具有一个大小为100MB的数据文件,现需将该数据文件的大小修改为10MB,哪种方法是正确的?Ba.删除数据文件然后重建b.使用带有resize子句的alter database datafile语句c 使用带有resize子句的alter tablespace datatfile语句d 将数据文件的自动扩展属性设为on,这样数据文件会自动缩小3.关于脱机表空间的说法哪一个是正确的?DA任何表空间都可以脱机B可以使用alter database语句将脱机的表空间空改为联机C在表空间脱机时,属于这个表空间的数据文件仍然联机D如果将表空间设置为脱机状态,下次启动数据库时,不会对该表空间的数据文件进行可用性检查4.DBA在执行下列语句时返回了错误,drop tablespace users可能原因是下列哪个?DA该表空间处于联机状态B该表空间处于脱机状态C该表空间处于只读状态D该表空间为非空,包含数据库对象5.如果标准快的尺寸为8kb,若想创建一个数据块为16kb的表空间,需要指定那个初始化参数?BA db_8k_cache_sizeB db_16k_cache_sizeC undo managementD db_create_file_dest6.在为已有的数据库增加重做日志文件时,数据库应处于哪种状态?AA openB shutdownC nomountD mount7.要改变数据库的归档模式,数据库应处于哪种状态下DA openB shutdownC nomountD mount8.如果某个数据库LGWR进程经常会因为检查点未完成而进入等待状态,DBA应当采取什么措施来解决这个问题?AA增加新的重做日志组B为所有的重做日志组增加新的成员C手工清除当前的重做日志组内容D将数据库置为NOARCHIVELOG模式9.如果某个数据库拥有两个重做日志组,但是第二重做日志组突然损坏(其中所有的成员日志都不可用),此时DBA应采取下列哪项操作CA删除原有的第二重做日志组,然后再使用ALTER DATABASE ADD LOGFILE GROUP2 语句建立新的第二重做日志组B删除所有重做日志组,然后再使用ALTER DATABASE ADD LOGFILE GROUP语句建立新的重做日志组C使用ALTER DATABASE CLEAR LOGFILE GROUP2语句对第二组重做日志组进行初始化D使用ALTER DATABASE CLEAR LOGFILE GROUP2语句对2重做日志组进行初始化,然后删除它,在重建第二重做日志组。

Oracle 显示重做日志信息

Oracle  显示重做日志信息

Oracle 显示重做日志信息对于DBA而言,可能经常要查询重做日志文件,以了解其使用情况。

要了解Oracle数据库的日志文件信息,可以查询如表11-2所示的数据字典视图和动态性能视图。

表11-2 包含重做日志文件信息的视图视图说明V$LOG 包含从控制文件中获取的所有重做日志文件的基本信息V$LOGFILE 包含各个成员日志文件的信息,例如成员的状态和所属的重做日志组V$LOG_HISTROY 包含重做日志文件的历史信息下面列出了V$LOG的结构信息:SQL> desc v$log名称是否为空? 类型---------------------------- ------------------- --------------GROUP# NUMBERTHREAD# NUMBERSEQUENCE# NUMBERBYTES NUMBERMEMBERS NUMBERARCHIVED V ARCHAR2(3)STATUS V ARCHAR2(16)FIRST_CHANGE# NUMBERFIRST_TIME DA TE其中,GROUP#字段显示的是重做日志文件组的编号,THREAD#显示的是重做日志组所属的日志写入线程,SEQUENCE#字段显示的是重做日志组的日志序列号,BYTES字段显示重做日志组中各个成员的大小,MEMBERS字段显示的是重做日志组中的成员数,ARCHIVED字段显示的是重做日志的归档情况,STA TUS字段显示重做日志组的状态(CURRENT表示当前正在使用的,NACTIVE表示非活动组,ACTIVE表示归档未完成),FIRST_CHANGE#字段显示的是重做日志组上一次写入时的系统改变号SCN,FIRST_TIME 字段显示的是重做日志组上一次写入的时间。

ORACLE日志分析logmnr使用

ORACLE日志分析logmnr使用

ORACLE日志v$logmnr_contents分析一、产生日志命令:分析日志脚本文件logmnr.sql如下:SQL> @c:\logmnr.sql===================================================================== ========rem ********************开始执行日志分析脚本********************** rem 设置环境参数set echo offset termout off --//显示脚本中的命令的执行结果,缺省为onset trimout on --//去除标准输出每行的拖尾空格,缺省为offset trimspool on --//去除重定向(spool)输出每行的拖尾空格,缺省为off set heading off --//输出域标题,缺省为onset pagesize 0 --//输出每页行数,缺省为24,为了避免分页,可设定为0。

set verify off --//可以关闭和打开提示确认信息old 1和new 1的显示. set linesize 800 --//输出一行字符个数,缺省为80rem 字典信息文件路径为:show parameter utlrem 创建Logminer包:@D:\oracle\ora92\rdbms\admin\dbmslmd.sqlrem 创建字典信息文件exec dbms_logmnr_d.build(dictionary_filename=>'dic.ora',dictionary_location =>'D:\oracle\oradata\zfmi');rem 增加数据库对应的重做日志文件:execdbms_logmnr.add_logfile( logfilename=>'D:\oracle\oradata\zfmi\redo01. log', options=>dbms_logmnr.new);execdbms_logmnr.add_logfile( logfilename=>'D:\oracle\oradata\zfmi\redo02. log', options=>dbms_logmnr.addfile);execdbms_logmnr.add_logfile( logfilename=>'D:\oracle\oradata\zfmi\redo03. log', options=>dbms_logmnr.addfile);select db_name,filename from v$logmnr_logs;rem 结合字典信息文件,开始分析重做日志文件execdbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\oradata\zfmi\dic.or a',starttime => to_date('2008-05-06 10:00:00','YYYY-MM-DDHH24:MI:SS'),endtime => to_date('2008-05-06 20:00:00','YYYY-MM-DD HH24:MI:SS'));rem 开始保存分析结果:spool c:\zfmiLog08-05-06_10.00.00to08-05-06_20.00.00.txt;select to_char(TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'), SQL_REDO fromv$logmnr_contents where USERNAME='ZFMI' order by TIMESTAMP ;spool offrem 关闭分析器Logminer!dbms_logmnr.end_logmnr;rem ********************日志分析脚本执行完毕**********************===================================================================== ===========二、视图v$logmnr_contents字段分析一下内容根据oracle官方文档部分翻译:SQL> desc v$logmnr_contents;名称类型---------------------------------------------------------------------TIMESTAMP DATE //SQL执行时间COMMIT_TIMESTAMP DATE //事务提交时间SEG_OWNER VARCHAR2(32) //被修改对象创建者SEG_NAME VARCHAR2(256) //被修改对象的名字,如表名SEG_TYPE NUMBER //被修改对象类型SEG_TYPE_NAME VARCHAR2(32) //被修改对象类型名TABLE_SPACE VARCHAR2(32) //被修改对象所属表空间ROW_ID VARCHAR2(19) //被修改行的ROWID,如果SESSION# NUMBER //执行修改的SESSION号SERIAL# NUMBER //执行修改的SESSION序号USERNAME VARCHAR2(30) //执行事务的用户名SESSION_INFO VARCHAR2(4000) //执行修改的SESSION信息,例如:login_username= client_info=OS_username=SYSTEM Machine_name=ZFMISERVER OS_terminal=ZFMISERVER OS_process_id=1812 OS_program name=ORACLE.EXETX_NAME VARCHAR2(256) //执行的事务名,当该事务被命名时ROLLBACK NUMBER //回滚标记OPERATION VARCHAR2(32) //操作类型INSERTUPDATEDELETEDDLSTARTCOMMITROLLBACKLOB_WRITELOB_TRIMLOB_ERASESELECT_FOR_UPDATESEL_LOB_LOCATORMISSING_SCNINTERNALUNSUPPORTEDOPERATION_CODE NUMBER //操作类型代码0 = INTERNAL1 = INSERT2 = DELETE3 = UPDATE5 = DDL6 = START7 = COMMIT9 = SELECT_LOB_LOCATOR10 = LOB_WRITE11 = LOB_TRIM25 = SELECT_FOR_UPDATE28 = LOB_ERASE34 = MISSING_SCN36 = ROLLBACK255 = UNSUPPORTEDSQL_REDO VARCHAR2(4000) //重做日志SQLSQL_UNDO VARCHAR2(4000) //相反操作SQLSEQUENCE# NUMBER //重做日志的序号。

Oracle 重做日志简介

Oracle  重做日志简介

Oracle 重做日志简介日志文件也称为重做日志文件(Redo Log File),重做日志文件用于记载事务操作所引起的数据库变化。

执行DDL或DML操作时,Oracle会将事务变化的信息顺序写入重做日志。

当丢失或损坏数据库中的数据时,Oracle会根据重做日志文件中的记录,恢复丢失的数据。

1.重做记录重做日志文件是由重做记录组成,重做记录又称为重做条目,它由一组修改向量组成。

每个修改向量都记录了数据库中某个数据块所做的修改。

例如,如果用户执行了一条UPDATE语句对某个表中的一条记录进行修改,同时将生成一条重做记录。

这条重做记录可能由多个变更向量组成,在这些变更向量中记录了所有被这条语句修改过的数据块中的信息,被修改的数据块包括表中存储这条记录的数据块,以及回退段中存储的相应的回退条目的数据块。

如果由于某种原因导致数据库丢失了这条UPDA TE语句操作的结果,则可以通过与这条UPDATE语句对应的重做记录找到被修改结果并复制到各个数据块中,从而完成数据恢复。

利用重做记录,不仅能够恢复对数据文件所做的修改操作,还能够恢复对回退段所做的修改操作。

因此,重做日志文件不仅可以保护用户数据库,还能够保护回退段数据。

在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。

重做记录将以循环方式在SGA区的重做日志高速缓存中进行缓存,并且由后台进程LGWR写入到重做日志文件中。

当一个事条被提交时,LGWR进程将与该事务相关的所有重做记录全部写入重做日志文件中,同时生成一个“系统变更码SCN”。

系统变更码SCN 会随重做记录一起保存到重做日志文件中,以标识与重做记录相关的事务。

只有当某个事务所产生的重做记录全部被写入重做日志文件后,Oracle才会认为该事务提交成功。

2.写入重做日志文件在Oracle中,用户对数据库所做的修改首先被保存在内存中,这样可以提高数据库的性能,因为对内存中的数据进行操作要比对磁盘进行操作快得多。

OracleLogminer快速使用详解

OracleLogminer快速使用详解

OracleLogminer快速使⽤详解⽬录⼀、Logminer是什么?⼆、Logminer快速使⽤三、Logminer的具体使⽤1.配置Logminer2.使⽤Logminer3.Logminer字典4.指定Logminer重做⽇志⽂件5.启动LogMiner⼀、Logminer是什么?LogMiner 是Oracle公司从产品8i以后提供的⼀个实际⾮常有⽤的分析⼯具,使⽤该⼯具可以轻松获得Oracle 重做⽇志⽂件(归档⽇志⽂件)中的具体内容,LogMiner分析⼯具实际上是由⼀组PL/SQL包和⼀些动态视图组成,它作为Oracle数据库的⼀部分来发布,是oracle公司提供的⼀个完全免费的⼯具。

具体的说:对⽤户数据或数据库字典所做的所有更改都记录在Oracle重做⽇志⽂件RedoLog中,Logminer就是⼀个解析RedoLog的⼯具,通过Logminer解析RedoLog可以得到对应的SQL数据。

Oracle 中的RedoLog写⼊流程: Oracle重做⽇志采⽤循环写⼊的⽅式,每⼀个Oracle实例⾄少拥有2组⽇志组。

Oracle重做⽇志⼀般由Oracle⾃动切换,重做⽇志⽂件在当LGWR进程停⽌写⼊并开始写⼊下⼀个⽇志组时发⽣切换,或在⽤户收到发出ALTER SYSTEM SWITCH LOGFILE时发⽣切换。

如果Oracle数据库开启了归档功能,则在⽇志组发⽣切换的时候,上⼀个⽇志组的⽇志⽂件会被归档到归档⽬录⾥。

从上⾯可知 Oracle⾥的RedoLog⽂件分为两种:当前写的⽇志组的⽂件,可通过v$log和v$logfile得到归档的redoLog⽂件,可通过v$archived_log得到通过循环查找到最新符合要求的RedoLog并让Logminer加载分析,分析的数据在视图v$logmnr_contents⾥,通过读取v$logmnr_contents就可以得到 Oracle的实时数据。

Linux_oracle命令大全

Linux_oracle命令大全

Linux_oracle命令大全一,启动1.#su - oracle 切换到oracle用户且切换到它的环境2.$lsnrctl status 查看监听及数据库状态3.$lsnrctl start 启动监听4.$sqlplus / as sysdba 以DBA身份进入sqlplus5.SQL>startup 启动db二,停止1.#su - oracle 切换到oracle用户且切换到它的环境2.$lsnrctl stop 停止监听3.$sqlplus / as sysdba 以DBA身份进入sqlplus4.SQL>SHUTDOWN IMMEDIATE 关闭db其中startup和shutdowm还有其他一些可选参数,有兴趣可以另行查阅三,查看初始化参数及修改1.#su - oracle 切换到oracle用户且切换到它的环境2.$sqlplus / as sysdba 以DBA身份进入sqlplus3.SQL>show parameter session; 查看所接受的session数量###################################################### Oracle process与session2008年12月29日星期一15:47Connected to Oracle Database 10g Release 10.1.0.5.0Connected as ifsappSQL> show parameter sessionNAME TYPE V ALUE------------------------------------ ----------- ------------------------------java_max_sessionspace_size integer 0java_soft_sessionspace_limit integer 0license_max_sessions integer 0license_sessions_warning integer 0logmnr_max_persistent_sessions integer 1session_cached_cursors integer 0session_max_open_files integer 10sessions integer 225shared_server_sessions integerSQL> show parameters processes;NAME TYPE V ALUE------------------------------------ ----------- ------------------------------aq_tm_processes integer 0db_writer_processes integer 1gcs_server_processes integer 0job_queue_processes integer 3log_archive_max_processes integer 2processes integer 200SQL> alter system set processes=600 scope=both;SQL>SQL> alter system set processes=600 scope=both;alter system set processes=600 scope=bothORA-02095: specified initialization parameter cannot be modified SQL> alter system set sessions=600 scope=both;alter system set sessions=600 scope=bothORA-02095: specified initialization parameter cannot be modified SQL>SQL> alter system set processes=600 scope=spfile;System alteredSQL> show parameters processes;NAME TYPE V ALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0db_writer_processes integer 1gcs_server_processes integer 0job_queue_processes integer 3log_archive_max_processes integer 2processes integer 200SQL> alter system set processes=600 scope=memory;alter system set processes=600 scope=memoryORA-02095: specified initialization parameter cannot be modified重启数据库之后生效:SQL> show parameters processes;NAME TYPE V ALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0db_writer_processes integer 1gcs_server_processes integer 0job_queue_processes integer 3log_archive_max_processes integer 2processes integer 600SQL> show parameter sessionNAME TYPE V ALUE------------------------------------ ----------- ------------------------------java_max_sessionspace_size integer 0java_soft_sessionspace_limit integer 0license_max_sessions integer 0license_sessions_warning integer 0logmnr_max_persistent_sessions integer 1session_cached_cursors integer 0session_max_open_files integer 10sessions integer 665shared_server_sessions integer修改Oracle process 和session 的方法先备份spfile1.通过SQLPlus修改Oracle的sessions和processes的关系是sessions=1.1*processes + 5使用sys,以sysdba权限登录:SQL> show parameter processes;NAME TYPE V ALUE------------------------------------ ----------- --------------------------------------- aq_tm_processes integer 1db_writer_processes integer 1job_queue_processes integer 10log_archive_max_processes integer 1processes integer 150SQL> alter system set processes=400 scope = spfile;系统已更改。

oracle重做日志文件和归档日志

oracle重做日志文件和归档日志
当数据库正常运行时,重做日志文件 会持续写入。如果数据库发生故障, 可以通过重做日志文件来恢复数据, 确保数据的完整性和一致性。
数据库恢复的原理
当数据库发生故障时,可以利用重做 日志文件来进行恢复。Oracle会根据 重做日志文件中的记录,重新执行对 数据库所做的更改,从而将数据库恢 复到一致的状态。
04 Oracle重做日志文件和归 档日志的管理和维护
日志文件的备份与恢复
备份策略
制定定期备份和增量备份策略,确保重做日志文件和归档日志的安全。
恢复方法
在发生故障时,根据备份情况选择适当的恢复方法,如全量恢复或增量恢复。
日志文件的清理与维护
清理过期日志
定期清理过期或不再需要的日志文件 ,释放存储空间。
Oracle重做日志文件和归档日志
contents
目录
• Oracle重做日志文件 • 归档日志 • Oracle重做日志文件和归档日志的关系 • Oracle重做日志文件和归档日志的管理
和维护 • Oracle重做日志文件和归档日志的故障
处理
ቤተ መጻሕፍቲ ባይዱ
01 Oracle重做日志文件
重做日志文件的作用
数据恢复
THANKS FOR WATCHING
感谢您的观看
存储容量
需要合理规划存储空间,确保有足够的空间存储归档日志文件,避 免空间不足导致数据库故障。
归档日志的恢复
恢复方法
当数据库发生故障时,可以使用归档日志进行恢复。可以选择完全恢复或部分恢复,根据需要选择相应的归档日志文 件。
恢复过程
在恢复过程中,需要按照时间顺序应用归档日志文件,确保数据的一致性。可以使用RMAN(Oracle Recovery Manager)进行自动恢复或手动恢复。

Oracle的Insert、Update、Delete等DML操作速度的提高

Oracle的Insert、Update、Delete等DML操作速度的提高

在Orac‎l e数据库‎中,Inser‎t、Updat‎e、Delet‎e三个操作‎是对数据库‎中的数据进‎行插入、更新以及删‎除。

在进行这些‎操作时,如果数据库‎中的记录比‎较多时,则所需要的‎时间比较长‎。

如需要利用‎一个Upd‎a te语句‎更新大量记‎录时,即使更新的‎内容很简单‎,如只是将价‎格提升10‎%,但是仍然需‎要花费比较‎成的时间。

所以从某种‎程度上来说‎,进行这些操‎作时其执行‎速度跟内容‎的大小关系‎不大,反而跟记录‎的多少却有‎很大的关系‎。

那么在Or‎a cle数‎据库中,能否采取一‎些措施来提‎高这些操作‎的速度呢?为此笔者有‎如下两个建‎议,希望对大家‎有所帮助。

建议一:在执行这些‎操作时不向‎重做日志中‎写东西。

在执行更新‎、插入、删除操作时‎,默认情况下‎,其在更新数‎据的同时,也会像重做‎日志文件中‎记录这些改‎变。

如利用Up‎d ate语‎句将数据库‎中产品的价‎格提高10‎%时。

数据库会更‎改这些价格‎,同时也会在‎重做日志中‎记录这些改‎变。

显然,更新一个数‎据,数据库要进‎行两项工作‎。

为此,当更新所涉‎及到的记录‎比较多时,这个更新操‎作就可能要‎耗费比较长‎的时间。

此时,可能需要更‎新内容本身‎字符的多少‎,跟其更新的‎效率并不具‎有很大的联‎系。

其执行的速‎度主要跟其‎更新所涉及‎到的记录数‎量有关。

为此,有时候在追‎求其更快的‎执行速度时‎,我们往往需‎要在这些语‎句中加入一‎个nolo‎g ging‎选项。

如在使用U‎p date‎语句更新价‎格信息时,加上这个N‎o logg‎i ng 选项‎就可以显著‎提高其执行‎的速度。

更新操作所‎涉及到的记‎录越多,其效果越明‎显。

那么这个可‎选项到底有‎什么作用呢‎?顾名思义,这个参数就‎是告诉数据‎库系统,在执行这个‎操作的时候‎,不要忘重做‎日志中记录‎相关的信息‎。

也就是说,此时数据库‎系统只需要‎做一件工作‎即可,至需要更改‎数据,而不会产生‎重做日志文‎件。

oracle_重做日志文件--笔记

oracle_重做日志文件--笔记

oracle_重做⽇志⽂件--笔记重做⽇志⽂件(redo log file)⽬录重做⽇志⽂件相关。

重做⽇志⽂件简介。

查询重做⽇志⽂件的信息。

⽇志切换。

管理⽇志⽂件组增删⽇志⽂件组。

增删⽇志⽂件成员。

归档与⾮归档模式。

⼀.重做⽇志⽂件相关。

Oracle引⼊重做⽇志的⽬的:数据库的恢复。

Oracle相关进程:重做⽇志写进程(LGWR)。

重做⽇志性质:联机⽇志⽂件,oracle服务器运⾏时需要管理它们。

相关数据字典:v$log ; v$logfile。

操作者权限:具有sys⽤户或system⽤户权限。

1.1重做⽇志⽂件的规划。

(于⽹络上收集)联机⽇志⽂件的规划原则如下:1:分散放开,多路复⽤。

⼀般会将同⼀组的不同⽇志成员⽂件放到不同的磁盘或不同的裸设备上。

以提⾼安全性。

2:把重做⽇志放在速度最快的硬盘上(即:⽇志所在的磁盘应当具有较⾼的I/O),⼀般会将⽇志⽂件放在裸设备上。

3:把重做⽇志⽂件设为合理⼤⼩:例如,增⼤⽇志⽂件⼤⼩可以加快⼀些⼤型的INSERT、UPDATE、DELETE操作,也能降低⽇志⽂件切换频率。

减少⼀些⽇志等待事件。

⼀般根据具体业务情况有所不同。

⼀般⽇志组⼤⼩应满⾜⾃动切换间隔⾄少15-20分钟左右业务需求4:ORACLE推荐,同⼀个重做⽇值组下的所有重做⽇志⽂件⼤⼩、成员个数⼀致.⼆.重做⽇志⽂件简介。

2.1重做⽇志重做⽇志⽂件⼜叫联机⽇志⽂件,记录了对数据库修改的信息,包括⽤户对数据修改和数据库管理员对数据库结构的修改。

2.2重做⽇志的作⽤。

它主要⽤于在oracle发⽣故障的时候和数据库备份⽂件配合恢复数据库。

⼀般来说,数据库故障丢失数据,有两种情况。

⼀是,因为停电或死机,脏块未写⼊磁盘,造成该数据丢失。

⼆是,磁盘损坏,数据全完蛋。

对应第⼀种情况,oracle会使⽤实例恢复,使⽤重做⽇志⾃动恢复数据,不需要⽤户⼲预。

没错,实例恢复,它是⾃动的。

对应第⼆种情况,便需要DBA使⽤备份,重做⽇志,归档⽇志来恢复数据了。

重做日志组的增加与大小修改

重做日志组的增加与大小修改

优化案例项目需求【解决方案】: 1.日志文件太小把日志文件组由原来的6组增加到7组2.切换时间太短把日志文件大小由50m 增加到 100m 假如把原来50m大小的日志组修改修改为100M (先把inactive状态的删除了)1先增加一组日志文件组SQL> Select * from v$logfile;SQL> Alter database add logfile group7(‘/oracle/oradata/xxx/redo07.log’) size100m;2删除状态为inactive的日志文件组(如果不是inactive状态通过日志切换为inactive状态再去删除即可)【注意:默认剩下的最后两组是删除不了的】将active状态的重做日志文件切换成inactive:alter system checkpoint;SQL> Alter database drop logfile group3;SQL> Alter database drop logfile group4;SQL> Alter database drop logfile group5;SQL> Alter database drop logfile group6;3到日志文件所在的路径手动删除【上一步删除过的组】ASM磁盘是自动管理的不需要手动删除[oracle@xxx xxx]$ rm redo03.log[oracle@xxx xxx]$ rm redo04.log[oracle@xxx xxx]$ rm redo05.log[oracle@xxx xxx]$ rm redo06.log4重新创建回去【按新的大小100m】SQL> Alter database add logfile group3(‘/oracle/oradata/xxx/redo03.log’) size100m; SQL> Alter database add logfile group4(‘/oracle/oradata/xxx/redo04.log’) size100m; SQL> Alter database add logfile group5(‘/oracle/oradata/xxx/redo05.log’) size100m; SQL> Alter database add logfile group6(‘/oracle/oradata/xxx/redo06.log’) size100m;5同样方法继续删除剩下的两组【先切换为inactive状态才可以删如果alter system switch logfile 切换很久都不能删除就强制写入alter system checkpoint就可以删除了】SQL> Alter database add logfile group1(‘/oracle/oradata/xxx/redo01.log’) size100m; SQL> Alter database add logfile group2(‘/oracle/oradata/xxx/redo02.log’) size100m;6到日志文件所在的路径手动删除【上一步删除过的组】ASM磁盘是自动管理的不需要手动删除[oracle@xxx xxx]$ rm redo01.log[oracle@xxx xxx]$ rm redo02.log7重新创建回去【按新的大小100m】SQL> Alter database add logfile group1(‘/oracle/oradata/xxx/redo01.log’) size100m; SQL> Alter database add logfile group2(‘/oracle/oradata/xxx/redo02.log’) size100m;。

Oracle 指定分析的日志文件

Oracle  指定分析的日志文件

Oracle 指定分析的日志文件在使用LogMiner进行日志分析之前,必须指定它将对哪些重做日志文件进行分析。

LogMiner可以一次对多个重做日志文件进行分析。

执行DBMS_LOGMNR.ADD_LOGFILE过程可以指定要分析的重做日志文件。

利用这个过程可以依次添加多个重做日志文件,或删除已经添加的重做日志文件。

下面是指定重做日志文件列表的具体操作步骤:(1)确保数据库实例已经启动(STARTUP)。

(2)创建重做日志文件列表。

通过指定DBMS_LOGMNR.ADD_LOGFILE过程的NEW选项来创建重做日志文件的列表。

例如,利用下面的语句建立一个重做日志文件列表,并向其中添加一个重做日志文件:SQL> executedbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo01a.log',options=>dbms_logmnr.new);(3)根据需要,使用ADDFILE选项继续向列表中添加其他的重作日志文件。

比如,利用下面的语句向列表中添加重做日志文件:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.addfile);(4)如果需要,还可以通过指定DBMS_LOGMNR.ADD_LOGFILE过程的REMOVEFILE选项来删除重做日志文件。

例如,利用下面的语句可以将重做日志文件REDO02A.LOG从日志文件列表中删除:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.removefile);DBMS_LOGMNR.ADD_LOGFILE过程的OPTIONS各选项表示如下:●NEW 表示创建一个新的日志文件列表●ADDFILE 表示向列表中添加日志文件●REMOVEFILE 与ADDFILE相反,在列表中删除日志文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 增加重做日志
如果发现LGWR经常处于等待状态,则就需要考虑添加日志组及其成员,一个数据库最多可以拥有MAXLOGFILES个日志组。

增加重做日志是使用ALTER DA TABASE语句完成的,执行该语句时要求用户必须具有ALTER DATABASE系统权限。

1.增加重做日志组
当管理重做日志时,为防止后台进程LGWR等待写入日志组,DBA必须选择合适的日志组个数。

要增加重做日志组,可以使用带ADD LOGFILE子句的ALTER DATABASE语句。

例如,下面的语句向数据库中添加了一个新的重做日志组:
SQL> alter database add logfile
2 ('d:\app\Administrator\oradata\orcl\redo04.log',
3 'e:\oradata\orcl\redo04b.log')
4 size 10m;
数据库已更改。

新增的重做日志组具有两个成员,每个成员文件的大小均为10MB。

一般情况下,日志文件的大小在10MB到50MB之间,Oracle默认的日志文件大小为50MB。

如果在ALTER DA TABASE ADD LOGFILE语句指定GROUP子句,Oracle将自动为新建的重做日志组设置编号,例如:下面的语句可以在创建日志组时指定为第4组:SQL> alter database add logfile group 4
2 ('d:\app\Administrator\oradata\orcl\redo04.log',
3 'e:\oradata\orcl\redo04b.log')
4 size 10m;
数据库已更改。

使用组号可以更加方便地管理重做日志组,但是,对日志组的编号必须为连续的,不要跳跃式地指定日志组编号。

也就是说,不要将组号编为10,20,30等这样不连续的数。

否将会耗费数据库控制文件中的空间。

如果要创建一个非复合的重做日志文件,则可以使用如下的语句:
alter database add logfile
'd:\app\Administrator\oradata\orcl\redo01.log' reuse;
如果要创建的日志文件已经存在,则必须在ALTER DTABASE语句中使用REUSE子句,覆盖已有的操作系统文件。

在使用了REUSE的情况下,不能再使SIZE子句设置重做日志文件的大小,重做日志文件的大小将由已存在日志文件的大小决定。

2.创建日志成员文件
建立日志组时,至少要为日志组指定一个日志成员。

为了防止日志成员损坏而导致日志组无法使用,Oracle建议每个日志组至少包含两个或两个以上的日志成员。

如果日志组只有一个日志成员,并且该日志成员出现损坏,那么当后台进程LGWR切换到该日志组时,Oracle 会停止工作,并对该数据库执行不完全恢复。

为重做日志组添加新的成员时,只需要使用带ADD LOG MEMBER子句的ALTER DA TABASE语句即可。

例如,下面示例为第1组重做日志添加了一个新的成员日志文件:SQL> alter database add logfile member
2 'e:\oradata\orcl\redo01b.log' to group 1;
数据库已更改。

此外,也可以通过指定重做日志组中的其他成员的名称,以确定要添加的成员所属的重做日志组。

例如,下面的语句为第2组添加一个新成员:
SQL> alter database add logfile member
2
'e:\oradata\orcl\redo02b.log' to
3 ('d:\app\Administrator\oradata\orcl\redo02.log'); 数据库已更改。

注意为日志组添加新的成员时,必须指定文件名,但是不可以指定大小,新成员的大小是由组中其他成员的大小决定。

相关文档
最新文档