如何解决“归档日志已满问题”

如何解决“归档日志已满问题”,第1张

问题描述:所用数据库为 oracle 10g ,模式为归档模式,oracle 系统默认的归档空间为2G,由于日志过多,空间写满,数据库的redo文件不能归档,而出现oracle数据库挂起的问题。oem打开oracle 10g 数据库 *** 作界面,会显示如下错误信息:由于输出设备已满或不可用, 归档程序无法归档重做日志。数据库无法使用现将解决办法稍作总结:方法一:增大归档日志空间的大小可以通过下面的方法来调整系统的回闪恢复区大小:首先是关闭数据库:以SYS身份链接到oracle,执行shutdown immediate;启动数据库到mount状态:startup mount查看回闪恢复区的大小和存放目标:show parameter db_recovery_file_dest修改回闪恢复区的大小alter system set db_recovery_file_dest_size = 4G(缺省是2G,可以根据实际情况调整大小)最后打开数据库:alter database open;OK , 问题解决。数据库恢复使用。方法二 :进入oracle清空日志信息,把空间释放出来启动数据库到mount状态:sqlplus /as sysdbastartup mount新起一个终端,用rman进入把归档日志删除命令rman target/ (只安装了一个oracle10g数据库)命令crosscheck archivelog all; (列出归档日志信息)命令delete expired archivelog all; (将上述列出的归档日志删除)命令exit;此时最好将数据库重新备份一下把数据库的mount状态更改为open状态alter database open;OK问题解决,数据库可以使用。误区:在系统清空归档目录的日志信息(即物理删除归档日志,或将归档日志转移至别处)不可取,OS虽然删除了,但oracle系统识别不出来已经清空日志,只能进入oracle清空日志信息,把空间释放出来,(方法二);或者是把归档空间设置更大(方法一)。建议将两种方法结合使用,减少工作量,也避免数据库频繁挂起。同时定时进行数据库完全备份或其他重要数据备份

oracle 归档日志

归档日志(Archive Log)是非活动的重做日志备份通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库

日志 *** 作模式:ARCHIVELOG NOARCHIVELOG

1,改变日志 *** 作模式:

检查当前日志 *** 作模式

SELECT log_mode from v$database;

关闭数据库,然后装载数据库

SHUTDOWN IMMEDIATE

STARTUP MOUNT

改变日志 *** 作模式,然后打开数据库

ALTER DATABASE ARCHIVELOG;

ALTER DATABASE OPEN;

2,执行手工归档

从oracle database 10g开始,当将日志 *** 作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程如果要使用手工归档那么在改变日志 *** 作模式时必须使用命令ALTER DATABASE ARCHIVELOG MANUAL

需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令如果没有执行手工归档命令,日志组的原有内容将不能被覆盖ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,将来的oracle版本会淘汰该命令,使用手工归档方式是,数据库管理员可以执行以下命令归档重做日志:

ALTER SYSTEM ARCHIVELOG ALL;

3,配置归档进程

初始化参数LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始启动的最大归档进程个数,当将数据库转变为ARCHIVELOG模式时,默认情况下oracle会自动启动两个归档进程通过改变初始化参数LOG_ARCHIVE_MAX_PROCESS的值,可以动态地增加或降低归档进程的个数:

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;配置归档位置和文件格式

当数据库处于ARCHIVELOG模式时,如果进行日志切换,后台进程将自动生成归档日志,归档日志的默认位置为%oracle_home%rdbms,在oracle database 10g中,归档日志的默认文件格式为ARC%S_%R%T为了改变归档日志的位置和名称格式,必须改变相应的初始化参数,1,初始化参数LOG_ARCHIVE_FORMAT用于指定归档日志的文件名格式,设置该初始化参数时,可以指定以下匹配符:

%s: 日志序列号:

%S: 日志序列号(带有前导0)

%t: 重做线程编号

%T: 重做线程编号(带有前导0)

%a: 活动ID号

%d: 数据库ID号

%r RESETLOGS的ID值

从10g开始,配置归档日志文件格式时,必须带有%s,%t和%r匹配符,配置了归档文件格式后,必须重启数据库

2,使用LOG_ARCHIVE_DEST配置归档位置

如果不使用备用数据库,只需要将归档日志存放到本地目录配置本地归档位置可以使用初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一个参数用于设置第一个归档位置,第二个参数用于指定第二个归档位置

