Oracle DBA常用sql有哪些

57次阅读
没有评论

共计 16374 个字符,预计需要花费 41 分钟才能阅读完成。

这篇文章主要介绍“Oracle DBA 常用 sql 有哪些”,在日常操作中,相信很多人在 Oracle DBA 常用 sql 有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle DBA 常用 sql 有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1、Oracle 查询每天执行慢的 SQL

2、Oracle 查询锁之间的依赖关系

3、Oracle 查找锁之间依赖关系的最源头 SID 

4、Oracle 查询各表空间使用情况 – 完善篇

5、Oracle 定期检查意义不大的索引  

6、Oracle 以月为单位检查索引的使用情况(邮件反馈)

7、Oracle 是分区表,但条件不带分区条件的 SQL 

8、Oracle 表结构顺序不一致 隐藏的 2 个问题 …

9、Oracle 查看 表属性:“表名(注释)/ 列名(注释)/ 字段是否 NULL”

10、Oracle 查找某一个包体’PACKAGE BODY‘中包含 PROCEDURE/FUNCTION 的名称有哪些  

小 SQL 

连接~
/* 查看 Oracle 错误号信息 */ [oracle@lottery ~]$oerr ora 600 /* 清屏~*/ SQL clear screen  /* 注册 oracle 监听 */ SQL alter system register; /* 查看 OS 连 DB 数 */ [oracle@lottery ~]$ ps -ef | grep oracle$ORACLE_SID| grep LOCAL=NO| wc -l /* 查询数据库当前进程的连接数 */ select count(*) from v$process; /* 查看数据库当前会话的连接数 */ select count(*) from v$session; /* 查看数据库用户连接会话的总数 */ select username,count (username) from gv$session where username is not null group by username; /* 查询数据库最大连接 / 进程数 */ select name,value from v$parameter where name in (processes , sessions == show parameter processes/sessions 优化~
/* 通过 SQL_ID 查找执行计划 */ select * from table(dbms_xplan.display_cursor( br8d2xs44sga8   /* 通过 SQL_ID 查找 SQL 文本 */ select * from gv$sqlarea s where s.sql_id=  br8d2xs44sga8 /* 查看数据库的等待事件 */ SELECT * FROM gv$session_wait where sid in (SELECT sid FROM gV$SESSION WHERE STATUS= ACTIVE  and username is not null and sid!=userenv( sid /* 查看表的统计信息是否正确 */ SELECT TABLE_NAME,NUM_ROWS,LAST_ANALYZED FROM USER_TABLES T WHERE TABLE_NAME= 表 –# 用于查看表最后一次统计和真实行数差距;  /* 查看表所有字段信息 */ select * from user_tab_columns where table_name=  表  ;  /* 统计整个用户 */ begin DBMS_STATS.gather_schema_stats( 用户 ,cascade= TRUE,no_invalidate= false); end;  /* 统计表 */ begin DBMS_STATS.GATHER_TABLE_STATS(用户 , 表 , cascade= TRUE); end ; /* 查看表最后一次 DML 时间 */ select max(ora_rowscn),scn_to_timestamp(max(ora_rowscn)) from  表; 基本信息~
/* 查看表空间剩余情况 */  select TABLESPACE_NAME,sum(round(bytes/1024/1024/1024,2)) from dba_free_space a group by tablespace_name; /* 查询内存分配情况 */ select component,current_size/1024/1024 MB, user_specified_size/1024 MB from v$memory_dynamic_components where current_size!=0; /* 查看用户大小 */  SELECT OWNER,SUM(BYTES/1024/1024/1024) FROM DBA_SEGMENTS GROUP BY OWNER; /* 查看数据库默认表空间 */ select * from database_properties s where s.description like  %default%tablespace /* 查看库中的临时表 */ select * from user_tables u where u.temporary= Y /* 查看 11g alert 文件位置 */ select value from v$diag_info; —  show parameter diagnostic_dest /* 当前回话的进程号 */ select spid from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat where rownum=1)); 权限~
/* 查看 resource 角色的权限 */ select * from role_sys_privs where role= RESOURCE  ; /* 查看数据库中授 dba 权限的用户 */ SELECT * FROM DBA_ROLE_PRIVS S WHERE S.GRANTED_ROLE=  DBA dblink~
/* 创建 DBLINK 语句 */ create public database link dblink 名  connect to  用户  identified by  密码 using  (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP) (HOST = IP 地址  )(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =  实例名)))   其他~
/* 查找快照 SNAP_ID 对应的时间 */ select * from sys.wrh$_active_session_history; /* 查看索引拥有者!= 表的拥有者 */ SELECT owner,index_name,index_type,table_owner,table_name,table_type FROM dba_indexes where owner!=table_owner; /* 查看库中 (只读) 属性的表 */ select table_name,status,read_only from dba_tables where read_only= YES #更改表属性  alter table  表  read only(read write);(11g 新特性) #注意:索引创建 / 修改对只读表【表空间】没有影响!因为索引修改的是数据字典,和表不相关 /* 查看分区表基本信息查询 */ SELECT TABLE_NAME,column_name,PARTITION_NAME,HIGH_VALUE LESS_THAN 值,TABLESPACE_NAME FROM USER_TAB_PARTITIONS tp join USER_PART_KEY_COLUMNS tpc on tp.table_name=tpc.name; /* 查看某用户登录的所有会话 */  SELECT  ALTER SYSTEM KILL SESSION  ||SID|| , ||SERIAL#|| , S.* FROM V$SESSION S WHERE USERNAME=  用户  AND STATUS!= KILLED – 用于解决 ORA-01940 无法删除当前连接的用户   /* 查看 command_type 值对应类型 */ SELECT * FROM v$sqlcommand; –【v$sqlarea.command_type、v$session.command 】/* 查看某 sql_id 绑定变量部分传的值 */ SELECT * FROM V$SQL_BIND_CAPTURE s where s.sql_id in (fdc8mt5xnjx2a) and CHILD_ADDRESS=2; /* 查找序列 last_number*/ SELECT * FROM USER_SEQUENCES S WHERE S.SEQUENCE_NAME= SEQ_CS_ONCE_CHAR_DET /*oracle 查看链接的 hostname 和 IP 分别是什么 */ select utl_inaddr.get_host_address(host_name), host_name from v$instance;— 用于当有 2 个服务器的数据库是同版本、同监听、同实例 /*oracle  查看 standby 库延迟时间 */      SELECT ((substr(value,2,2)*24 +substr(value,5,2))*60+substr(value,8,2 ))* 60+ substr(value,-2)  TIME FROM gv$dataguard_stats where name =  apply lag

/* 查看会话状态被置为 killed  */  select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status= KILLED
                         — 系统层释放 DB kill 状态的会话;   (linux:kill -9 spid; Windows:orakill orcl pid )
                        SELECT distinct ALTER SYSTEM KILL SESSION ||SID || , || s.SERIAL#|| ,
/*ORA-00054: 资源正忙, 但指定以    O.OWNER, O.OBJECT_NAME , S.STATUS, LOCKWAIT  FROM V$SESSION S JOIN V$LOCKED_OBJECT LO
NOWAIT 方式获取资源, 或者超时失效 */  ON LO.SESSION_ID = S.SID JOIN DBA_OBJECTS O ON O.OBJECT_ID = LO.OBJECT_ID and S.STATUS= ACTIVE  AND OBJECT_NAME  in (表名字

大 SQL

一、查数据库中正在执行的 SQL:

 SELECT SE.INST_ID, – 实例

  SQ.SQL_TEXT, /*SQL 文本 */

  SQ.SQL_FULLTEXT, /*SQL 全部文本 */

  SE.SID, /* 会话的唯一标识,通常要对某个会话进行分析前,首先就需要获得该会话的 SID。*/

           –SE.SERIAL#, /* 会话的序号 */

  SQ.OPTIMIZER_COST AS COST_, /* COST 值 */

  SE.LAST_CALL_ET  CONTINUE_TIME, /* 执行时间 单位是秒(时间可能是单个 sql,也可能是整个功能)*/

         CEIL((SYSDATE-SE.PREV_EXEC_START)*24*60*60)  相差秒数, /* 执行时间是整个功能时会用到这部分来判断单个 sql 执行时间 */

           SE.PREV_EXEC_START, /*SQL execution start of the last executed SQL statement*/

  SE.EVENT, /* 等待事件 */ 

  SE.LOCKWAIT, /* 是否等待 LOCK(SE,P)*/

  SE.MACHINE, /* 客户端的机器名。(WORKGROUP\PC-201211082055)*/

  SQ.SQL_ID, /*SQL_ID*/

  SE.USERNAME, /* 创建该会话的用户名 */

  SE.LOGON_TIME /* 登陆时间 */

 –SE.TERMINAL, /* 客户端运行的终端名。(PC-201211082055)*/

 –,SQ.HASH_VALUE, /* 一个 SQL 产生的 HASH 值 */

 –SQ.PLAN_HASH_VALUE /* 执行 SQL 的 HASH 值(解析后 HASH 值),与 SQL_ADDRESS 关联查询其他 SQL 相关视图后即可查询会话当前正在执行的 SQL 语句 */

 FROM GV$SESSION SE, /* 会话信息。每一个连接到 ORACLE 数据库的会话都能在该视图中对应一条记录,根据该视图中的信息可以查询该会话使用的用户,正在执行或者刚刚执行的 SQL 语句 */

 /*[GV$SQLAREA 多节点]*/

  GV$SQLAREA SQ /* 跟踪所有 SHARED POOL 中的共享 CURSOR 信息,包括 执行次数,逻辑读,物理读等 */

 WHERE SE.SQL_HASH_VALUE = SQ.HASH_VALUE

 AND SE.STATUS =  ACTIVE

 AND SE.SQL_ID = SQ.SQL_ID

 AND SQ.INST_ID = SE.INST_ID

 AND SE.USERNAME is not null;

     – 过滤条件  

   –AND SE.USERNAME =  FWSB  – 用户名

   –AND SQ.COMMAND_TYPE IN (2, 3, 5, 6, 189)

   –AND SE.SID != USERENV (SID)/*rac 集群环境误用 */

   –AND MACHINE !=  WORKGROUP\MHQ-PC  ;

二、  每天执行慢的 SQL:

     SELECT S.SQL_TEXT,

  S.SQL_FULLTEXT,

  S.SQL_ID,

 ROUND(ELAPSED_TIME / 1000000 / (CASE

 WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

 1

 ELSE

  EXECUTIONS

 END),

 2) 执行时间 S ,

  S.EXECUTIONS 执行次数 ,

  S.OPTIMIZER_COST COST ,

  S.SORTS,

  S.MODULE, – 连接模式(JDBC THIN CLIENT:程序)

 — S.LOCKED_TOTAL,

  S.PHYSICAL_READ_BYTES 物理读 ,

 — S.PHYSICAL_READ_REQUESTS 物理读请求 ,

  S.PHYSICAL_WRITE_REQUESTS 物理写 ,

 — S.PHYSICAL_WRITE_BYTES 物理写请求 ,

  S.ROWS_PROCESSED  返回行数 ,

  S.DISK_READS  磁盘读 ,

  S.DIRECT_WRITES  直接路径写 ,

  S.PARSING_SCHEMA_NAME,

  S.LAST_ACTIVE_TIME

 FROM GV$SQLAREA S

 WHERE ROUND (ELAPSED_TIME / 1000000 / ( CASE

 WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

 1

 ELSE

  EXECUTIONS

 END),

 2)  5 –100 0000 微秒 =1S

     — AND S.PARSING_SCHEMA_NAME = USER

 AND TO_CHAR(S.LAST_LOAD_TIME,  YYYY-MM-DD  ) =

  TO_CHAR( SYSDATE,  YYYY-MM-DD  )

 AND S.COMMAND_TYPE IN (2, 3, 5 , 6, 189) /* 值对应类型 2:INSERT、3:SELECT、6:UPDATE、7:DELETE、189:MERGE 查询 V$SQLCOMMAND*/

 AND MODULE =  JDBC Thin Client

 ORDER BY  执行时间 S  DESC;

三、查看非绑定变量的 SQL:

     SELECT V.SQL_ID,

  V.SQL_FULLTEXT,

  V.PARSING_SCHEMA_NAME,

  FM.EXECUTIONS_COUNT,

  FM.ELAPSED_TIME

 FROM (SELECT L.FORCE_MATCHING_SIGNATURE MATHCES,

 MAX(L.SQL_ID || L.CHILD_NUMBER) MAX_SQL_CHILD,

  DENSE_RANK() OVER(ORDER BY COUNT(*) DESC ) RANKING,

 ROUND(SUM (ROUND(ELAPSED_TIME / 1000000 / (CASE

 WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN

 1

 ELSE

  EXECUTIONS

 END),

 5))) ELAPSED_TIME,

 SUM(L.EXECUTIONS) EXECUTIONS_COUNT

 FROM V$SQL L

 WHERE TO_CHAR(TO_DATE(LAST_LOAD_TIME,  YYYY-MM-DD HH24:MI:SS),

  YYYY-MM-DD ) = TO_CHAR(SYSDATE – 1,  YYYY-MM-DD) — 当天 LAST_LOAD_TIME(VARCHAR 类型,LOADED INTO THE LIBRARY CACHE TIME)

 AND L.MODULE LIKE  %JDBC%  – 程序连接

 AND L.FORCE_MATCHING_SIGNATURE  0

 AND L.PARSING_SCHEMA_NAME = UPPER (USERNAME) – 用户

 AND L.COMMAND_TYPE IN (2, 3, 5 , 6, 189)  – 命令类型 2:INSERT、3:SELECT、6:UPDATE、7:DELETE、189:MERGE   查询 V$SQLCOMMAND

 GROUP BY L.FORCE_MATCHING_SIGNATURE

 HAVING COUNT (*)  5) FM,

  V$SQL V

 WHERE FM.MAX_SQL_CHILD = (V.SQL_ID || V.CHILD_NUMBER)

 AND EXECUTIONS_COUNT = 50 – 执行次数超过 50 次先筛选改写,后续慢慢在范围小

         ORDER BY FM.RANKING;

         –V$SQL_BIND_CAPTURE  – 记录包含变量得表.. 包括 ROWNUM :1 变量

四、查看 LOG 切换频率:

     select b.SEQUENCE#,

  b.FIRST_TIME,

  a.SEQUENCE#,

  a.FIRST_TIME,

 round(((a.FIRST_TIME – b.FIRST_TIME) * 24 ) * 60, 2)   时间 min

 from v$log_history a, v$log_history b

 where a.SEQUENCE# = b.SEQUENCE# + 1

 and b.THREAD# = 1

 order by a.SEQUENCE# desc;

     

      查看每小时 log 切换的次数

   SELECT  trunc(first_time) Date ,

  to_char(first_time, Dy) Day ,

  count(1) Total ,

  SUM(decode(to_char(first_time, hh34), 00 ,1,0)) h0 ,

  SUM(decode(to_char(first_time, hh34), 01 ,1,0)) h2 ,

  SUM(decode(to_char(first_time, hh34), 02 ,1,0)) h3 ,

  SUM(decode(to_char(first_time, hh34), 03 ,1,0)) h4 ,

  SUM(decode(to_char(first_time, hh34), 04 ,1,0)) h5 ,

  SUM(decode(to_char(first_time, hh34), 05 ,1,0)) h6 ,

  SUM(decode(to_char(first_time, hh34), 06 ,1,0)) h7 ,

  SUM(decode(to_char(first_time, hh34), 07 ,1,0)) h7 ,

  SUM(decode(to_char(first_time, hh34), 08 ,1,0)) h8 ,

  SUM(decode(to_char(first_time, hh34), 09 ,1,0)) h9 ,

  SUM(decode(to_char(first_time, hh34), 10 ,1,0)) h20 ,

  SUM(decode(to_char(first_time, hh34), 11 ,1,0)) h21 ,

  SUM(decode(to_char(first_time, hh34), 12 ,1,0)) h22 ,

  SUM(decode(to_char(first_time, hh34), 13 ,1,0)) h23 ,

  SUM(decode(to_char(first_time, hh34), 14 ,1,0)) h24 ,

  SUM(decode(to_char(first_time, hh34), 15 ,1,0)) h25 ,

  SUM(decode(to_char(first_time, hh34), 16 ,1,0)) h26 ,

  SUM(decode(to_char(first_time, hh34), 17 ,1,0)) h27 ,

  SUM(decode(to_char(first_time, hh34), 18 ,1,0)) h28 ,

  SUM(decode(to_char(first_time, hh34), 19 ,1,0)) h29 ,

  SUM(decode(to_char(first_time, hh34), 20 ,1,0)) h30 ,

  SUM(decode(to_char(first_time, hh34), 21 ,1,0)) h31 ,

  SUM(decode(to_char(first_time, hh34), 22 ,1,0)) h32 ,

  SUM(decode(to_char(first_time, hh34), 23 ,1,0)) h33

     FROM  V$log_history

     where  trunc(first_time) sysdate-8

     group by trunc(first_time), to_char(first_time, Dy)

     Order by 1;

五、查看 SQL 执行进度: – 显示运行时间超过 6 秒的数据库操作的状态

       SELECT A.SID,

  A.SERIAL#,

  OPNAME,

  TARGET, – 对象

  TO_CHAR(START_TIME,  YYYY-MM-DD HH24:MI:SS  ) START_TIME, – 开始时间

  (SOFAR / TOTALWORK) * 100 PROGRESS, – 进度比

  TIME_REMAINING, – 估算剩余时间

  ELAPSED_SECONDS, – 运行时间‘S’

  A.SQL_ID

 FROM V$SESSION_LONGOPS A

 WHERE SID = ;

        *** 其中 SID 和 SERIAL# 是与 V$SESSION 中的匹配的,

       *** OPNAME:指长时间执行的操作名. 如: TABLE SCAN

       *** TARGET:被操作的 OBJECT_NAME. 如:TABLEA

       *** TARGET_DESC:描述 TARGET 的内容

       *** SOFAR:这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。

       *** TOTALWORK:指目标对象一共有多少数量(预计)。如块的数量。

       *** START_TIME:进程的开始时间

       *** LAST_UPDATE_TIM:最后一次调用 SET_SESSION_LONGOPS 的时间

       *** TIME_REMAINING:估计还需要多少时间完成,单位为秒

       *** ELAPSED_SECONDS:指从开始操作时间到最后更新时间

       *** MESSAGE:对于操作的完整描述,包括进度和操作内容。

       *** USERNAME:与 V$SESSION 中的一样。

       *** SQL_ADDRESS:关联 V$SQL

       *** SQL_HASH_VALUE:关联 V$SQL

       *** QCSID:主要是并行查询一起使用。 

六、查询外键字段在主键表中没有索引的

 SELECT C.*,

  C1.r_constraint_name,

  c2.table_name,

  T.NUM_ROWS,

  create index idx_  || c.table_name ||  _  || column_name ||  on  ||

  c.table_name ||  ( || column_name || 

 FROM USER_CONS_COLUMNS C

 JOIN USER_CONSTRAINTS C1

 ON C1.CONSTRAINT_NAME = C.CONSTRAINT_NAME

 AND C1.CONSTRAINT_TYPE =  R

 AND (C.TABLE_NAME, C.COLUMN_NAME) NOT IN

  ( SELECT TABLE_NAME, COLUMN_NAME FROM USER_IND_COLUMNS I)

 JOIN USER_TABLES T

 ON T.TABLE_NAME = C.TABLE_NAME

 join USER_CONSTRAINTS c2

 on c1.r_constraint_name = c2.constraint_name;

      博客:为什么子表外键列需要建立索引? http://blog.itpub.net/17203031/viewspace-701832/ 

       ** 自己测试【外键字段不加索引时】

        ** update 外键表,主键表 delete 任何数据都不允许;但 update session1 的范围 且 set 字段不是 where 字段就可以执行,加索引后,更改 where 字段的数据会报错

七、  查看软硬解析,游标数

 SELECT /*A.SID,*/ /* A.STATISTIC#,*/

 SUM (A.VALUE),

  B.NAME,

  ( CASE

 WHEN NAME =  PARSE COUNT (TOTAL)  THEN

  表示总的解析次数

 WHEN NAME =  PARSE COUNT (HARD)  THEN

  表示硬解析的次数

 WHEN NAME =  SESSION CURSOR CACHE COUNT  THEN

  表示缓存的游标个数

 WHEN NAME =  SESSION CURSOR CACHE HITS  THEN

  表示从缓存中找到游标的次数

 WHEN NAME =  OPENED CURSORS CURRENT  THEN

  表示 SESSION 中打开的游标数

 END )

 FROM V$SESSTAT A, V$STATNAME B

 WHERE A.STATISTIC# = B.STATISTIC#

 AND B.NAME IN (  PARSE COUNT (HARD) ,

  PARSE COUNT (TOTAL)  ,

  SESSION CURSOR CACHE COUNT  ,

  SESSION CURSOR CACHE HITS  ,

  OPENED CURSORS CURRENT  )

 — AND SID=11

 GROUP BY B.NAME

 ORDER BY NAME;

      –# 用于衡量 软硬解析 / 游标共享比.

八、查看未提交的事物的会话和锁的对象

     SELECT DISTINCT S.SID,

  S.SERIAL#,

  S.MACHINE,

  L.SQL_TEXT,

  S.LAST_CALL_ET,

  ALTER SYSTEM KILL SESSION  || S.SID ||  ,  || S.SERIAL# ||

   ,

  LO.ORACLE_USERNAME,

  LO.OS_USER_NAME,

  AO.OBJECT_NAME,

  LO.LOCKED_MODE

 FROM V$SESSION  S,

  V$TRANSACTION  T,

  V$SQL  L,

  V$LOCKED_OBJECT LO,

  DBA_OBJECTS  AO

 WHERE S.TADDR = T.ADDR

 AND S.PREV_SQL_ADDR = L.ADDRESS

 AND AO.OBJECT_ID = LO.OBJECT_ID

 AND LO.SESSION_ID = S.SID;

九、通过系统中 PID 去数据库中找执行的 SQL:

   SELECT A.USERNAME, A.PROGRAM, B.SPID, C.SQL_TEXT, C.SQL_FULLTEXT

 FROM V$SESSION A, V$PROCESS B, V$SQLAREA C

 WHERE A.PADDR = B.ADDR

 AND A.SQL_HASH_VALUE = C.HASH_VALUE

 AND A.STATUS =  ACTIVE

 AND A.USERNAME NOT IN (  SYS ,  SYSTEM  ,  SYSMAN)

 AND A.SID != USERENV (SID)

 AND B.SPID = 填写 PID;

十、序列 / 索引差异 比对结果后的创建语句  (例如:将 A 用户 index 和 B 用户对比,将 A 用户多 B 用户的在 B 用户创建)

     【如下 2 个 SQL 都需要在 缺少 sequence/index A 用户执行】

     –#SEQUENCE 的创建语句:

 SELECT  CREATE SEQUENCE  || SEQUENCE_NAME ||  MINVALUE  || MIN_VALUE ||

  MAXVALUE  || MAX_VALUE ||  START WITH  || LAST_NUMBER ||

  INCREMENT BY  || INCREMENT_BY || (CASE

 WHEN CACHE_SIZE = 0 THEN

  NOCACHE

 ELSE

  CACHE  || CACHE_SIZE

 END ) || 

 FROM USER_SEQUENCES W

 WHERE – 过滤掉登录用户存在的 SEQUENCE

 NOT EXISTS ( SELECT 1

 FROM USER_SEQUENCES@DB_SINOSOFT W1

 WHERE W.SEQUENCE_NAME = W1.SEQUENCE_NAME);

     –# 索引差异 结果的创建语句

 SELECT  CREATE  || INDEX_TYPE ||  INDEX  || INDEX_NAME ||  ON  ||

  TABLE_NAME ||  ( || LISTAGG(CNAME,  ,  ) WITHIN GROUP (ORDER BY COLUMN_POSITION) || 

 FROM (SELECT IC.INDEX_NAME,

  IC.TABLE_NAME,

  IC.COLUMN_NAME CNAME,

  IC.COLUMN_POSITION,

 COUNT(IC.INDEX_NAME) OVER ( PARTITION BY IC.INDEX_NAME, IC.TABLE_NAME) CON,

  I.INDEX_TYPE

 FROM USER_IND_COLUMNS@DB_SINOSOFT IC

 JOIN USER_INDEXES@DB_SINOSOFT I

 ON I.INDEX_NAME = IC.INDEX_NAME

 WHERE

 – 过滤掉登录用户存在的 INDEX

 NOT EXISTS

  ( SELECT 1

 FROM USER_IND_COLUMNS IC1

 WHERE IC1.INDEX_OWNER = UPPER (  TO_USERNAME)

 AND IC.INDEX_NAME = IC1.INDEX_NAME)

 – 过滤掉主键,避免索引创建,在创建主键报错 对象已存在

 AND IC.INDEX_NAME NOT IN

  ( SELECT C.CONSTRAINT_NAME FROM USER_CONSTRAINTS@DB_SINOSOFT C)

 ORDER BY IC.INDEX_NAME, IC.COLUMN_POSITION)

 GROUP BY INDEX_TYPE, CON, INDEX_NAME, TABLE_NAME;

十一、查看热点块的对象

     SELECT A.HLADDR, A.FILE#, A.DBABLK, A.TCH, A.OBJ, B.OBJECT_NAME

 FROM X$BH A, DBA_OBJECTS B

 WHERE (A.OBJ = B.OBJECT_ID OR A.OBJ = B.DATA_OBJECT_ID)

 AND A.HLADDR =  0000000054435000  –V$SESSION_WAIT.P1RAW

 UNION

 SELECT HLADDR, FILE#, DBABLK, TCH, OBJ, NULL

 FROM X$BH

 WHERE OBJ IN ( SELECT OBJ

 FROM X$BH

 WHERE HLADDR =  0000000054435000

 MINUS

 SELECT OBJECT_ID

 FROM DBA_OBJECTS

 MINUS

 SELECT DATA_OBJECT_ID FROM DBA_OBJECTS)

 AND HLADDR =  0000000054435000

       ORDER BY 4;

十一、查看某用户表大小 / 总数情况

     SELECT T.TABLE_NAME,

  TC.COMMENTS,

  T.NUM_ROWS,

 ROUND (SUM (S.BYTES / 1024 / 1024 / 1024 )) GB

 FROM USER_TABLES T

 JOIN USER_SEGMENTS S

 ON S.SEGMENT_NAME = T.TABLE_NAME

 JOIN USER_TAB_COMMENTS TC

 ON TC.TABLE_NAME = T.TABLE_NAME

 GROUP BY T.TABLE_NAME, TC.COMMENTS, T.NUM_ROWS

 ORDER BY NUM_ROWS DESC NULLS LAST ;

十二、  重新编译失效存储 / 包语句:

         SELECT ALTER || (CASE

                WHEN OBJECT_TYPE = PACKAGE BODY THEN

                  PACKAGE  ELSE OBJECT_TYPE

                END) || || OWNER || . || OBJECT_NAME || COMPILE || (CASE

                  WHEN OBJECT_TYPE = PACKAGE BODY THEN

                    BODY;  ELSE   END), – 除类型是 PACKAGE BODY 返回是 PACKAGE,其他正常显示类型,是 PACKAGE BODY 显示 COMPILE BODY 否则显示 COMPILE

                OWNER,

                OBJECT_NAME,

                OBJECT_TYPE,

                STATUS,

                O.CREATED,

                LAST_DDL_TIME

           FROM DBA_OBJECTS O

          WHERE STATUS = INVALID  — 存储状态 无效

十三、 Oracle 查看各表空间使用情况和最大最小块:

     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 空闲空间(G) ,

  F.MAX_BYTES 最大块(G)

 FROM (SELECT TABLESPACE_NAME,

 ROUND (SUM (BYTES) / 1024 / 1024 / 1024 , 2) TOTAL_BYTES,

 ROUND (MAX (BYTES) / 1024 / 1024 / 1024 , 2) MAX_BYTES

 FROM SYS.DBA_FREE_SPACE

 GROUP BY TABLESPACE_NAME) F,

  ( SELECT DD.TABLESPACE_NAME,

 ROUND (SUM (DD.BYTES) / 1024 / 1024 / 1024 , 2) TOT_GROOTTE_MB

 FROM SYS.DBA_DATA_FILES DD

 GROUP BY DD.TABLESPACE_NAME) D

 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME;

十四、 Oracle 查看 TEMP 表空间使用情况  :

     SELECT F.BYTES_FREE + F.BYTES_USED TOTAL_BYTES,

  F.BYTES_FREE + F.BYTES_USED – NVL (P.BYTES_USED, 0 ) FREE_BYTES,

  D.FILE_NAME,

 NVL (P.BYTES_USED, 0 ) USED_BYTES

 FROM SYS.V_$TEMP_SPACE_HEADER F,

  DBA_TEMP_FILES  D,

  SYS.V_$TEMP_EXTENT_POOL  P

 WHERE F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME

 AND F.FILE_ID(+) = D.FILE_ID

 AND P.FILE_ID(+) = D.FILE_ID;

 — 等同于

 SELECT TABLESPACE_NAME,

  TF.TABLESPACE_SIZE,

  TF.FREE_SPACE,

  TF.TABLESPACE_SIZE – TF.FREE_SPACE

 FROM DBA_TEMP_FREE_SPACE TF;

十五、 Oracle 查看回滚进度情况用的几个 SQL:

      SELECT DISTINCT KTUXESIZ FROM X$KTUXE WHERE KTUXESTA =  ACTIVE  ;

 SELECT USED_UBLK FROM V$TRANSACTION;

 SELECT KTUXEUSN, KTUXESLT

 FROM X$KTUXE

 WHERE /*KTUXECFL = DEAD AND*/

  KTUXESTA =  ACTIVE  ;

 SELECT * FROM V_$FAST_START_TRANSACTIONS;

 SELECT USED_UBLK, T.USED_UREC FROM V$TRANSACTION T;

     – 查询视图 V$FAST_START_TRANSACTIONS 中字段 UNDOBLOCKSDONE,UNDOBLOCKSTOTAL 估算 SMON 恢复进度

到此,关于“Oracle DBA 常用 sql 有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计16374字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)