oracle日常管理

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文件进行清理

②检查网络连接是否正常

③检查操作系统资源使用情况是否正常

④检查数据库服务器有没有硬件故障,如磁盘、内存报错


你可能感兴趣的:(Oracle)