1、Oracle警告日志:alert_SID.log---主要记录数据库运行情况
①数据库的启动、关闭,启动时的缺省参数;
②数据库的重做日志切换情况,记录每次切换的时间及如果因为checkpoint操作没有执行完成造成不能切换,会记录不能切换的原因;
③对数据库进行的某些操作,如创建或删除表空间、增加数据文件;
④数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA-00600)
DBA应定期检查日志文件,根据日志中发现的问题及时处理
①启动参数不对----检查初始化参数文件
②checkpoint操作或者归档操作没有完成造成重做日志不能切换---若经常出现这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或者归档操作的效率
③未经授权删除表空间----检查数据库的安全问题,是否密码太简单;如有必要,撤销某些用户的系统权限
④出现坏块----检查是否是硬件问题(如磁盘本身有坏块),如果不是,检查是哪个数据库对象出现了坏块,对这个对象进行重建
⑤出现ORA-00600----根据日志文件的内容查看相应的TRC文件,如果是Oracle的BUG要及时打上相应的补丁
2、数据库表空间使用情况监控及回收
数据库运行一段时间后,由于不断的在表空见上创建和删除对象,会在表空间上产生大量的碎片,DBA应及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或者为表空间增加数据文件
select tablespace_name,count(*) chunks,max(bytes/1024/1024) max_chunk from dba_free_space group by tablespace_name;
chunks---表空间中有多少可用的空闲块(每个空闲块是由一些连续的Oracle数据块组成),空闲块过多,比如平均每个数据文件超过100个,说明碎片化比较严重
表空间相邻碎片接合,去碎片化效果不及EXP/IMP
alter tablespace tablespace_name coalesce;
没有效果可以考虑重建表空间
max_chunk---表空间最大的可用块大小,若表空间上的对象所需分配的空间(NEXT值)大于可用块的大小的话,就会提示ORA-1652,... 增加数据文件
表空间回收主要有以下几个方法:
a、drop and recreate
b、truncate and restore with backup
c、alter table move tablespace; alter index xxxidx rebuild ...
d、exp/imp
e、alter table xxx deallocate ...
(1)选择表空间中超过N个Blocks的Segments,可以看出那个表占表空间的大小
select segment_name,segment_type.blocks from dba_segments where tablespace_name='tablespacename' and blocks>N order by blocks;
(2)分析表,得知表的信息
analyze table tablename estimate statistics;
select initial_extent,next_extent,min_extents,blocks,empty_blocks from dba_tables where table_name='test' and owner='aa';
(3)使用alter table ... deallocate unused;回收表的空间
eg: alter table aa.test deallocate unused keep 1k;
(4)使用 alter tablespace ... coalesce;回收表空间
(5)使用dba_free_space视图查看表空间的空闲信息
3、数据库的连接情况
select sid,serial#,username,program,machine,status from v$session;
手动断开某个会话
alter system kill session 'SID,SERIAL#';
4、控制文件备份
数据库结构发生变化时,如增加表空间、数据文件或者重做日志文件,都会造成控制文件变化
备份方法
alter database backup controlfile to '/home/backup/control.bak';
或者
alter database backup controlfile to trace;
这样USER_DUMP_DEST目录下生成创建控制文件的SQL
5、检查数据库文件的状态
select file_name,status from dba_data_files;
6、检查数据库定时作业的完成情况
select job,log_user,last_date,failures from dba_jobs;
FAILURES是个大于0的数,说明JOB运行失败
7、数据库坏块的处理
alert_SID.log中出现记录坏块的信息:
ORA-01578:ORACLE data block corrupted (file# 7,block#)
ORA-01110:data file :'/oracle/oradata/V920/oradata/V816/users01.dbf'
---坏块所在数据文件的绝对文件号
---坏块是数据文件上的第几个数据块
出现此情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。排除了数据库外的原因,再对发生坏块的数据库对象进行处理。
①确定坏块的数据库对象
select tablespace_name, segment_type,owner,segment_name from dba_extents where file_id = and between block_id and block_id+blocks-1;
②决定修复方法
若坏块对象为索引,可以直接DROP掉,然后依据表的记录重建;
若坏块的表记录可以根据其他的表的记录生成的话也能DROP掉后重建;
若存在数据库备份,可以修复;
若表的记录没有其他的办法恢复,那么坏块上的记录就丢失了,把其他的数据取出来,对表重建。
③用Oracle提供的DBMS_REPAIR包标记处坏块
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
④使用Create Table As Select命令将表中其他块上的记录保存到另一张表
create table corrupt_table_bak as select * fron corrupt_table;
⑤用DROP TABLE删除有坏块的表
drop table corrupt_table;
⑥用alter table rename恢复原表
alter table corrupt_table_bak rename to corrupt_table;
⑦若存在索引应当重建索引
8、操作系统相关维护
DBA要注意对系统的监控
①文件系统的空间使用情况(df -h),必要时对Oracle的警告日志及TRC文件进行清理
②检查网络连接是否正常
③检查操作系统资源使用情况是否正常
④检查数据库服务器有没有硬件故障,如磁盘、内存报错