ALTER SYSTEM SET log_archive_dest='d:demoarchive1';ALTER SYSTEM SET log_archive_duplex_dest='d:demoarchive2';3,使用LOG_ARCHIVE_DEST_n配置多个归档位置

初始化参数LOG_ARCHIVE_DEST_n用于指定多个归档位置,该参数最多可以指定10个归档位置通过使用初始化参数LOG_ARCHIVE_DEST_n,不仅可以配置本地归档位置,还可以配置远程归档位置

如果既要在主节点上生成归档日志,又要将归档日志传递到备用节点,那么必须使用参数LOG_ARCHIVE_DEST_n该参数与LOG_ARCHIVE_DEST具有如下区别;初始化参数LOG_ARCHIVE_DEST_n可以配置本地归档位置和远程归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地归档位置

初始化参数LOG_ARCHIVE_DEST_n可以配置多达10个归档位置,而初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置两个归档位置

初始化参数LOG_ARCHIVE_DEST_n 不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用

因为初始化参数LOG_ARCHIVE_DEST_n不能与初始化参数LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同时使用,所以必须禁用初始化参数LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST当使用初始化参数LOG_ARCHIVE_DEST_n配置本地归档位置时,需要指定LOCALTION选项当配置远程归档位置时,需要指定SERVICE选项

示例如下:

ALTER SYSTEM SET log_archive_duplex_dest='';ALTER SYSTEM SET log_archive_dest='';

ALTER SYSTEM SET log_archive_dest_1='location=d:demoarchive1';ALTER SYSTEM SET log_archive_dest_2='location=d:demoarchive2';ALTER SYSTEM SET log_archive_dest_3='location=d:demoarchive3';ALTER SYSTEM SET log_archive_dest_4='service=standby';配置远程归档位置时,SERVICE选项需要指定远程数据库的网络服务名(在tnsnamesora文件中配置)4,使用LOG_ARCHIVE_DEST_n选项

使用初始化参数LOG_ARCHIVE_DEST_n配置归档位置时,可以在归档位置上指定OPTIONAL或MANDATORY选项指定MANDATORY选项时,可以设置REOPEN属性

OPTIONAL:该选项是默认选项使用该选项时,无论归档是否成功,都可以覆盖重做日志

MANDATORY:强制归档使用该选项时,只有在归档成功之后,重做日志才能被覆盖

REOPEN:该属性用于指定重新归档的时间间隔,默认值为300秒,必须跟在MANDATORY后

例:

Alter system set log_archive_dest_1=’location=d:demoarchive1 mandatory’;Alter system set log_archive_dest_2=’location=d:demoarchive2 mandatory reopen=500’;Alter system set log_archive_dest_3=’location=d:demoarchive3 optional’;5,控制本地归档成功的最小个数

使用初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地归档的最小成功个数Alter system set log_archive_min_succeed_dest=2;6,使用初始化参数LOG_ARCHIVE_DEST_STATE_n控制归档位置的可用性设置该参数为ENABLE(默认值),表示会激活相应的归档位置;设置该参数为DEFER,表示禁用相应归档位置当归档日志所在磁盘损坏或填满时,DBA需要暂时禁用该归档位置

Alter system set log_archive_dest_state_3=defer;(禁用)Alter system set log_archive_dest_state_3=enable;(启用)显示归档日志信息

1,使用ARCHIVE LOG LIST命令可以显示日志 *** 作模式,归档位置,自动归档机器要归档的日志序列号等信息

2显示日志 *** 作模式

SELECT name,log_mode FROM v$database;

3,显示归档日志信息

Col name format a46

Select name, swquence#, first_change# FROM v$archived_log;Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值

4、执行介质恢复时,需要使用归档日志文件,此四必须准确定位归档日志的存放位置通过查询动态性能视图v$archive_dest可以取得归档日志所在目录

SELECT destination FROM v$archive dest;

5,显示日志历史信息

SELECT FROM v$loghist;

THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始SCN值,FIRST_TIME用于标识起始SCN的发生时间SWICTH_CHANGE#用于标识日志切换的SCN值

6显示归档进程信息

进行日志切换时,ARCH进程会自动将重做日志内容复制到归档日志中,为了加快归档速度,应该启用多个ARCH进程通过查询动态性能视图V$ARCHIVE_PROCESSES可以显示所有归档进程的信息!

SELECT FROM v$archive_processes;

