Oracle重做日志文件损坏或丢失后应该怎样恢复

Oracle重做日志文件损坏或丢失后应该怎样恢复,第1张

很多网友在把某个数据库实例的REDO01~03LOG三个重做日志删掉后,会出现无法正常登陆数据库的现象,下面的示例是具体的恢复过程,希望能为大家解决难题: 一: c:/>sqlplus /nolog 二: sql>connect /@instancename as sysdba;三: startup mount; --启动实例,安装数据库,但不打开数据库,可以开始 *** 作控制文件、日志文件、数据文件等。四: select from v$logfile; --察看Redo文件的信息 五; select from v$log;--察看Redo日志的状态,一般有unused,current,clearing,clearing-。六:非当前(current)的未归档日志文件恢复alter database clear logfile group N; --N就是日志组的顺序号。 归档日志文件恢复:alter database clear logfile unarchived group N;七;当前日志文件用上述方法不能恢复的话使用recover database until cancel。

不能。

OracleServiceORCL其为实例创建服务,必须启动也必须开启,实例就是数据库启动后分配的内存和建立的后台进程数据库关闭后物理上的文件还存在,但实例分配的内存和建立的进程就没有了,注意一个实例只能对应一个被 *** 作的数据库。

日志文件在Oracle数据库中分为重做日志文件和归档日志文件两种。重做日志文件是Oracle数据库正常运行不可缺少的文件。重做日志文件主要记录了数据库 *** 作过程。用于备份和还原数据库,以达到数据库的最新状态。

直接修改是不可能的。因为重做日志并不是简单的用户执行的SQL语句的叠加。其中还包括了系统改变号,系统本身执行的(你所看不到的) *** 作等等。不要说他处同版本,即使就是在同一个数据库上,要使用重做日志也有种种限制,比如,如果控制文件信息跟重做日志的信息时间对不上,在同一个数据库上,也是无法应用的。

但是也不是完全没有办法,办法就是使用一个叫做logminer的工具(你可以百度一下,很多教程),可以分析重做日志,找出其中记录的SQL语句。然后你就可以在别的库上执行其中你需要的了。

两个没有区别,都是重做日志,且重做日志都是联机的,一般重做日志分成三个组,一个是当前日志,不断的写入信息,当写完成后,会根据数据库是否归档来决定是否删除非当期的日志(一般状态为inactive),如果是归档模式,会将该日志拷贝过去后再删除。

你问的是重做日志和归档日志的区别吧。

重做日志是不断删除,循环使用。归档日志是历史日志,不会自动删除的。

在Oracle数据库中,有一种日志文件叫做重做日志文件,他就是大家俗称的:redolog。在redolog中又分为两种:在线重做日志与归档日志。

ONLINE Redo log

在线重做日志(online redo log )主要用于:Oracle数据库所在服务器突然掉电、突然重启或者执行shutdown abort等命令使得在服务器重新启动之后,Oracle数据库没有办法正常的启动实例。此时,在线重做日志就派上了用场,Oracle会使用在线重做日志,把数据库恢复到服务器掉电前的那一个时刻,从而使得数据库能正常的启动起来 。

在Oracle数据库中,默认情况下,至少会有两个重做日志组,而且每个组里面至少包含了一个重做日志文件。日志组不会自动增加,在一个写满之后,会自动去写下一个。在下一个被写满之后会又从第一个开始写起。

Archive redo log

归档日志(archive log)主要用于硬件级别的错误:磁盘的坏道导致无法读写、写入的失败、磁盘受损导致数据库数据丢失。这就要使用归档日志文件,通过归档日志文件,把数据库恢复到归档日志所在的时间点上然后再通过在线重做日志文件把数据库恢复到当前的时间点上。

对于归档日志文件,可以理解为在线重做日志文件的备份。即当一个重做日志文件被填满了之后,归档日志文件就会把其备份保留一份。(因为上面说了,在线重做日志文件会自动的覆盖)所以,归档日志文件就是旧的在线日志文件的备份。

oracle每有一个事务,首先会产生一条日志,这个日志里面包含了能够还原这个事务的最少信息,这些日志会暂存在内存中,再由一个叫LGWR的进程将日志缓冲区的日志写到硬盘上的日志文件上,这些日志文件一般在50兆左右,一般为3组。等一个日志文件写满了50兆的内容,它会断开,LGWR继续往下一个日志文件中写日志;这3个日志文件轮流写入(覆盖写入)。

现在来讲重做日志文件归档,就是将一个写满了日志的文件复制一份到一个指定的文件夹中,可以将这些历史日志文件都copy(归档)一份,而不会在轮循中被覆盖,起到保护数据的功能。

一、Oracle中的几类日志文件

Redo log files -->联机重做日志

Archive log files -->归档日志

Alert log files -->告警日志

Trace files -->跟踪日志

user_dump_dest -->用户跟踪日志

