DBA脚本Word格式.docx
- 文档编号:17069275
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:19
- 大小:28.52KB
DBA脚本Word格式.docx
《DBA脚本Word格式.docx》由会员分享,可在线阅读,更多相关《DBA脚本Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
WHERED.TABLESPACE_NAME=F.TABLESPACE_NAME(+)
UNIONALL--ifhavetempfile
BLOCKSSUM_BLOCKS,
USED_SPACE"
ROUND(NVL(USED_SPACE,0)/SPACE*100,2)"
NVL(FREE_SPACE,0)"
FROMDBA_TEMP_FILES
(SELECTTABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2)USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2)FREE_SPACE
FROMV$TEMP_SPACE_HEADER
3、除了监控表空间的剩余空间,有时候我们也有必要了解一下该表空间是否具有自动扩展空间的能力,虽然我们建议在生产系统中预先分配空间。
以下语句将完成这一功能
SELECTT.TABLESPACE_NAME,D.FILE_NAME,
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROMDBA_TABLESPACEST,
DBA_DATA_FILESD
WHERET.TABLESPACE_NAME=D.TABLESPACE_NAME
ORDERBYTABLESPACE_NAME,FILE_NAME
4、我相信使用字典管理的表空间的也不少吧,因为字典管理的表空间中,每个表的下一个区间的大小是不可以预料的,所以我们必须监控那些表在字典管理的表空间中的下一个区间的分配将会引起性能问题或由于是非扩展的表空间而导致系统停止。
以下语句检查那些表的扩展将引起表空间的扩展。
SELECTA.OWNER,A.TABLE_NAME,A.NEXT_EXTENT,A.TABLESPACE_NAME
FROMALL_TABLESA,
(SELECTTABLESPACE_NAME,MAX(BYTES)BIG_CHUNK
WHEREF.TABLESPACE_NAME=A.TABLESPACE_NAME
ANDA.NEXT_EXTENT>
F.BIG_CHUNK
5、段的占用空间与区间数也是很需要注意的一个问题,如果一个段的占用空间太大,或者跨越太多的区间(在字典管理的表空间中,将有严重的性能影响),如果段没有可以再分配的区间,将导致数据库错误。
所以,段的大小与区间监控也是一个很重要的工作
SELECTS.OWNER,S.SEGMENT_NAME,S.SEGMENT_TYPE,S.PARTITION_NAME,
ROUND(BYTES/(1024*1024),2)"
EXTENTSUSED_EXTENTS,S.MAX_EXTENTS,S.BLOCKSALLOCATED_BLOCKS,
S.BLOCKSUSED_BOLCKS,S.PCT_INCREASE,S.NEXT_EXTENT/1024"
NEXT_EXTENT(K)"
FROMDBA_SEGMENTSS
WHERES.OWNERNOTIN('
SYS'
'
SYSTEM'
)
ORDERBYUsed_ExtentsDESC
6、对象的空间分配与空间利用情况,除了从各个方面的分析,如分析表,查询rowid等方法外,其实oracle提供了一个查询空间的包dbms_space,如果我们稍封装一下,将是非常好用的一个东西。
CREATEORREPLACEPROCEDUREshow_space
(p_segnameinvarchar2,
p_typeinvarchar2default'
TABLE'
p_ownerinvarchar2defaultuser)
AS
v_segnamevarchar2(100);
v_typevarchar2(10);
l_free_blksnumber;
l_total_blocksnumber;
l_total_bytesnumber;
l_unused_blocksnumber;
l_unused_bytesnumber;
l_LastUsedExtFileIdnumber;
l_LastUsedExtBlockIdnumber;
l_LAST_USED_BLOCKnumber;
PROCEDUREp(p_labelinvarchar2,p_numinnumber)
IS
BEGIN
dbms_output.put_line(rpad(p_label,40,'
.'
)||p_num);
END;
v_segname:
=upper(p_segname);
v_type:
=p_type;
if(p_type='
i'
orp_type='
I'
)then
='
INDEX'
;
endif;
t'
T'
c'
C'
CLUSTER'
--以下部分不能用于ASSM
dbms_space.free_blocks
(segment_owner=>
p_owner,
segment_name=>
v_segname,
segment_type=>
v_type,
freelist_group_id=>
0,
free_blks=>
l_free_blks);
--以上部分不能用于ASSM
dbms_space.unused_space
total_blocks=>
l_total_blocks,
total_bytes=>
l_total_bytes,
unused_blocks=>
l_unused_blocks,
unused_bytes=>
l_unused_bytes,
LAST_USED_EXTENT_FILE_ID=>
l_LastUsedExtFileId,
LAST_USED_EXTENT_BLOCK_ID=>
l_LastUsedExtBlockId,
LAST_USED_BLOCK=>
l_LAST_USED_BLOCK);
--显示结果
p('
FreeBlocks'
l_free_blks);
TotalBlocks'
l_total_blocks);
TotalBytes'
l_total_bytes);
UnusedBlocks'
l_unused_blocks);
UnusedBytes'
l_unused_bytes);
LastUsedExtFileId'
l_LastUsedExtFileId);
LastUsedExtBlockId'
l_LastUsedExtBlockId);
LastUsedBlock'
l_LAST_USED_BLOCK);
执行结果将如下所示
SQL>
setserveroutputon;
execshow_space('
test'
);
FreeBlocks.............................1
TotalBlocks............................8
TotalBytes.............................65536
UnusedBlocks...........................6
UnusedBytes............................49152
LastUsedExtFileId....................1
LastUsedExtBlockId...................48521
LastUsedBlock.........................2
PL/SQLproceduresuccessfullycompleted
8、数据库的索引如果有比较频繁的Delete操作,将可能导致索引产生很多碎片,所以,在有的时候,需要对所有的索引重新REBUILD,以便合并索引块,减少碎片,提高查询速度。
setheadingoff
setfeedbackoff
spoold:
index.sql
SELECT'
alterindex'
||index_name||'
rebuild'
||'
tablespaceINDEXESstorage(initial256Knext256Kpctincrease0);
'
FROMall_indexes
WHERE(tablespace_name!
INDEXES'
ORnext_extent!
=(256*1024)
ANDowner=USER
spooloff
这个时候,我们打开spool出来的文件,就可以直接运行了。
9、表的主键是必要的,没有主键的表可以说是不符合设计规范的,所以我们需要监控表是否有主键
SELECTtable_name
FROMall_tables
WHEREowner=USER
MINUS
FROMall_constraints
ANDconstraint_type='
P'
二、性能监控
1、数据缓冲区的命中率已经不是性能调整中的主要问题了,但是,过低的命中率肯定是不可以的,在任何情况下,我们必须保证有一个大的databuffer和一个高的命中率。
这个语句可以获得整体的数据缓冲命中率,越高越好
SELECTa.VALUE+b.VALUElogical_reads,
c.VALUEphys_reads,
round(100*(1-c.value/(a.value+b.value)),4)hit_ratio
FROMv$sysstata,v$sysstatb,v$sysstatc
WHEREa.NAME='
dbblockgets'
ANDb.NAME='
consistentgets'
ANDc.NAME='
physicalreads'
2、库缓冲说明了SQL语句的重载率,当然,一个SQL语句应当被执行的越多越好,如果重载率比较高,就考虑增加共享池大小或者是提高Bind变量的使用
以下语句查询了Sql语句的重载率,越低越好
SELECTSUM(pins)total_pins,SUM(reloads)total_reloads,
SUM(reloads)/SUM(pins)*100libcache_reload_ratio
FROMv$librarycache
3、用户锁,数据库的锁有的时候是比较耗费资源的,特别是发生锁等待的时候,我们必须找到发生等待的锁,有可能的话,杀掉该进程。
这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
可以通过altersystemkillsession‘sid,serial#’来杀掉会话
SELECT/*+rule*/s.username,decode(l.type,'
TM'
TABLELOCK'
TX'
ROWLOCK'
NULL)LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROMv$sessions,v$lockl,dba_objectso
WHEREl.sid=s.sid
ANDl.id1=o.object_id(+)
ANDs.usernameisNOTNULL
4、锁与等待,如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以下的语句可以查询到谁锁了表,而谁在等待。
SELECT/*+rule*/lpad('
'
decode(l.xidusn,0,3,0))||l.oracle_usernameUser_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROMv$locked_objectl,dba_objectso,v$sessions
WHEREl.object_id=o.object_id
ANDl.session_id=s.sid
ORDERBYo.object_id,xidusnDESC
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
5、如果发生了事务或锁,想知道哪些回滚段正在被使用吗?
其实通过事务表,我们可以详细的查询到事务与回滚段之间的关系。
同时,如果关联会话表,我们则可以知道是哪个会话发动了这个事务。
SELECTs.USERNAME,s.SID,s.SERIAL#,t.UBAFIL"
UBAfilenum"
t.UBABLK"
UBABlocknumber"
t.USED_UBLK"
NumberosundoBlocksUsed"
t.START_TIME,t.STATUS,t.START_SCNB,t.XIDUSNRollID,r.NAMERollName
FROMv$sessions,v$transactiont,v$rollnamer
WHEREs.SADDR=t.SES_ADDR
ANDt.XIDUSN=r.usn
7、如果利用会话跟踪或者是想查看某个会话的跟踪文件,那么查询到OS上的进程或线程号是非常重要的,因为文件的令名中,就包含这个信息,以下的语句可以查询到进程或线程号,由此就可以找到对应的文件。
SELECTp1.value||'
||p2.value||'
_ora_'
||p.spidfilename
v$processp,
v$sessions,
v$parameterp1,
v$parameterp2
WHEREp1.name='
user_dump_dest'
ANDp2.name='
db_name'
ANDp.addr=s.paddr
ANDs.audsid=USERENV('
SESSIONID'
8、在ORACLE9i中,可以监控索引的使用,如果没有使用到的索引,完全可以删除掉,减少DML操作时的操作。
以下就是开始索引监控与停止索引监控的脚本
setheadingoff
setechooff
setfeedbackoff
setpages10000
spoolstart_index_monitor.sql
SELECT'
||owner||'
||index_name||'
monitoringusage;
FROMdba_indexes
WHEREowner=USER;
setheadingon
setechoon
setfeedbackon
------------------------------------------------
spoolstop_index_monitor.sql
nomonitoringusage;
如果需要监控更多的用户,可以将owner=User改写成别的
监控结果在视图v$object_usage中查询
感谢fenng,他提供了一个更新版的show_space脚本
(p_segnameINVARCHAR2,
p_ownerINVARCHAR2DEFAULTUSER,
p_typeINVARCHAR2DEFAULT'
p_partitionINVARCHAR2DEFAULTNULL)
--ThisprocedureusesAUTHIDCURRENTUSERsoitcanqueryDBA_*
--viewsusingprivilegesfromaROLEandsoitcanbeinstalled
--onceperdatabase,insteadofonceperuserwhowantedtouseit.
AUTHIDCURRENT_USER
as
l_segment_space_mgmtvarchar2(255);
l_unformatted_blocksnumber;
l_unformatted_bytesnumber;
l_fs1_blocksnumber;
l_fs1_bytesnumber;
l_fs2_blocksnumber;
l_fs2_bytesnumber;
l_fs3_blocksnumber;
l_fs3_bytesnumber;
l_fs4_blocksnumber;
l_fs4_bytesnumber;
l_full_blocksnumber;
l_full_bytesnumber;
--Inlineproceduretoprintoutnumbersnicelyformatted
--withasimplelabel.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DBA 脚本