当前位置:文档之家› oracle 重做日志缓存大小设置

oracle 重做日志缓存大小设置

oracle 重做日志缓存大小设置
oracle 重做日志缓存大小设置

数据库管理员应该要了解的是,重做日志文件的机制跟数据文件的管理机制类似。当因为数据更新、新建记录或者数据库结构变更产生重做记录时,其也不是马上写入重做日志文件中。而是先将重做记录写入到重做日志高速缓存中。等到符合一定的条件,再将重做记录写入到硬盘上的冲作日志文件中。这主要是为了性能的考虑。因为往内存中写入数据要比往硬盘中写入数据快几千倍。

重做日志文件对于Oracle数据库的重要性显而易见,如上图所示,当利用Update等数据操作语更新数据或者调整数据库物理机构时,数据库会先将相关的更改信息保存在数据高速缓存中。同时也会产生重做记录,这些重做记录也是保存在重做日志高速缓存中。这在某种程度上可以提高数据库的性能。但是,如果这个重做日志缓存设置的不恰当的话,也会出问题。如当一个Update 语句需要更新大量的数据时,则写一部份记录到重做日志高速缓存中,其空间就会满了,需要将重做记录写入到重做日志文件中。此时更新作业不得不暂时等待,因为此时无法将重做记录写入到重做日志高速缓存中。只有将现有重做日志高速缓存中的信息都写入到重做日志文件中后,系统才会清空重做日志缓存中的信息,系统才能够将更新的信息保存到重做日志高速缓存中。所以当这个等待的次数多了,那就会极大的影响数据库的性能。不要让临时表空间影响数据库性能

所以说,重做日志高速缓存是把双刃剑。若重做日志高速缓存大小合适的话,确实可以提高Update等语句的操作效率。但是如果设置的不合适的话,则会起到适得其反的效果。反而会因为等待次数过多而影响到这些语句的执行效果。故在一些数据更新量比较大的系统中,特别需要进行成批更改的数据库中,调整重做日志高速缓存的大小也是改善数据库性能的一个重要举措。

一、避免一个误区:重做日志高速缓存越大越好。

在配置重做日志高速缓存大小的时候,首先需要避免一个误区,即并不是说重做日志高速缓存越大越好。如果将重做日志高速缓存设置的很大,也会产生不利的影响。

如重做日志高速缓存是内存中的一块区域,它是数据库启动的时候就已经分配好了的,是一块独享的内存区域。也就是说,如果给其分配了一定大小的区域之后,无论现在重做记录需要多少的高速缓存,其都会独占的享用这块区域。即使只用来1%,这多余的内容也不会给其他程序使用。而且,根据LGWR进程的规则,默认情况下一般当达到重做日志高速缓存大小的50%时,将会将重做日志高速缓存中的重作记录写入到重做日志文件中。所以如果将重做日志高速缓存设置的比较大的话,对于内存来说也是一种浪费。提

高Oracle数据库缓存命中率

其次会降低重做日志文件的作用。虽然在有些书上说重做记录会随时写入到重做日志文件中。其实这是不科学的。一产生重做记录后不会马上写入到重做日志文件中,而是写保存在重做日志高速缓存中。然后根据重做记录的数量来决定写入到重做日志文件中的时刻。也就是说,在将数据高速缓存中的数据写入到数据文件中这个时间间隔内,重做记录会分几次写入到重做日志文件中。所以,重做日志文件中的信息也会有一个时间的延迟,不一定根数据库真实的内容保持同步。所以到数据库发生故障时,即使有重做日志文件的存在,也不一定能够恢复到故障的点(当然离故障的点很近,可能只差几秒)。当重做日志高速缓存空间越大的话,那么将重做记录写入到重做日志文件中的时间间隔会越长。此时数据库如果发生故障,

则其丢失的数据相对来说会更多。所以说,虽然增加重做日志高速缓存的大小可以避免因为等待而导致的性能下降问题,但是也会对数据的安全性对来一定的损害。故最后数据库管理员在设置这个重做日志高速数据缓存空间的时候,对于这个大小,还是要有一个分寸。切记,这个空间并不是越大越好。

二、什么时候该修改重做日志高速缓存空间的大小?

是否需要修改这个重做日志高速缓存空间的大小,主要需要看数据库的运行状况。在上面的分析中,笔者提到过一个等待的概念。即在数据更新或则数据结构调整的过程中,用户进程等待重做日志缓存的现象。一般情况下,如果这个等待的次数越多,显然说明用户在这等待的时间上占用了比较多的时间。为此需要根据这个等待到次数来确定是否需要重新调整重做日志高速缓存空间。在数据库中可以通过数据字典视图V$SYSSTAT来查询用户用户进程等待重做日志缓存的次数。在这个视图中,有一个叫做“重做缓存重分配”的纪录,英文名字为“redo buffer allocation retries”。这条记录的vlaue字段的值就表示用户进程等待重做日志缓存的次数。如果这个值为0的话,就表示用户进程在数据更新或者数据结构调整的时候,不需要等到重做日志高速缓存。所以性能是最佳的。但是这只是一种比较理想的状态。在数据库运行了一段时间后,这条记录的值往往不会为0,有时候会达到两位数、三位数等等。那么是否这个值越大,就越说明有需要调整重做日志高速缓存大小的必要呢?

