数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE DBA常用SQL脚本工具-管理篇(1)


发布日期:2019年05月07日
 
ORACLE DBA常用SQL脚本工具-管理篇(1)

在较长时间的与oracle的交往中每个DBA特别是一些大侠都有各种各样的完成各种用途的脚本工具这样很方便的很快捷的完成了日常的工作下面把我常用的一部分展现给大家此篇主要侧重于数据库管理这些脚本都经过严格测试

表空间统计

A脚本说明

这是我最常用的一个脚本用它可以显示出数据库中所有表空间的状态如表空间的大小已使用空间使用的百分比空闲空间数及现在表空间的最大块是多大

B脚本原文:

SELECT upper(ftablespace_name) 表空间名

dTot_grootte_Mb 表空间大小(M)

dTot_grootte_Mb ftotal_bytes 已使用空间(M)

to_char(round((dTot_grootte_Mb ftotal_bytes) / dTot_grootte_Mb * )) 使用比

ftotal_bytes 空闲空间(M)

fmax_bytes 最大块(M)

FROM

(SELECT tablespace_name

round(SUM(bytes)/(*)) total_bytes

round(MAX(bytes)/(*)) max_bytes

FROM sysdba_free_space

GROUP BY tablespace_name) f

(SELECT ddtablespace_name round(SUM(ddbytes)/(*)) Tot_grootte_Mb

FROM sysdba_data_files dd

GROUP BY ddtablespace_name) d

WHERE dtablespace_name = ftablespace_name

ORDER BY DESC;

查看无法扩展的段

A脚本说明

ORACLE对一个段比如表段或索引无法扩展时取决的并不是表空间中剩余的空间是多少而是取于这些剩余空间中最大的块是否够表比索引的NEXT值大所以有时一个表空间剩余几个G的空闲空间在你使用时ORACLE还是提示某个表或索引无法扩展就是由于这一点这时说明空间的碎片太多了这个脚本是找出无法扩展的段的一些信息

B脚本原文

SELECT segment_name

segment_type

owner

atablespace_name tablespacename

initial_extent/ inital_extent(K)

next_extent/ next_extent(K)

pct_increase

bbytes/ tablespace max free space(K)

bsum_bytes/ tablespace total free space(K)

FROM dba_segments a

(SELECT tablespace_nameMAX(bytes) bytesSUM(bytes) sum_bytes FROM dba_free_space GROUP BY tablespace_name) b

WHERE atablespace_name=btablespace_name

AND next_extent>bbytes

ORDER BY ;

查看段(表段索引段)所使用空间的大小

A脚本说明

有时你可能想知道一个表或一个索引占用多少M的空间这个脚本就是满足你的要求的把<>中的内容替换一下就可以了

B脚本原文

SELECT owner

segment_name

SUM(bytes)//

FROM dba_segments

WHERE owner=<segment owner>

And segment_name=<your table or index name>

GROUP BY ownersegment_name

ORDER BY DESC;

查看数据库中的表锁

A脚本说明

这方面的语句的样式是很多的各式一样不过我认为这个是最实用的不信你就用一下无需多说锁是每个DBA一定都涉及过的内容当你相知道某个表被哪个session锁定了你就用到了这个脚本

B脚本原文

SELECT AOWNER

AOBJECT_NAME

BXIDUSN

BXIDSLOT

BXIDSQN

BSESSION_ID

BORACLE_USERNAME

BOS_USER_NAME

BPROCESS

BLOCKED_MODE

CMACHINE

CSTATUS

CSERVER

CSID

CSERIAL#

CPROGRAM

FROM ALL_OBJECTS A

V$LOCKED_OBJECT B

SYSGV_$SESSION C

WHERE ( AOBJECT_ID = BOBJECT_ID )

AND (BPROCESS = CPROCESS )

AND

ORDER BY ;

处理存储过程被锁

A脚本说明

实际过程中可能你要重新编译某个存储过程理总是处于等待状态最后会报无法锁定对象这时你就可以用这个脚本找到锁定过程的那个sid需要注意的是查v$access这个视图本来就很慢需要一些布耐心

B脚本原文

SELECT * FROM V$ACCESS

WHERE owner=<object owner>

And object<procedure name>

查看回滚段状态

A脚本说明

这也是DBA经常使用的脚本因为回滚段是online还是full是他们的关怀之列嘛

BSELECT asegment_namebstatus

FROM Dba_Rollback_Segs a

v$rollstat b

WHERE asegment_id=busn

ORDER BY

看哪些session正在使用哪些回滚段

A 脚本说明

当你发现一个回滚段处理full状态你想使它变回online状态这时你便会用alter rollback segment rbs_seg_name shrink可很多时侯确shrink不回来主要是由于某个session在用这时你就用到了这个脚本找到了sid的serial#余下的事就不用我说了吧

B脚本原文

SELECTrname 回滚段名

ssid

sserial#

susername 用户名

sstatus

tcr_get

tphy_io

tused_ublk

tnoundo

substr(sprogram ) 操作程序

FROM sysv_$session ssysv_$transaction tsysv_$rollname r

WHEREtaddr = staddr and txidusn = rusn

AND rNAME IN (ZHYZ_RBS)

ORDERBY tcr_gettphy_io

查看正在使用临时段的session

A 脚本说明

许多的时侯你在查看哪些段无法扩展时回显的结果是临时段或你做表空间统计时发现临段表空间的可用空间几乎为这时按oracle的说法是你只有重新启动数据库才能回收这部分空间实际过程中没那么复杂使用以下这段脚本把占用临时段的session杀掉然后用alter tablespace temp coalesce;这个语句就把temp表空间的空间回收回来了

B 脚本原文

SELECT username

sid

serial#

sql_address

machine

program

tablespace

segtype

contents

FROM v$session se

v$sort_usage su

WHERE sesaddr=susession_addr

(待续)

上一篇:ORACLE WEBDB Q 与 A

下一篇:通过使用Oracle商务智能保持住了客户们