Porcess用于标识ARCH进程的编号,status用于标识ARCH进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence用于标识正在进行归档的日志序列号,state用于标识ARCH进程的工作状态==========================================用Oracle归档日志进行恢复的方法

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

联机重演日志没有丢失应使用完成恢复,如联机重演日志损坏,而又没有备份,就只能进行不完全恢复。

一、完全恢复:

1.使用命令“svrmgrl”调用行方式服务器管理;2.输入命令“connect internal”,然后输入命令“startup mount’;3.输入命令“recover database;”

4.按下ENTER,接受默认值。

5.然后输入命令“alter database open;”完成数据库恢复。

二、不完全恢复

警告:

应用不完成恢复前,必须将数据库做一次完全冷备份,因为应用不完全恢复后,联机重演日志将重置,以前的所有日志不可用。

如果恢复不成功,数据库就不能使用了。再次强调,做完全冷备份后再应用不完全恢复。

1)基于变化的恢复(change-based recovery)要执行基于变化的恢复,需要知道丢失日志之前的系统写入归档重演日志的最大的变化号(SCN),然后可以启动恢复语句恢复数据库直到改变scn_number,其中比scn_number是写到已归档重演日志文件顺序号386的SCN(即,小于丢失日志顺序号387的SCN)。可以从V$log_history视图中得到SCN信息。

select first_change# from v$log_history where sequence#=387;其中387为最后一个有效的日志文件号加1,该例是查找386

知道了SCN后,使用下述步骤完成恢复

1.使用命令“svrmgrl”调用行方式服务器管理;2.输入命令“connect internal”,然后输入命令“startup mount’;3.输入命令“recover database until change 9999;”

4.在回答Oracle第一个归档重演日志建议信息时,输入“auto”,Oracle在找到第387号重演日志之前停止恢复。

5.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)2)基于停止的恢复(cancel-based recovery)

1.使用命令“svrmgrl”调用行方式服务器管理;2.输入命令“connect internal”,然后输入命令“startup mount’;3.输入命令“recover database until cancel;”,Oracle提示需要的第一个归档重演日志文件名.按下ENTER键接受缺省文件名,并且—路ENTER直到询问顺序号387的日志。输入“cancel”,停止恢复 *** 作。

4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)3)基于时间的恢复(time-based recovery)

为使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387(丢失重演日志)的时间,通过执行查询语句“select time from v$log_history where sequence#=387;”得到。本例得到的时间是:2002-06-23 14:42:04现在开始实施恢复。

1.使用命令“svrmgrl”调用行方式服务器管理;2.输入命令“connect internal”,然后输入命令“startup mount’;3.输入命令“recover database until time '2002/06/23 14:42:04';”,Oracle提示需要的第一个归档重演日志文件名,输入“auto”,Oracle恢复归档重演日志直到序号为387的日志,停止恢复 *** 作。

4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认已数据库已备份,如打开失败,日志将不可用)提示: 使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。

附:如何启用Oracle的归档方式

1参照以下内容编辑initora文件:

log_archive_start = true

log_archive_dest_1 = " LOCATION=D:\Oracle\oradata\ORCL\archive "og_archive_format = %%ORACLE_SID%%T%TS%SARC2关闭数据库

svrmgrl> connect internal

svrmgrl> shutdown normal

3然后启动实例并安装该数据库,但不打开数据库。

svrmgrl> startup mount

4接着,发布下列更改数据库的命令。

Svrmgrl> alter database archivelog;

5现在,数据库已经更改为归档方式,您可以打开数据库。

svrmgrl> alter database open;

提示:也可以使用DBA studio工具启用数据库的归档方式, *** 作很简单=============================================================ORACLE归档模式的设置

在ORACLE 数据库的开发环境和测试环境中,数据库的日志模式和自动归档模式一般都是不设置的,这样有利于系统应用的调整,也免的生成大量的归档日志文件将磁盘空间大量的消耗。但在系统上线,成为生产环境时,将其设置为日志模式并自动归档就相当重要了,因为,这是保证系统的安全性,有效预防灾难的重要措施。这样,通过定时备份数据库和在两次备份间隔之间的日志文件,可以有效的恢复这段时间的任何时间点的数据,可以在很多时候挽回或最大可能的减少数据丢失。

一、 要使OARCLE 数据库进行日志的自动归档,需要做两方面的事情;1.是数据库日志模式的设置(可为Archive Mode 和No Archive Mode);2.就是自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。

二、 如何查看数据库的现行日志和自动归档模式的设置可用archive log list 命令来查看。