这么说有一定道理,但是也太过于决定。在实际工作中,我们往往还需要借鉴另外一个值。在这张视图中,还有一条记录叫做“redo entries”。如果按名次排序的话,他们这两条记录是一前一后紧靠在一起的。通常情况下,如果把“redo buffer allocation retries”记录的Value值除以“redo entries”记录的Value值,如果大于0.01(即1%),则说明这个数据缓存大小可能并不是很合适,需要通过调整重做日志缓存大小来提高数据库的性能。如果这个比率小于1%的话,即使用户进程等待的次数再多,一般也不需要调整其大小。因为此时用户的等待次数对于数据库的性能影响是微乎其微的,甚至可以忽略不计。从这里可以看出,并不是说用户进程的等待次数越多,就说明其大小越需要调整。一般我们都需要将用户进程等待次数与“redo entries”记录的Value值进行比较,最后以1%这个值为关卡,来判断是否需要调整

重做日志高速缓存的大小。

三、如何调整重做日志高速缓存的大小?

在Oracle数据库中,重做日志高速缓存的大小是由初始化参数log_buffer来控制的。在对其进行更改之前,有必要先查询一下这个参数的值。在数据库命令行中,可以通过show log_butter来查询重做日志缓存的大小。然后数据库管理员可以在这个值的基础上增加重做日志高速缓存的大小。这个参数是一个动态的参数,可以在数据库运行期间修改这个参数。如果某个事务需要长时间运行、并且会产生大量重做记录的时候,通过参数增加这个参数的值,往往可以减少对重做日志文件的硬盘操作次数,从而提高数据

库的性能。

由于这是一个动态的参数,为此在更改的时候需要注意一点,即在下次数据库启动的时候是否需要将这个修改保留。如果需要的话,则在这个参数内存中的值的时候,同时需要更改初始化参数文件中的值。如果采用文本参数文件启动的话,需要手工更改参数文件。如果采用服务器参数文件启动的话,则可以在命令中指定其同时修改内存与服务器参数文件中的值。

最后笔者再次提醒一句,充作日志高速缓存并不是越大越好。通常情况下,需要将上面提高的两个记录进行对比,以1%作为其调整的关口。如果超过1%,则就可以通过调整重做日志高速缓存来达到改善数据库性能的目的。反之,如果值小于1%,那么即使增加了重做日志高速缓存的大小,也很难起到应有的效果。相反会造成一定的安全隐患,而且会浪费内存空间。所以,这个调整重做日志高速缓存时还需要谨慎行事。

oracle日志记录

【例1】 SQL>set time on SQL>create table hr.mydep1 as select * from hr.department; SQL>delete from hr.mydep1 where department_id=10; SQL>flashback table hr.mydep1 to timestamp 2 to timestamp(to_tate(‘2009-05-29 10:00:00’, ’yyyy-mm-dd hh24:mi:ss’)); 【例2】 SQL>create table student (name Varchar2(10), score Number); SQL>insert into student values(‘zs’, 68); SQL>update student set score=98 where name=’zs’; SQL>commit; SQL>select versions_starttime,versions_operation,name,score 2 from student versions between timestamp minvalue and maxvalue; 【例3】 SQL>CONNECT sys /zzuli AS sysdba SQL>select table_name, undo_sql from flashback_transaction_query where rownum<5;

