使用工具的目的是为了提高工作效率, 先有思路和方法,然后再借助工具,方能达到事半功倍的效果.
ora工具使用说明
ora是bash shell脚本写的oracle数据库 优化/诊断/健康检查 工具包, linux一般默认使用bash shell; 其他操作系统(AIX/HP-UX/Solaris)如果没有安装bash shell,需要安装. 不能在windows操作系统下使用.
原型来自ora官方同名工具,仅保留了其中少量几个命令(方法), 大部分方法都是新增的,都是在大量的现场实战中总结出来的,同时也借鉴和整合了一些专家的方法.
使用方法:
ftp oraxxx (xxx是版本号)到 linux/unix 数据库服务器, mv oraxxx ora ; chmod +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 |
本文分享自 老虎刘谈oracle性能优化 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!