运行在日志自动归档模式下的数据库系统查看结果如下(一般是生产环境):

SQL> archive log list

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /backup/archivelog

Oldest online log sequence 2131

Next log sequence to archive 2133

Current log sequence 2133

没有启动数据库日志模式和自动归档的数据库系统查看结果如下(一般是测试环境):

SQL> archive log list

Database log mode No Archive Mode

Automatic archival Disabled

Archive destination /u01/app/oracle/product/817/dbs/archOldest online log sequence 194

Current log sequence 196

三 数据库日志模式的设置

在创建数据库时,可以在CREATE DATABASE 语句中指定数据库的日志模式。假如没有指明,则缺省为NOARCHIVELOG 模式。由于如果在创建数据库时指明是Archive Mode的话,会增加约20%的创建时间,而在以后启动INSTANCE 时再设置的话,一般只用去几秒的时间,所以一般在创建数据库时是不设置为ARCHIVE MODE 的。

将数据库的日志模式设置切换(Archive Mode 和No Archive Mode 之间的切换)的步骤和 *** 作如下:

1 关闭运行的数据库实例

SQL> shutdown

在进行日志模式切换之前,必须将运行的数据库正常关闭。

2 备份数据库

该备份跟以后产生的日志一起用于将来的灾难恢复(很重要,如要改为归档日志模式,没有这个数据库备份,仅有日志文件是无法从该时间点恢复的)。

3 启动数据库实例到mount 状态,但不要打开。

SQL> startup mount

4 切换数据库日志模式。

SQL> alter database archivelog;(设置数据库为归档日志模式)或SQL> alter database noarchivelog;(设置数据库为非归档日志模式)5 打开数据库

SQL> alter database open;

6 确认数据库现在处于归档日志模式。

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination for example: $ORACLE_HOME/dbs/archOldest on-line log sequence 275

Next log sequence 277

Current log sequence 278

7 将这个时间点的redo logs 归档

SQL> archive log all;

8 确认新产生的日志文件已在相应的归档目录下面。

四 自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。

在该模式下,数据库启动一个arch 进程,专门负责将redo logs 写到系统归档设备的相应目录下。在数据库的参数文件中设置参数(一般是在$ORACLE_HOME/dbs/initora 文件中):

LOG_ARCHIVE_START=

LOG_ARCHIVE_DEST=

LOG_ARCHIVE_FORMAT=

LOG_ARCHIVE_START:

Oracle

Enterprise

Manager

Console——某一个数据库——例程——配置——恢复——“归档日志模式”(自动归档);

例程——配置——一般信息——所有初始化参数——log_archive_start=true

归档信息可以通过如下语句查看

SQL

archive

log

list

Oracle数据库可以运行在两种模式下:归档模式(archivelog)和非归档模式(noarchivelog)。

检查归档模式命令

SQL

archive

log

list

设置归档模式

SQL

shutdown

immediate;

SQL

startup

mount

SQL

alter

database

archivelog;

SQL

alter

database

open;

SQL

archive

log

list;

如果需要停止归档模式,使用:alter

database

noarchivelog

命令。Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。在pfile/spfile中设置如下参数

log_archive_start

=

true

重启数据库此参数生效,此时数据库处于自动归档模式。也可以在数据库启动过程中,手工执行

archive

logstart使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式

。10g使用db_recovery_file_dest来作为归档日志的存放地。

SQL

show

parameter

db_recovery(

该语句在oracle11g下无效)NAME

TYPEVALUEdb_recovery_file_dest

string

/home/oracle/ora10g/flash_reco

very_area/

你好,

1)单机模式下:

如果开启归档,请保证

log_archive_start=true --开启自动归档,否则只能手工归档,如果是关闭了归档,则设置该参数为false。10g之后废除该参数,不需要设置。

log_archive_dest = ---归档日志存放路径

alter system set log_archive_dest_1="location=f:\disk5\offlinelog\mandatory" scope=spfile; ---为了增加归档日志的冗余来保证其安全,可以通过修改参数文件中的log_archive_dest_n参数,其中n为1~10

log_archive_format ="CX%TS%SARC" ---归档日志文件名格式

alter system set log_archive_max_processes = 3 ---启动多个归档后台进程以避免由于ARCn进程跟不上LGWR而造成的数据库系统效率的下降。

注意:如果是OPS/RAC环境,需要先把parallel_server = true注释掉,然后执行如下步骤,最后用这个参数重新启动