【例1】控制文件备份为二进制文件 下面的语句可以将控制文件备份为一个二进制文件,即复制当前的控制文件: alter database backup controlfile to 'd:\backup_controlfile\control_09-05-25.bkp'; 【例2】控制文件备份为脚本文件 alter database backup controlfile to trace; 【例3】对视图V$CONTROLFlLE_RECORD_SECTION的查询。 select type,record_size,records_total,records_used from v$controlfile_record_section; 【例4】向数据库添加了一个新的重做日志组: alter database add logfile (‘e:\app\administrator\oradata\orcl\redo04.log’, ‘f:\oradata\log\redo04b.log’) Size 10m; 【例5】创建新的日志组,并将新的日志组指定为第4组: alter database add logfile group 4 (‘e:\app\administrator\oradata\orcl\redo004.log’,‘f:\oradata\log\redo004b.log') size 10m; 【例6】为第1组添加了一个新的成员日志文件: alter database add logfile member 'f:\oradata\log\redo01b.log' to group 1; 【例7】为第2组添加一个新成员: alter database add logfile member 'f:\oradata\log\redo02b.log' to

用Oracle归档日志进行恢复的方法

联机重演日志没有丢失应使用完成恢复,如联机重演日志损坏,而又没有备份,就只能进行不完全恢复。 一、完全恢复: 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recover d atabase;” 4〃按下ENTER,接受默认值。 5〃然后输入命令“alter d atabase o pen;”完成数据库恢复。 二、不完全恢复 警告: 应用不完成恢复前,必须将数据库做一次完全冷备份,因为应用不完全恢复后,联机重演日志将重置,以前的所有日志不可用。 如果恢复不成功,数据库就不能使用了。再次强调,做完全冷备份后再应用不完全恢复。 1).基于变化的恢复(change-based r ecovery) 要执行基于变化的恢复,需要知道丢失日志之前的系统写入归档重演日志的最大的变化号(SCN),然后可以启动恢复语句恢复数据库直到改变scn_number,其中比scn_number是写到已归档重演日志文件顺序号386的SCN(即,小于丢失日志顺序号387的SCN)。可以从V$log_history视图中得到SCN信息。 select f irst_change# f rom v$log_history w here s equence#=387; 其中387为最后一个有效的日志文件号加1,该例是查找386. 知道了SCN后,使用下述步骤完成恢复 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recover d atabase u ntil c hange 9999;” 4〃在回答Oracle第一个归档重演日志建议信息时,输入“auto”,Oracle在找到第387号重演日志之前停止恢复。 5〃用命令“alter d atabase o pen r esetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用) 2).基于停止??恢复(cancel-based r ecovery) 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recove r d atabase u ntil c ancel;”,Oracle提示需要的第一个归档重演日志文件名〃按下ENTER键

Oracle数据库归档日志日常管理与建议

Oracle数据库归档日志日常管理与建议 1.简介 近日,项目组偶有发生归档日志占满归档目录空间导致数据库hang住(无响应),导致系统不能正常应用的情况。针对此类问题,笔者从Oracle数据库归档模式、归档模式的优缺点、归档日志日常管理方法等各方面浅析并整理出归档日志日常管理与建议。请各项目组依据实际情况,规范管理归档日志,排查相关隐患,以保证系统的正常高效运营。 另外,对于已开启数据库归档模式的项目组,若数据库管理权限不在我方,可将相关归档管理建议与当地运维部门充分沟通,避免归档的不当管理引起事故。 2.数据库归档模式与归档日志 2.1数据库运行模式简介 Oracle数据库包括归档模式与非归档模式两种运行模式。 一般情况下Oracle数据库的联机重做日志会记录对数据库所做的所有的修改,如创建对象;插入、删除、更新对象;删除对象等,这些操作都会记录在联机重做日志里。Oracle 数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满(假设为1)的时候,就会发生日志切换,这时联机重做日志组2(假设为2)成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,这样反复进行。 如果数据库处于非归档模式,联机日志在切换时就会被丢弃。而在归档模式下,当发生日志切换的时候,被切换的联机日志会被归档。 如当前在使用联机重做日志1,当1被写满时,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到一个指定的目录下。这个目录为归档目录,这个过程称之为归档,拷贝的文件叫归档日志。 2.2归档模式优点与归档日志作用 数据库运行在归档模式时,后台进程ARCH会将联机日志的内容拷贝到归档目录生成归档日志。 当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。因此,开启归档模式及归档日志的益处与作用是非常明显的: 1.可以进行完全、不完全恢复。由于对数据库所做的全部改动都记录在日志文件中, 如果发生硬盘故障等导致数据文件丢失的故障,则可以利用物理备份和归档日志 完全恢复数据库,不会丢失任何数据。 2.可以进行联机热备。所谓联机热备,就是在数据库运行状态下,对数据库进行备 份,备份时用户对数据库的使用基本不受影响(不可避免的会对性能有负面影响)。 3.可以实施Data Guard。可以部署1个或多个备用数据库,从而最大限度地提供灾 难保护手段。

重做日志文件

