暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

运维,诊断,健康检查,优化定制工具ora使用说明

    很多人在看了我在2020年3月的公益培训视频(已上传到B站)后,都来找我咨询ora工具相关的问题, 这个工具花了我很多精力, 不是免费的, 下面是工具的使用说明, 大家如果觉得有用, 可以号ora_service联系购买.


    使用工具的目的是为了提高工作效率, 先有思路和方法,然后再借助工具,方能达到事半功倍的效果.


    ora工具使用说明


    ora是bash shell脚本写的oracle数据库 优化/诊断/健康检查 工具包, linux一般默认使用bash shell; 其他操作系统(AIX/HP-UX/Solaris)如果没有安装bash shell,需要安装. 不能在windows操作系统下使用.


    原型来自ora官方同名工具,仅保留了其中少量几个命令(方法), 大部分方法都是新增的,都是在大量的现场实战中总结出来的,同时也借鉴和整合了一些专家的方法.



使用方法:

        ftp oraxxx (xxx是版本号)到 linux/unix 数据库服务器, mv oraxxx orachmod +x ora , 然后用oracle用户执行 ./ora  ,该命令显示当前ora支持的所有子命令.


        可以把ora放到已有的PATH中或增加当前路径到PATH,避免每次在命令前增加./

        ora 默认使用数据库sys用户权限连接数据库(部分命令需要sysdba权限,比如查隐含参数等) ;

        脚本中配置了DBUSER="/ as SYSDBA" , 如果需要其他用户如system连接, 或通过客户端连接,或连接到某个pdb,需要修改这个配置. 比如 DBUSER="system/oracle@orcl"  


 命令语法:

        ora 命令 [可选参数] <必选参数>        部分命令区分RAC节点,需要在命令前使用 -i 节点号, 如 ora -i 节点号 命令  (默认i=1)

        举例:

            ora 4031                    诊断当前实例ora-4031问题

           ora load  或 ora load 24 或 ora load <bid> <eid>  批量显示数据库的load profile变化情况,默认显示最近48个snap

            ora sql <sql_id>            显示指定sql的详细信息,包括历史执行情况,执行计划,涉及的表等信息

            ora pc                      显示n天以来(默认8天)执行计划发生重大改变的TOP 50 SQL            

            ora pc2                     显示n天以来(默认8天)执行计划发生重大改变的TOP 50 SQL,并显示当前执行计划是不是最好的执行计划

            ora sqlhc <sqlid1> [sqlid2] ... 收集一个或多个sqlid的sqlhc信息(需要ora_sqlhc.sql文件在当前目录)

          ora table <tab_name> [owner]  采集某个table的详细信息, schema名可以在命令行输入,也可以在下一步做交互选择

            ora -i 2 ashcnt 20   显示节点2最近20分钟每秒活动会话数统计


全部命令说明:

命令名称后面的竖线|代表别名; 其他|代表各可选项

编号

命令名称

命令说明

补充说明

1

4031

诊断4031问题(官方脚本) , 只显示当前实例信息, 不支持 -i (保持官方脚本原样)

v$改成gv$,可以查其他节点

2

alert [2]                           

显示最近2天(默认) alert.log (v$diag_alert_ext)里面包含 ORA-  Checkpoint not complete / ALTER等关键字的信息

可改脚本,增加自定义关键字

3

ashcnt [30]                         

coung(*) group by sample_time gv$active_session_history 最近 30分钟(默认)

分节点; -a 显示按分钟统计

4

ashdump  [1]                        

dump ash(v$active_session_history) records into trc file,default value is 1 minutes   


5

ashevent 10 2                          

显示最近10分钟ASH 各采样点的top 2 event(group by inst_id,sample_time,events)

分节点;

6

ashsql "14:15" 20 | dashsql

ash(gv$active_session_history)和 DASH( dba_hist_active_sess_history),group by sql_id and event


7

ashtop|topash [10]

4个维度显示ash top 10信息(sql/session/activity/event),默认最近10分钟  (括号后表示别名)

分节点;

8

asm                                    

显示 asm 磁盘组空间 剩余空间


9

awr [bid] [eid]                        

收集bid和eid间隔的AWR报告(RAC所有节点和Global),采集top 60 sql;可交互选择输入bid和eid(默认是最近两次)


10

awrsnap  [3]                        

显示3天(默认)内的awr snapshot信息


11

awr_baseline [bid] [eid] 

指定 bid eid ,创建awr baseline (可交互选择输入 bid  eid)


12




13

batch_sqlhc <bid><eid><r1><r2><r3> y 

选定 bid和eid,批量生成top sql的sqlhc信息;r1=cpu r2=read r3=time 各维度top sql个数; 