1、开启归档:

a 关闭数据库shutdown immediate

b startup mount

c alter database archivelog

d alter database opne

2、关闭归档:

a 关闭数据库shutdown immediate

b startup mount

c alter database noarchivelog

d alter database open

归档信息可以通过如下语句查看

SQL> archive log list

Database log mode Archive Mode

Automatic archival Enabled

Archive destination E:oracleora92databasearchive

Oldest online log sequence 131

Next log sequence to archive 133

Current log sequence 133

2)RAC模式下:

1关闭所有的instance

2在节点1上设置以下参数,如果使用spfile就先生成pfile再修改

CLUSTER_DATABASE=FALSE

log_archive_dest=<归档路径>

log_archive_start=true

log_archive_format=<归档文件格式>

3 以exclusive模式启动数据库

SQL> startup mount exclusive pfile=‘xxxxxx’

4 启动归档模式

SQL> Alter database archivelog

5打开数据库

SQL> alter database open

6关闭数据库并修改初始化参数

SQL> shutdown immediate

CLUSTER_DATABASE=TRUE

7启动所有的instance,记得先生成spfile

8核对归档,模式是否启动

SQL> archive log list

======================

以下步骤在node1机器上 *** 作,node2保持down。在所有的 *** 作完成后再打开node2的数据库。。。

SQLPLUS>connect SYS/PASSWORD

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE; ### 10gR2之后不用修改该参数

SQLPLUS>shutdown immediate;

SQLPLUS>startup mount exclusive;

SQLPLUS>alter database noarchivelog;

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=TRUE SCOPE=SPFILE;

SQLPLUS>shutdown immediate;

SQLPLUS>STARTUP

非归档改为归档

SQLPLUS>connect SYS/PASSWORD

SQLPLUS>ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;

SQLPLUS>shutdown immediate;

SQLPLUS

一、简要介绍

首先数据库日志文件有两种:

联机日志文件和归档日志文件,联机日志文件会将之前的覆盖,不会做备份。

而归档日志文件会做备份,这样就造成了归档日志空间已满,解决方法:

如果真的是归档日志空间已满的话,把旧的归档日志导到其他磁盘,腾出磁盘空间。也可以添加新的归档目的盘。

解决方法1:

先手工删除D:\oracle\product\1020\flash_recovery_area里面的日志,然后用户用rman进入把归档日志删除

1)#rman target/

2)rman>crosscheck archivelog all;

3)rman>delete expired archivelog all;

4)rman>exit

解决方法2:改变了FLASH_RECOVERY_AREA的大小

sql>alter system set db_recovery_file_dest_size=8G scope=both;

sql>show parameter db_recovery_file_dest_size

二、详细过程介绍

1连接

$sqlplus /as sysdba

SQLPlus: Release102010 - Production on Mon Jan 17 10:00:24 2011

Copyright (c) 1982, 2005, Oracle All rights reserved

Connected to:

Oracle Database10gRelease102010 - 64bit Production

2查看正在归档的状态

SQL>select from v$log;

发现ARC状态为NO,表示系统没法自动做归档。

3查看归档日志所在位置

SQL>show parameter recover;

SQL> exit

$ exit

4进入日志存入目录

# cd

# ls

TTauthority          cdrom                 proc

Xauthority           configassistlog      sbin

dt                   dev                   smitlog

dtprofile            etc                   smitscript

java                 home                  smittransaction

mh_profile           lib                   sqlnetlog

sh_history           lost+found            tftpboot

vi_history           lpp                   tmp

wmrc                 mnt                   u

Mail                  nmo42_aix5L_64targz unix

TT_DB                 nsr                   usr

audit                 opt                   var

bin                   oradata

# cd oradata

# ls

flash_recovery_area misdata

lost+found          orabak

# cd flash_recovery_area

# ls

MISDATA

# cd  MISDATA

# ls

archivelog autobackup onlinelog

# cd  archivelog

# ls

2011_01_01 2011_01_04 2011_01_07 2011_01_10 2011_01_13 201

2011_01_02 2011_01_05 2011_01_08 2011_01_11 2011_01_14 201

2011_01_03 2011_01_06 2011_01_09 2011_01_12 2011_01_15 202

#

5查看FLASH_RECOVERY_AREA空间使用情况

# cd oradata

# ls

6查看flash recovery area已经占用的空间

