oracle数据库维护

1、检查数据库实例状态

select instance_name,host_name,startup_time,status,database_status from v$instance;

其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。

select name,log_mode,open_mode from v$database;

其中“LOG_MODE”表示Oracle当前的归档方式。“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下。

2、检查oralce表空间的状态

select tablespace_name,status from dba_tablespaces;

3、检查oracle数据文件状态

select name,status from v$datafile;

输出结果中“STATUS”应该都为“ONLINE”

select file_name,status from dba_data_files

输出结果中“STATUS”应该都为“AVAILABLE”。

4、检查无效对象

select owner,object_name,object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM';

如果有记录返回,则说明存在无效对象。若这些对象与应用相关,那么需要重新编译生成这个对象,或者:

SELECT owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';

5、检查所有回滚段状态

select segment_name,status from dba_rollback_segs;

6、检查数据库连接情况

select sid,serial#,username,program,machine,status from v$session;

其中:SID 会话(session)的ID号;

SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;

USERNAME 建立该会话的用户名;

PROGRAM 这个会话是用什么工具连接到数据库的;

STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;

如果建立了过多的连接,会消耗数据库的资源,同时,对一些“挂死”的连接可能需要手工进行清理。如果DBA要手工断开某个会话,则执行:(一般不建议使用这种方式去杀掉数据库的连接,这样有时候session不会断开。容易引起死连接。建议通过sid查到操作系统的spid,使用ps –ef|grep spidno的方式确认spid不是ORACLE的后台进程。使用操作系统的kill -9命令杀掉连接 )

alter system kill session 'SID,SERIAL#';

7、检查表空间使用情况

select f.tablespace_name,a.total,f.free,round((f.free/a.total)100) "% Free" from

(select tablespace_name, sum(bytes/(10241024)) total from dba_data_files group by tablespace_name) a,

(select tablespace_name, round(sum(bytes/(1024*1024))) free from dba_free_space group by tablespace_name) f

WHERE a.tablespace_name = f.tablespace_name(+)

order by "% Free";

如果空闲率%Free小于10%以上(包含10%),则注意要增加数据文件来扩展表空间而不要是用数据文件的自动扩展功能。请不要对表空间增加过多的数据文件,增加数据文件的原则是每个数据文件大小为2G或者4G,自动扩展的最大限制在8G。

8、增加表空间大小

两种方法:

一种是为表空间增加数据文件

alter tablespace users add datafile '/opt/oracle/oradata/esop/so_data02.dbf' size 200M;

一种是增加表空间原有数据文件尺寸

alter database datafile '/opt/oracle/oradata/esop/so_data01.dbf' resize 200M;

9、检查是否有僵死进程

select spid from vprocesswhereaddrnotin(selectpaddrfromv

session);

10、检查日志缓冲区

select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');

如果redo buffer allocation retries/redo entries 超过1% ,则需要增大log_buffer。


分享到:


相關文章: