`
isiqi
  • 浏览: 16552113 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle数据库的空间管理技巧

阅读更多
  在Oracle数据库中,DBA可以通过观测一定的表或视图来了解当前空间的使用状况,进而作出可能的调整决定。

一.表空间的自由空间

  通过对表空间的自由空间的观察,可用来判断分配给某个表空间的空间是太多还是不够。请看下列的语句



SQL > select a.file_id "FileNo",a.tablespace_name
"Tablespace_name",
2 a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used",
3 sum(nvl(b.bytes,0)) "Free",
4 sum(nvl(b.bytes,0))/a.bytes*100 "%free"
5 from dba_data_files a, dba_free_space b
6 where a.file_id=b.file_id(+)
7 group by a.tablespace_name ,
8 a.file_id,a.bytes order by a.tablespace_name;

File Tablespace
No _nameBytes Used Free %free
------ --------- -------- --------- --------- ---------
11IDX_JF .146E+09 849305600 1.297E+09 60.431806
9 JFSJTS 2.146E+09 1.803E+09 343793664 16.016961
10JFSJTS 2.146E+09 1.359E+09 787431424 36.685546
2 RBS523239424 359800832 163438592 31.235909
12RBS1.610E+09 1.606E+09 3104768 .19289495
8 RBSJF 3.220E+09 2.716E+09 504356864 15.662396
7 SFGLTS 2.146E+09 1.228E+09 918159360 42.776014
6 SFSJTS 2.146E+09 1.526E+09 620093440 28.889457
1 SYSTEM 523239424 59924480 463314944 88.547407
3 TEMP 523239424294912 522944512 99.943637
4 TOOLS 15728640 12582912 314572820
5 USERS 7340032 81927331840 99.888393

12 rows selected.


  可以看出,在FileNo为12的表空间RBS中,只有0.19%的分配空间未被使用,这个比例太小了,而在SYSTEM及TEMP等表空间中,高达80%以上的空间未被利用,对于生产型数据库,这个表空间的设置有些偏高。

  关于自由空间的管理,有下面的一些建议:

  利用Export及Import命令卸出和装入表空间可以释放大量的空间,从而缓解增加另外的数据文件的要求。

  如果包含具有高插入(insert)和更新(update)活动的表的表空间中自由空间的比重下降到了15%以下,要为此表空间增加更多的空间。

  对于一个基本是静态表数据的表空间,如果有多于20%的自由空间,则可以考虑减少分配给它的文件空间量。

  减少SYSTEM表空间的空间量比较困难,因为那要重建数据库。

二 表及索引的扩展

  A.为了防止表或索引被过分扩展,及时实现对数据库的调整,用户应当经常对有关对象进行观察。

  我们可以认为,扩展区域大于5个的表或索引为过分扩展(overextended)。请看下面的语句:



SQL > select substr(segment_name,1,15)
Segment_name,segment_type,
2 substr(tablespace_name,1,10)
Tablepace_name,extents,Max_extents
3from dba_segments
4where extents >5 and owner='JFCL'
5order by segment_name;

SEGMENT_NAMESEGMENT TABLEPACE_
EXTENTS MAX_EXTENTS
_TYPE
-------------- --------- ----------
CHHDFYB TABLE JFSJTS 11121
CHHDFYB_DHHMINDEX JFSJTS9121
DJHZFYB_BF TABLE JFSJTS 17500
DJHZFYB_DJHMINDEX IDX_JF6500
DJHZFYB_JZHMINDEX IDX_JF7500
GSMFYB TABLE JFSJTS 11121
JFDHTABLE JFSJTS 14500
JFDH_DHHM INDEX IDX_JF 61500
JFDH_JZHM INDEX IDX_JF 64500
XYKFYB TABLE JFSJTS7121
YHDATABLE JFSJTS6500
YHDA_BAKTABLE JFSJTS6500
YHHZFYB_12 TABLE JFSJTS 10500

13 rows selected.


  通过观察, DBA可以及时发现问题并进行相应的处理。
我们可以利用export卸出表,然后删除表,再利用import命令将表装入,这样,可以将不连续的区域合并成一个连续的空间。

  B.如果用户希望对表的空间设置进行优化,例如,需要改变表EMP的initial参数,可以采用下面的方法:

  1.在将EMP表卸出并删除后执行imp命令时使用indexfile参数:

  imp userid=scott/tiger file=emp.dmp indexfile=emp.sql Oracle把表和索引的创建信息写到指定的文件,而不是把数据写回。

  2.打开emp.sql文件:



REM CREATE TABLE "SCOTT"."EMP" ("EMPNO"
NUMBER(4, 0), "ENAME"
REM VARCHAR2(10), "JOB" VARCHAR2(9),
"MGR" NUMBER(4, 0), "HIREDATE" DATE,
REM "SAL" NUMBER(7, 2), "COMM" NUMBER
(7, 2), "DEPTNO" NUMBER(2, 0))
REM PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255 LOGGING STORAGE(INITIAL
REM 10240 NEXT 10240 MINEXTENTS 1 MAXEXTENTS
121 PCTINCREASE 50 FREELISTS
REM 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USER_DATA" ;
REM ... 14 rows


  对它进行编辑,去除"REM"等信息,找到Initial参数,根据需要改变它。

  3.在SQL*plus中执行emp.sql。

  4.装入数据:



mp userid=scott/tiger ignore=y file=emp.dmp


  需要注意的是,ignore参数必须设为Y.

  C.可以用下面的语句来观察表或索引距离达到最大扩展的状况,“UNUSE”为距离达到最大扩展的值,在User_extents表中,extent_id是从0开始记述数的。



SQL >select a.table_name "TABLE_NAME",max
(a.max_extents) "MAXEXTENTS" ,
2 max(b.extent_id)+1 "IN USE", MAX
(a.max_extents)-(max(b.extent_id)+1) "UNUSE"
3 from user_tables a, user_extents b
4where a.table_name=b.segment_name
5 group by a.table_name ORDER BY 4;

TABLE_NAME MAXEXTENTS IN USEUNUSE
---------- ----------- -------- ---------
YZPHB 98 1 97
SHJYB 121 1 120
SHFYB 121 1 120
RCHDB 121 1 120
SJTXDZB121 1 120
SJTXDAB121 1 120
CHYHB 121 1 120
JFDH 50014 486
8 rows selected.


  如果“UNUSE"小到一定的程度,我们就应该加以关注,进行适当的调整处理。

三 关于连续空间

  可以用下面的语句来查看数据库中的自由空间:



SQL > select * from dba_free_space
where tablespace_name='SFSJTS'
2 order by block_id;

TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS
_NAME
----------- --------- --------------
SFSJTS 6 133455 1064960 130
SFSJTS 6 133719 1032192 126
SFSJTS 6 133845 1064960 130
SFSJTS 6 135275 1064960 130
SFSJTS 6 135721 606208 74
SFSJTS 6 139877 901120 110
SFSJTS 6 143497 737280 90
SFSJTS 6 220248 737280 90
SFSJTS 6 246228 491520 60
SFSJTS 6 261804 1064960 130

10 rows selected.

  我们可以通过命令的结果来估计相邻自由空间的真正数量。对每一行,用起始快的id(BLOCK_ID)加上自由块(BLOCKS)的数量,如果其和与下一行的块id(BLOCK_ID)相等,则此两行是连续的。如上例第二行和第三行,133719+126=133845,而1338456+130!=135275,所以从block_id为133719开始,有126+130=256个block的连续空间。

  在Oracle数据库的后台,系统监视器(SMON)周期性地合并自由空间相邻的块,以得到更大的连续块。而DBA可以用SQL命令来完成这个工作:



alter tablespace tablespace_name coalesce;

  Oracle空间管理对数据库的工作性能有重要影响,其管理方法值得我们认真摸索研究。


分享到:
评论

相关推荐

    oracle数据库用户管理

    Oracle数据库用户管理是数据库系统中至关重要的一环,它关乎到数据的安全性和权限控制。Oracle数据库提供了丰富的用户管理和安全策略,确保只有授权的用户才能访问特定的数据资源。 首先,Oracle数据库的安全性可以...

    ORACLE数据库空间管理实践.pdf

    Oracle数据库空间管理是数据库运维中的核心任务之一,尤其对于大型Oracle数据库系统,由于其大量数据存储和交互的特点,有效的空间管理对于系统的正常运行和性能优化至关重要。本文将深入探讨Oracle数据库空间管理的...

    oracle数据库管理的三个技巧

    本文将详细探讨Oracle数据库在空间管理的三个实用技巧。 首先,我们关注的是表空间的自由空间管理。通过观察表空间的自由空间,DBA可以评估每个表空间的使用情况,判断是否需要进行扩展或优化。如上所述,可以使用...

    oracle 数据库管理员指南

    总的来说,Oracle数据库管理员指南涵盖了Oracle数据库管理的各个方面,从基础操作到高级技巧,旨在帮助读者全面掌握数据库管理技能,提升工作效率,确保数据库系统的稳定、高效和安全。通过深入学习和实践,你将成为...

    oracle数据库管理的一组经典文档

    2. **数据库管理**:`Oracle数据库管理员.doc`可能包含关于数据库的日常管理和监控,如性能调整、空间管理、用户权限分配、表空间和数据文件的管理等内容。它也可能涉及数据库服务的启动、停止以及故障排查技巧。 3...

    Oracle数据库管理维护培训

    ### Oracle数据库管理维护培训知识点详述 ...通过以上详尽的内容,我们可以看到Oracle数据库管理维护培训涵盖了从基础知识到高级技巧的广泛领域,旨在帮助管理员掌握Oracle数据库的全面管理能力。

    单位oracle数据库管理员培训资料

    这份“单位oracle数据库管理员培训资料”旨在帮助初学者和在职DBA深入理解Oracle 9i和10G版本的核心概念与操作技巧,以提升数据库管理能力。 首先,让我们详细探讨“2.oracle体系结构”。Oracle数据库的体系结构...

    Oracle 数据库管理员指南

    《Oracle 数据库管理员指南》是一本专为Oracle数据库管理员(DBA)设计的手册,旨在帮助读者深入理解和熟练掌握Oracle数据库的管理和维护。手册涵盖了Oracle数据库的基础知识、安装配置、性能优化、备份恢复、安全...

    Oracle数据库管理员技术指南

    Oracle数据库管理员技术指南是针对那些想要深入理解和管理Oracle数据库的专业人士的重要参考资料。Oracle数据库作为全球广泛使用的数据库管理系统,其复杂性和功能强大性使得熟练掌握其管理技术至关重要。本指南将...

    Oracle 数据库实用操作技巧

    本文将基于"Oracle 数据库实用操作技巧"这一主题,详细阐述一些关键的Oracle数据库管理和优化技术,帮助资深DBA更好地理解和掌握Oracle数据库的日常运维。 1. **SQL优化**:在Oracle中,SQL查询性能直接影响数据库...

    Oracle数据库学习课件

    4. **Oracle数据库管理**:这部分内容可能涵盖数据库实例管理、表空间和数据文件的管理、用户和权限管理、备份与恢复策略、性能监控与调优。还会涉及数据库的安全性、故障排查和问题诊断。 5. **Oracle高级特性**:...

    Oracle数据库使用指南

    本指南将针对初学者,详细介绍Oracle数据库的基础知识、安装与配置,以及一些常用的操作和管理技巧。 **1. Oracle数据库简介** 1.1.1 数据库术语 在讨论Oracle数据库之前,我们需要了解一些基本的数据库术语,如...

    ORACLE数据库的使用技巧及维护要点.pdf

    Oracle数据库是一种广泛应用于各行业的关系型数据库管理系统,以其开放性、简便性、并行性和安全性等特点赢得了广大用户的认可。在实际应用中,掌握Oracle数据库的使用技巧和维护要点至关重要,以确保系统的稳定运行...

    unix和linux下的oracle数据库管理

    无论是对初学者还是经验丰富的DBA,都能从中获取实用的知识和技巧,提升在Unix和Linux环境中管理Oracle数据库的能力。通过深入阅读和实践,读者将能够熟练应对各种挑战,为企业的数据安全和稳定运行提供坚实保障。

    ORACLe数据库讲义.ppt

    可以参考俞盘祥的《Oracle数据库系统基础》、沈佩娟和汤荷美的《数据库管理及应用开发》以及孙宏昌和金毳的《Oracle数据库管理员教程》等书籍,这些资料将帮助初学者深入理解Oracle数据库的体系结构和管理技巧。...

    Oracle数据库管理员教程

    Oracle数据库管理员教程旨在...通过这些资源,学习者可以全面掌握Oracle数据库的管理技巧,成为一名合格的数据库管理员。在实际工作中,理解并熟练运用这些知识将有助于优化数据库性能,保障数据安全,提高业务效率。

    Oracle数据库详细讲解

    标题与描述均指向了“Oracle数据库详细讲解”,这意味着文章将深度探讨Oracle数据库的相关知识,包括其功能、操作、管理及应用技巧。Oracle数据库是全球领先的数据库管理系统之一,由Oracle公司开发,广泛应用于企业...

    oracle数据库操作手册

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本操作手册将深入探讨Oracle数据库的核心概念、安装配置、管理维护以及SQL查询等多个方面,帮助...

    Oracle数据库管理员快速入门

    ### Oracle数据库管理员快速入门知识点梳理 #### 一、绪论 - **关于本指南** - 本指南旨在为Oracle数据库管理员提供一个快速入门的路径,帮助他们掌握基础的管理和维护技能。 - **本指南未涉及内容** - 本指南不...

Global site tag (gtag.js) - Google Analytics