大牛dba用到的34条SQL语句
1.检查无效的数据文件
Select * from v$data_file;
2.执行失败或中断的Jobs
select 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, what
from dba_jobs where broken='Y' or failures>0;
3.无效对象检查方法
Select OWNER, OBJECT_NAME, OBJECT_TYPE
from dba_objects
where status = 'INVALID'
and owner=''
ORDER BY 1,2,3;
4.表空间空间不够将导致不能扩展的Objects
Select 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_mb
from dba_segments a,
(Select df.tablespace_name, nvl(max(fs.bytes), 0) free
from dba_data_files df,
dba_free_space fs
where 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)) autoextensible from dba_data_files
group by tablespace_name) c
where a.tablespace_name = b.tablespace_name and a.owner='替换为真实的owner'
and a.tablespace_name = c.tablespace_name
and ((c.autoextensible = 0) or ((c.autoextensible > 0)
and (a.next_extent > c.morebytes)))
and a.next_extent > b.free
order by 1;
5.被Disabled的约束
Select owner, table_name, constraint_name, CONSTRAINT_TYPE from dba_constraints
where status = 'DISABLED' and owner='替换为真实的owner'
ORDER BY 1,2,3;
6.没有索引的外键
SELECT acc.owner,acc.table_name,acc.constraint_name,acc.column_name FROM all_cons_columns acc, all_constraints ac
WHERE ac.constraint_name = acc.constraint_name
AND ac.constraint_type = 'R'
and acc.owner='替换为真实的owner'
AND (acc.owner, acc.table_name, acc.column_name, acc.position) IN
(SELECT acc.owner, acc.table_name, acc.column_name, acc.position
FROM all_cons_columns acc, all_constraints ac
WHERE ac.constraint_name = acc.constraint_name
AND ac.constraint_type = 'R'
MINUS
SELECT table_owner, table_name, column_name, column_position FROM all_ind_columns)
ORDER BY acc.owner,acc.table_name, acc.constraint_name,acc.column_name;
7.被Disabled的触发器
Select owner, nvl(table_name, '<system trigger>') table_name, trigger_name from dba_triggers
where status = 'DISABLED' and owner='替换为真实的owner'
ORDER BY 1,2,3;
8.死锁检测
select SID,TYPE,LMODE,REQUEST,BLOCK from v$lock where type = 'TX';
9.Library Cache Reload Ratio
select SUM(RELOADS)/(SUM(PINS)+SUM(RELOADS))*100 from v$librarycache;
10.Data Dictionary Miss Ratio
Select Round((((sum(GetMisses)) / sum(Gets)) * 100),4) "DC_Miss_Ratio%" From V$rowcache;
11.数据缓冲区的命中率
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 "Hit Ratio" from v$sysstat;
12.磁盘排序
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 b where a.name = 'sorts (disk)' and b.name = 'sorts (memory)';
13. Log Buffer latch Contention
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');
14. 含有50个以上的Extent且30%以上碎片的表空间
通过以下SQL语句查询:
查看所有表空间的碎片程度(值在30以下表示碎片很多)--
select tablespace_name,sum(bytes),sum(free),sum(free)*100/sum(bytes) from (select
b.file_id file_ID,
b.tablespace_name tablespace_name,
b.bytes Bytes,
(b.bytes-sum(nvl(a.bytes,0))) used,
sum(nvl(a.bytes,0)) free,
sum(nvl(a.bytes,0))/(b.bytes)*100 Percent
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id) group by tablespace_name order by sum(free)*100/sum(bytes);
15.表空间上的I/O分布
SELECT t.name ts_name, f.name file_name, s.phyrds phy_reads, s.phyblkrd phy_blockreads, s.phywrts phy_writes, s.phyblkwrt phy_blockwrites FROM gv$tablespace t, gv$datafile f, gv$filestat s WHERE t.ts# = f.ts# and f.file# = s.file# ORDER BY s.phyrds desc, s.phywrts desc;
16.数据文件上的I/O分布
Select ts.NAME "Table Space", D.NAME "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_wrts from V$filestat) fstot WHERE D.FILE# = FS.FILE# AND D.TS# = TS.TS#;
17.已经分配超过100 Extents的Segments
通过以下SQL语句查询:
Select segment_type, owner, segment_name, extents, partition_name
from dba_segments
where segment_type not in ('ROLLBACK', 'TEMPORARY', 'CACHE', 'TYPE2 UNDO')
and owner='替换为真实的owner'
and extents > 100;
18.因表空间空间不够将导致不能扩展的Objects
Select 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_mb
from dba_segments a,
(Select df.tablespace_name, nvl(max(fs.bytes), 0) free from dba_data_files df,
dba_free_space fs
where 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)) autoextensible from dba_data_files
group by tablespace_name) c
where a.tablespace_name = b.tablespace_name and a.owner='替换为真实的owner'
and a.tablespace_name = c.tablespace_name
and ((c.autoextensible = 0) or ((c.autoextensible > 0) and (a.next_extent > c.morebytes)))
and a.next_extent > b.free
order by 1;
19.查看存储过程是否失效
Select * from user_objects;
8.27.2. 优化建议
20.SQL ordered by Elapsed Time
SELECT *
FROM (SELECT parsing_user_id executions, sorts,
command_type,
disk_reads,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE rownum < 10;
21.表空间可用性检查
select tablespace_name,status from dba_tablespaces;
22.检查alert_SID.Log,并找出最近的10份trace文件
Select se.username,
se.sid,
su.extents,
su.blocks * to_number(rtrim(p.value)) as Space,
tablespace,
segtype,
sql_text
from v$sort_usage su, v$parameter p, v$session se, v$sql s
where p.name = 'db_block_size'
and su.session_addr = se.saddr
and s.hash_value = su.sqlhash
and s.address = su.sqladdr
order by se.username, se.sid
23.undo表空间管理模式
(1) 检查方法(或操作命令)
SELECT A.NAME,'实例' || A.INST_ID || ': ' || A.DISPLAY_VALUE VALUE FROM GV$PARAMETER A WHERE A.NAME = 'undo_management'
24.undo表空间大小
(1) 检查方法(或操作命令)
SELECT 'UNDO表空间大小', TO_CHAR(WM_CONCAT(A.TABLESPACE_NAME || '表空间大小为' || SUM(BYTES) / 1024 / 1024 || 'M')) VALUE FROM DBA_TABLESPACES A, DBA_DATA_FILES B WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME AND A.TABLESPACE_NAME LIKE 'UNDO%' GROUP BY A.TABLESPACE_NAME
25.临时表空间使用情况
(1) 检查方法(或操作命令)
SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 || 'M' VALUE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME
26.数据库参数db_block_size
(1) 检查方法(或操作命令)
SELECT A.NAME,'实例' || A.INST_ID || ': ' || A.DISPLAY_VALUE VALUE FROM GV$PARAMETER A WHERE A.NAME = 'db_block_size'
27.数据库文件的表空间使用情况
SELECT /*+ NO_MERGE(D) NO_MERGE(A) NO_MERGE(F) NO_MERGE(U) NO_MERGE(O) */ D.TABLESPACE_NAME "表空间名", D.BLOCK_SIZE/1024 "块大小(KB)",D.INITIAL_EXTENT/1024 "初始分配大小(KB)",
ROUND(NVL(A.BYTES /1024 /1024,0) ,2) "大小(MB)",
ROUND(DECODE(D.CONTENTS, 'UNDO', NVL(U.BYTES, 0) / 1024 / 1024,NVL(A.BYTES - NVL(F.BYTES, 0), 0) / 1024 / 1024) ,2) "占用量(MB)",
TO_CHAR(ROUND(DECODE(D.CONTENTS, 'UNDO', NVL(U.BYTES / A.BYTES * 100, 0),NVL((A.BYTES - NVL(F.BYTES, 0)) / A.BYTES * 100, 0)) ,2),'999.99')||'%' "占用率(MB)",
ROUND(DECODE(D.CONTENTS, 'UNDO', NVL(A.BYTES - NVL(U.BYTES, 0), 0) / 1024 / 1024,NVL(F.BYTES, 0) / 1024 / 1024) ,2) "空闲空间(MB)",
D.STATUS "状态",A.AUTOEXTENSIBLE "是否自动扩展",D.LOGGING "是否记录日志", A.COUNT "数据文件", D.CONTENTS "类型", D.EXTENT_MANAGEMENT "区管理", D.SEGMENT_SPACE_MANAGEMENT "段管理" FROM SYS.DBA_TABLESPACES D, (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, COUNT(FILE_ID) COUNT, CASE WHEN SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE))>=10000 THEN 'YES' ELSE 'NO' END||CASE WHEN MOD(SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE)),10000)>0 THEN CHR(13)||CHR(38)||CHR(13)||'NO' ELSE '' END AS AUTOEXTENSIBLE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) A, (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
FROM DBA_UNDO_EXTENTS
WHERE STATUS IN ('UNEXPIRED', 'EXPIRED')
GROUP BY TABLESPACE_NAME) U
WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+) AND D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
AND D.TABLESPACE_NAME = U.TABLESPACE_NAME(+) AND NOT (D.EXTENT_MANAGEMENT = 'LOCAL' AND D.CONTENTS = 'TEMPORARY')
--AND D.TABLESPACE_NAME LIKE '%COMP%'
UNION ALL
SELECT /*+ NO_MERGE(D) NO_MERGE(A) NO_MERGE(T) */ D.TABLESPACE_NAME "表空间名", D.BLOCK_SIZE/1024 "块大小(KB)",D.INITIAL_EXTENT/1024 "初始分配大小(KB)",
ROUND(NVL(A.BYTES /1024 /1024,0) ,2) "大小(MB)",
ROUND(NVL(T.BYTES, 0) / 1024 / 1024 ,2) "占用量(MB)", TO_CHAR(ROUND(NVL(T.BYTES / A.BYTES * 100, 0) ,2),'999.99')||'%' "占用率(MB)", ROUND((NVL(A.BYTES, 0) / 1024 / 1024 - NVL(T.BYTES, 0) / 1024 / 1024) ,2) "空闲空间(MB)", D.STATUS "状态",A.AUTOEXTENSIBLE "是否自动扩展",D.LOGGING "是否记录日志", A.COUNT "数据文件", D.CONTENTS "类型", D.EXTENT_MANAGEMENT "区管理", D.SEGMENT_SPACE_MANAGEMENT "段管理" FROM SYS.DBA_TABLESPACES D,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, COUNT(FILE_ID) COUNT, CASE WHEN SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE))>=10000 THEN 'YES' ELSE 'NO' END||CASE WHEN MOD(SUM(DECODE(AUTOEXTENSIBLE,'YES',10000,'NO',1,AUTOEXTENSIBLE)),10000)>0 THEN CHR(13)||CHR(38)||CHR(13)||'NO' ELSE '' END AS AUTOEXTENSIBLE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME) A, (SELECT SS.TABLESPACE_NAME, SUM((SS.USED_BLOCKS * TS.BLOCKSIZE)) BYTES
FROM GV$SORT_SEGMENT SS, SYS.TS$ TS
WHERE SS.TABLESPACE_NAME = TS.NAME
GROUP BY SS.TABLESPACE_NAME) T
WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME(+) AND D.TABLESPACE_NAME = T.TABLESPACE_NAME(+)
AND D.EXTENT_MANAGEMENT = 'LOCAL'
AND D.CONTENTS = 'TEMPORARY'
--AND D.TABLESPACE_NAME LIKE :2
ORDER BY 1 Asc,6 DESC;
28.检查数据库的JOB
select * from dba_jobs
29.用户默认表空间
select username,account_status,lock_date,expiry_date,default_tablespace,temporary_tablespace from dba_users where default_tablespace in ('USERS','SYSTEM','SYSAUX');
30.检查无效的存储过程
(1) 检查方法(或操作命令)
select * from dba_objects where object_type in ('PROCEDURE','PACKAGE','PACKAGE BODY') AND STATUS<>'VALID';
31.检查无效的索引
SELECT INDEX_NAME, TABLE_NAME, TABLESPACE_NAME, STATUS
FROM DBA_INDEXES
WHERE OWNER LIKE 'FMIS%' AND STATUS <> 'VALID';
32.检查无效的触发器
SELECT owner, trigger_name, table_name, status
FROM dba_triggers
WHERE status = 'DISABLED';
33.检查分区表
SELECT "用户","名称","类型",SUM("大小(M)") FROM (
SELECT OWNER "用户",SEGMENT_NAME "名称",SEGMENT_TYPE "类型",BYTES/1024/1024 "大小(M)" FROM DBA_SEGMENTS WHERE BYTES>=1024*1024*200 AND SEGMENT_TYPE IN ('INDEX','TABLE')
UNION ALL
SELECT A.OWNER "用户",B.TABLE_NAME "名称",A.SEGMENT_TYPE "类型",A.BYTES/1024/1024 "大小(M)" FROM DBA_SEGMENTS A,DBA_LOBS B WHERE A.SEGMENT_NAME=B.SEGMENT_NAME AND A.BYTES>=1024*1024*200 AND A.SEGMENT_TYPE='LOBSEGMENT'
) GROUP BY "用户","名称","类型"
ORDER BY 4 DESC
34.表空间大小使用情况
(1) 检查方法(或操作命令)
SELECT B.TABLESPACE_NAME 表空间名称, ROUND((B.BYTES/1024)/1024,2) 总空间大小, NVL2(A.BYTES,ROUND((B.BYTES-NVL(A.BYTES,0))/1024/1024,2),B.BYTES) 已使用大小MB, NVL2(A.BYTES,ROUND(NVL(A.BYTES,0)/1024/1024,2),0) 未使用大小MB, NVL2(A.BYTES,TO_CHAR(ROUND(((B.BYTES-NVL(A.BYTES,0))/B.BYTES)*100,2),'990.0'),'100')||'%' 已使用率
FROM (SELECT TABLESPACE_NAME,SUM(BYTES) BYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME)A,
(SELECT TABLESPACE_NAME,SUM(BYTES) BYTES FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) B
WHERE B.TABLESPACE_NAME=A.TABLESPACE_NAME(+);
相关推荐
在数据库管理领域,DBA(Database Administrator)是关键角色,...以上就是一些DBA在管理Oracle数据库时会用到的基本SQL语句,它们涵盖了数据库的基本信息、事务跟踪、性能分析等多个方面,是DBA日常工作的得力助手。
此笔记为本人三年来在两家公司积累下来的,公司里最常用的语句说明与关键词。其解释针对初学者,能快速入手简单,主要为公司信息化建设时使用或数据库开发简单应用。
在Oracle数据库管理与维护过程中,经常需要用到各种SQL语句来查询数据库的状态,以确保系统的稳定运行。本文将详细介绍几种常用的Oracle SQL语句,帮助DBA(数据库管理员)更好地了解数据库表空间、物理文件等的大小...
Oracle数据库是世界上最流行的数据库管理系统之一,用于存储和管理大量结构化数据。...以上这些SQL语句都是Oracle数据库管理员进行日常维护和性能监控时经常会用到的,掌握它们有助于更好地管理和优化数据库。
在数据库比较中,可能会用到以下类型的SQL语句: 1. `SHOW TABLES;` 来获取数据库中的所有表。 2. `DESCRIBE table_name;` 来查看表的结构,包括字段名、数据类型、键等。 3. `SELECT * FROM table_name;` 来获取表...
- **解释**: 这条SQL语句主要用来查询数据库中所有非系统拥有的表空间中的大型对象(LOB)数据,并按所有者和表名分组,计算每个表的大致大小(单位为GB),并按大小降序排列。 - **应用场景**: 在进行性能调优时,...
4. 数据库备份与恢复:RMAN(恢复管理器)是Oracle提供的一个强大工具,DBA可以通过RMAN脚本进行数据库备份、增量备份、归档日志管理等操作。了解如何编写RMAN脚本进行完整备份、增量备份和恢复策略至关重要。 5. ...
- AS:触发器执行的SQL语句。 - IFUPDATE(column) 或 IF(COLUMNS_UPDATED() {bitwise_operator} updated_bitmask):用于检查哪些列被更新,并执行相应的条件判断。 例如,文档中提到的触发器代码片段: ``` CREATE...
例如,如果我们想要创建一个名为“School”的数据库,SQL语句如下: ```sql CREATE DATABASE School; ``` 执行此语句后,系统会根据默认设置或指定的参数创建一个名为“School”的空数据库。 接着,我们可能需要对...
DBA视图是一组预定义的视图,用于提供数据库级别的信息,是DBA(数据库管理员)进行管理时经常用到的重要工具之一。这些视图包含了大量的元数据,可以帮助DBA监控、维护和优化数据库的性能。 ##### 1.1 DBA视图 - ...
在实际工作中,DBA还需要应对各种常见问题,例如性能瓶颈的识别、SQL语句的分析和调整、资源争抢的解决等。这通常需要用到各种监控和诊断工具,如Oracle的动态性能视图(V$视图)、AWR报告、ASH报告等,以及SQL ...
"ora常用sql.rar"这个压缩包显然包含了DBA(Database Administrator,数据库管理员)在日常工作中经常会用到的一些Oracle SQL命令。让我们详细探讨一下这些关键命令及其用途。 1. **查看系统SGA区状态**: SGA...
SQL Profiler主要是用来跟踪和分析SQL Server数据库中的SQL语句执行情况,帮助开发者和DBA识别性能瓶颈,优化查询效率。它记录了数据库操作的详细信息,包括执行时间、资源消耗等,从而提供对数据库性能的深入理解。...
4. SQL语句:在Delphi程序中,可能会用到SQL命令来与SQL Server进行交互,如连接数据库、执行清理日志的Transact-SQL语句等。这需要开发者具备SQL基础知识和编程能力。 5. 源码分析:压缩包中的.mpp文件可能是项目...
附件中有很多 dba 常用的操作, 都非常实用哦, 都是开发这么多年来留下来的经验,有 sql 垮服务器查询表, 查找 io 实用情况, 创建 DBLink ,查找性能查的 sql 语句 ,总有一款亲们会用到的哦
在Oracle数据库管理系统中,判断一个表是否存在通常需要用到SQL查询。Oracle提供了一种称为"系统目录视图"的方式来获取关于数据库对象(如表)的信息。在本例中,我们可以使用`USER_TABLES`或`ALL_TABLES`(如果你有...
2. **使用Transact-SQL语句**:如`fn_dblog`系统函数或`RESTORE LOG`命令,可以获取日志中的信息。 3. **编写自定义脚本**:如压缩包中的存储过程,以解析和过滤出需要的数据。 4. **分析日志内容**:根据业务需求,...
这涉及到对Oracle数据库的内部工作机制的深刻理解,包括SQL语句的执行计划分析,等待事件的监控和解释,以及如何通过调整数据库参数和结构来优化性能。 5. 数据库的安全管理:作为一名DBA,保证数据库的安全至关...