backupground_dump_dest -->进程跟踪日志

--查看后台进程相关目录

SQL> show parameter dump

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

background_core_dump string partial

background_dump_dest string /u01/app/oracle/admin/orcl/bdump

core_dump_dest string /u01/app/oracle/admin/orcl/cdump

max_dump_file_size string UNLIMITED

shadow_core_dump string partial

user_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结尾的日志文件名,避免误删日志文件。如redo1rdo,redo2rdo

规划样例

Redo Log Group1 Redo Log Group2 Redo Log Group3

Member1 Member1 Member1 -->Physical Disk 1

Member2 Member2 Member2 -->Physical Disk 2

Member3 Member3 Member3 -->Physical Disk 3

6日志切换和检查点切换

ALTER SYSTEM SWITCH LOGFILE; --强制手动切换

ALTER SYSTEM CHECKPOING;

强制设置检查点间隔

ALTER SYSTEM SET FAST_START_MTTR_TARGET = n

7添加日志文件组

ALTER DATABASE ADD LOGFILE [GROUP n]

('$ORACLE_BASE/oradata/u01/logn1rdo',

'$ORACLE_BASE/oradata/u01/logn2rdo')

SIZE mM;

8添加日志成员

ALTER DATABASE ADD LOGFILE MEMBER

'$ORACLE_BASE/oradata/u01/logn1rdo' TO GROUP 1,

'$ORACLE_BASE/oradata/u01/logn2rdo' TO GROUP 2;

9删除日志成员

不能删除组内的唯一一个成员

不能删除处于active 和current 状态组内的成员

删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除

对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员

删除日志成员,物理文件并没有真正删除,需要手动删除

删除日志文件后,控制文件被更新

对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息

ALTER DATABASE DROP LOGFILE '$ORACLE_BASE/oradata/u01/logn1rdo'

10删除日志组

一个实例至少需要两个联机日志文件组

活动或当前的日志组不能被删除

组内成员状态有NULL 值或INVALID状态并存,组不可删除

日志组被删除后,物理文件需要手动删除(对于非OMF)

ALTER DATABASE DROP LOGFILE GROUP n

11日志的重定位及重命名

所需权限

ALTER DATABASE 系统权限

复制文件到目的位置 *** 作系统权限(写权限)

CURRENT状态组内的成员不能被重命名

建议该行为之前备份数据库

重命名或重定位之后建议立即备份控制文件

重定位及重命名的两种方法

添加一个新成员到日志组,然后删除一个旧的成员

使用ALTER DATABASE RENAME FILE 命令(不区分归档与非归档模式)

复制联机日志文件到新路径:ho cp <oldfile> <newfile>

执行ALTER DATABASE RENAME FILE '<oldfile>' TO '<newfile>'

对于处于CURRENT状态的需要改名且不切换的情况下

办法是切换到MOUNT状态下再执行上述 *** 作

12清空日志文件组

ALTER DATABASE CLEAR LOGIFLE GROUP n

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n --使用unarchived 避免归档

13日志周期循环及切换分析

Group 1 Group 2 Group 3

Current Inactive Inactive

---------- Log Switch -------------

Active Current Inactive

---------- Log Switch -------------

Active Active Current

---------- Log Switch -------------

Current Inactive Inactive

--Active 和Current 称之为在一个循环周期之内(按顺序写日志)

--Inactive 称为一个周期之外(一个新的循环)

--新一轮循环开始如在归档状态则先归档再清空,否则直接清空日志

--数据库启动时Active 和Current 状态的日志不能丢失,否则出错

14日志的监视

查看日志视图中的物理日志文件是否存在、位置、大小等

SELECT 'ho cp '||member FROM v$logfile;

查看日志文件所处的磁盘空间是否足够

SQL> ho df -h

查看组内是否存在多个成员,如为单一成员应考虑增加日志成员

日志切换的间隔时间,应满足15-20分钟业务需求,如果切换间隔很短,应当增加日志文件的大小

增加方法,先删除日志组,再重建该组(对于current和active的需要切换再做处理)

--查看切换时间间隔(下面的示例中为手工切换的时间,不作考虑)

SQL> SELECT TO_CHAR(first_time,'yyyy-mm-dd hh24:mi:ss'),group# FROM v$log;

TO_CHAR(FIRST_TIME, GROUP#

------------------- ----------

2010-07-20 09:43:18 1

2010-07-19 22:44:30 2

2010-07-19 22:44:32 3

15日志的异常处理(参照演示中9小节)

不一致的情况(启动时)

ALTER DATABASE CLEAR LOGFILE GROUP n

ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n

以上就是关于Oracle重做日志文件损坏或丢失后应该怎样恢复全部的内容,包括:Oracle重做日志文件损坏或丢失后应该怎样恢复、oracle未安装实例,能正常启动吗、如何利用oracle重做日志修改他处同版本oracle数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10158389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存