Oracle归档日志空间不足引发的问题及解决方法
2014-07-31 06:35
821 查看
**************************************************************************************
归档日志空间不足现的问题的现象
软件正在操作,突然点击任何菜单无反应;
重启软后,长时间没反应或直接报数据库连接错误;
以下系统管理员操作
oracle用户登录操作系统,输入以下命令:
[oracle@OASERVER ~]$sqlplus
sql>connect cawy_cas/密码 //回车后出现报错
打开EM时(IE中输入http://10.31.1.200:1158/em),报ORA-00257、ORA-01033等错误;
oracle客户端工具(如:PLSQL Developer等)连接数据库时报ORA-00257、ORA-01033等错误;
**************************************************************************************
说明:因oracle归档日志还在开启,需定期检测归档日志占用空间大小,归归档日志达到一定比例时要及时清理,以防止归档日志
问题导致的oracle服务停止现象,从而影响系统。
1、检测oracle是否可以正常归档
oracle用户登录系统
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>select * from v$log
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 YES INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 YES INACTIVE
5899219 13-DEC-10
说明:上面列表可看出ARC列可正常归档,如果全部为NO,oracle将无法进行归档,此时oracle实例会自动关闭。
2、查看FLASH_RECOVERY_AREA空间中各部分使用情况:
oracle用户登录系统
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql> select * from v$recovery_file_dest; //查看FLASH_RECOVERY_AREA空间大小
sql>select * from v$flash_recovery_area_usage; //查看FLASH_RECOVERY_AREA空间使用情况,下面可以看出已使用5.57%
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 5.57 0 14
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected.
注意:当使用比例达到90%以上,就必须及时清理日志,否则oracle服务会随时停止。
**************************************************************************************
恢复oracle归档日志正常归档的方法
1、重构归档日志文件
此操作在oracle用户下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql> startup mount;
sql>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 NO INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 NO INACTIVE
5899219 13-DEC-10
sql>alter database clear unarchived logfile group 1; //执行此行时可能出错,如有报错直接把 1 修改成 2 或 3 之后
再执行1。
sql>alter database clear unarchived logfile group 2;
sql>alter database clear unarchived logfile group 3;
sql>shutdown immediate;
sql>startup;
说明:此操作之后需用root用户登录系统重启resin服务
增加一日志组
alter database add logfile group 4 ('+data','+fra','/u01/app/oracle/redo403.log') size 50M;
添加日志文件最后一步 要切换日志 使用一次
切换:
1* select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
SQL> /
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M CURRENT NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 0 50M UNUSED YES
alter system switch logfile ;
SQL> select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
2 ;
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M ACTIVE NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 8 50M CURRENT NO
检查一下日志文件的状态
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
2 +FRA/orcl/onlinelog/group_2.258.822001559
2 /u01/app/oracle/redo203.log
2 +DATA/orcl/onlinelog/group_2.262.822001551
3 +DATA/orcl/onlinelog/group_3.263.822001563
3 /u01/app/oracle/redo303.log
3 +FRA/orcl/onlinelog/group_3.259.822001571
4 +FRA/orcl/onlinelog/group_4.260.822010503
4 /u01/app/oracle/redo403.log
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
4 +DATA/orcl/onlinelog/group_4.267.822010497
12 rows selected.
模拟:一个日志组有3个文件,损坏一个
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
删除一个: rm -rf /u01/app/oracle/redo103.log
startup force ---->可以成功!!!----》看警告日志文件
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
vim alert_orcl.log
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_1450.trc:
ORA-00321: log 1 of thread 1, cannot update log file header
ORA-00312: online log 1 thread 1: '/u01/app/oracle/redo103.log'
Checker run found 1 new persistent data failures
修复一下:
删除坏的,添加好的
alter database drop logfile member '/u01/app/oracle/redo103.log';
alter database add logfile member '/u01/app/oracle/redo103.log' to group 1;
切换一下
alter system switch logfile ;
alter system switch logfile ;
alter system switch logfile ;
1* select GROUP# ,MEMBER,STATUS from v$logfile where group#=1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +DATA/orcl/onlinelog/group_1.261.822001539
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
2、增大闪存空间FLASH_RECOVERY_AREA大小
此操作在oracle用户下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql>startup mount;
sql>show parameter db_recovery_file_dest; //查看回闪恢复区的大小和存放目标
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FRA
db_recovery_file_dest_size big integer 3882M
alter system set db_recovery_file_dest_size =5G ;
alter system set db_recovery_file_dest='+FRA'; (磁盘组 文件目录)
sql>alter system set db_recovery_file_dest_size = 10G(缺省是2G,可以根据实际情况调整大小,最大不能超过分区可用空
间大小,否则重启后自动恢复2G)
sql>alter database open;
说明:此操作之后需用root用户登录系统重启resin服务
[root@OASERVER /]cd /app/weaver/resin/bin/
[root@OASERVER bin]./stopresin.sh
[root@OASERVER bin]./startresin.sh
===================================================================
*****ORACLE 归档日志打开关闭方法***********
===================================================================
一 设置为归档方式
------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是不是归档方式
sql> alter system set log_archive_start=true scope=spfile; #启用主动归档
sql> alter system set log_archive_dest='location=/oracle/ora9/oradata/arch' scope=spfile;
#设置归档路径
sql> alter system set log_archive_dest_1='location=/oracle/ora9/oradata/arch1' scope=spfile;
sql> alter system set log_archive_dest_2='location=/oracle/ora9/oradata/arch2' scope=spfile;
#如果归档到两个位置,则可以通过上边方法实现
sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log' #设置归档日记款式
sql> shutdown immediate;
sql> startup mount; #打开控制文件,不打开数据文件
sql> alter database archivelog; #将数据库切换为归档模式
sql> alter database open; #将数据文件打开
sql> archive log list; #查看此时是否处于归档模式
查询以确定数据库位于archivelog模式中且归档过程正在运行
sql> select log_mode from v$database;
sql> select archiver from v$instance;
日志切换
sql> alter system switch logfile;
这次日志切换将归档写到两个目标地,
即第二步的/oracle/ora9/oradata/arch1和/oracle/ora9/oradata/arch1,要是要对目录确认
在oracle情况中运行如下查询:
sql> select name from v$archived_log;
而后在操作系统中确认查询所列出的文件
二 设置非归档方式
------------------------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是否是归档方式
sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档
sql> shutdown immediate;
sql> startup mount; #打开控制文件,不打开数据文件
sql> alter database noarchivelog; #将数据库切换为非归档模式
sql> alter database open; #将数据文件打开
sql> archive log list; #查看此时便处于非归档模式
三 归档相关命令
---------------------------------------
view plaincopy to clipboardprint?
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; #检查后台进程
归档日志空间不足现的问题的现象
软件正在操作,突然点击任何菜单无反应;
重启软后,长时间没反应或直接报数据库连接错误;
以下系统管理员操作
oracle用户登录操作系统,输入以下命令:
[oracle@OASERVER ~]$sqlplus
sql>connect cawy_cas/密码 //回车后出现报错
打开EM时(IE中输入http://10.31.1.200:1158/em),报ORA-00257、ORA-01033等错误;
oracle客户端工具(如:PLSQL Developer等)连接数据库时报ORA-00257、ORA-01033等错误;
**************************************************************************************
说明:因oracle归档日志还在开启,需定期检测归档日志占用空间大小,归归档日志达到一定比例时要及时清理,以防止归档日志
问题导致的oracle服务停止现象,从而影响系统。
1、检测oracle是否可以正常归档
oracle用户登录系统
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>select * from v$log
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 YES INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 YES INACTIVE
5899219 13-DEC-10
说明:上面列表可看出ARC列可正常归档,如果全部为NO,oracle将无法进行归档,此时oracle实例会自动关闭。
2、查看FLASH_RECOVERY_AREA空间中各部分使用情况:
oracle用户登录系统
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql> select * from v$recovery_file_dest; //查看FLASH_RECOVERY_AREA空间大小
sql>select * from v$flash_recovery_area_usage; //查看FLASH_RECOVERY_AREA空间使用情况,下面可以看出已使用5.57%
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 5.57 0 14
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected.
注意:当使用比例达到90%以上,就必须及时清理日志,否则oracle服务会随时停止。
**************************************************************************************
恢复oracle归档日志正常归档的方法
1、重构归档日志文件
此操作在oracle用户下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql> startup mount;
sql>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 NO INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 NO INACTIVE
5899219 13-DEC-10
sql>alter database clear unarchived logfile group 1; //执行此行时可能出错,如有报错直接把 1 修改成 2 或 3 之后
再执行1。
sql>alter database clear unarchived logfile group 2;
sql>alter database clear unarchived logfile group 3;
sql>shutdown immediate;
sql>startup;
说明:此操作之后需用root用户登录系统重启resin服务
增加一日志组
alter database add logfile group 4 ('+data','+fra','/u01/app/oracle/redo403.log') size 50M;
添加日志文件最后一步 要切换日志 使用一次
切换:
1* select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
SQL> /
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M CURRENT NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 0 50M UNUSED YES
alter system switch logfile ;
SQL> select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
2 ;
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M ACTIVE NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 8 50M CURRENT NO
检查一下日志文件的状态
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
2 +FRA/orcl/onlinelog/group_2.258.822001559
2 /u01/app/oracle/redo203.log
2 +DATA/orcl/onlinelog/group_2.262.822001551
3 +DATA/orcl/onlinelog/group_3.263.822001563
3 /u01/app/oracle/redo303.log
3 +FRA/orcl/onlinelog/group_3.259.822001571
4 +FRA/orcl/onlinelog/group_4.260.822010503
4 /u01/app/oracle/redo403.log
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
4 +DATA/orcl/onlinelog/group_4.267.822010497
12 rows selected.
模拟:一个日志组有3个文件,损坏一个
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
删除一个: rm -rf /u01/app/oracle/redo103.log
startup force ---->可以成功!!!----》看警告日志文件
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
vim alert_orcl.log
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_1450.trc:
ORA-00321: log 1 of thread 1, cannot update log file header
ORA-00312: online log 1 thread 1: '/u01/app/oracle/redo103.log'
Checker run found 1 new persistent data failures
修复一下:
删除坏的,添加好的
alter database drop logfile member '/u01/app/oracle/redo103.log';
alter database add logfile member '/u01/app/oracle/redo103.log' to group 1;
切换一下
alter system switch logfile ;
alter system switch logfile ;
alter system switch logfile ;
1* select GROUP# ,MEMBER,STATUS from v$logfile where group#=1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +DATA/orcl/onlinelog/group_1.261.822001539
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
2、增大闪存空间FLASH_RECOVERY_AREA大小
此操作在oracle用户下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql>startup mount;
sql>show parameter db_recovery_file_dest; //查看回闪恢复区的大小和存放目标
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FRA
db_recovery_file_dest_size big integer 3882M
alter system set db_recovery_file_dest_size =5G ;
alter system set db_recovery_file_dest='+FRA'; (磁盘组 文件目录)
sql>alter system set db_recovery_file_dest_size = 10G(缺省是2G,可以根据实际情况调整大小,最大不能超过分区可用空
间大小,否则重启后自动恢复2G)
sql>alter database open;
说明:此操作之后需用root用户登录系统重启resin服务
[root@OASERVER /]cd /app/weaver/resin/bin/
[root@OASERVER bin]./stopresin.sh
[root@OASERVER bin]./startresin.sh
===================================================================
*****ORACLE 归档日志打开关闭方法***********
===================================================================
一 设置为归档方式
------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是不是归档方式
sql> alter system set log_archive_start=true scope=spfile; #启用主动归档
sql> alter system set log_archive_dest='location=/oracle/ora9/oradata/arch' scope=spfile;
#设置归档路径
sql> alter system set log_archive_dest_1='location=/oracle/ora9/oradata/arch1' scope=spfile;
sql> alter system set log_archive_dest_2='location=/oracle/ora9/oradata/arch2' scope=spfile;
#如果归档到两个位置,则可以通过上边方法实现
sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log' #设置归档日记款式
sql> shutdown immediate;
sql> startup mount; #打开控制文件,不打开数据文件
sql> alter database archivelog; #将数据库切换为归档模式
sql> alter database open; #将数据文件打开
sql> archive log list; #查看此时是否处于归档模式
查询以确定数据库位于archivelog模式中且归档过程正在运行
sql> select log_mode from v$database;
sql> select archiver from v$instance;
日志切换
sql> alter system switch logfile;
这次日志切换将归档写到两个目标地,
即第二步的/oracle/ora9/oradata/arch1和/oracle/ora9/oradata/arch1,要是要对目录确认
在oracle情况中运行如下查询:
sql> select name from v$archived_log;
而后在操作系统中确认查询所列出的文件
二 设置非归档方式
------------------------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是否是归档方式
sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档
sql> shutdown immediate;
sql> startup mount; #打开控制文件,不打开数据文件
sql> alter database noarchivelog; #将数据库切换为非归档模式
sql> alter database open; #将数据文件打开
sql> archive log list; #查看此时便处于非归档模式
三 归档相关命令
---------------------------------------
view plaincopy to clipboardprint?
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; #检查后台进程
相关文章推荐
- 解决Oracle RMAN删除归档日志不释放问题的方法
- mysql-bin日志文件过大导致磁盘空间不足问题解决方法
- oracle归档日志满所引发的问题及解决
- linux下安装Oracle时交换空间不足的解决方法
- oracle归档日志超出了恢复闪回恢复区(flash_recovery_area)限制的解决方法
- oracle 归档日志满 的 解决方法
- oracle 11g 安装关于swap空间不足问题解决
- Oracle安装过程中物理内存检查及临时temp空间不足问题解决
- oracle create view 权限不足问题的解决方法
- 解决oracle归档日志写满了(ORA-00257)的问题
- "服务器存储空间不足,无法处理此命令"问题解决方法
- azure 云上 oracle11.2.0.4里dataguard归档日志传输 1034 问题详细解决过程
- 共享一文件夹提示"服务器存储空间不足,无法处理此命令"的问题解决方法
- ORACLE 表空间不足与用户配额(限额)不足的问题解决
- ORA-16014: 日志 3 的序列号 187 未归档, 没有可用的目的地 问题解析与解决方法
- ORACLE 不同表空间转移数据 问题解决方法
- oracle归档日志超出了恢复闪回恢复区(flash_recovery_area)限制的解决方法
- ORACLE 表空间不足与用户配额(限额)不足的问题解决
- Oracle安装过程中物理内存检查及临时temp空间不足问题解决
- 【Oracle】ORA-00257归档日志写满的解决方法