重做日志文件(redo log file)对于Oracle数据库至关重要。它们是数据库的事务日志。通常只用于恢复,不过也可以用于以下工作: q 系统崩溃后的实例恢复 q 通过备份恢复数据文件之后恢复介质 q 备用(standby)数据库处理 q 输入到流中,这是一个重做日志挖掘过程,用于实现信息共享(这也是一种奇特的复制) 重做日志文件的主要目的是,万一实例或介质失败,重做日志文件就能派上用场,或者可以作为一种维护备用数据库(standby database)的方法来完成故障恢复。如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恢复到掉电前的那个时刻。如果包含数据文件的磁盘驱动器出现了永久性故障,Oracle会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。另外,如果你“无意地”删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,并让Oracle使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。 你在Oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。向表中插入一行时,插入的最终结果会写入重做日志。删除一行时,则会在重做日志中写入你删除了这一行这一事实。删除一个表时,删除的效果会写入重做日志。从表中删除的数据不会写入;不过,Oracle删除表时执行的递归SQL确实会生成redo。例如,Oracle从SYS.OBJ$表(和其他内部字典对象)中删除一行时,这就会生成redo,另外如果支持不同模式的补充日志(supplemental logging ),还会把具体的DROP TABLE语句写入重做日志流。 有些操作可能会以尽量少生成redo的模式完成。例如,可以使用NOLOGGING属性创建一个索引。这说明,最初创建索引数据的操作不会记入日志,但是Oracle完成的所有递归SQL会写入日志。例如,创建索引后,将向SYS.OBJ$表中插入一行表示索引存在,这个插入会记入日志,以后使用SQL插入、更新和删除等操作完成的修改也会记入日志。但是,最初向磁盘写索引结构的操作不会记入日志。 前面我提到了两种类型的重做日志文件:在线(online)和归档(archived)。下面几节将详细介绍这两类重做日志文件。在第9章中,我们还会结合回滚段来讨论redo,看看它们对开发人员有什么影响。现在,我们只关注这些重做日志文件是什么,它们有什么用途。 3.7.1 在线重做日志 每个Oracle数据库都至少有两个在线重做日志文件组。每个重做日志组都包含一个或多个重做日志成员(redo按成员组来管理)。这些组的单个重做日志文件成员之间实际上形成彼此真正的镜像。这些在线重做日志文件的大小是固定的,并以循环方式使用。Oracle先写日志文件组1,当到达这组文件的最后时,会切换至日志文件组2,从头到尾重写这些文件的内容。日志文件组2填满时,再切换回到日志文件组1(假设只有两个重做日志文件组;如果有3个重做日志文件组,当然会继续写第3个组)。如图3-4所示。 4 日志文件组 图3-

oracle 数据文件、表空间、日志文件、控制文件数据库管理

实验四 oracle 数据库管理 一、试验目的 掌握对数据文件、表空间、日志文件、控制文件的常用命令,作为DBA的必要准备。 二、实验内容 2.1 数据文件的管理 (1)在安装完毕之后,在INITsid.ORA参数文件有一个DB_FILES 参数,用于设置当前实例的数据外文件的个数。如: db_files = 80 如果在INITsid.ORA文件没有该参数,则可以用下面查询语句从视图中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files'; NAME V ALUE -------------------- -------------------------------------------------- db_files 1024 (2)行命令建立表空间: 例1 CREATE TABLESPACE user_stu DA TAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE ( INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10 ) ONLINE ; 例2:建立一个新的表空间,具有两个数据文件: CREATE TABLESPACE CRM_TAB DA TAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB; (3)对一个已存在的表空间追加新数据文件: 例1 ALTER TABLESPACE user_stu Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M; 例2 为表空间增加数据文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M ; (4)数据文件更名 ALTER TABLESPACE users

oracle11g更改归档模式、目录、日志大小

oracle11g更改归档模式、目录、日志大小 一、更改Oracle为归档模式 1.关闭oracle SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. 2.启动为mount状态 SQL> startup mount ORACLE instance started. Total System Global Area 2572144640 bytes Fixed Size 2283984 bytes Variable Size 738199088 bytes Database Buffers 1828716544 bytes Redo Buffers 2945024 bytes Database mounted. 3.更改为归档模式 SQL> alter database archivelog Database altered. 备注:‘archivelog’为归档模式;‘noarchivelog’为非归档模式。 4.更改数据库为‘打开’状态 SQL> alter database open 5.查看归档模式信息 SQL> archvie log list 它会提示归档的模式、是否启用、参数 Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence 88 Next log sequence to archive 90 Current log sequence 90 二、更改归档目录 1.查看参数db_recovery_file_dest (1)“db_recovery_file_dest”是用于定义存储归档日志的目录。通过show parameter命令,显示参数的值为(默认为)fast_recovery_area。示例如下:SQL> show parameter db_recovery NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string D:\oracle\fast_recovery_area db_recovery_file_dest_size big integer 4182M (2)查看v$recovery_file_dest视图,可得知fast_recovery_area的空间限制、已使用的空间、文件数等。 SQL> select * from v$recovery_file_dest; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES ----------- ---------- ----------------- --------------- D:\oracle\fast_recovery_area 4385144832 4346230272 2741248 102 2.更改归档日志目录 语法:alter system set 参数=值scope=spfile; 示例:SQL> alter system set db_recovery_file_dest='D:\oracle\archivelog' scope=spfile; System altered.

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

