DBA日常工作Word下载.docx
《DBA日常工作Word下载.docx》由会员分享,可在线阅读,更多相关《DBA日常工作Word下载.docx(12页珍藏版)》请在冰点文库上搜索。
/bdump/alert_<
sid>
.log:
:
echo>
alert_<
.log
$ORACLE_HOME/network/log/listener.log:
listener.log
$ORACLE_BASE/admin/udump/*.trc:
rm–rf*.trc
2.1.4.实时检查备份日志验证备份有效性
每日的数据库备份都在自动进行,但毕竟是按照脚本自动备份的,也有失败的时候。
所以需要每日检查数据库备份日志.
2.1.4.1.备份校验
rman>
restoredatabasevalidate;
2.1.5.查看数据库连接信息
定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。
同时,对一些“挂死”的连接,可能需要手工进行清理。
以下的SQL语句列出当前数据库建立的会话情况:
Selectcount(*)fromv$session;
――查看当前会话连接数
selectsid,serial#,username,program,machine,statusfromv$session;
注意:
SID为1到10(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作
2.1.6.并发会话量
并发会话量正常时段为60以下,查询系统在20以下,如果超过这些指标,则认为系统有阻塞情况,需要查找原因,引起关注。
查询系统并发的脚本为:
selectcount
(1)fromv$sessionwherestatus='
ACTIVE'
andusernamenotin('
SYS'
'
SYSTEM'
);
2.1.7.表空间使用情况
发现表空间使用量达到阀值时,需要添加数据文件来增大表空间容量
selecta.tablespace_name,round(a.total_size)"
total_size(MB)"
round(a.total_size)-round(b.free_size,3)"
used_size(MB)"
round(b.free_size,3)"
free_size(MB)"
round(b.free_size/total_size*100,2)||'
%'
free_rate
from(selecttablespace_name,sum(bytes)/1024/1024total_sizefromdba_data_filesgroupbytablespace_name)a,
(selecttablespace_name,sum(bytes)/1024/1024free_sizefromdba_free_spacegroupbytablespace_name)b
wherea.tablespace_name=b.tablespace_name(+);
2.1.8.数据文件健康状况
当发现数据文件损坏时,需要立即修复
selectfile_name,statusfromdba_data_files;
或者
Selectfile#,status,namefromv$datafile_header;
2.1.9.查看缓冲区命中率
缓冲区命中率应该保证在95%以上。
Select1-(sum(decode(name,'
physicalreads'
value,0))/
(sum(decode(name,'
dbblockgets'
value,0))+
consistentgets'
value,0)))))"
BufferHiteRate"
fromv$sysstat;
2.1.10.查看LIBRARYCACHE命中率
Selectround(sum(pins-reloads)/sum(pins)*100,4)"
LibraryCacheHitRatio"
fromv$librarycache;
2.1.11.检查数据库等待事件
如果数据库长时间持续出现大量像bufferbusywaits、dbfilescatteredread、dbfilesequentialread、enqueue、freebufferwaits、latchfree、logfilesync、logfileparallewrite
等等非空闲待事件时,需要对其进行分析,可能存在问题的语句。
selectsid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAITfromv$session_waitwhereeventnotlike'
SQL%'
andeventnotlike'
rdbms%'
;
2.1.12.检查数据库锁表情况
colsidfor999999
colusernamefora10
colschemanamefora10
colosuserfora16
colmachinefora16
colterminalfora20
colownerfora10
colobject_namefora30
colobject_typefora10
selectsid,serial#,username,SCHEMANAME,osuser,MACHINE,
terminal,PROGRAM,owner,object_name,object_type,o.object_id
fromdba_objectso,v$locked_objectl,v$sessions
whereo.object_id=l.object_idands.sid=l.session_id;
解锁处理:
altersystemkillsession'
&
sid,&
serial#'
2.1.13.检查数据库性能,CPU使用、IO、BUFFER命中等
使用vmstat,iostat,sar,top等命令进行信息收集并检查这些信息,判断资源使用情况。
2.1.14.查看是否有僵死进程
selectspidfromv$processwhereaddrnotin(selectpaddrfromv$session);
有些僵死进程有阻塞其他业务的正常运行,定期杀掉僵死进程
2.1.15.每天至少优化和熟悉一个TopSQL
根据AWR或Statspack报告,每天至少了解或熟悉一个TopSQL,能优化的要提出优化和调整建议
2.2.每周工作
2.2.1.监控数据量的增长情况
根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施
2.2.2.检查无效的数据库对象
SELECTowner,object_name,object_typeFROMdba_objectsWHEREstatus='
INVALID'
2.2.2.1.重建失效的索引
alterindexindex_namerebuild;
2.2.3.检查不起作用的约束
SELECTowner,constraint_name,table_name,constraint_type,status
FROMdba_constraints
WHEREstatus='
DISABLE'
andconstraint_type='
P'
2.2.4.检查无效的trigger
SELECTowner,trigger_name,table_name,statusFROMdba_triggersWHEREstatus='
DISABLED'
2.2.5.检查数据库定时作业的完成情况
如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的运行情况进行检查:
selectjob,log_user,last_date,failures
fromdba_jobs;
如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。
2.3.每月的工作
2.3.1.AnalyzeTables/Indexes/Cluster
analyzetable<
name>
estimatestatisticssample50percent;
2.3.2.检查表空间碎片
根据本月每周的检查分析数据库碎片情况,找到相应的解决方法
2.3.3.寻找数据库性能调整的机会
使用statspack收集统计数据,比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整
2.4.其他操作
2.4.1.keep经常使用得对象
--保存触发器的触发信息
CREATETABLEshared_pool_keep
(
KEEPDATEDATE,--启动时间
ERRMSGVARCHAR2(500)--错误信息
)
/
CREATEORREPLACETRIGGERSYS.triKeepPorcafterstartupONDATABASE
/****************************
数据库启动时,把调用比较频繁的存储过程固定在sharepool里面。
*****************************/
DECLARE
v_errmsgvarchar(800);
BEGIN
SYS.DBMS_SHARED_POOL.KEEP('
频繁调入调出的过程'
'
INSERTINTOshared_pool_keep(keepdate,errmsg)
VALUES(SYSDATE,'
'
);
EXCEPTIONWHENOTHERSTHEN
v_errmsg:
=substr(sqlerrm,1,200);
INSERTINTOshared_pool_keep(startupdate,execinfo,errmsg)
VALUES(sysdate,v_errmsg);
END;
--下面是PLSQL块,在数据库其上执行,或sharepool刷新时,执行
BEGIN
altertabletest_defaultstorage(buffer_poolkeep);
2.4.2.重整表
--说明此操作发生时,会影响表的DML操作,考虑建议操作在系统维护期进行
declare
stpvarchar2(30):
='
ts_1'
ifileinteger:
=10;
strvarchar2(200);
begin
forxin(selectdistinctOWNER,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME
fromsys.dba_extentswherefile_id=ifile
orderbysegment_typedesc,segment_name)loop
ifx.SEGMENT_TYPE='
TABLE'
then
str:
ALTERTABLE'
||x.owner||'
.'
||x.SEGMENT_name||'
movetablespace'
||stp||'
elsifx.SEGMENT_TYPE='
TABLEPARTITION'
movepartition'
||x.PARTITION_NAME||'
tablespace'
TABLESUBPARTITION'
movesubpartition'
INDEX'
ALTERINDEX'
rebuildtablespace'
INDEXPARTITION'
rebuildpartition'
INDEXSUBPARTITION'
rebuildsubpartition'
LOBPARTITION'
begin
select'
||table_owner||'
||table_name||'
||partition_name||'
lob('
||column_name||'
)storeas(tablespace'
intostr
fromdba_lob_partitions
wherelob_name=x.segment_nameandlob_partition_name=x.partition_name;
exception
whenno_data_foundthen
null;
end;
elsifx.SEGMENT_TYPE='
LOBSEGMENT'
||owner||'
fromdba_lobs
wheresegment_name=x.segment_name;
/*elsifx.SEGMENT_TYPE='
LOBINDEX'
whereindex_name=x.segment_name;
*/
endif;
dbms_output.put_line(str);
--insertintotest.clvalues(str);
endloop;
commit;
end;
2.4.3.重整索引
--说明此操作发生时,会影响表的DML操作,建议考虑操作在系统维护期进行
TESTING_LYX_2'
tbs_namevarchar2(30):
TESTING_LYX'
forxin(selectOWNER,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME
fromsys.dba_segmentswheretablespace_name=tbs_name