Oracle10g数据库巡检工具使用方法及SQL汇总
Oracle 10g数据库查找数据的方法总结
Oracle 10g 查找数据主要有以下方式:全表扫描和ROWID查找数据全表扫描(Full Table Scans ):有时Oracle数据库在评估最优执行计划时,当去取大量数据时,就会优先考虑使用全表扫描,因为这时全表扫描是最优的。
一般取出的数据占表的数据5%--10%左右会发生表扫描,一般在OLTP系统中尽量避免表扫描。
为了更好的使用表扫描,提高效率,在oracle 中有好几种分区方法,提高表扫描的效率,让表按具体业务逻辑来分区,尽量做到分区消除,减少表扫描的大小,提高性能。
ROWID查找数据(Table Access by ROWID 或R owid lookup ):行ROWID是行数据在数据库文件,数据块和行在块的具体位置,所以是Oracle最快的定位方法。
这种方法只能一次读取一个IO,不会涉及多个IO。
目前通过索引查找,主要有5种索引查找方式:∙索引唯一查找(index unique scan )∙索引范围查找(index range scan )∙索引全部扫描(index full scan )∙索引快速扫描(index fast full scan )∙索引跳跃式查找(index skip scan )通过索引查找数据索引唯一查找(index unique scan ):当查询列是如果存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描。
此查找方法效率很高。
索引范围查找(index range scan ):使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的典型情况下是在谓词(where限制条件)中使用了范围操作符(如>、<、<>、>=、<=、between)。
索引全部扫描(index full scan ):全索引扫描。
对查询出的数据进行排序,而且此时查询出的数据都必须从索引中可以直接得到。
Oracle11gRAC数据库巡检手册
张浩
数据库检测
硬件机型
HP DL580 G7
是否集群
是
系统实际用户数
10
数据库进程
进入操作系统,登陆Oracle用户,命令:su - oracle
Process
进程情况
进入操作系统,登陆Oracle用户
命令:ps -ef|grep ora_
说明
Oracle 10g 后台进程
SMON(System Monitor)用于执行历程恢复、合并空间碎片并释放临时段。
查看日志
命令:
More/u01/app/oracle/product/11.2.0/db_1/network/log/sqlnet.log
有错误才有日志
Tnsname
配置情况
标准配置
位置:/u01/app/oracle/product/11.2.0/db_1/network/admin
运行情况
正常
查看状态
from
dba_free_space
group by
tablespace_name
) fs
where df.tablespace_name=fs.tablespace_name
order by "Pct Free"
/
运行情况
正常
Sessions
并发数
select count(*) from v$session where status='ACTIVE';
锁表有时候是瞬间的,长时间锁定的表才可能是死锁。
select l.*, s.OSUSER, s.ACTION, o.OBJECT_NAME
from gv$locked_object l, gv_$session s, all_objects o
Oracle巡检手册
如果有记录返回,则说明存在无效对象。若这些对象与应用相关,那么需要重新编译生成这个对象。
3.6检查回滚段情况
3.6.1检查回滚段状态
输出结果中所有回滚段的“STATUS”该为“ONLINE”。
3.6.2检查是否有回滚段争用
发生回滚段争用时,需要审视争用情况,即哪些用户正在使用回滚段资源
检查监听进程是否存在:
二、检查系统和Oracle日志文件
检查相关的日志文件,包含:检查操作系统的日志文件,检查Oracle日志文件,检查Oracle核心转储目录,检查root用户和oracle用户的email,检查数据库的字符集,总共五个部分。
2.1检查操作系统日志文件
查看是否有与Oracle用户相关的出错信息。
3.3检查Oracle表空间情况
输出结果中STATUS应该都为ONLINE。
3.4检查Oracle所有数据文件情况
输出结果中“STATUS”应该都为“ONLINE”。
或者:
输出结果中“STATUS”应该都为“AVAILABLE”。
3.5检查对象情况
3.5.1检查对象类别和大小
合理分配资源,将冗余以及临时表定期进行清理,释放资源空间。
表空间不够
增加数据文件到相应的表空间
出现ORA-600
根据日志文件的内容查看相应的TRC文件,如果是Oracle的bug,要及时打上相应的补丁
Listener日志:$ORACLE_HOME/network/log/sqlnet.log
2.3检查Oracle核心转储目录
如果上面命令的结果每天都在增长,则说明Oracle进程经常发生核心转储。这说明某些用户进程或者数据库后台进程由于无法处理的原因而异常退出。频繁的核心转储特别是数据库后台进程的核心转储会导致数据库异常终止。
oracle数据库巡检
Deq: Table Q Normal','wakeup time manager','slave wait',
'i/o slave wait','jobq slave wait','null event','gcs remote message','gcs for action','ges remote message','queue messages','wait for unread message on broadcast
channel','PX Deq Credit: send blkd','PX Deq: Execute Reply','PX Deq: Signal ACK','PX Deque wait','PX Deq Credit: need buffer','STREAMS apply coord waiting for slave
client','SQL*Net more data from client','dispatcher timer','virtual circuit status','lock manager wait for remote message','PX Idle Wait','PX Deq: Execution Msg','PX
SELECT SUM(time_waited) w1 FROM v$system_event WHERE event NOT IN
谈Oracle10g管理工具的使用
▪ 命令行方式启动: 开始- - 运行框,输入cmd,在命令提示符后输入: emctl start dbconsole;
▪ 如果服务器上有多个数据库,可以通过设定环境变 量ORACLE_SID,调整默认数据库例程。
▪ ORACLE_SID可以在命令提示符下一次性设定,也 可以直接在系统环境变量中设定(一劳永逸型设 定)。
功能 将文本text的内容附加在当前行的末尾 将旧文本old替换为新文本new的内容
删除当前行中text指定的内容 删除SQL缓冲区中的所有命令行 删除当前行 删除n指定的行 删除由m行到n行之间的所有命令 在当前行后插入任意数量的命令行 在当前行后插入一行text指定的命令行 列出缓冲区中的所有的行 列出缓冲区中的第n行 显示并运行缓冲区指定的当前命令 指定第n行为当前行
3.3 OUI (Oracle Universal Installer)
▪ 启动方式:
所有程序——〉Oracle-OraDb10g_home1——〉 Oracle Installation Products——〉Universal Installer
▪ 功能:
OUI是基于Java技术的图形界面安装工具, 可以利用它完成不同操作系统、不同类型的、 不同版本的Oracle软件安装及查看已经安装的 产品。
▪ 此处的网络服务名就是一个数据库服务器的别名 ,必须能够解析该网络服务名,选择一种验证方式 连接即可。
▪ 此处的网络服务名就是一个数据库服务器的别名 ,必须能够解析该网络服务名,选择一种验证方式 连接即可。
▪ 可以通过网络配置工具Oracle Net Manager对 网络服务名进行配置。
• 设置Oracle实例的启 ▪ 设置Oracle NT服务的启
oracle健康检查(巡检)手册
性能检查
数据库性能
检查数据库的整体性能,包括响应时间、吞吐量 和资源利用率等。
查询性能
检查特定查询的性能,包括执行计划、索引和查 询优化等方面。
锁和争用
检查数据库中的锁和争用情况,以发现潜在的性 能瓶颈和问题。
03 Oracle数据库巡检方法
手动巡检方法
数据库日志检查
检查Oracle数据库的日志文件,包括警告日志、跟踪文件等,以发现 潜在的问题和错误。
远程巡检方法
远程监控
01
通过远程监控工具,实时监控Oracle数据库的运行状态和性能
指标。
远程诊断
02
通过远程诊断工具,远程连接到数据库服务器,对数据库进行
故障排除和诊断。
远程备份与恢复
03
通过远程备份与恢复工具,远程备份和恢复Oracle数据库的数
据和日志文件。
04 Oracle数据库巡检结果分 析
Oracle Enterprise Manager (OEM): OEM是一个集成的平台,用于自动监控、 诊断和优化Oracle数据库的性能。
Automatic Database Diagnostic Monitor (ADDM):ADDM是一个 自动化的性能诊断工具,可以自动 发现和解决性能问题。
在此添加您的文本16字
内存优化
在此添加您的文本16字
调整内存参数:根据数据库的实际需求,合理配置内存参 数,如SGA和PGA的大小。
在此添加您的文本16字
内存泄漏检测:定期检查内存使用情况,发现内存泄漏并 及时处理。
软件优化建议
调整初始化参数
根据数据库的性能需求,调整初始化参数,如打开表的数量、共 享池的大小等。
巡检结果数据收集
oracle数据库巡检sql脚本
如何查询sga内各组件信息和pga大小SQL> conn / as sysdbaSQL> show parameter sga_max–查看sga的大小NAMETYPEVALUE------------------------------------ ----------- ------------------------------sga_max_sizebig integer 60SQL> show parameter sga_target–查看sga_target大小(只限10g以上版本) NAMETYPEVALUE------------------------------------ ----------- ------------------------------sga_targetbig integer 584MSQL> show parameter db_cache_size–-查看db_cache大小NAMETYPEVALUE------------------------------------ ----------- --------------------db_cache_sizebig integer 00SQL> show parameter shared_pool_size–查看share_pool大小NAMETYPEVALUE------------------------------------ ----------- ---------------------------shared_pool_sizebig integer 4SQL> show parameter pga—查看pga_aggregate_target NAMETYPEVALUE------------------------------------ ----------- ---------------pga_aggregate_targetbig integer 0查询数据库版本的sqlSQL> select VERSION from v$instance;VERSION-----------------9.2.0.1.0SQL>select name, log_mode from v$database; --查看数据库名,归档模式NAMELOG_MODE--------- ------------SKYOTAARCHIVELOG–NOARCHIVELOG为非归档模式查看数据库字符集SQL>selectvalueFROMnls_database_parameters'NLS_CHARACTERSET';VALUE-----------------------------------------------------ZHS16GBKWHEREparameter=查看redo log信息查看日至组及成员SELECTgroup#,member FROMV$LOGFILE查看xx如成员大小SQL> select group# ,bytes ,members from v$log;GROUP# BYTES MEMBERS---------- ---------- ----------1 0 12 0 13 0 1近一个月内每天xx切换次数selectto_char(first_time,'yy-mm-dd')day,count(*)timesfromv$log_history where first_time> sysdate-30group byto_char(first_time,'yy-mm-dd') ;查看监控当天高峰期日志切换情况–具体高峰时段根据项目特性修改sqlselectcount(*)timesfromv$log_historywherefirst_timebetweento_date('2009-04-11 10:00:00','yy-mm-dd hh24:mi:ss')andto_date('2009-04-11 16:00:00','yy-mm-dd hh24:mi:ss');在oracle告警日志中(alertsid.log),也可以查看最近日志切换的情况表空间使用率:SELECT UPPER (f.tablespace_name) "表空间名",d.tot_grootte_mb "表空间大小(M)",d.tot_grootte_mb - f.total_bytes "已使用空间(M)",TO_CHAR(ROUND ( (d.tot_grootte_mb - f.total_bytes)/ d.tot_grootte_mb* 100,2),'990.99') "以使用占当前表空间大小比例",f.total_bytes "空闲空间(M)", f.max_bytes "最大块(M)",d.max_autobytes "表空间扩展的最大尺寸(M)",TO_CHAR (ROUND ( (d.tot_grootte_mb - f.total_bytes)/ d.max_autobytes* 100,2),'990.99') "以使用占最大扩展比例"FROM (SELECT tablespace_name,ROUND (SUM (BYTES) / (1024 * 1024), 2) total_bytes,ROUND (MAX (BYTES) / (1024 * 1024), 2) max_bytesFROM SYS.dba_free_spaceGROUP BY tablespace_name) f,(SELECT dd.tablespace_name,ROUND (SUM (dd.BYTES) / (1024 * 1024),2) tot_grootte_mb,TRUNC ( SUM (DECODE (dd.maxbytes,0, dd.BYTES,dd.maxbytes))/ (1024 * 1024)) max_autobytesFROM SYS.dba_data_files ddGROUP BY dd.tablespace_name) dWHERE d.tablespace_name = f.tablespace_name;任务或job的运行情况selectschema_user,last_date,next_date,total_time,interval,failures,whatfromdba_job swhereschema_user='SKY'–以实际的业务用户为准查看系统当前的等待事件SELECTs.SID,w.event,ername,w.p1,w.p2,w.p3,s.logon_time,s.program,SYSDATEFROMv$session s,v$session_wait wWHEREs.SID=w.SIDANDw.eventNOT LIKE'%SQL*Net%'ANDw.eventNOT LIKE'%rdbms%'ANDw.eventNOT LIKE'%timer%'ANDw.eventNOT LIKE'%jobq%'ANDw.eventNOT LIKE'%wakeup%';当前等待事件对应的sqlSELECT/*+ RULE*/s.SID,w.event,ername,t.hash_value,t.piece,t.sql_text,SYSDATEFROMv$session s,v$session_wait w,v$sqltext tWHEREs.SID=w.SIDANDs.sql_hash_value=t.hash_valueANDw.eventIN('db file scattered read','db file sequential read','free buffer waits','enque','latch free','log file parallel write','log file sync','buffer busy waits','db file parallel write','db file single write','direct path read','direct path write','free buffer inspected','free buffer waits','library cache load lock','library cache lock','library cache pin','log buffer space','log file single write','log file switch (archiving need)', 'log file switch (clearing log file)','undo segment extension')ORDER BYs.SID,t.piece;当前主要全表扫描语句SELECTb.sql_text,b.executions,b.sorts,b.disk_reads,b.buffer_gets,a.hash_value,a.object_owner,a.object_name,SYSDATE FROMv$sql_plan a,v$sql bWHEREa.address=b.addressANDa.hash_value=b.hash_valueANDa.child_number=b.child_numberANDa.operation='TABLE ACCESS'ANDa.options='FULL'ANDa.object_ownerNOT IN('ODM','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','QS_WS','SYS','SYSTEM');单次执行物理读多前20个语句SELECT*FROM(SELECTround(disk_reads/decode(EXECUTIONS,0,1,executions),2)bit,PARSING_USER_ID, EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlareaORDER BYbitDESC)WHERE ROWNUM<21;物理多总数多前10个sqlSELECT*FROM(SELECTPARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlareaORDER BYdisk_readsDESC)WHERE ROWNUM<11;单次逻辑读多的前10个sqlSELECT*b.spid,s.sql_hash_value,q.sql_text,q.executions,q.buffer_gets,ROUND(q.buffer_gets/q.executions)ASbuffer_per_exec,ROUND(q.elapsed_time /q.executions)AScpu_time_per_exec,q.cpu_time,q.elapsed_time,q.disk_reads,q.rows_processedFROMv$session s,v$process b,v$sql qWHEREs.sql_hash_value=q.hash_valueANDs.paddr=b.addr-- AND s.status = 'ACTIVE'ANDs.TYPE='USER'ANDq.buffer_gets>0ANDq.executions>0ORDER BYbuffer_per_execDESC)WHERE ROWNUM<=10;逻辑读多的前10个sqlSELECT*b.spid,s.sql_hash_value,q.sql_text,q.executions,q.buffer_gets,q.cpu_time,q.elapsed_time,q.disk_reads,q.rows_processedFROMv$session s,v$process b,v$sql q WHEREs.sql_hash_value=q.hash_value ANDs.paddr=b.addr-- AND s.status = 'ACTIVE'ANDs.TYPE='USER'ANDq.buffer_gets>0ANDq.executions>0ORDER BYbuffer_getsDESC)WHERE ROWNUM<=10;用户对象在非自定义表空间中存储的情况(owner='SKY'以实际业务用户为准)selectsegment_name,segment_type,tablespace_name,bytesfrom dba_segmentswhereowner='SKY'ANDTABLESPACE_NAMEIN('SYSTEM','USERS','SYSAUX')系统中最大的二十个表大小及高水位selectsegment_name,"SIZE(M)",TABLESPACE_NAMEfrom(select fromsegment_name,bytes/1024/1024"SIZE(M)",TABLESPACE_NAME user_segmentsORDERBYTESDESC)wherownum<=2011/ 11。
Oracle10g常用工具简介
常用命令
可以通过修改`sqlplus`的配置文件来设置各种参数,如字体、颜色、自动提交等。
设置环境变量可以方便地调用SQLPlus,例如设置`ORACLE_HOME`和`PATH`环境变量。
配置与环境变量
概述
概述与功能
首先需要从Oracle官网下载适合自己操作系统的安装包,然后按照提示进行安装。
安装完成后需要进行一些基本的配置,如设置环境变量、配置网络连接等,以确保能够正常连接到Oracle数据库。
安装
配置
安装与配置
使用
通过SQL Developer可以方便地连接到Oracle数据库,并进行各种数据库操作。同时,还可以使用其内置的脚本编辑器和调试器进行SQL脚本的编写和调试。
管理
可以通过Oracle Data Pump的管理工具(如Oracle Enterprise Manager)对Oracle Data Pump进行管理和监控。
使用与管理
05
Oracle Automatic Workload Repository (AWR)
概述与功能
Oracle Automatic Workload Repository (AWR) 是 Oracle 数据库的一个重要组件,用于收集、处理和存储数据库的性能统计信息。
配置
安装与配置
使用
AWR 的使用主要包括查询 AWR 存储的性能统计信息和生成性能报告。可以通过 Oracle Enterprise Manager (OEM) 或 SQL*Plus 等工具进行查询和报告生成。
管理
AWR 的管理主要包括监控 AWR 的运行状态、定期清理过期的统计信息以及根据需求调整 AWR 的配置参数。此外,还需要关注 AWR 的存储空间使用情况,确保足够的存储空间以容纳性能统计信息。
数据库服务巡检操作说明
数据库服务巡检操作说明一、检查cpu使用率1、Cpu正常范围<=70%2、Cpu的检查1,分析关键应用程序的性能2,定位问题的根源是在客户端、服务器、应用程序还是网络3,哪些应用程序占用大量带宽3、是Windows任务管理器,可以通过同时按Ctrl+Alt+Delete三个按键调出如图二、检查数据库开启情况1、数据库服务为已启动2、数据库服务的检查主要是确定服务正常启动,分析数据库无法连接等问题3、操作1.我的电脑--右键—管理如图:2.服务和应用程序---服务打开找到oraclesevice如图:查看OoracleService的状态是否是已启动状态三、用hostmonitor监控RMA进程和hostmonitor日志的查看1、Rma进程为正常运行,日志查看无异常2、数据库服务的检查主要是确定服务正常运行,时时监控进行的开关状态,报错日志的分析3、操作详细操作看《Hostmonitor操作手册》四、检查系统时间1、系统时间为当前时间2、数据库服务的检查主要是确定系统的时间匹配3、操作1.系统开始----运行-----cmd2.在命令输入框输入date3.在命令输入框输入time五、查看表空间使用情况1、数据库表空间的剩余空间是否足够2、数据库服务的检查主要是确定数据库空间足够3、操作1.系统开始----运行----cmd2.在命令输入框sqlplus username/password@oraclename 连接数据库如图:3.再在命令输入框输入select A.tablespace_name as "tablespace name",A.total_size as "total size",round(B.total_free_size,1) as "total free size",round((A.total_size - B.total_free_size),2) as "used size",to_char(100*B.total_free_size/A.total_size,'99.99')||'%' as "percent free" from (select tablespace_name,sum(bytes)/1024/1024 as total_size from dba_data_files group by tablespace_name) A,(select tablespace_name,sum(bytes/1024/1024) as total_free_size from dba_free_space group by tablespace_name) B where A.tablespace_name = B.tablespace_name;结果如图:六、查看表空间的状态1、数据库表空间状态为ONLINE是正常2、数据库服务的检查主要是确定数据库表空间的状态3、操作1.系统开始----运行----cmd2.在命令输入框sqlplus username/password@oraclename 连接数据库如图‘五‘一样3.再在命令输入框输入select tablespace_name,status from dba_tablespaces; 查询结果如图:七、查看日志切换间隔1、数据库日志切换间隔在3-5分钟为最好2、数据库服务的检查主要是确定数据库表空间的状态3、操作1.系统开始----运行----cmd2.在命令输入框sqlplus username/password@oraclename 连接数据库如图‘五‘一样3.再在命令输入框输入SELECTB.RECID,B.FIRST_TIME,A.FIRST_TIME,ROUND((A.FIRST_TIME-B.FIRST_TIME)*24*60,2) MINATESFROM V$LOG_HISTORY A,V$LOG_HISTORY BWHERE A.RECID=B.RECID +1 AND A.FIRST_TIME>SYSDATE - 20 ANDROUND((A.FIRST_TIME-B.FIRST_TIME)*24*60,2)<30ORDER BY A.FIRST_TIME DESC;查询结果如图:八、数据库缓冲区命中率1、正常值是大于或等于95%,如果发现该值低于90%就是不正常的2、数据库服务的检查数据字典缓冲区是Oracle特地为数据字典准备的一块缓冲池,供Oracle内部使用3、操作1.系统开始----运行----cmd2.在命令输入框sqlplus username/password@oraclename 连接数据库如图‘五‘一样3.再在命令输入框输入SELECT(1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) /(SUM(DECODE(NAME, 'db block gets', VALUE, 0))+SUM(DECODE(NAME, 'consistent gets', VALUE, 0))))) * 100 "缓冲区命中率"FROM V$SYSSTAT;查询结果如图:九、检查数据库定时作业的完成情况1、FAILURES列是一个大于0的数的话,说明JOB运行失败2、数据库服务的检查主要是用来完成一些定时作业3、再在命令输入框输入select job,log_user,last_date,failures from dba_jobs;查询结果:十、查看数据库的报警日志文件1、看有没有错误记录2、报警日志文件的检查主要是记录数据库后台进程和报警错误的信息3、操作1、打开路径:数据库所在盘符/数据库文件夹/admin/orcl2、第一个文件是后台进程的跟踪文件,同时也是存放警告日志所在的文件夹、第二个文件夹是用户进程的跟踪文件。
oracle巡检 手册
Oracle巡检手册第一部分数据库状态监控首先检查oracle的log,在sqlplus中:show parameter background_dump_dest;select * from v$diag_info;可以得到日志路径1:检查oracle 监听lsnrtcl statusPs –ef|grep ora2:检查oracle初始化参数Select * from v$parameter;3:检查oracle实例状态Select instance_name,version,status,database_status from v$instance;select inst_id,instance_name,host_name,VERSION,TO_CHAR(startup_time,'yyyy-mm-dd hh24:mi:ss')startup_time,status,archiver,database_status FROM gv$instance;4:检查后台进程状态:select name,Description From v$BGPROCESS Where Paddr<>'00'5:查看系统全局区SGA信息select * from v$sga;6: 查看SGA各部分占用内存情况:select * from v$sgastat;select request_misses,request_failures from v$shared_pool_reserved;比较好的状态:REQUEST_MISSES REQUEST_FAILURES为0或者接近0REQUEST_MISSES REQUEST_FAILURES-------------- ----------------007:查看系统SCN号select (select dbms_flashback.get_system_change_number from dual)scn,current_scn,scn_to_timestamp(current_scn)from v$database;8:检查数据库状态:select name,log_mode,open_mode,platform_name from v$database;select inst_id,dbid,name,to_char(created,'yyyy-mm-dd hh24:mi:ss')created,log_mode,to_char(version_time,'yyyy-mm-ddhh24:mi:ss')version_time,open_mode from gv$database;第二部分:数据库空间监控检查表空间使用率select A.tablespace_name, (1 - (A.total) / B.total) * 100 used_percentfrom (select tablespace_name, sum(bytes) totalfrom dba_free_spacegroup by tablespace_name) A,(select tablespace_name, sum(bytes) totalfrom dba_data_filesgroup by tablespace_name) Bwhere A.tablespace_name = B.tablespace_name;检查system表空间内的内容select distinct (owner)from dba_tableswhere tablespace_name = 'SYSTEM'and owner != 'SYS'and owner != 'SYSTEM'unionselect distinct (owner)from dba_indexeswhere tablespace_name = 'SYSTEM'and owner != 'SYS'and owner != 'SYSTEM';输出:no rows selected分析:如果有记录返回,则表明system表空间内存在一些非system和sys用户的对象。
oracle sql tracker 使用方法
Oracle SQL Tracker 是一个强大的数据库性能优化工具,能够帮助用户追踪和诊断数据库中的 SQL 语句执行情况,帮助用户找到潜在的性能瓶颈并优化 SQL 查询语句。
在本篇文章中,我们将介绍 Oracle SQL Tracker 的使用方法,包括如何启用、配置和分析 SQL 追踪数据。
一、启用 SQL 追踪要启用 SQL 追踪,您需要有 DBA 权限或者相应的权限。
您需要登入到数据库中,并确保您有足够的权限来执行以下操作。
您需要确认SQL 追踪已经被启用。
您可以通过以下 SQL 语句检查是否已经启用SQL 追踪:```SELECT value FROM v$parameter WHERE name = 'sql_trace';```如果查询结果为 TRUE,则表示 SQL 追踪已经被启用。
如果查询结果为 FALSE,则表示 SQL 追踪尚未被启用。
在这种情况下,您可以使用以下 SQL 语句来启用 SQL 追踪:```ALTER SESSION SET sql_trace = true;```您也可以使用以下 SQL 语句来禁用 SQL 追踪:```ALTER SESSION SET sql_trace = false;```二、配置 SQL 追踪一旦启用了SQL 追踪,您可以对其进行配置,以便捕获更详细的信息。
您可以使用以下 SQL 语句来配置 SQL 追踪:```EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE;```该语句将启用 SQL 追踪,并开始捕获 SQL 语句的执行信息。
您还可以通过指定参数来配置 SQL 追踪,例如指定要追踪的会话 ID、模块名、服务名等等。
这样可以更精细地控制追踪的范围。
三、分析 SQL 追踪数据一旦SQL 追踪已经启用并配置好,您可以开始分析SQL 追踪数据了。
您可以使用 Oracle 提供的一些工具来分析这些数据,例如 SQL Developer、Enterprise Manager 等。
Oracle数据库日常巡检指令
Oracle 数据库日常巡检指令Oracle数据库的日常巡检内容包括:Oracle数据库基本状况检查;Oracle相关资源的使用情况检查;Oracle数据库性能检查;数据库服务器cpu、mem和I/O 性能检查;数据库服务器安全性及其他事项检查等五大检查项目。
1、数据库基本状况检查(1)、数据库实例状况检查说明:其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
(2)、数据库表空间状态检查说明:输出结果中STATUS应该都为“ONLINE”。
(3)、数据库数据文件检查1 select tablespace_name,status from dba_tablespaces;说明:输出结果中“STATUS”应该都为“AVAILABLE”。
(4)、数据库在线日志检查1 select group#,status,type,member from v$logfile;说明:输出结果应该有3条或3条以上记录,“STATUS”应该为非“INVALID”,非“DELETED”。
“STATUS”的值为空表示正常。
(5)、数据库回滚段检查1 select segment_name,status from dba_rollback_segs;说明:输出结果中所有回滚段的“STATUS”应该为“ONLINE”。
2、数据库相关资源使用情况检查(1)、检查Oracle初始化文件中相关参数值1 select resource_name,max_utilization,initial_allocation, limit_value from v$resource_limit;说明:若字段值【LIMIT_VALU】-【MAX_UTILIZATION】<=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整。
Oracle数据库巡检命令手册
Oracle数据库巡检命令手册点击上方卡片关注前言如果给你一个全新的O ra c le单机数据库环境,作为D B A,您需要关注哪些点?本文仅讨论L inux主机~注意:首先申明本文所述并非标准答案,只是个人的一些见解,欢迎 大家补充完善~一、⭐ 主机层面⭐1、 主机版本和O racle版本「主机版本:」c a t /e tc/s y s te m-re le a s e c a t /e tc/red ha t-re le a s e「O ra c le版本和补丁版本:」s q lp lus-v e rs io no p a tc h ls p a tc he s2、 主机硬件资源包括C P U负载,物理内存和磁盘使用。
「C P U负载和内存:」to p f re e-m⚠ 需要注意主机的C P U负载和物理内存使用是否异常,S w a p是否被过多使用。
「磁盘使用情况:」ls b lkf d is k -ld f-T h⚠ 显而易见,需要关注磁盘使用情况,是否存在使用率过高。
3、 计划任务 cron t ab一般计划任务会布置一些备份策略或者归档删除的策略,我们可以通过c ro nta b来查看:c ro nta b-l4、 检查H ost s 文件和网络配置c a t /e tc/ho s ts ip ad d rnmc li c o nne c tio n s ho w5、 检查系统参数文件c a t /e tc/s y s c tl.c o nf⚠ 需注意是否有设置非常规参数。
6、 检查 rc.local 文件rc.lo c a l文件用于配置开机自启动脚本,一般会设置关闭透明大页或者O ra c le数据库开机自启。
c a t /e tc/rc.lo c a l7、 环境变量配置查看环境变量配置,进一步熟悉环境。
c a t ~/.b a s h_p ro f ile c a t /ho me/o ra c le/.b a s h_p ro f ile8、 检查系统服务s y s te mc tl s ta tus f ire w a lld.s e rv ic e g e te nf o rc e c a t /p ro c/c md line c a t /e tc/s y s c o nfig/ne tw o rk二、 数据库层面1、 查看数据库实例和监听p s-e f|g re p s mo ns u -o ra c le ls nrc tl s ta tus2、 数据库表空间使用s q lp lus/ a s s y s d b a c o l TA B L E S P A C E_N A M E f o r a20s e le c t tb s_us e d_inf o.ta ble s p a c e_na me,tb s_us e d_inf o.a llo c_mb,tb s_us e d_inf e d_mb,tb s_us e d_inf o.ma x_mb,tb s_us e d_inf o.f re e_o f_ma x_mb,tb s_us e d_inf e d_o f_ma x|| '%'us e d_o f_ma x_p c t f ro m (s e le c t a.ta b le s p a c e_na me,ro und(a.b y te s_a llo c/ 1024/ 1024) a llo c_mb,ro und((a.b y te s_a llo c-nv l(b.b y te s_f re e,0)) / 1024/ 1024) us e d_mb,ro und((a.b y te s_a llo c-nv l(b.b y te s_f re e,0)) *100/ a.ma x b y te s) us e d_o f_ma x,ro und((a.ma x b y te s-a.b y te s_a llo c+nv l(b.b y te s_f re e,0)) / 1048576) f re e_o f_ma x_mb,ro und(a.ma x b y te s/ 1048576) ma x_mb f ro m (s e le c t f.ta b le s p a c e_na me,s um(f.b y te s) b y te s_a llo c,s um(d e c o d e(f.a uto e x te ns ib le,'Y E S',f.ma x b y te s,'N O', f.b y te s)) ma x b y te sf ro m d b a_d a ta_f ile s fg ro up b y ta b le s p a c e_na me) a,(s e le c t f.ta b le s p a c e_na me,s um(f.b y te s) b y te s_f re e f ro m d b a_f re e_s p a c efg ro up b y ta b le s p a c e_na me) b w he re a.ta b le s p a c e_na me=b.ta b le s p a c e_na me(+)) tb s_us e d_inf o o rd e r b y tb s_us e d_inf e d_o f_ma x de s c;3、 检查RMA N备份情况rma n ta rg e t /lis t b a c kup;s q lp lus/ a s s y s d b a c o l s ta tus f o r a10c o l inp ut_ty p e f o r a20c o l I N P U T_B Y T E S_D I S P L AY f o r a10c o l O U T P U T_B Y T E S_D I S P L AYf o r a10c o l T I M E_TA K E N_D I S P L AY f o r a10s e le c t inp ut_ty p e,s ta tus,to_c ha r(s ta rt_time,'y y y y-mm-d d hh24:mi:s s'),to_c ha r(e nd_time,'y y y y-mm-d d hh24:mi:s s'),inp ut_b y te s_d is p la y,o utp ut_b y te s_d is p la y,time_ta ke n_d is p la y,C O M P R E S S I O N_R AT I Of ro m v$rma n_b a c kup_jo b_d e ta ils w he re s ta rt_time>d a te'2021-07-01'o rd e r b y3d e s c;4、 检查控制文件冗余查看控制文件数量和位置,是否处于多份冗余状态。
oracle 数据库巡检语句
oracle 数据库巡检语句进行Oracle数据库巡检时,可以使用一系列SQL语句来检查数据库的健康状况、性能和安全性。
以下是一些常用的Oracle数据库巡检语句:1. 检查数据库实例的运行情况:SELECT instance_name, host_name, version,startup_time, status FROM v$instance;2. 检查数据库的空间使用情况:SELECT tablespace_name, sum(bytes)/1024/1024 AS "Total Size (MB)",。
sum(bytes blocks8192)/1024/1024 AS "Used Size (MB)",。
sum(blocks8192)/1024/1024 AS "Free Size (MB)"FROM dba_free_space.GROUP BY tablespace_name;3. 检查数据库的性能指标:SELECT FROM v$sysstat WHERE name LIKE 'parse count%';SELECT FROM v$sysstat WHERE name LIKE 'execute count%';SELECT FROM v$sysstat WHERE name LIKE 'user commits';4. 检查数据库的会话和进程信息:SELECT username, osuser, machine, program FROM v$session;SELECT spid, osuser, username, program FROMv$process;5. 检查数据库的表空间和数据文件信息:SELECT tablespace_name, file_name, bytes/1024/1024 AS "File Size (MB)",。
Oracle数据库巡检方案
Oracle数据库巡检方案
Oracle数据库巡检维护方案
一、巡检维护的目的
为了保障数据库正常运行,保证数据的安全性、完整性和可用性,需进行数据库巡检维护。
二、巡检维护的分类
数据库巡检维护包含的内容很多,如果每天都将这些项目进行一遍,在时间上是不允许的,可能还会影响到数据库使用效率,因此,通常会将这些巡检维护内容分门别类地按不同的时间频率进行。
数据库巡检维护按时间频率可分为日巡检、周巡检、月巡检、半年度巡检四类。
日巡检维护指每日按计划进行的巡检维护活动,以检查数据库运行状态、数据库备份状态和告警错误为主要内容,同时还必须检查使用数据库的应用软件是否因数据库运行原因产生使用错误或不畅。
周巡检维护指按一周为周期,在每周指定日按计划进行的巡检维护活动,它的工作内容是在日巡检维护工作内容的基础上添加数据库对象检查、安全性检查等内容组成。
月巡检维护指按一月为周期,在每月指定日按计划进行的巡检维护活动,它的工作内容是在周巡检维护工作内容的基础上添加系统参数配置检查、硬件与系统平台运行状态检查等内容组成。
半年度巡检维护指按半年为周期,在指定日按计划进行的巡检维护活动,它的工作内容是在月巡检维护工作内容的基础上添加数据库性能诊断检查组成。
如果能够提供模拟环境或生产环境在特定条件下允许停机,还应该进行备份有效性测试。
由于巡检维护工作任务的涵盖性,进行半年度巡检维护日可不执行所在月的月巡检维护、所在周的周巡检维护和日巡检维护,以此类推。
三、巡检维护工作内容和周期。
oracle sql monitor 用法
Oracle SQL Monitor 用法Oracle SQL Monitor 是 Oracle 数据库的一个强大工具,用于监视和分析 SQL 语句的执行性能。
它提供了详细的执行计划、统计信息和实时性能指标,可以帮助开发人员和数据库管理员识别并解决性能瓶颈问题。
本文将介绍 Oracle SQL Monitor 的用法,包括如何启用和使用它。
1. 启用 SQL Monitor在 Oracle 数据库中启用 SQL Monitor 需要满足以下条件:•必须是企业版(Enterprise Edition)或者标准版(Standard Edition)的Oracle 数据库。
•必须有SYSDBA或SYSOPER角色权限。
要启用 SQL Monitor,可以按照以下步骤进行操作:1.使用SYSDBA或SYSOPER角色登录到数据库。
2.执行以下命令启用 SQL Monitor:ALTER SESSION SET "_sqlmon_auto" = ON;3.确认是否成功启用了 SQL Monitor:SELECT VALUE FROM V$PARAMETER WHERE NAME = '_sqlmon_auto';如果返回值为ON,则表示已成功启用。
2. 监视 SQL 语句在启用了 SQL Monitor 后,可以通过以下方式监视和分析 SQL 语句的执行性能:2.1 监视单个 SQL 语句要监视一个特定的 SQL 语句,可以使用DBMS_SQLTUNE.REPORT_SQL_MONITOR过程。
该过程接受一个 SQL_ID 参数,用于指定要监视的 SQL 语句。
以下是一个使用示例:DECLAREl_sql_id VARCHAR2(13) := '1234567890ABC';BEGINDBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => l_sql_id);END;/执行以上代码后,将会生成一个包含有关该 SQL 语句执行情况的报告。
Oracle 10G RAC巡检脚本
Ps –ef |grep ora_
9. CRS进程检查
ps -ef | grep oracm
$ps –df |grep d.bin
应有:crsd.bin ocssd.bin evmd.bin
crsctl check crs
crs_stat –t
ROUND (SUM (df.BYTES) / 1048576) size_mb,
ROUND (SUM (free.BYTES) / 1048576, 2) free_mb,
ROUND (SUM (df.BYTES) / 1048576 - SUM (free.BYTES) / 1048576, 2 ) used_mb,
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST
and b.contents <> 'TEMPORARY';
6、控制文件检查
col name for a60
select * from v$controlfile;
7、无效对象检查
col OBJECT_NAME for a24
SELECT owner , object_name, object_type,status ,LAST_DDL_TIME FROM dba_objects WHERE status like 'INVALID';
Oracle10g数据库自动诊断监视工具
Oracle10g数据库自动诊断监视工具(ADDM)使用指南Oracle10g数据库自动诊断监视工具(ADDM)使用指南by fuyuncat第一章ADDM简介在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof、sql_trace、statspack、set event 10046&10053等等。
这些工具能够帮助DBA很快的定位性能问题。
但这些工具都只给出一些统计数据,然后再由DBA们根据自己的经验进行优化。
那能不能由机器自动在统计数据的基础上给出优化建议呢?Oracle10g中就推出了新的优化诊断工具:数据库自动诊断监视工具(Automatic Database Diagnostic Monitor ADDM)和SQL优化建议工具(SQL Tuning Advisor STA)。
这两个工具的结合使用,能使DBA节省大量优化时间,也大大减少了系统宕机的危险。
简单点说,ADDM就是收集相关的统计数据到自动工作量知识库(Automatic Workload Repository AWR)中,而STA则根据这些数据,给出优化建议。
例如,一个系统资源紧张,出现了明显的性能问题,由以往的办法,做个一个statspack快照,等30分钟,再做一次。
查看报告,发现’ db file scattered read’事件在top 5 events里面。
根据经验,这个事件一般可能是因为缺少索引、统计分析信息不够新、热表都放在一个数据文件上导致IO争用等原因引起的。
根据这些经验,我们需要逐个来定位排除,比如查看语句的查询计划、查看user_tables的last_analysed子段,检查热块等等步骤来最后定位出原因,并给出优化建议。
但是,有了STA以后,它就可以根据ADDM采集到的数据直接给出优化建议,甚至给出优化后的语句(抢了DBA的饭碗喽)。
ADDM能发现定位的问题包括:•操作系统内存页入页出问题•由于Oracle负载和非Oracle负载导致的CPU瓶颈问题•导致不同资源负载的Top SQL语句和对象——CPU消耗、IO带宽占用、潜在IO问题、RAC内部通讯繁忙•按照PLSQL和JAVA执行时间排的Top SQL语句.•过多地连接(login/logoff).•过多硬解析问题——由于shared pool过小、书写问题、绑定大小不适应、解析失败原因引起的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle10g数据库巡检工具使用方法及SQL汇总一、使用方法使用该工具可以大大简化数据库巡检的工作,并可生成HTML文档,方便阅读和保存。
使用软件前需要修改系统时间,一般向前调整2年及可,如:今天是2010年5月10日,使用软件前调整系统时间为2008年5月10日后,再运行该软件即可。
执行巡检完成后会在HCReport内生成一个HTML文件。
工具的运行界面如下:二、SQL汇总--1. 数据库概要 (3)--2. 参数文件(是spfile还是pfile) (3)--3. 非默认的参数 (4)--4. 控制文件及其状态 (4)--5. 表空间及数据文件 (4)--6. 重做日志文件信息 (4)--7. 内存分配概况 (4)--8. Library Cache Reload Ratio(<1%) (5)--9. Data Dictionary Miss Ratio(<15%) (5)--10. 共享池建议 (5)--11. DB Buffer Cache(Default) Hit Ratio(>90%) (5)--12. DB Buffer Cache Advice (6)--13. 磁盘排序(<5%) (6)--14. Log Buffer latch Contention(<1%) (6)--15. 表空间状态及其大小使用情况 (6)--16. 数据文件状态及其大小使用情况 (7)--17. 不使用临时文件的临时表空间 (7)--18. 无效的数据文件(offline) (7)--19. 处于恢复模式的文件 (7)--20. 含有50个以上的Extent且30%以上碎片的表空间 (8)--21. 表空间上的I/O分布 (8)--22. 数据文件上的I/O分布 (9)--23. Next Extent 相对于段当前已分配字节过大(>=2倍)或过小(<10%)的Segments (9)--24. Max Extents(>1)已经有90%被使用了的Segments (9)--25. 已经分配超过100 Extents的Segments (10)--26. 因表空间空间不够将导致不能扩展的Objects (10)--27. 没有主键的非系统表 (11)--28. 没有索引的外键 (11)--29. 建有6个以上索引的非系统表 (11)--30. 指向对象不存在的Public同义词 (12)--31. 指向对象不存在的非Public同义词 (12)--32. 没有授予给任何角色和用户的角色 (12)--33. 将System表空间作为临时表空间的用户(除Sys外) (13)--34. 将System表空间作为默认表空间的用户(除Sys外) (13)--35. 没有授予给任何用户的profiles (13)--36. 没有和Package相关联的Package Body (13)--37. 被Disabled的约束 (14)--38. 被Disabled的触发器 (14)--39. Invalid Objects (14)--40. 执行失败或中断的Jobs (14)--41. 当前未执行且下一执行日期已经过去的Jobs (15)--42. 含有未分析的非系统表的Schemas (15)--43. 含有未分析的非系统分区表的Schemas (15)--44. 含有未分析的非系统索引的Schemas (16)--45. 含有未分析的非系统分区索引的Schemas (16)--46. 死锁检测 (16)--47. top I/O Wait (16)--48. top 10 wait (17)--49. Top 10 bad SQL (17)--50. Top most expensive SQL (Buffer Gets by Executions) (17)--51. Top most expensive SQL (Physical Reads by Executions) (18)--52. Top most expensive SQL (Rows Processed by Executions) (18)--53. Top most expensive SQL (Buffer Gets vs Rows Processed) (19)--1. 数据库概要select "DB Name",e.global_name "Global Name",c.host_name "Host Name",c.instance_name "Instance Name" ,DECODE(c.logins,'RESTRICTED','YES','NO') "Restricted Mode",a.log_mode "Archive Log Mode"FROM v$database a, v$version b, v$instance c,global_name eWHERE b.banner LIKE '%Oracle%';--2. 参数文件(是spfile还是pfile)select nvl(value,'pfile') "Parameter_File"from v$parameter where Name='spfile';--3. 非默认的参数select name, rtrim(value) "pvalue"from v$parameterwhere isdefault = 'FALSE'order by name;--4. 控制文件及其状态select Name,Status from v$controlfile;--5. 表空间及数据文件select tablespace_name,file_name,bytes/1024/1024 "Total Size(MB)",autoExtensible "Auto" from dba_data_filesorder by tablespace_name,file_id;--6. 重做日志文件信息select f.group#, f.member "Redo File", f.Type,l.Status,l.bytes/1024/1024 "Size(MB)"from v$log l,v$logfile fwhere l.group#=f.group#;--7. 内存分配概况select name,to_char(value) "value(Byte)"from v$sgaunion allselect name,valuefrom v$parameterwhere name in('shared pool_size','large_pool_size','java_pool_size','lock_sga');--8. Library Cache Reload Ratio(<1%)Select round((Sum(Reloads) / Sum (Pins)) * 100, 4) "LC_Reload_Ratio%"From V$Librarycache;--9. Data Dictionary Miss Ratio(<15%)Select Round((((sum(GetMisses)) / sum(Gets)) * 100),4) "DC_Miss_Ratio%"From V$rowcache;--10. 共享池建议select shared_pool_size_for_estimate "Shared Pool Size(estimate)",SHARED_POOL_SIZE_FACTOR "Factor",estd_lc_size "Libarary Cache Size",estd_lc_time_saved "time Saved"from v$shared_pool_advice;--11. DB Buffer Cache(Default) Hit Ratio(>90%)Select round(100 * (1-(physical_reads/(db_block_gets+consistent_gets))), 4) "BC_Hit _Ratio" FROM v$buffer_pool_statisticsWHERE name = 'DEFAULT';--12. DB Buffer Cache Adviceselect Name "Pool Name",Block_size,SIZE_FOR_ESTIMATE "Buffer Size",SIZE_FACTOR "Factor",ESTD_PHYSICAL_READ_FACTOR "Phy_Read_Factor",ESTD_PHYSICAL_READS "ESTD_PHY_READS"from v$db_cache_advice where ADVICE_STATUS='ON';--13. 磁盘排序(<5%)select a.value "Sort(Disk)", b.value "Sort(Memory)",round(100*(a.value/decode((a.value+b.value), 0,1,(a.value+b.value))),2) "Disk_Sort_Ratio%"from v$sysstat a, v$sysstat bwhere = 'sorts (disk)' and = 'sorts (memory)';--14. Log Buffer latch Contention(<1%)SELECT name "Redo Name", gets, misses, immediate_gets, immediate_misses,Decode(gets,0,0,round(misses/gets*100,3)) "Miss_Ratio%",Decode(immediate_gets+immediate_misses,0,0,round( immediate_misses/(immediate_gets+immediate_misses)*100,3)) "Immediate Misses Ratio%"FROM v$latch WHERE name IN ('redo allocation', 'redo copy');--15. 表空间状态及其大小使用情况SELECT d.tablespace_name "Name", d.status "Status", d.contents "Type",TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99G999G990D900') "Size (MB)",TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0),0)/1024/1024, '99G999G990D900') "Used (MB)",TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990D00') "Used%" FROM sys.dba_tablespaces d,(select tablespace_name, sum(bytes) bytesfrom dba_data_files group by tablespace_name) a,(select tablespace_name, sum(bytes) bytesfrom dba_free_space group by tablespace_name) fWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = f.tablespace_name(+);--16. 数据文件状态及其大小使用情况SELECT a.tablespace_name "TableSpace Name", a.File_Name "File Name",a.status "Status", a.AutoExtensible "Auto",TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99G999G990D900') "Size (MB)",TO_CHAR(NVL(a.bytes - NVL(f.bytes, 0),0)/1024/1024, '99G999G990D900') "Used (MB)",TO_CHAR(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), '990D00') "Used %" FROM dba_data_files a,(select file_id, sum(bytes) bytesfrom dba_free_space group by File_id) fWHERE a.file_id=f.file_id(+)order by a.tablespace_name,a.File_id;--17. 不使用临时文件的临时表空间select tablespace_name,contents from dba_tablespaceswhere contents='TEMPORARY' and tablespace_name not in(select tablespace_name from dba_temp_files);--18. 无效的数据文件(offline)select f.tablespace_name,f.file_name,d.statusfrom dba_data_files f,v$datafile dwhere d.status='OFFLINE' and f.file_id=File#(+);--19. 处于恢复模式的文件select f.tablespace_name,f.file_namefrom dba_data_files f, v$recover_file rwhere f.file_id=r.file#;--20. 含有50个以上的Extent且30%以上碎片的表空间select s.tablespace_name,round(100 * f.hole_count / (f.hole_count + s.seg_count)) pct_fragmented,s.seg_count segments, f.hole_count holesfrom (Select tablespace_name, count(*) seg_countfrom dba_segments group by tablespace_name) s,(Select tablespace_name, count(*) hole_countfrom dba_free_space group by tablespace_name) fwhere s.tablespace_name = f.tablespace_nameand s.tablespace_name in (Select tablespace_namefrom dba_tablespaces where contents = 'PERMANENT')And s.tablespace_name not in ('SYSTEM')and 100 * f.hole_count / (f.hole_count + s.seg_count) > 30and s.seg_count > 50;--21. 表空间上的I/O分布SELECT ts_name, file_name,s.phyrds phy_reads,s.phyblkrd phy_blockreads,s.phywrts phy_writes,s.phyblkwrt phy_blockwritesFROM gv$tablespace t,gv$datafile f,gv$filestat sWHERE t.ts# = f.ts#andf.file# = s.file#ORDER BY s.phyrds desc, s.phywrts desc;--22. 数据文件上的I/O分布Select "Table Space", "File Name",FS.PHYRDS "Phys Rds",decode(fstot.sum_ph_rds, 0, 0,round(100 * FS.PHYRDS / fstot.sum_ph_rds, 2)) "% Phys Rds", FS.PHYWRTS "Phys Wrts",decode(fstot.sum_ph_wrts, 0, 0,round(100 * FS.PHYWRTS / fstot.sum_ph_wrts, 2)) "% Phys Wrts" FROM V$FILESTAT FS, V$DATAFILE d, V$tablespace ts,(select sum(phyrds) sum_ph_rds, sum(phywrts) sum_ph_wrts,sum(phyblkrd) sum_bl_rds, sum(phyblkwrt) sum_bl_wrtsfrom V$filestat) fstotWHERE D.FILE# = FS.FILE# AND D.TS# = TS.TS#;--23. Next Extent 相对于段当前已分配字节过大(>=2倍)或过小(<10%)的SegmentsSelect InitCap(SEGMENT_TYPE) "Type", OWNER, SEGMENT_NAME, BYTES, NEXT_EXTENT, ROUND(100 * NEXT_EXTENT / BYTES) "Percent(Next/Bytes)"FROM DBA_SEGMENTSWHERE ((ROUND(100 * NEXT_EXTENT / BYTES) < 10) OR(ROUND(100 * NEXT_EXTENT / BYTES) >= 200))AND SEGMENT_TYPE NOT IN ('ROLLBACK', 'TEMPORARY', 'CACHE', 'TYPE2 UNDO') order by 2,3,1;--24. Max Extents(>1)已经有90%被使用了的SegmentsSelect segment_type, owner, Segment_name, Tablespace_name,partition_name, round(bytes /1024/1024) "Size(MB)", extents, max_extentsFrom dba_segmentswhere segment_type not in ('ROLLBACK', 'TEMPORARY', 'CACHE', 'TYPE2 UNDO')and extents >= (1 - ( 10 / 100)) * max_extents and max_extents > 1order by bytes / max_extents desc;--25. 已经分配超过100 Extents的SegmentsSelect segment_type, owner, segment_name, extents, partition_namefrom dba_segmentswhere segment_type not in ('ROLLBACK', 'TEMPORARY', 'CACHE', 'TYPE2 UNDO') and owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS', 'ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB') and extents > 100;--26. 因表空间空间不够将导致不能扩展的ObjectsSelect a.tablespace_name, a.owner,decode(a.partition_name, null, a.segment_name,a.segment_name || '.' || a.partition_name) "Segment Name",a.extents, round(next_extent/1024) next_extent_kb,round(b.free / 1024) ts_free_kb,round(c.morebytes / 1024 / 1024) ts_growth_mbfrom dba_segments a,(Select df.tablespace_name, nvl(max(fs.bytes), 0) freefrom dba_data_files df,dba_free_space fswhere df.file_id = fs.file_id (+)group by df.tablespace_name) b,(Select tablespace_name, max(maxbytes - bytes) morebytes,sum(decode(AUTOEXTENSIBLE, 'YES', 1, 0)) autoextensiblefrom dba_data_filesgroup by tablespace_name) cwhere a.tablespace_name = b.tablespace_nameand a.tablespace_name = c.tablespace_nameand ((c.autoextensible = 0) or ((c.autoextensible > 0)and (a.next_extent > c.morebytes)))and a.next_extent > b.freeorder by 1;--27. 没有主键的非系统表Select owner, table_namefrom dba_tableswhere owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB') minusSelect owner, table_namefrom dba_constraintswhere constraint_type = 'P'and owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB'); --28. 没有索引的外键SELECT acc.owner,acc.table_name,acc.constraint_name,acc.column_nameFROM all_cons_columns acc, all_constraints acWHERE ac.constraint_name = acc.constraint_nameAND ac.constraint_type = 'R'and acc.owner not in ('SYS','SYSTEM')AND (acc.owner, acc.table_name, acc.column_name, acc.position)IN(SELECT acc.owner, acc.table_name, acc.column_name, acc.positionFROM all_cons_columns acc, all_constraints acWHERE ac.constraint_name = acc.constraint_nameAND ac.constraint_type = 'R'MINUSSELECT table_owner, table_name, column_name, column_positionFROM all_ind_columns)ORDER BY acc.owner,acc.table_name, acc.constraint_name,acc.column_name;--29. 建有6个以上索引的非系统表Select table_owner, table_name, count(*) index_countfrom dba_indexeswhere table_owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS', 'ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB') having count(*) > 6group by table_owner, table_nameorder by 3 desc;--30. 指向对象不存在的Public同义词Select s.synonym_name, s.table_owner, s.table_namefrom sys.DBA_synonyms swhere not exists (Select 'x'from sys.DBA_objects owhere o.owner = s.table_ownerand o.object_name = s.table_name)and db_link is null and s.owner = 'PUBLIC'order by 1;--31. 指向对象不存在的非Public同义词Select s.owner, s.synonym_name, s.table_owner, s.table_namefrom sys.DBA_synonyms swhere not exists (Select 'x'from sys.DBA_objects owhere o.owner = s.table_ownerand o.object_name = s.table_name)and db_link is null and s.owner <> 'PUBLIC'order by 1;--32. 没有授予给任何角色和用户的角色Select rolefrom dba_roles rwhererole not in ('CONNECT','RESOURCE','DBA','SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE','DELETE_CATALOG_ROLE','EXP_FULL_DATABASE','WM_ADMIN_ROLE','IMP_FULL_DATABASE','RECOVERY_CATALOG_OWNER','AQ_ADMINISTRATOR_ROLE','AQ_USER_ROLE','GLOBAL_AQ_USER_ROLE','OEM_MONITOR','HS_ADMIN_ROLE') andnot exists (Select 1from dba_role_privs pwhere p.granted_role = r.role);--33. 将System表空间作为临时表空间的用户(除Sys外)Select usernamefrom dba_userswhere temporary_tablespace = 'SYSTEM';--34. 将System表空间作为默认表空间的用户(除Sys外)Select usernamefrom dba_userswhere default_tablespace = 'SYSTEM'and username <> 'SYS';--35. 没有授予给任何用户的profilesSelect distinct profilefrom dba_profilesminusSelect distinct profilefrom dba_users;--36. 没有和Package相关联的Package BodySelect pb.owner, pb.object_namefrom dba_objects pbwhere pb.object_type = 'PACKAGE BODY'and not exists (Select 1from dba_objects pwhere p.object_type = 'PACKAGE'and p.owner = pb.ownerand p.object_name = pb.object_name)order by 1,2;--37. 被Disabled的约束Select owner, table_name, constraint_name, CONSTRAINT_TYPEfrom dba_constraintswhere status = 'DISABLED'ORDER BY 1,2,3;--38. 被Disabled的触发器Select owner, nvl(table_name, '<system trigger>') table_name, trigger_name from dba_triggerswhere status = 'DISABLED'ORDER BY 1,2,3;--39. Invalid ObjectsSelect OWNER, OBJECT_NAME, OBJECT_TYPEfrom dba_objectswhere status = 'INVALID'ORDER BY 1,2,3;--40. 执行失败或中断的Jobsselect job, to_char(last_date,'yyyy-mm-dd hh24:mi:ss') "Last Date", to_char(this_date,'yyyy-mm-dd hh24:mi:ss') "This Date",broken,failures, schema_user, whatfrom dba_jobs where broken='Y' or failures>0;--41. 当前未执行且下一执行日期已经过去的Jobsselect job, to_char(last_date,'yyyy-mm-dd hh24:mi:ss') "Last Date",to_char(this_date,'yyyy-mm-dd hh24:mi:ss') "This Date",broken,failures, schema_user, whatfrom dba_jobswhere job not in(select job from dba_jobs_running)and broken='N' and next_date<sysdate;--42. 含有未分析的非系统表的SchemasSelect distinct owner "Schema"from DBA_tableswhere num_rows is nulland owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB')order by 1;--43. 含有未分析的非系统分区表的SchemasSelect distinct table_owner "Schema"from DBA_tab_partitionswhere num_rows is nulland table_owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB')order by 1;--44. 含有未分析的非系统索引的SchemasSelect distinct owner "Schema" from DBA_indexeswhere leaf_blocks is nulland owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB')order by 1;--45. 含有未分析的非系统分区索引的SchemasSelect distinct index_owner "Schema"from DBA_ind_partitionswhere leaf_blocks is nulland index_owner not in ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'ORDSYS','ORDPLUGINS', 'MDSYS', 'CTXSYS', 'AURORA$ORB$UNAUTHENTICATED', 'XDB')order by 1;--46. 死锁检测SELECT dob.OBJECT_NAME Table_Name,lo.SESSION_ID,vss.SERIAL#,vss.action Action,vss.osuser OSUSER,vss.process AP_Process_ID,VPS.SPID DB_Process_IDfrom v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPSwhere lo.OBJECT_ID = dob.OBJECT_IDand lo.SESSION_ID = vss.SIDAND VSS.paddr = VPS.addrorder by 2,3,DOB.object_name;--47. top I/O WaitSELECT /*+ rule */ event,segment_type,segment_name,file_id,block_id,blocksFROM dba_extents, gv$session_waitWHERE p1text='file#'AND p2text='block#'AND p1=file_id andp2 between block_id AND block_id+blocksORDER BY segment_type,segment_name;--48. top 10 waitselect *from (select event,sum(decode(wait_Time,0,0,1)) "Prev",sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Total"from v$session_Waitgroup by eventorder by 4 desc)where rownum<=10;--49. Top 10 bad SQLSELECT *FROM (SELECT parsing_user_id executions,sorts,command_type,disk_reads,sql_textFROM v$sqlareaORDER BY disk_reads DESC)WHERE rownum < 10;--50. Top most expensive SQL (Buffer Gets by Executions)select buffer_gets,executions,buffer_gets/ decode(executions,0,1, executions) gets_per_exec,hash_value,sql_textfrom v$sqlareawhere buffer_gets > 50000order by buffer_gets desc;--51. Top most expensive SQL (Physical Reads by Executions)select disk_reads,executions,disk_reads / decode(executions,0,1, executions) reads_per_exec,hash_value,sql_textfrom v$sqlareawhere disk_reads > 10000order by disk_reads desc;--52. Top most expensive SQL (Rows Processed by Executions)select rows_processed,executions,rows_processed / decode(executions,0,1, executions) rows_per_exec,hash_value,sql_textfrom v$sqlareawhere rows_processed > 10000order by rows_processed desc;--53. Top most expensive SQL (Buffer Gets vs Rows Processed)select buffer_gets, lpad(rows_processed ||decode(users_opening + users_executing, 0, ' ','*'),20) "rows_processed",executions, loads,(decode(rows_processed,0,1,1))*buffer_gets/decode(rows_processed,0,1,rows_processed) avg_cost,sql_textfrom v$sqlareawhere decode(rows_processed,0,1,1) * buffer_gets/ decode(rows_processed,0,1,rows_processed) > 10000order by 5 desc;。