Oracle 改变重做日志位置或名称 在所有后台进程中,LGWR进程活动最为频繁,它需要不断地将事务变化由重做日志缓冲区写入重做日志中。在数据库文件、控制文件和重做日志这3种文件中,重做日志的I/O操作最频繁。为了提高I/O性能,应将重做日志分布到I/O操作相对较少、速度最快的磁盘设备上。规划重做日志时,应将同一个日志组的不同日志成员尽可能地分布到不同磁盘上,以防止磁盘损坏而导致所有日志成员丢失。例如,假设在初始阶段,日志组二中的日志成员被放在同一块磁盘上,但是后来出于完全和性能方法的考虑,DBA为服务器新增加了一块磁盘,并且将日志组二中的一个日志成员移动到新磁盘上,此时就需要改变该日志成员的存放位置。 下面修改重做日志文件的名称和位置的具体操作步骤如下: (1)关闭数据库。 SQL> connect /as sysdba SQL> shutdown (2)复制或移动日志成员到目标位置。当闭数据库后,DBA就可以使用操作系统命令复制或移动日志成员到新位置。例如,修改原日志文件的名称。 (3)重新启动数据库实例,加载数据库,但是不打开数据库。 SQL> startup mount; (4)使用带RENAME FILE子句的ALTER DATABASE语句重新设置重做日志文件的路径和名称。 SQL> alter database rename file 2 'd:\app\Administrator\oradata\orcl\redo03.log', 3 'd:\app\Administrator\oradata\orcl\redo02.log', 4 'd:\app\Administrator\oradata\orcl\redo01.log' 5 to 6 'd:\app\Administrator\oradata\orcl\redo03a.log', 7 'd:\app\Administrator\oradata\orcl\redo02a.log', 8 'd:\app\Administrator\oradata\orcl\redo01a.log'; 数据库已更改。 (5)打开数据库 SQL> alter database open; (6)备份控制文件 重新启动数据库后,对联机重做日志文件的修改将生效。通过查询数据字典V$LOGFILE 可以获知数据库现在所使用的重做日志文件。

ORACLE清理归档日志

清理归档日志: archive log 日志已满 ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法 1. 用sys用户登录 sqlplus sys/pass@tt as sysdba 2. 看看archiv log所在位置 SQL> show parameter log_archive_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest string log_archive_dest_1 string log_archive_dest_10 string 3. 一般VALUE为空时,可以用archive log list;检查一下归档目录和log sequence SQL> archive log list; Database log mode Archive Mode

Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 360 Next log sequence to archive 360 Current log sequence 362 4. 检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到 SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------ ------------------ ------------------------- --------------- CONTROLFILE .13 0 1 ONLINELOG 0 3 ARCHIVELOG 0 141 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 0 0 0 5. 计算flash recovery area已经占用的空间 SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

Oracle 使用RMAN备份数据库文件和归档日志

Oracle 使用RMAN 备份数据库文件和归档日志 当数据库打开时,可以使用RMAN BACKUP 命令备份如下对象: ● 数据库 ● 表空间 ● 数据文件 ● 归档重做日志 ● 控制文件 ● 备份集 在使用BACKUP 命令备份数据文件时,可以为其设置参数,定义备份段的文件名,文件数和每个输入文件的通道。 1.备份数据库 如果备份操作是在数据库被安全关闭之后进行的,那么对整个数据库的备份是一致的;与之相对应,如果数据库是在打开状态下对整个数据库进行的备份,则该备份是非一致的。非一致性备份整个数据库的操作步骤如下: (1)启动RMAN 并连接到目标数据库,输入BACKUP DATABASE 命令备份数据库。在BACKUP 命令中可以指定FORMA T 参数,为RMAN 生成的每个备份片段指定一个惟一的名称,以及存储的位置。 C:\>rman target system/admin nocatalog RMAN> backup database format 'f:\oracle_backup\ora11g_%Y_%M_%D_%U.bak' maxsetsize=2G; 还可以为BACKUP 命令指定TAG 参数,为备份片段定义备份标签。例如: RMAN>backup database tag='weekly_backup'; (2)如果建立的是非一致性备份,那么必须在完成备份后对当前的联机重做日志进行归档,因为在使用备份恢复数据库需要使用当前重做日志中的重做记录。 RMAN>sql'alter system archive log current'; (3)在RMAN 中执行LIST BACKUP OF DA TABASE 命令,查看建立的备份集与备份片段的信息。 RMAN> list backup of database; 如果需要对整个数据库进行一致性备份,则首先需要关闭数据库,并启动数据库到MOUNT 状态。例如: RMAN>shutdown immediate RMAN>startup mount RMAN>backup database format='f:\oracle_backup\%d_%s.bak'; RMAN>alter database open; 如果想要对某个表空间以外的整个数据库进行备份,则可以使用用如下一组命令: //设定在备份数据库的时候排除USER01; RMAN>configure exclude for tablespace user01; 注 意 BACKUP 命令只能对数据文件、归档重做日志文件和控制文件进行备份,如果要对其他重要的数据文件进行备份,则可以在操作系统中对其进行物理备份。

