`
langzhiwang888
  • 浏览: 182029 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

DBA常用脚本1-数据库构架体系

 
阅读更多

1、表空间的监控是一个重要的任务,我们必须时刻关心表空间的设置,是否满足现在应用的需求,以下的语句可以查询到表空间的详细信息
  
  Code: [Copy to clipboard]
  SELECT TABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,
  MAX_EXTENTS,PCT_INCREASE,MIN_EXTLEN,STATUS,
  CONTENTS,LOGGING,
  EXTENT_MANAGEMENT, -- Columns not available in v8.0.x
  ALLOCATION_TYPE,  -- Remove these columns if running
  PLUGGED_IN,     -- against a v8.0.x database
  SEGMENT_SPACE_MANAGEMENT --use only in v9.2.x or later
  FROM   DBA_TABLESPACES
  ORDER BY TABLESPACE_NAME;
  
  2、对于某些数据文件没有设置为自动扩展的表空间来说,如果表空间满了,就将意味着数据库可能会因为没有空间而停止下来。监控表空间,最主要的就是监控剩余空间的大小或者是使用率。以下是监控表空间使用率与剩余空间大小的语句
  

  Code: [Copy to clipboard]
  SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
  ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
  FROM
  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
  FROM DBA_DATA_FILES
  GROUP BY TABLESPACE_NAME) D,
  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
  FROM DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
  UNION ALL --if have tempfile
  SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
  USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
  NVL(FREE_SPACE,0) "FREE_SPACE(M)"
  FROM
  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
  FROM DBA_TEMP_FILES
  GROUP BY TABLESPACE_NAME) D,
  (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
  ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
  FROM V$TEMP_SPACE_HEADER
  GROUP BY TABLESPACE_NAME) F
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
  
  3、除了监控表空间的剩余空间,有时候我们也有必要了解一下该表空间是否具有自动扩展空间的能力,虽然我们建议在生产系统中预先分配空间。以下语句将完成这一功能
  

  Code: [Copy to clipboard]
  SELECT T.TABLESPACE_NAME,D.FILE_NAME,
  D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
  FROM DBA_TABLESPACES T,
  DBA_DATA_FILES D
  WHERE T. TABLESPACE_NAME =D. TABLESPACE_NAME
  ORDER BY TABLESPACE_NAME,FILE_NAME
  
  4、我相信使用字典管理的表空间的也不少吧,因为字典管理的表空间中,每个表的下一个区间的大小是不可以预料的,所以我们必须监控那些表在字典管理的表空间中的下一个区间的分配将会引起性能问题或由于是非扩展的表空间而导致系统停止。以下语句检查那些表的扩展将引起表空间的扩展。
  

  Code: [Copy to clipboard]
  SELECT A.OWNER,A.TABLE_NAME,A.NEXT_EXTENT,A.TABLESPACE_NAME
  FROM ALL_TABLES A,
  (SELECT TABLESPACE_NAME, MAX(BYTES) BIG_CHUNK
  FROM DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F
  WHERE F.TABLESPACE_NAME = A.TABLESPACE_NAME
  AND A.NEXT_EXTENT > F.BIG_CHUNK
  
  5、段的占用空间与区间数也是很需要注意的一个问题,如果一个段的占用空间太大,或者跨越太多的区间(在字典管理的表空间中,将有严重的性能影响),如果段没有可以再分配的区间,将导致数据库错误。所以,段的大小与区间监控也是一个很重要的工作
  

  Code: [Copy to clipboard]
  SELECT S.OWNER,S.SEGMENT_NAME,S.SEGMENT_TYPE,S.PARTITION_NAME,
  ROUND(BYTES/(1024*1024),2) "USED_SPACE(M)",
  EXTENTS USED_EXTENTS,S.MAX_EXTENTS,S.BLOCKS ALLOCATED_BLOCKS,
  S.BLOCKS USED_BOLCKS,S.PCT_INCREASE,S.NEXT_EXTENT/1024 "NEXT_EXTENT(K)"
  FROM DBA_SEGMENTS S
  WHERE S.OWNER NOT IN (''SYS'',''SYSTEM'')
  ORDER BY Used_Extents DESC
  
  6、对象的空间分配与空间利用情况,除了从各个方面的分析,如分析表,查询rowid等方法外,其实oracle提供了一个查询空间的包dbms_space,如果我们稍封装一下,将是非常好用的一个东西。
  

  Code: [Copy to clipboard]
  
  CREATE OR REPLACE PROCEDURE show_space
  (p_segname in varchar2,
  p_type in varchar2 default ''TABLE'' ,
  p_owner in varchar2 default user)
  AS
  v_segname varchar2(100);
  v_type varchar2(10);
  l_free_blks number;
  l_total_blocks number;
  l_total_bytes number;
  l_unused_blocks number;
  l_unused_bytes number;
  l_LastUsedExtFileId number;
  l_LastUsedExtBlockId number;
  l_LAST_USED_BLOCK number;
  PROCEDURE p( p_label in varchar2, p_num in number )
  IS
  BEGIN
  dbms_output.put_line( rpad(p_label,40,''.'')|| p_num );
  END;
  BEGIN
  v_segname := upper(p_segname);
  v_type := p_type;
  if (p_type = ''i'' or p_type = ''I'') then
  v_type := ''INDEX'';
  end if;
  if (p_type = ''t'' or p_type = ''T'') then
  v_type := ''TABLE'';
  end if;
  if (p_type = ''c'' or p_type = ''C'') then
  v_type := ''CLUSTER'';
  end if;
  
  --以下部分不能用于ASSM
  
  dbms_space.free_blocks
  ( segment_owner => p_owner,
  segment_name => v_segname,
  segment_type => v_type,
  freelist_group_id => 0,
  free_blks => l_free_blks );
  
  --以上部分不能用于ASSM
  
  dbms_space.unused_space
  ( segment_owner => p_owner,
  segment_name => v_segname,
  segment_type => v_type,
  total_blocks => l_total_blocks,
  total_bytes => l_total_bytes,
  unused_blocks => l_unused_blocks,
  unused_bytes => l_unused_bytes,
  LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
  LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
  LAST_USED_BLOCK => l_LAST_USED_BLOCK );
  
  --显示结果
  
  p( ''Free Blocks'', l_free_blks );
  p( ''Total Blocks'', l_total_blocks );
  p( ''Total Bytes'', l_total_bytes );
  p( ''Unused Blocks'', l_unused_blocks );
  p( ''Unused Bytes'', l_unused_bytes );
  p( ''Last Used Ext FileId'', l_LastUsedExtFileId );
  p( ''Last Used Ext BlockId'', l_LastUsedExtBlockId );
  p( ''Last Used Block'', l_LAST_USED_BLOCK );
  END;
  
  执行结果将如下所示
  
  Code: [Copy to clipboard]
  
  SQL> set serveroutput on;
  SQL> exec show_space(''test'');
  Free Blocks.............................1
  Total Blocks............................8
  Total Bytes.............................65536
  Unused Blocks...........................6
  Unused Bytes............................49152
  Last Used Ext FileId....................1
  Last Used Ext BlockId...................48521
  Last Used Block.........................2
  PL/SQL procedure successfully completed
  
  7、数据库的索引如果有比较频繁的Delete操作,将可能导致索引产生很多碎片,所以,在有的时候,需要对所有的索引重新REBUILD,以便合并索引块,减少碎片,提高查询速度。
  

  Code: [Copy to clipboard]
  
  SQL> set heading off
  SQL> set feedback off
  SQL> spool d:\index.sql
  SQL> SELECT ''alter index '' || index_name || '' rebuild ''
  ||''tablespace INDEXES storage(initial 256K next 256K pctincrease 0);''
  FROM all_indexes
  WHERE ( tablespace_name != ''INDEXES''
  OR next_extent != ( 256 * 1024 )
  )
  AND owner = USER
  SQL>spool off
  
  这个时候,我们打开spool出来的文件,就可以直接运行了。
  
  8、表的主键是必要的,没有主键的表可以说是不符合设计规范的,所以我们需要监控表是否有主键
  

  Code: [Copy to clipboard]
  SELECT table_name
  FROM all_tables
  WHERE owner = USER
  MINUS
  SELECT table_name
  FROM all_constraints
  WHERE owner = USER
  AND constraint_type = ''P''

分享到:
评论

相关推荐

    Oracle_DBA手记1-2-数据库诊断案例与性能优化实践.zip

    Oracle_DBA手记1-2-数据库诊断案例与性能优化实践.zip

    Oracle_DBA手记1-数据库诊断案例与性能优化实践.part2

    一共两卷,免费提供,请分别下载后再解压...Oracle_DBA手记1-数据库诊断案例与性能优化实践 另有免费下载资源: Oracle_DBA手记3-数据库性能优化与内部原理解析.pdf Oracle_DBA手记2-数据库诊断案例与内部恢复实践.pdf

    Oracle_DBA手记1-数据库诊断案例与性能优化实践.part1

    Oracle_DBA手记1-数据库诊断案例与性能优化实践 Oracle_DBA手记1-数据库诊断案例与性能优化实践 Oracle_DBA手记1-数据库诊断案例与性能优化实践 Oracle_DBA手记1-数据库诊断案例与性能优化实践 另有免费下载资源: ...

    mysql dba 常用脚本

    MySQL DBA(数据库管理员)在日常工作中经常需要执行各种脚本来进行数据库的管理和维护工作。这些脚本涵盖了从数据备份、恢复、性能优化到错误排查等多个方面。以下是一些MySQL DBA常用的知识点,结合“mysql_mgr_...

    Oracle.DBA手记1--数据库诊断案例与性能优化实践

    本书由多位工作在数据库维护一线的工程师合著而成,包含了精心挑选的数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误的分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行...

    Oracle_DBA手记1-数据库诊断案例与性能优化实践.pdf

    Oracle_DBA手记1-数据库诊断案例与性能优化实践.pdf

    Oracle_DBA手记1-1-数据库诊断案例与性能优化实践.z01

    Oracle_DBA手记1-1-数据库诊断案例与性能优化实践.z01 有两个附件,1-1,1-2,一同解压

    DBA常用的数据库脚本精华汇总

    以下是一些DBA常用的数据库脚本,主要用于监控Oracle数据库的表空间。 1. **监控表空间信息**: - 查询表空间详细信息:通过执行`SELECT`语句,可以获取表空间的名称、初始扩展量、下次扩展量、最小和最大扩展次数...

    Oracle-DBA-数据库日常维护手册-常用SQL-脚本.pdf

    ### Oracle DBA 数据库日常维护手册关键知识点解析 #### 一、Oracle 警告日志文件监控 **概述:** Oracle 数据库在运行过程中会产生警告日志文件(`alert_SID.log`),该文件记录了数据库的重要事件和异常情况。通过...

    Oracle-DBA-数据库日常维护手册-常用SQL-脚本.docx

    Oracle数据库的日常维护是DBA工作中的重要环节,确保数据库高效稳定运行。本文档主要涵盖了三个方面:Oracle警告日志文件监控、数据库表空间使用情况监控以及查看数据库的连接情况。 一、Oracle警告日志文件监控 ...

    Oracle DBA 常用脚本

    Oracle DBA 常用脚本(外国网站上下载)

    DBA组件---ADO数据库编程利器

    DBA组件---ADO数据库编程利器 DBA即Database Assistant,其实就是数据库编程助手。它是完全采用接口、OO理念用VB6.0编译的DLL COM组件。 它的好处在于使数据库的编程和维护都仅仅在表现层,便于数据库字段的反复...

    Oracle9i DBA手册(一)-数据库体系结构

    ### Oracle9i DBA手册(一):数据库体系结构概览 #### 1. Oracle9i的创新与改进 在Oracle9i版本中,Oracle公司不仅增强了原有的性能,还引入了一系列创新特性,旨在简化数据库管理员(DBA)的任务,提升数据库管理的...

    DBA的思想天空----感悟Oracle数据库本质

    DBA(数据库管理员)是管理数据库系统的关键角色,而Oracle数据库是企业级数据库市场中广泛使用的一个重要数据库系统。Oracle数据库管理不仅仅涉及技术操作和细节处理,更是一种对数据库本质的理解和思想的体现。...

    DBA常用脚本

    ### DBA常用脚本知识点详解 #### 一、Oracle用户权限检查 对于Oracle数据库管理员(DBA)来说,定期审查数据库中的用户权限是一项至关重要的任务。这有助于确保系统的安全性,并且能够有效地管理不同用户对数据库...

    ORACLE数据库DBA管理手册1-3

    Oracle数据库DBA(Database Administrator)管理手册是数据库管理员学习和参考的重要资料,1-3章通常涵盖了Oracle数据库的基础知识和核心管理概念。以下是对这些章节的详细解释: 1. **Oracle数据库简介** - ...

    DBA日常维护常用脚本

    在数据库管理领域,DBA...老外提供的"DBA常用脚本"可能包含上述部分或全部内容,这些脚本可以帮助DBA高效地完成日常任务,提高工作效率,同时减少人为错误。在使用时,务必根据自己的数据库环境和需求进行适当的调整。

    ORACLE_DBA常用脚本.ppt

    这份"ORACLE_DBA常用脚本.ppt"资料详细介绍了DBA在管理Oracle数据库时的一些常用脚本和技巧。 首先,完整性约束是数据库设计的基础,确保数据的一致性和准确性。外键约束是实现引用完整性的关键,它限制了插入或...

    ORACLE DBA常用脚本

    ### ORACLE DBA常用脚本解析与应用 在Oracle数据库管理与优化中,熟练掌握一系列脚本对于提高数据库性能、解决复杂问题至关重要。以下是对给定脚本的深入解析及其实用场景说明。 #### 1. 监控系统资源与性能 - **...

    Oracle_DBA手记2-数据库诊断案例与内部恢复实践.pdf

    Oracle_DBA手记2-数据库诊断案例与内部恢复实践.pdf

Global site tag (gtag.js) - Google Analytics