Oracle
数据库日常问题
-
归档异常增长
数据库启用归档模式,主要是保证数据安全,但是如果归档增长过快,或者人员维护不合理,可能会导致归档文件把磁盘占满,最终数据库无法正常工作;
数据库归档增长异常,最终导致数据库无法使用,如何查找原因,解决问题呢?
1
当出现归档空间不足
,首先需要
通过
扩空间或者移动
(
删除
)
部分归档文件释放空间,尽快让数据库正常工作;
2
数据库可以后,再去
具体分析归档文件增长过快的原因;
归档空间满了,在删除归档之前需要确定归档所在目录(archive log list
);
如果归档文件放在默认的闪回区,必须通过RMAN
的
delete
命令进行删除归档,或者直接通过命令扩大闪回区大小,不能通过操作系统命令直接删除闪回区下的归档文件;
如果归档文件存放路径是手动指定的其他目录,非闪回去,除了RMAN
删除归档外,也可以通过操作系统命令移动或删除归档文件;
1
删除过期归档
删除过期(expired)
的归档,释放空间;
RMAN> crosscheck archivelog all;
RMAN> list expired archivelog all;
RMAN> delete expired archivelog all;
删除指定时间归档
RMAN>delete archivelog until time 'sysdate-7';
删除废弃(obsolete)
的归档,释放空间;
RMAN> report obsolete;
RMAN> delete obsolete;
扩大归档所在空间(
闪回区
)
;
select
dbid
,
name
,
log_mode
from
v$database
;
SQL> archive log list;
SQL> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:\app_10.2.0.4\Administrator\flash_recovery_area
db_recovery_file_dest_size big integer 2530M
select
*
From
v$flash_recovery_area_usage
;
修改闪回
区大小
:alter system set db_recovery_file_dest_size = 4G
(更改大小)
删除部分归档后,数据库就可以正常工作了,这时需要具体分析归档过快的原因;
首先需要知道每天(
每小时
)
归档产生频率和大小;
如果每天大多数归档文件都某个特定时间内产生的,那么可能是这段时间有定时JOB
,或者计划任务,查看一下这些
JOB
和计划任务是否合理;
如果每天的每秒每分钟都在不停的产生归档,很可能产品或者数据库存在BUG
,需要具体分析产生归档的
SQL
语句,才能和业务操作联系起来;
如果都是工作时间内产生的归档,可能是正常业务操作产生的归档,具体分析业务操作对应的表,SQL
信息等,通常情况需要增加存储空间;
2
分析归档过快原因
查看归档参数频率
查看数据库JOB
查看计划任务
----
查看数据库归档分布及频率
3
查找归档增长异常常见方法
一:日志挖掘
分析多个归档文件中SQL
信息
1.
2.
(unless you plan to use the online catalog)
3.
4.
5.
6.
二:AWR
报告
Segments by DB Blocks Changes
结合
TOP SQL
进行分析
归档异常增长
案例
一
:
问题原因:
11g
数据库自动维护任务
-
段指导
BUG
导致归档增长过快。
现象:
平时每天归档5G
左右,突然有一天
产生200
多
G
归档
。
分析过程:
先通过SQL
查看全天中每小时归档量,找出归档最集中的时间段,并收集这一时间段的
AWR
报告,或通过日志挖掘分析这一时间段的归档文件。
发现大多数归档文件生成时间特别集中,收集这段时间AWR
报告即可。
通过AWR
报告查找归档异常增长原因
查看问题期间AWR
报告,发现有一条
CTAS
语句特别耗时
SQL
语句如下:
1
:
call dbms_space.auto_space_advisor_job_proc ( )
2
:
create table “XXX".DBMS_TABCOMP_TEMP_UNCMP tablespace NNC_DATA02 as select /*+ full(“
CHENJCH
".SM_PUB_FILESYSTEM)*/ * from “
CHENJCH
".SM_PUB_FILESYSTEM sample block( 41)
其中
SM_PUB_FILESYSTEM
表是一张附件表,包含blob
字段,大小
200
多
G
,通过
DBMS_SCHEDULER
可知这条耗时耗空间的语句是
Oracle
自动执行到了。
解决方案:
11g
数据库,自动维护任务