Oracle丢失归档日志文件的数据库恢复方法

Oracle丢失归档日志文件的数据库恢复方法 丢失归档日志文件的数据库恢复方法,从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据。场景:一个磁盘损坏了并且丢失了一个数据库文件。从一周前的热备转储数据文件,不幸的是丢失了几个归档日志文件。但是有问题的数据文件包含了最重要的表,如何能够挽救数据呢? 每个DBA都知道这是有问题的,一定会丢失数据,因为某些事务丢失了,问题是会丢失多少数据?Oracle 使用硬线路位置并且由于存在完整性约束问题,因此不允许正常打开数据。但是如果使用非常规的方法让Oracle删除其硬线路属性,那么应该能够提取尽可能多的数据。而通常这会比损失全部数据要好很多。 详细过程通常如果仅仅丢失了堆表的索引,或者某些能够很容易重建的数据,那么最好的方法应该是删除表空间并重建这些对象然后重新输入。但是如果丢失的数据文件包含了重要数据并且很难恢复,而且只有前一次的备份却又丢失了某些归档日志,那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间。 主要的步骤如下: 1. 对当前拥有的数据进行一个冷备; 2. 转储丢失的数据库文件备份并应用可以应用的日志; 3. 设置未文档化的初始化参数,其允许你在当前状态打开数据库; 4. 执行exp并提取全部可以从有问题的表空间提取的数据; 5. 从先前的冷备转储数据库; 6. 使毁坏的数据文件offline; 7. 执行exp并提取第4步没有提取的额外数据; 8. 在一次从冷备转储; 9. 删除有问题的表空间; 10. 重建有问题的表空间; 11. 使用第四步和第七步提取的数据重建数据; 使用案例描述:ORDTAB表空间的一个数据文件ordtab03.dbf毁坏,其包含很多ORDERS表的分区,数据文件热备于July 4,2004,July 4—至今的某些归档日志丢失。 第一步:备份数据库第一步的任务是冷备当前拥有的任何数据文件,在线重做日志,和控制文件。如果丢失了一个/多个数据文件但是数据库仍然是open的,那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存。

oracle 归档日志文件路径设置

oracle 归档日志文件路径设置 2012-05-23 15:37:42| 分类:oracle | 标签:oracle log_archive_dest |举报|字号订阅 1:首先查看是否是归档模式运行archive log list 命令(必须以sys身份运行) 运行结果如下; 2:通过上面的信息可以看出已经是归档模式了(如果是非归档模式参考博主的 另一篇文章有关“归档日志与非归档日志切换”), 查看归档日志文件 存放在哪个位置运行show parameter log_archive_dest 命令运行结果如下; 3: 在上面的信息中可以看到,log_archive_dest 的路径为空,我们可以设置这个路径来存放归档日志文件,运行alter system set log_archive_dest='d:/xxx/xxx' scope=spfile;(xxx代表存放路径,最好指定scope=spfile 否则的话重启db,则配置不会生效); 运行结果会出现在如下错误: 第1 行出现错误: ORA-02097: 无法修改参数, 因为指定的值无效 ORA-16018: 无法将LOG_ARCHIVE_DEST 与LOG_ARCHIVE_DEST_n 或DB_RECOVERY_FILE_DEST 一起使用 出现错误的原因是db_recovery_file_dest的参数已经被设置了,去查询一下看看,果真如此。 4: 查看db_recovery_file_dest 参数设置,运行show parameter db_recovery_file_dest 命令运行结果如下; 可以看到已经默认设置了归档的路径。 5:db_recovery_file_dest是缺省的归档位置,下面把它设置为"空",然后设置log_archive_dest参数,指定另外一个非缺省的参数 重启db 如下图 运行shutdown immediate;

Oracle大型数据库 实验五 重做日志文件、表空间管理操作

集美大学计算机工程学院实验报告 课程名称:大型数据库技术班级:计算12实验成绩: 指导教师:杨艳华姓名: 实验项目名称:重做日志文件、表空间管理操作学号:20上机实践日期:2014.12实验项目编号:实验五组号:上机实践时间:2学时 一、实验目的 1、理解重做日志文件的基本概念; 2、掌握重做日志文件组及其成员的添加、移动、删除等操作; 3、掌握归档重做日志的设置; 4、理解表空间的基本概念和分类; 5、掌握永久表空间的创建和管理操作; 6、掌握还原表空间的管理。 二、实验要求 1、完成重做日志文件组及其成员文件的管理操作; 2、完成归档重做日志的设置; 3、完成永久表空间和临时表空间的管理操作; 4、完成还原表空间的管理。 三、实验内容 (1)查看数据库当前重做日志文件组及成员的设置情况,然后,为数据库添加一组重做日志,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。