获取top sql后,会询问是否要编辑刚刚生成的ora_sql_id.log (参考ora_sql_detail.log,类似sql可以删除),编辑后回车(输入n或N退出),开始批量生成 ; 参数可以在命令行写全,也可以交互输入


14

batch_osstat [48]|<bid><eid> 

批量显示awr osstat信息(类似 AWR osstat部分),默认最近48个snap ; 或指定bid和eid


15

batch_event  [48]|<bid><eid>

批量显示awr top 5 等待事件,默认最近48个snap ; 或指定bid和eid


16

batch_load | load [48]|<bid><eid>

批量显示awr load profile 信息,默认最近48个snap ; 或指定bid和eid


17

batch_iostat [48]|<bid> <eid>

批量显示awr top 5 reads tablespace信息 (awr: Tablespace IO Stats) 12.1及以下 ,默认最近48个snap ; 或指定bid和eid


18




19

bc [10]

显示v$bh (buffer cache) Top 10 对象       


20

big [20]

显示整个数据库中, 单表/索引 或 单分区/分区索引 最大的20个对象


21

big_by_tbs <tbs_name> [20]

按表空间显示最大对象                                  


22

bind  <sql_id>

显示指定sql_id的当前(gv\$sql_bind_capture)和历史(dba_hist_sqlbind) 绑定变量信息


23




24

col <owner><tab_name><col_name> 

显示指定字段的详细信息: 


25

check

健康检查:  unusable/invisible/invalid/bitmap/FK/rman/degree/px sessions/增加你的定制脚本      


26

cputime

按天/按snap 统计 CPUtime top 10 


27

cursor_summary

关于(un)pinned cursor的统计 : x$kglcursor


28




29

dashcnt "yyyy/mm/dd hh24:mi" [30]

默认30分钟范围 : dba_hist_active_sess_history group by sample_time


30

dashevent "yyyy/mm/dd hh24:mi" 20 2

20默认20分钟,top 2 events,group by inst_id,sample_time,events (DASH)


31

dashsql

ashsql 别名 


32

dbtime

按天/按snap 统计 DBtime top 10 


33

ddl   <name> <owner> <type>

DDL info : dbms_metadata.get_ddl (不分大小写); name/owner/type可交互输入,提供name后,其他内容会提示默认值


34

degree ( parallel )

显示带并行度属性的表或索引 ; 正在执行的 parallel processes ; 


35

dir

显示当前数据库创建的 directory 信息


36

drop patch|profile|baseline <name>

删除 sql patch/sql profile/sql plan baseline 


37

dpr_risk [100]   

一天超过100(默认)次的大表全表扫描 (blocks > 0.8*_small_table_threshold )


38

dup_index <owner>

显示指定用户的重复索引信息


39

dg | dg_info

show data guard info (contributed by Albert Liang)


40

event

gv$session  'ACTIVE' ; not IDLE; group by event

分节点;

41

event2sqlid <event_name> <bid> <eid> 

根据等待事件名, 在指定时间段 , 找到生成该事件的sqlid (dash); 显示top 5


42

event_set

显示当前系统设置的event,如 alter system set events '60025 trace name context forever';  10046等;     

session级看不到

43

expdash "2020/05/27 10:33:40" 30 

12.2+ 以上版本支持; expdp导出dba_hist_active_sess_history指定时间段记录; 使用默认directory; 导出后会显示


44




45

feature  

数据库使用的功能:db link/trigger/partition/compress/temporary/sqlpatch/profile/baseline/..    


46

file | files

列出文件名: spfile/control_file/datafile/tempfile


47

fulltext <sql_id>  

显示长sql(不超过 32767)的完整SQL text ; v$sql.sql_text 只有varchar2(1000) ; >32767 fulltext_long.sql


48

gather <owner> <table_name>  

收集表的统计信息dbms_gather_table_stats(cascade=>true,no_invalidate=>false)


49




50

histogram <owner><tab_name><col_name>

得到字段直方图信息(各值对应的记录数比例)


51

highparse [500]

查找硬解析高的SQL(默认>500) 显示 top 50  (save_highparse.sql 定期抓取,保存到表);highparse2 : 按资源消耗统计


52

highcost 50

gv$sql_plan cost最大的top 50(默认) sql

分节点

53

high_version [100]

显示游标个数超过100(默认)的sqlid 列表; 游标不能共享的原因汇总 ; 单个sql原因使用ora sharing <sqlid>


54

hintname|hint <keyword>

根据部分关键字,显示相关 hint (v$sql_hint)


55

hangdump

hanganalyze 3 + systemdump 10 , 已屏蔽 , 必要时可以打开, 收集诊断信息 


56

idx2sqlid <index_name> 

显示索引被哪些sql使用,全部列出 (dba_hist_sql_plan gv$sql_plan)

57

idxinfo <index_name>

显示指定索引相关信息 (没有用户名参数)      


58

index <table_name>

显示指定表的索引信息


59

job 

显示job列表


60

kill <sid> <serial> [inst_id]

kill session immediate ; 默认 节点号=1


61

longops 

显示 gv$session_longops 正在执行的长时间SQL (剩余时间经常不准)


62

lock | blocker 

显示锁及阻塞关系


63

lob 

显示lob segment占用空间最多的top 50 (>=10M)


64

lobfree <owner> <lobsegname>

显示securefile类型的lob segment剩余空间(basicfile类型不适合) ; segment_name结尾的两个$, 需要转义\$\$      


65




66

mvsnap   

显示 all_snapshots (mview) 状态                                      


67

montop [20]  

保存当前monitor 列表内执行时间最长的 top 20(默认) sql monitor files


68

monlist [50]   

列出 top 50 (def=50) monitor 监控队列(按sql_exec_start desc排序)


69

monsave <sqlid> [active]|text <exec_id>

保存指定sql_id的sql monitor文件,默认active格式(text格式需指定),保存到当前目录 <sql_id>_ACTIVE.html


70

mon_bind <sql_id>   

从v$sql_monitor中获得指定sql_id的绑定变量信息 (适合做批量比较); (可以进一步xml分解)


71

monsavehis <sqlid> [active]|text

12c ; 最后一个rid ; sql monitor report from dba_hist_reports  


72

mon_index_create

监控索引创建进度(segment_type='TEMPORARY'阶段; 不是全表扫描阶段)


73

mon_unzip <12cSQLMON>

12c sql monitor做了压缩和base64 编码; 解压成普通文本文件:  unzip_<file_name>      


74




75

obj  <part of obj info> [owner]  

例子: ora obj dba_hist%    ora obj %v\$sql% public    ora obj %plan


76

open_cursor [100]

打开游标数超过100(默认) 的session id , 显示top 30 

分节点

77

outline  <profile|patch> <name> 

显示指定sql profile|sql patch 的outline data信息,(不包含sql_plan_baseline)


78




79

params [<pattern>]

查看初始化参数,包括隐含参数:  ora params unnest  (不需要使用%)

仅当前节点

80

parameter [<pattern>] [2]

dba_hist_parameter last snap / gv$parameter ; 查看参数在最近2(默认)个snapshot内,是否发生了改变 

分节点

81

pc  [8]

8天(默认)内执行计划发生改变的sql;  

不分节点

82

pc2  [8]

8天(默认)内执行计划发生改变的sql; 当前sql使用的执行计划是不是最好的      

不分节点

83

pga [50]

显示按PGA_USED_MEM 排序的top 50(默认) process 信息

分节点

84

pga_detail <os_pid> | -mem <size_M> 

显示某个指定pid的pga详细使用情况 :  ora pga_detail <ospid>

显示所有超过阀值<size_mb>的process pga使用详细信息(慎用!,建议先执行ora pga)  : ora pga_detail -mem 100

不建议普通DBA使用

85




86

pid  <pid>  

单行显示指定pid详细信息 (gv$process 与 gv$session 关联)

分节点

87

print_table <sql_text>  

示例: ora print_table "select * from v\$session where username=''FRED'' and rownum<=1"

适合多字段显示

88

process <pid>  

用print_table的竖列显示模式,显示process详细信息


89

process_dump <pid> <level>

debug用


90

processes [<min_mb>]  

与pga命令类似,只显示PGA_MAX_MEM 操作指定阀值(单位M)的process信息

分节点

91

purge <sql_id> 

调用SYS.DBMS_SHARED_POOL.PURGE


92




93

raw <date|varchar2|number> <value> 

将字段上统计信息low/high_value的raw格式转换成可读格式: ora raw date 7878051410260B => 2020-05-20 15:37:10  


94

realmon   

类似oratop,只执行一次; 可以用repeat 重复多次执行:  ora repeat 5 100 realmon (5秒一次,执行100次)


95

redo   

显示redo信息 : redo log按小时统计生成频率; online redo log信息


96

recover_state | recover

gv$fast_start_transactions : 显示smon实例恢复进度


97

resize  

显示数据文件能够resize的最小大小


98




99

repeat <interval><count|forever><ora_command>

重复执行命令 ,如 ora repeat 5 100 temp : 每5秒执行一次 temp 命令,执行100次


100




101

rman                                   

显示rman 状态 和 RECOVERY_FILE_DEST 信息


102




103

seq    

显示设置可能不合理的sequence (order_flag='Y' or cache_size<=20)


104

seg <object_name>  

显示指定对象的segment 信息 (不用加owner)       


105

session  <sid>  

用print_table的方式显示指定session id详细信息                            

分节点

106

sessions  

ora sessions [active]|all  (active: 不包括 BACKGROUD)


107

session_event [all]|<noidle>|<px>

默认: group by EVENT;   noidle : 不包含idle event ;  px : 显示并行进程及等待时间;


108

sh

执行一个命令 ,如: ora repeat 2 5 sh 'ps -edf | grep DESC'


109

sharing <sql_id>

sql version count高,显示各种原因汇总 ; (ora high_version [100] 显示所有sql以及全部的汇总)   

分节点

110

sga       

显示sga使用情况(gv$sgastat  gv$sga_dynamic_components)

分节点

111

sga_stats | sga_detail

(gv$sga_current_resize_ops  gv$sga_dynamic_components)


112

snap | snapshot

生成一个snapshot (exec dbms_workload_repository.create_snapshot)


113

sparse_index

找出稀疏索引


114

sparse_table

找出稀疏表


115

sql <sqlid> [typical]|<adv>

显示 sql 详细信息: sql_text/sql执行历史/相同signature 10个/相同phv 10个(-s不显示)/ash event/awr 执行计划/当前执行计划/历史执行情况汇总/当前执行情况汇总/相关表的大小行数等信息


116

sql_baseline <sqlid> <sqlid> <PHV>

对指定sql生成baseline 


117

sql_check

大表少索引/低效索引/filter多子操作/hash join结果集小  (gv$sql_plan)


118

sql_check_his

大表少索引/低效索引/filter多子操作/hash join结果集小 ( sys.WRH$_SQL_PLAN )


119

sql_patch <sqlid> <hint>  

12.2 之前复杂; 12.2之后简单 (bind_aware/monitor/opt_param/parallel等)


120

sql_profile <sqlid> <sqlid> <PHV> 

使用sql profile固定执行计划,两种情况


121

sqlhc <sqlid1> [sqlid2] [sqlid3] ...

收集一个或多个sql的sqlhc (需调用oracle官方脚本sqlhc.sql, 将sqlhc.sql放到当前目录,改名为ora_sqlhc.sql)  


122

stats

显示当前系统统计信息相关情况                   


123

sysmetric "yyyy/mm/dd hh24:mi" [30]

DBA_HIST_SYSMETRIC_HISTORY (60秒粒度), 默认 30 分钟


124




125

table <tab_name> [owner]

显示表的相关信息:字段,分区,索引,统计信息等


126

tabidx <table_name>  

只显示表的索引信息 (没有owner)


127

tbs_last   

从 dba_hist_tbspc_space_usage 快速获取表空间使用情况


128

tbs_usage 

从 DBA_TABLESPACE_USAGE_METRICS 快速获取表空间使用情况


129

tbs_frag 

tablespace 碎片情况 <=1M   /   1M ~ 5M   /   >5M 3档


130

tbs  

显示表空间详细信息 


131

tbsinc 

显示全部表空间每天增长情况


132

temp   

temp tablespace使用情况 (4部分)  


133

topash [5] 

同 ashtop


134




135

toparea                                

gv$sqlarea的top sql,分3个维度 : 5 cpu/5 reads/5 elap


136

toparea_by_sig cpu|time|read <50>   

v#sqlarea group by force_matching_signature ; top 50 (默认)


137

topsql_by_plan cpu|time|read <50>   

v#sql group by phv ; top 50 (默认)


138




139

tophis cpu|read|time <bid><eid>

dba_hist_sqlstat得到top sql: ora tophis cpu <bid> <eid> 

分节点

140

tophis_byplan cpu|read|time <bid><eid>

按照plan hash value 统计sql性能指标

分节点

141

tophis_bysig cpu|read|time <bid><eid>

按照signature 统计sql性能指标

分节点

142

toppid [5]

先选操作系统pid的top10, 再过滤关键字为 LOCAL 后的 top 5(默认值)( 用户连接)


143

topseg [bid] [eid] 

显示类似awr top segment 信息:  AWR Segments by 'logical Reads' and 'physical Reads'      


144

top_level <sql_id>   

根据 top_level sql_id,找到对应的子 sql_id (dba_hist_active_sess_history)


145

text2sqlid <text_piece>  

根据关键字,查找对应的sqlid (建议调试sql 通过注释/* tag001 */方式增加可识别度)


146

tran  

显示 gv$transaction (没有commit的dml操作) 


147

trc    

得到trace 文件所在路径     


148




149

undo   

显示undo使用情况


150

user | users

列出所有user信息


151

version  

显示database version


152

xp  <sql_id>  

display_cursor ; advanced allstats last


153

xpo <sql_id> [child_number]

xplan.display_cursor ,显示执行计划先后执行顺序; adv mode


154

x   <sql_id>  

display_awr ; adv mode


155

xo  <sql_id> [phv]  

xplan.display_awr ,显示执行计划先后执行顺序,adv mode



   如果公众号文章显示的格式不方便阅读,请扫描下面二维码下载html版本说明:


文章转载自老虎刘谈oracle性能优化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论