Oracle之一键获取数据库总体情况 静态
来源:互联网 发布:linux查看硬件命令 编辑:程序博客网 时间:2024/06/09 18:27
SET markup html ON spool ON pre off entmap off
set term on
set heading on
set verify off
set feedback off
set linesize 2000
set pagesize 30000
set long 999999999
set longchunksize 999999
column index_name format a30
column table_name format a30
column num_rows format 999999999
column index_type format a24
column num_rows format 999999999
column status format a8
column clustering_factor format 999999999
column degree format a10
column blevel format 9
column distinct_keys format 9999999999
column leaf_blocks format 9999999
column last_analyzed format a10
column column_name format a25
column column_position format 9
column temporary format a2
column partitioned format a5
column partitioning_type format a7
column partition_count format 999
column program format a30
column spid format a6
column pid format 99999
column sid format 99999
column serial# format 99999
column username format a12
column osuser format a12
column logon_time format date
column event format a32
column JOB_NAME format a30
column PROGRAM_NAME format a32
column STATE format a10
column window_name format a30
column repeat_interval format a60
column machine format a30
column program format a30
column osuser format a15
column username format a15
column event format a50
column seconds format a10
column sqltext format a100
set term on
prompt "input schema:"
define S_SCHEMA=&SCHEMA
set term off
column dbid new_value spool_dbid
column inst_num new_value spool_inst_num
select dbid from v$database where rownum = 1;
select instance_number as inst_num from v$instance where rownum = 1;
column spoolfile_name new_value spoolfile
select 'spool_'||(select name from v$database where rownum=1) ||'_'|| (select instance_name from v$instance where rownum=1)||'_'||to_char(sysdate,'yy-mm-dd_hh24.mi')||'_static' as spoolfile_name from dual;
spool &&spoolfile..html
prompt <p>版本
select * from v$version;
prompt <p> 供参考的Oracle所有参数
show parameter
prompt <p>最近一次启动时间,版本,以及是否RAC
select version,startup_time,instance_name,archiver,parallel from v$instance ;
prompt <p>表有带并行度
select t.owner, t.table_name, degree
from dba_tables t
where t.degree > '1';
prompt <p>索引有带并行度
select t.owner, t.table_name, index_name, degree, status
from dba_indexes t
where t.degree > '1';
prompt <p>失效-普通索引
select t.index_name,
t.table_name,
blevel,
t.num_rows,
t.leaf_blocks,
t.distinct_keys
from dba_indexes t
where status = 'UNUSABLE';
prompt <p>失效-分区索引
select t2.owner,
t1.blevel,
t1.leaf_blocks,
t1.INDEX_NAME,
t2.table_name,
t1.PARTITION_NAME,
t1.STATUS
from dba_ind_partitions t1, dba_indexes t2
where t1.index_name = t2.index_name
and t1.STATUS = 'UNUSABLE';
prompt <p>失效对象
select t.owner,
t.object_type,
t.object_name,
'alter ' ||decode(object_type, 'PACKAGE BODY', 'PACKAGE', 'TYPE BODY','TYPE',object_type) || ' ' ||owner || '.' || object_name || ' ' ||decode(object_type, 'PACKAGE BODY', 'compile body', 'compile') || ';' hands_on
from dba_objects t
where STATUS='INVALID'
and owner ='&S_SCHEMA'
order by 1, 2;
prompt <p>位图索引和函数索引
select t.owner,
t.table_name,
t.index_name,
t.index_type,
t.status,
t.blevel,
t.leaf_blocks
from dba_indexes t
where owner = '&S_SCHEMA'
and index_type in ('BITMAP', 'FUNCTION-BASED NORMAL');
prompt <p>组合索引组合列超过4个的
select table_owner,table_name, index_name, count(*)
from dba_ind_columns
where table_owner ='&S_SCHEMA'
group by table_owner,table_name, index_name
having count(*) >= 4
order by count(*) desc
prompt <p>索引个数字超过5个的
select owner,table_name, count(*) cnt
from dba_indexes
where owner ='&S_SCHEMA'
group by owner,table_name
having count(*) >= 5
order by cnt desc
prompt <p>当前用户下,哪些大表从未建过索引。
--针对普通表(大于2GB的表未建任何索引)
select segment_name, bytes/1024/1024/1024 "GB", blocks, tablespace_name
from dba_segments
where segment_type = 'TABLE'
and owner = '&S_SCHEMA'
and segment_name not in (select table_name from dba_indexes where owner='&S_SCHEMA')
and bytes / 1024 / 1024 / 1024 >= 2
order by GB desc;
--针对分区表(大于2GB的分区表未建任何索引)
--无论是建了局部索引还是全局索引,在dba_indexes都可以查到,只是status不一样。
select segment_name, sum(bytes)/1024/1024/1024 "GB", sum(blocks)
from dba_segments
where segment_type = 'TABLE PARTITION'
and owner = '&S_SCHEMA'
and segment_name not in (select table_name from dba_indexes where owner='&S_SCHEMA')
group by segment_name
having sum(bytes)/1024/1024/1024>=2
order by GB desc;
prompt <p>当前用户下,哪些表的组合索引与单列索引存在交叉的情况。
select table_name, trunc(count(distinct(column_name)) / count(*),2) cross_idx_rate
from dba_ind_columns
where index_owner = '&S_SCHEMA'
group by table_name
having count(distinct(column_name)) / count(*) < 1
order by cross_idx_rate desc;
prompt <p>当前用户下,哪些表或索引建在系统表空间上。
select table_name,owner from dba_tables where tablespace_name in('SYSTEM','SYSAUX') and owner='&S_SCHEMA';
prompt <p>当前用户下,哪些索引建在系统表空间上。
select index_name,owner from dba_indexes where tablespace_name in('SYSTEM','SYSAUX') and owner='&S_SCHEMA';
prompt <p>检查统计信息是否被收集
--10g
select t.job_name,t.program_name,t.state,t.enabled
from dba_scheduler_jobs t
where job_name = 'GATHER_STATS_JOB';
--11g
select client_name,status from dba_autotask_client;
select window_next_time,autotask_status from DBA_AUTOTASK_WINDOW_CLIENTS;
prompt <p>检查哪些未被收集或者很久没收集
select owner, count(*)
from dba_tab_statistics t
where (t.last_analyzed is null or t.last_analyzed < sysdate - 100)
and table_name not like 'BIN$%'
group by owner
order by owner;
prompt <p>被收集统计信息的临时表
select owner, table_name, t.last_analyzed, t.num_rows, t.blocks
from dba_tables t
where t.temporary = 'Y'
and last_analyzed is not null;
prompt <p>日志切换频率分析(注意观察各行里first_time之间的时间差异会不会很短,很短就是切换过频繁)
select *
from (select thread#, sequence#, to_char(first_time, 'MM/DD/RR HH24:MI:SS')
from v$log_history
order by first_time desc)
where rownum <= 50;
prompt <p>最近10天中每天日志切换的量(即可分析10天的波度,又可分析24小时内,可很容易看出异常情况)
SELECT SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) Day,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22 ,
SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23,
COUNT(*) TOTAL
FROM v$log_history a
where first_time>=to_char(sysdate-11)
GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5)
ORDER BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DESC;
prompt <p>日志组大小
select group#,bytes,status from v$log;
prompt <p>查看ARCHIVELOG日志使用率(进而观察DB_RECOVERY_FILE_DEST_SIZ参数,后续可以考虑crosscheck archivelog all; delete expired archivelog all;)
select substr(name, 1, 30) name,
space_limit as quota,
space_used as used,
space_reclaimable as reclaimable,
number_of_files as files
from v$recovery_file_dest;
select * from V$FLASH_RECOVERY_AREA_USAGE;
prompt <p>检查序列小于20的情况(一般情况下,并将其增至1000左右,序列默认的20太小了)
select sequence_owner,
count(*) CNT,
sum(case when t.cache_size <= 20 then 1 else 0 end ) CNT_LESS_20,
sum(case when t.cache_size > 20 then 1 else 0 end ) CNT_MORE_20
from dba_sequences t
where sequence_owner ='&S_SCHEMA'
group by sequence_owner;
select t.sequence_owner,
t.sequence_name,
t.cache_size,
'alter sequence ' || t.sequence_owner || '.' || t.sequence_name ||
' cache 1000;'
from dba_sequences t
where sequence_owner ='&S_SCHEMA'
AND CACHE_SIZE <= 20;
prompt <p>表空间使用情况
SELECT A.TABLESPACE_NAME "表空间名",
A.TOTAL_SPACE "总空间(G)",
NVL(B.FREE_SPACE, 0) "剩余空间(GB)",
A.TOTAL_SPACE - NVL(B.FREE_SPACE, 0) "使用空间(GB)",
CASE WHEN A.TOTAL_SPACE=0 THEN 0 ELSE trunc(NVL(B.FREE_SPACE, 0) / A.TOTAL_SPACE * 100, 2) END "剩余百分比%" --避免分母为0
FROM (SELECT TABLESPACE_NAME, trunc(SUM(BYTES) / 1024 / 1024/1024 ,2) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) A,
(SELECT TABLESPACE_NAME, trunc(SUM(BYTES / 1024 / 1024/1024 ),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
ORDER BY 5;
prompt <p>整个用户有多大(一般就特值BOSSWG)
select sum(bytes)/1024 /1024 /1024 "GB"
from dba_segments
where owner = '&S_SCHEMA';
prompt <p>对象大小TOP10
select *
from (select owner,
segment_name,
segment_type,
round(sum(bytes) / 1024 / 1024) object_size
from DBA_segments
group by owner, segment_name, segment_type
order by object_size desc)
where rownum <= 10;
prompt <p>回收站情况(大小及数量)
select *
from (select SUM(BYTES) / 1024 / 1024 / 1024 as recyb_size
from DBA_SEGMENTS
WHERE owner = '&S_SCHEMA'
AND SEGMENT_NAME LIKE 'BIN$%') a,
(select count(*) as recyb_cnt from dba_recyclebin);
prompt <p>表大小超过10GB未建分区的
select owner,
segment_name,
segment_type,
sum(bytes) / 1024 / 1024 / 1024 object_size
from dba_segments
where owner ='&S_SCHEMA'
and segment_type = 'TABLE'
group by owner, segment_name, segment_type
having sum(bytes) / 1024 / 1024 / 1024 >= 10
order by object_size desc;
prompt <p>分区最多的前10个对象
select *
from (select table_owner, table_name, count(*) cnt
from dba_tab_partitions
WHERE table_owner ='&S_SCHEMA'
group by table_owner, table_name
order by cnt desc)
where rownum <= 10;
prompt <p>分区个数超过100个的表
select table_owner, table_name, count(*) cnt
from dba_tab_partitions
WHERE table_owner ='&S_SCHEMA'
having count(*) >= 100
group by table_owner, table_name
order by cnt desc;
prompt <p>触发器
select OWNER, TRIGGER_NAME, TABLE_NAME, STATUS
from dba_triggers
where owner ='&S_SCHEMA';
prompt <p>将外键未建索引的情况列出
select table_name,
constraint_name,
cname1 || nvl2(cname2, ',' || cname2, null) ||
nvl2(cname3, ',' || cname3, null) ||
nvl2(cname4, ',' || cname4, null) ||
nvl2(cname5, ',' || cname5, null) ||
nvl2(cname6, ',' || cname6, null) ||
nvl2(cname7, ',' || cname7, null) ||
nvl2(cname8, ',' || cname8, null) columns
from (select b.table_name,
b.constraint_name,
max(decode(position, 1, column_name, null)) cname1,
max(decode(position, 2, column_name, null)) cname2,
max(decode(position, 3, column_name, null)) cname3,
max(decode(position, 4, column_name, null)) cname4,
max(decode(position, 5, column_name, null)) cname5,
max(decode(position, 6, column_name, null)) cname6,
max(decode(position, 7, column_name, null)) cname7,
max(decode(position, 8, column_name, null)) cname8,
count(*) col_cnt
from (select substr(table_name, 1, 30) table_name,
substr(constraint_name, 1, 30) constraint_name,
substr(column_name, 1, 30) column_name,
position
from dba_cons_columns where owner='&S_SCHEMA') a,
dba_constraints b
where a.constraint_name = b.constraint_name
and b.constraint_type = 'R'
and b.owner='&S_SCHEMA'
group by b.table_name, b.constraint_name) cons
where col_cnt > ALL
(select count(*)
from dba_ind_columns i
where i.table_name = cons.table_name
and i.column_name in (cname1, cname2, cname3, cname4, cname5,
cname6, cname7, cname8)
and i.column_position <= cons.col_cnt
and i.index_owner='&S_SCHEMA'
group by i.index_name);
阅读全文
0 0
- Oracle之一键获取数据库总体情况 静态
- Oracle之一键获取数据库总体情况 awr等报表
- Oracle之一键获取总体情况 动态
- Oracle之数据库SQL总体运行情况
- JVM之一-总体框架
- 一键获取数据库整体的运行情况--脚本
- Oracle数据库操作总结之一
- 静态化总体基本思路
- qbo机器人软件总体情况
- 静态页面获取数据库数据
- 俄罗斯方块剖析之一总体计划
- 获取mysql/oracle数据库外键
- EMC 故障情况下ORACLE 救火行动(之一)
- 获取数据库中的数据变化情况
- Oracle体系结构总体概述
- 数据库的总体结构
- 数据库系统总体视角
- 数据库总体结构
- python编程中的if __name__ == 'main': 的作用和原理
- 微软重金收购Deis,容器技术的火热现状与未来展望 | 硬创公开课预告
- 水土不服销售难达预期,传乐视美国将裁员三分之一
- 2017“互联网+”数字经济峰会将于4月20日在杭州举行
- 阿里体育12.35亿A轮融资 平台思维布局IP
- Oracle之一键获取数据库总体情况 静态
- 那些年错过的蓝桥杯(三)
- keras实现attention based sequence to sequence model(首稿)
- Python 批量修改文件内关键字
- jvm内存区
- 6.1Servlet跳转之转向(Forward)
- 基本TCP套接字编程
- 体验不佳?Win10使用份额下滑,Win7反而在上升
- 现在才入局智能投顾,有道智投不怕死?