(2)为上面新添加的那组重做添加一个日志成员,命名为“redo4c-姓名简拼.log”,实现重做日志的多路存储。 (3)把数据库从非归档模式修改为归档模式,之后创造条件让数据库立即归档,并检查归档是否成功 (4)创建永久表空间 ?创建一个表空间名为“TB+学号后三位+姓名简拼” ?空间的大小为50M ?表空间包括两个数据文件:表空间名_01.dbf(30M)和表空间名_02.dbf(20M),大 小均不能自动扩展 ?数据文件均存放在Oracle的安装根目录下 ?区的分配方式为统一大小,192K ?段管理采用自动方式

(5)改变上述永久表空间的可用性 ?先将表空间脱机 ?再进行联机 (6)创建一个4K的非标准块表空间,命名为“tbf+学号后三位+姓名简拼”,数据文件存储在”\oradata\orcl\姓名简拼”目录下,大小为(学号后三位*2)M。 (7)创建一个临时表空间 ?名为“TTB+学号后三位+姓名简拼” ?包含一个数据文件:表空间名_01.dbf,大小为(学号后三位*2)M,存储 在”\oradata\orcl\姓名简拼”目录下,文件的大小可以自动扩 展。 ?将该临时表空间设置为数据库的默认临时表空间 ?再将该临时表空间设置为scott用户的默认临时表空间 ?查询相关的数据字典验证上面的设置。

ORACLE数据库归档日志满后造成系统宕机的处理方法

第一次宕机时,初始以为是系统内存溢出,于是重启应用服务器,发现应用服务器在启动时报错,错误为无法连接到数据库。于是连接数据库服务器,打开EM后发现系统报错如图: 提示归档日志写入失败,检查服务器发现磁盘空间满了,于是清理磁盘空间后,重启数据库问题解决。随后把服务器磁盘空间扩容,直接给了oracle数据所在盘1TB的磁盘空间。第二次又出现此问题,经过仔细检查,并与同事确认后,发现是由于ORACLE数据库的归档日志被启用了,而我们系统默认是没有启用ORACLE数据库归档日志这个功能的。 使用sql命令查看: Sql>sqlplus / as nolog;---------------------启动sql*Plus Sql> connect sys/password@orcl as sysdba; Sql> archive log list; 数据库日志模式存档模式 自动存档启用 存档终点USE_DB_RECOVERY_FILE_DEST 最早的联机日志序列4888 下一个存档日志序列4890 当前日志序列4890 Sql> show parameter db_recovery_file_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string D:\oracle\product\10.2.0/flash_recovery_area db_recovery_file_dest_size big integer 20G 发现默认的归档路径为D:\oracle\product\10.2.0/flash_recovery_area。而且限制使用空间为20G。由于每天产生的oracle归档日志差不多就占用2个G的磁盘空间,而且oracle自身并不会自动清理也没有相关设置自动清理归档日志的功能,一段时间不进行清理,20G空间很快就满了。 与客户商议,准备关闭归档日志功能,客户了解情况后,觉得归档日志功能还是需要开启,(归档日志是oracle灾难恢复的必要数据),于是准备把归档日志使用空间扩大,设成200g。 处理方法: 一、首先要处理日志空间满的情况: 1、删除归档日志物理文件,归档日志一般都是位于D:\oracle\product\10.2.0\flash_recovery_area\ORCL\ARCHIVELOG目录下,以日期文件夹存放,删除时至少保留最近几天的日志用于数据库恢复。 2、归档日志的物理文件删除后,ORACLE可以正常登录了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM 管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,利用RMAN进行删除操作; 进入cmd, 1.指定数据库实例 C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl 2.连接数据库

ORACLE使用数据文件恢复数据库