SQL>select from v$flash_recovery_area_usage;

7转移或清除对应的归档日志,删除一些不用的日期目录的文件,注意保留最后几个文件

注意:在删除归档日志后必须用RMAN维护控制文件,否则空间显示仍然不释放。

在rman里删除过期日志

$rman target /

Recovery Manager: Release112010 - Production on Wed Feb 24 08:13:00 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates All rights reserved

connected to target database:

RMAN>crosscheck archivelog all;                     检查一些无用的archivelog

RMAN>delete expired archivelog all;                 删除过期archivelog

8登录oracle增大闪回区大小

SQL>alter system set db_recovery_file_dest_size=8G scope=both;

SQL>select from V$FLASH_RECOVERY_AREA_USAGE;

任何单位任何事情,首先强调的就是程序,因为管理界有句名言:细节决定成败。程序就是整治细节最好的工具。于是,现在我们的所有工作,无时无处不在强调程序。因为有了规范的办事程序,现在我们这些平民百姓到政府机关办事比原来容易了许多,最起码知道办什么事该找哪个部门,知道办这个事应该用多长时间了。政府公开办事程序,也拉近了和人民群众的关系。好,这是好得很的事。好像是为了印证事物都是一分为二的道理一样,在赞颂程序的同时,我们也看到了程序冷酷的另一面。南宁见义勇为的英雄鲍光蛇在医院冷酷的程序中流尽了最后一滴血,公路收费站的值班人员因救护车交不出十元钱的过路费而坚决不放行救护车,终于使急需救助的患者丧命,等等的例子,都为我们强调或者说奉为神圣规则的程序优先勾画出了它的原形。

程序,是管理方式的一种,是能够发挥出协调高效作用的工具,在我们的社会主义建设事业或者说现代化建设中,应该充分重视它的作用,应该不断地将我们的工作从无序整改到有序。

可是,当我们只关注形式而不关注实质的时候,有些事情就发展到了它的反面。程序不是医治百病的灵丹妙药,在它走向反面的时候,它是使那些官僚主义者和视劳苦大众利益如不见的人们推脱掉自己应当承担的责任的最好的挡箭牌。因为越是严密完善的程序,按部就班执行起来越是要付出时间的代价,当时间被浪费了时候,因此引发的其他损失是不应该由模范执行了程序的人来负责的。

数据库服务器正在运行时,数据服务器主机突然蓝屏,接着任由发货员如何 *** 作不能再发货,只好关闭了服务器,然后重新启动 ,仍然不能发货(发货员员不懂数据库,不知道数据库因为故障不能启动)。然后打电话给我们请求解决。

2 了解数据库状况:

由于数据库不是我创建的,我得先了解相关的情况:数据库处于非归档模式,没有归档日志可以利用;一直运行良好,从没有备份;数据库每个日志组仅一个重做日志成员;数据库发生灾难后,其当前重做日志组2发生硬盘介质错误。

3 进行恢复

抱着一线希望,我希望归档日志能够切换或者删除,所以分别进行了下列几种方法的 *** 作:

1) alter database drop logfile 'pathredo02log' ;

2) alter database switch logfile ;

遗憾的是以上的命令执行后都返回错误,无法修改。因为数据是处于非归档模式,不能进行日志切换 *** 作,(除非数据库能启动,在启动后可以)。

没有办法,只好修改数据库参数_allow_resetlogs_corruption为真:

_allow_resetlogs_corruption=true

于是,将上面一行加到初始化参数文件中,进入svrmgrl控制台,进行如下 *** 作:

connect internal

startup mount

alter database clear logfile group 2 ;

recover database until cancel ;

alter database open resetlogs ;

alter database open ;

(以下 *** 作中有几步会返回错误,请不要理会提示的错误,继续执行)。

OK! 数据库成功启动加载 。

4 赶快将数据导出或利用PB导出,进行备份。

5 重建数据库,将上一步的数据导入重建的数据库。

这样,数据成功恢复。

在数据库中,日志的重要性那是大大的大,所以日志一定是要先了解的.

日志类型:

主日志(Primary logs)

预分配,可用数目由db cfg的LOGPRIMARY参数规定

辅助日志(Secondary logs)

依需要再动态分配,最大数目由db cfg的LOGSECOND参数来定.辅助日志同时会在数据库

所有连接全部关闭后被删除.

如果LOGSECOND为-1,则不限制记录日志的大小.

日志记录类型:

有两类循环日志和归档日志,可以通过"配置数据库日志记录"向导来修改数据库的日志记录类型。

(1)循环日志:

默认的日志记录策略,循环日志按顺序使用。当日志中所包含的工作已提交或回滚时,可以重用。

主日志预先分配。 而辅助日志则在需要时才分配。

循环日志有两类日志,主日志和辅助日志

主日志预先就要配好了,辅助日志在需要时再分分配

DB2管理程序按顺序请求 -> 查找主日志 -> 需要的主日志不可用 -> 分配一个辅助日志.

-> 辅助日志也满了 -> 再去检查下主日志能用不 -> 还不可用就又分配一个新的辅助日志

-> 然后就一直重复上述检查 

-> 一直到有主日志文件变为可重用为止.然后就把辅助日志释放掉.

循环日志在备份恢复中的作用:

不能进行前滚恢复,但可进行崩溃恢复和版本恢复

仅支持脱机备份

(2)归档日志

归档日志是一种日志文件的管理技术,将那些处理非活动状态的日志文件进行归档.

归档日志是非默认的.

归档日志有几个要类

1活动日志

包含发那些尚未提交(或回滚)的事务相关信息还包含已提交但改动还没与的的事务相关信息

restart database;

rollforward

2联机归档日志

当活动日志关闭时,将成为一个归档日志。称它们为"联机" 是因为它们和活动

日志存放在相同的子目录下。

3脱机归档日志

这些日志文件已经从活动日志所在的目录中移开了。可以手动,也可以

通过 userexit这样的过程调用来自动进行。归档的日志文件可以

存储到磁带或其它介质上。如tsm上。

正在用的日志(活动日志) -> 如果日志用完了(联机归档日志) -> 再把这些不用的日志给备份或移开(脱机归档日志)

循环日志在备份恢复中的作用:

唯一支持前滚恢复和实现可恢复数据库的日志方法.

支持脱机备份和联机备份

在DB2数据库中查看与日志有关的主要参数:

userexit是否启用用户出口

logretain 是否启用归档日志

trackmod 是否启用增量备份功能 

这些默认是off,即循环日志模式,如为"Yes"或"Recovery",则表明为归档日志模式.

Unix/Linux下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample|grep "USEREXIT"

db2 get db cfg for sample|grep "LOGRETAIN"

db2 get db cfg for sample|grep "TRACKMOD"

DB2 v10:

db2 get db cfg for sample |grep "LOGARCHMETH1"

Windows下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample |find /I "userexit"

db2 get db cfg for sample |find /I "logretain"

db2 get db cfg for sample |find /I "trackmod"

DB2 v10:

db2 get db cfg for sample |find /I "LOGARCHMETH1"

可更改这些参数使DB2数据库处于归档日志模式,以便支持联机备份.

更改命令:

DB2 v9及以前版本:

db2 update db cfg for sample using userexit on//启用用户出口

db2 update db cfg for sample using logretain on//启用归档日志

db2 update db cfg for sample using trackmod on//启用增量备份功能 

DB2 v10:

-- DISK : 本地磁盘

-- TSM : Tivoli Storage Manger

-- VENDOR : 第三方存储设备

db2 update db cfg for sample using LOGARCHMETH1 disk:/db2/db/log_archive

注意事项:

变更这些归档模式参数后,会提示SQL1116N错误,DB2数据库处于backup pending状态,是不能马上连接上数据库的,必须要做脱机备份一次才行.

脱机备份命令例子:

db2 backup db sample to c:\xclbkcold

可手工归档下,检查下生成的日志(前提是没数据库连接):

db2 archive log for db xcldb

db2 list history archive log all for xcldb

关于日志的管理:

查看首活动日志:

db2 connect to xcldb2

--中文环境使用这个

db2 get db cfg|find "首个活动日志文件"

--英文环境使用这个

db2 get db cfg|grep -i "First active log file"

db2 connect reset

db2 terminate

清理日志:

db2 connect to xcldb2

db2 prune logfile prior to S0000033LOG

其中S0000011LOG就是刚刚的首活动日志

手工归档命令:

db2 archive log for db xcldb2 //会手工产生日志

以上就是关于如何解决“归档日志已满问题”全部的内容,包括:如何解决“归档日志已满问题”、oracle 怎么生成归档日志文件、Oracle数据库如何开启自动归档等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9657867.html

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

发表评论

登录后才能评论

评论列表(0条)

保存