ORACLE使用数据文件恢复数据库 一、问题描述 Oracle控制文件丢失,数据文件完整,导致数据库实例不能启动。在修改数据库服务器的计算机名称、IP地址后,修改listener.ora和tnsnames.ora文件中的HOST地址后不能启动数据库实例或启动后不能登录使用数据,以及未能查找并解决数据库启动失败原因时可以通过重建控制文件的方式对数据库实例进行恢复。 二、恢复方法 1、恢复前准备工作 1)备份数据文件,文件路径为%ORACLE_NOME%/oradata/xxxx(xxxx为数据库实例)。 2)备份ORACLE安装路径下的Oracle\product\10.2.0\admin\xxxx\bdump\alert_xxxx.log (xxxx为数据库实例)。 3)ORACLE安装文件 2、恢复步骤 1)安装oracle数据库,安装时不要创建数据库实例 2)创建数据库实例:安装完成后创建数据库实例,实例名与原数据库实例相同,并创建监听服务。 3)拷贝数据文件:停止oracle相关服务,拷贝备份的数据文件到新安装的oracle数据库安装位置对应路径下,删除新成的控制文件及日志文件(%ORACLE_NOME%/oradata/ 下所有文件)、完成后重启oracle相关服务。 4)准备重建控制文件脚本:打开事先备份的alert_xxxx.log文件,查找最后一个create controlfile语句并修改以下几部分。 a)若该语句中包含NORESETLOGS,则将其修改为RESETLOGS;原因是重做日志文件 已经丢失。 b)LOGFILE段是指定重做日志文件到期望的文件位置。 c)DATAFILE段是指定到数据文件的实际文件位置。不能包含临时表空间用到的文件, 否则报错(ora-01503,ora-01160,ora-01110)。 注意:create controlfile语句中如果包含NOARCHIVELOG,则为非归档模式,如为 ARCHIVELOG,则为归档模式,没有则保持没有。 5)重建控制文件 a)打开sqlplus,使用DBA(sys)用户登录到数据库 示例:打开cmd,执行sqlplus /nolog 回车 SQL>Conn sys/password as sysdba b)关闭数据库 示例:SQL>Shutdown immediate; c)启动数据库,但不挂载数据文件 SQL>Startup nomount;

Oracle通过归档日志还原数据

Oracle通过归档日志还原数据 我要投稿 [ Oracle 的日志模式分为 archivelog (启用归档日志) 和 noarchivelog () 两种模式。 查看数据库日志模式: select log_mode from v$database; log_mode ----------------------------------- archivelog 如何启用Oracle的归档方式: 1.参照以下内容编辑init.ora文件: log_archive_start = true log_archive_dest_1 = " LOCATION=D:\Oracle\oradata\ORCL\archive " og_archive_format = %%ORACLE_SID%%T%TS%S.ARC Oracle 归档日志还原数据(还原前请做好冷备份): sqlplus /nolog conn / as sysdba; archive log list; (查看日志文件列表,查看单个日志文件可用 strings xxx.dbf to xx.txt) recover database until time '2011-09-15:15:00:00'; (提示:使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。) 基于时间的恢复(time-based recovery) 为使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387

(丢失重演日志)的时间,通过执行查询语句“select * from v$log_history where sequence#=387;” 或者 recover database until change 9999; alter database open resetlogs; (应用该命令前请确认已数据库已备份,如打开 失败,日志将不可用) 作者“学习笔记” 如何解决ORA-01033问题 (2010-05-08 20:49:35) 转载 标签: oracle my 日志文件 数据文件 sql it Oracle错误:ORA-01033 错误编码:ORA-01033: ORACLE initialization or shutdown in progress 故障描述:因为移动了数据库文件([NAME].DMP)/日志文件等文件,导致数据库连接出现ORA-01033错误。 故障分析:网上有一种常见的说法是该类故障通常是由于移动文件而影响了数据库日志文件出现损坏而导致的无法正常进行IO操作而引起的错误。ORACLE将识别为数据库未装载完成而导致出现如上错误。

Oracle Archive log

Oracle归档日志(Archive Log 一) 归档日志即重做日志的备份,使用归档日志的目的是为了实现介质恢复。 一.日志操作模式 1.Noarchivelog(非归档模式) 不保存重做日志。 不能在open状态下进行物理备份;要定期执行完全数据库备份;只能将数据库恢复到上次的完全备份点。 2.Archivelog 当进行日志切换时,ARCH进程会将重做日志的内容复制到归档日志中。 在归档重做日志前,新事务变化不能覆盖旧事务变化。 可以在open 状态下进行物理备份。 可以将数据库恢复到失败前的状态。 可以是用备份数据库与主数据库保持同步。 二.开启归档 1.改变日志操作模式 shutdown immediate; startup mount; alter database archivelog; alter database open; 修改日志操作模式后,必须重新备份数据库 2.归档重做日志

1).手工归档 alter system archive log all; 2).自动归档 设置初始化参数:log_archive_start=true shutdown immediate; startup pfile=. 3).检查日志操作模式 archive log list; 三.指定归档位置 1.使用log_archive_dest 1).设置归档目录 log_archive_dest log_archive_duplex_dest 2).设置归档日志格式 2.使用log_archive_dest_n 1).指定归档位置 log_archive_dest_1=’location=f:\arc1’log_archive_dest_3=’service=standby’2).设置其他初始化参数 log_archive_dest_state_1=enable log_archive_dest_state_3=defer

Oracle 增加重做日志

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

相关主题
文本预览
相关文档 最新文档