`
nlslzf
  • 浏览: 1026237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

管理好ORACLE数据表的几个建议

阅读更多
http://oracle.chinaitlab.com/induction/753099.html 
ORACLE数据库中,表是最基本的内容。可以说,表设计的好坏直接跟数据库的性能相关。所以,在设计表的时候,除了要遵循其固有的数据库准则之外,还需要看个人的数据库管理经验。下面我就把这些经验分享一下,或许对大家有所帮助。
  一、 表该存放在哪里?
  我们都知道,在ORACLE数据库中,使利用空间这个概念来管理表对象的。在数据库创建的时候,数据库中已经建立了一些表空间。那么当我们新建立表的时候,这个新表的位置该放在什么地方呢?这就好像吃饭时的坐的位置一样,是有讲究的。一般来说,我们在新建表的时候,至少要遵循如下建议:
  一是在数据库创建的时候,在数据库中已经有了一个SYSTEM的表空间。一般情况下,这个表空间中,只包含数据字典及Oracle系统对象。如果我们将我们的表建立在这个空间上的话,那是要降低数据库的性能的。所以,一般我们是不建议用户把表格建立在这个空间上。但是,若我们不只一个人维护数据库,如有八个人共同设计数据库系统时,如何才能保证其他用户不在SYSTEM表空间中建立数据库表格呢?最好的办法就是通过权限控制。如我们可以给每个数据库设计人员指定一个默认的表空间,让他们只能在这个表空间中建立表格。如此的话,就能防止他们在SYSTEM表空间中建立自己的数据表格,从而对数据库的运行性能产生不良影响。所以,若给每个用户设置默认表空间的话,那么用户在建立具体的表时,不用具体指定表空间了。
  二是我们在为某个应用设计数据库的时候,最好先对表的空间进行规划。一般情况下,不要把数据表随意的分散到不同的表空间中去。如我们在为一个ERP系统设计数据库的时候,若把采购部门相关的表跟销售部门相关的表放到两个不同的表空间中去,这是不明智的做法。这么处理的话,会降低某些数据库管理和维护操作的效率,如数据的备份与恢复操作;而且,也无法集中管理属于某个特定应用的数据。所以,我们一般建议,在规划数据库表空间的时候,把相同应用的表放在同一个表空间中去。如果要区分不同部门或者不同模块的表的话,我们可以在表的命名上动脑子。如我们在设计ERP系统的数据库中,可以根据其应用模块的不同,在前面加上前缀来进行识别。如跟系统基本配置相关的表,我们可以用AD为前缀;而跟销售部门相关的表,我们可以加上SA前缀等等。如此的话,这些表具体是属于哪个模块的,就一清二楚了。完全没有必要为此设置不同的表空间。这是ORACLE数据库初学者经常会犯的错误。主要是对ORACLE表空间的定义不是很熟悉所导致的。

二、 对预计存储数量比较大的表时,要给与额外的重视。
  有些表非常的大。我们这边说的大,不一定是说结构复杂,而是指在这个表格中,预期会存储比较多的数据。为了提高对这个表格的处理效率,我们在事先要做出一定的安排。否则的话,后续对这些大表进行查询、插入等操作的话,速度会很慢。所以,我们就有必要在数据库设计的时候,先预先估计一下表的数据存储量,把一些数据量大的表格,做一些额外的设置。如在ERP软件的数据库设置中,一般来说,产品数据与物料清单数据这两个表的数据量会比较大;而从长远看的话,销售订单、采购订单、生产订单、记账凭证等这种单据类相关的表格其数据量也会比较大。一年两年可能感觉不出来,但是,到十年后,这个纪录数量就会很庞大。而像ERP系统这种大型的信息化管理项目,用个几十年时很正常的事情。而且,为了记录的完整性,也不建议用户把以前的数据删除。所以,为这种应用进行数据库设计的时候,要充分考虑这些大表的性能问题。
  具体的来说,设计大表的时候,可以考虑遵循如下的建议。
  一是不要为大表设置存储的限制。在ORACLE数据库中,可以为每张表格设置存储配额限制。如此的话,表最大容量就不能超过这个限制。对于一些数据容量比较小的表格,这么设置时合理的,可以提高空间的利用率。但是,若数据量比较大的话,就不建议事先设置表的存储空间了。如ERP系统的销售订单表,其刚开始可能记录量很小,第一年预计只有1G的记录容量,但是,估计在十年后,这个记录容量就会达到10G了。在这种情况下,我们怎么来给其设置存储空间呢?一开就设置10G空间,这也是不合理的。而且,设置存储空间,就意味着有可能产生存储碎片,从而影响到数据查询的效率。所以,在数据库表的设计过程中,若某些应用的表可能会有比较大的数据容量时,建议不要对其存储空间做出任何的限制。
  二是要为这大表分配足够的临时空间。如我们使用ERP系统时,要查询产品资料信息。我们都知道,产品信息的话,有些企业这个纪录数非常的庞大。而且在查询时,我们还会经常的进行排序操作。如有时候会按照产品编码对查询出来的数据进行排序。当记录少的话,还好;但是,当记录多的话,这个排序动作,要求具有比较大的临时存储空间。所以,当某个表预计会有很大的记录数量的时候,我们就要给其分配足够多的临时空间。临时空间的存储参数设置取决于临时表空间的默认储存参数设置。我们可以更改这些参数,以达到我们对要求。若没有给大表分配足够多的临时空间的话,则排序的动作将会很慢,而且很可能不成功。
  三是要考虑将表与表的索引分离存放。大表所对应的索引通常也比较大。一般来说,索引的数量是随着表记录的数量增加而增加,两者是接近于一个正比例的关系。所以,通常表的记录容量大的时候,索引数量也会很庞大。针对这种情况,我们考虑突破我们上面讲的表空间的规则定义。而考虑把表和他的索引分别存储于不同的表空间中,甚至在条件允许的情况下,分别存储于不同的硬盘中。这么做的好处是什么呢?最大的好处是让索引比较容易的获得所需要的连续的存储空间,从而提高输入输入的效率。通俗的说,就是可以提高数据的查询效率。如不这么处理的话,查询大容量的记录的话,数据库可能需要花费30秒;而如此设计的话,就可能把时间缩短为10秒。这是一个很明显的性能改善。

 三、 如何给表命名?
  上面我在讲如何为表分配存储空间的时候,已经讲到过这方面的问题。下面,我就将对这个问题进行详细的描述,以帮助数据库管理员掌握一套好的数据库命名规则。
  首先,毋庸置疑的,在为标命名的时候,要遵循ORACLE数据库的基本命名规则,如不能以数字开头为表命名,如不能利用数据库的关键字为表命名,如表的名字不能重复等等。这些是最基本的要求,就不用我多费口舌了。除了要遵循这些基本的命名规则外,在实际工作中,为了数据库后续的维护等方面出发,我们还是要遵循一些额外的规则。这些规则跟ORACLE定义的规则不同。我们所讲的规则没有约束力,可以说,只是业界的一些共识而已。你若不怎么处理,ORACLE数据库也不会说你错误,只是后续维护的时候,会比较麻烦而已。
  一是在对数据库命名的时候,最好能跟体现表的分类关系。如最常见的,我们在设计数据库的时候,表都是按系统的具体模块来区分的,如根据前端系统要求的不同,数据库的表大致可以分为系统基本配置表、销售模块表、采购模块表、报表模块表等等。我们可以根据这些模块的不同,分别给与不同的前缀来区分。这么做的好处是很明显的。如一看到表最大名字,就可以知道这个表是属于哪个应用的、哪个模块的,这无疑可以提高数据库设计与前台软件开发的效率。同时,数据库中默认的排序规则是按名字来排序的,所以,为表格设置类别前缀的话,可以把同一类的表格排在一起,方便我们察看。
  二是对表格命名的时候,要考虑可读性,而不能随便阿狗阿猫的乱取名字。最常见的是,那些刚学数据库的人,在表命名的时候,如要建几张测试表,就会随便命名如TEST1,TEST2之类的。虽然这只是测试,但是,也不符合我们的命名过则。要做测试的话,那就以TEST开头,然后后面加上具体要测试的内容。如此的话,我们才可以通过表的名字知道该表具体的用途。而不用打开表去看里面具体的结构或者注释才能知道我们需要的信息。所以,在设计表的名字的时候,还要关注一下其的可读性。
分享到:
评论

相关推荐

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员)

    作为一个Oracle Applications DBA(Oracle应用程序数据库管理员),要想更好的对Oracle Application database做支持,需要仔细记住以下几项。 1.网络上没有什么比较容易简单的文档让你去熟悉Apps DBA,所以我建议...

    Oracle数据库管理员技术指南

    3.3.2 创建几个大的联机重做日志文件 3.3.3 导入过程中关闭归档方式 3.3.4 分开导出转储文件、数据表空间、 回退段和联机重做日志文件 3.3.5 最小化检查点 3.3.6 单独创建索引 3.3.7 设置大的初始化参数 SORT_...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    Oracle安全讲义

    本文档对Oracle数据库的安全方面进行介绍。 第一章:oracle数据库的一些...第三章:不被“hacker”入侵的几个建议(组和安全性、Oracle服务器实用例程的安全性、数据库文件的安全性、网络安全性、建立安全策略等)。

    保持Oracle数据优良性能的若干诀窍

    Oracle数据库以其高可靠性、安全性、可兼容性,得到越来越多的企业的青睐。如何使Oracle数据库保持优良性能,这是许多数据库管理员关心的问题,本文针对此问题提出几个建议。

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    南京的死锁问题今日点评优化小技巧 Oracle的死锁优化小技巧 几个常用的与锁相关的脚本5月20日 凌晨的邮件通知短信今日点评优化小技巧 /10028事件优化小技巧 PL/SQL 优化工具profiler5月22日 ODS系统和RAC优化小技巧 ...

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    oracle 11g overview

    获得关于基于表(而不仅仅是数据)的实际使用的最佳表设计的建议。 PL/SQL:高效的编码 在不同的事件处触发几次的触发器以及迫使相同类型的触发器排队的能力是一些新增亮点。 RMAN 探究 Data Recovery Advisor,...

    Oracle9i的init.ora参数中文说明

    说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 TIMESTAMP 数据类型的默认值, 该数据类型既存储YEAR, MONTH 和 DAY 这几个日期值, 也存储 HOUR, MINUTE 和 SECOND 这几个时间值。 语法: TIMESTAMP '1997-01-31 ...

    Oracle事例

    27、查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,\'Y\')>0; 28、约束条件 create table employee (empno number(10) primary key, name varchar2(40) ...

    会议管理系统数据库设计文档.doc

    数据库设计 1 抽象数据对象 1 系统主要业务分析 根据物流系统的业务流程描述,我们大致可以从中抽象出几个数据集合,如: 普通用户、会议申请、会议室管理、设备管理、会议管理 按照业务及系统功能简单总结数据对象...

    Navicat Premium12

    强大的本地备份或还原解决方案和用于 Oracle 数据泵或 SQL Server 备份实用工具的直观界面能引导你完成整个备份进程,并减少发生错误的机会。交互式设计界面和高效的工作流程让你在几分钟内完成编制专业的高质量报表...

    如何保持Oracle数据库的优良性能

    如何使Oracle数据库保持优良性能,这是许多数据库管理员关心的问题,根据笔者经验建议不妨针对以下几个方面加以考虑。   一、分区  根据实际经验,在一个大数据库中,数据空间的绝大多数是被少量的表所占有。为了...

    浅谈大数据及大数据分析.doc

    这里列举其中几个:Netflix 为您的下一次影碟租赁提供建议,通过动态监视桥体内嵌的传感器来检测实时应力和长 期腐蚀,零售商通过分析数字视频流来优化产品布局和显示布局及各个商店的促销空间 ,以上是大数据如何...

    PdmReader 数据字典阅读器

    点鼠标不过几秒可能没什么,但您如果不记得您要查找的表在哪个pdm数据字典文件中,那么可要花费您大量的时间。而PdmReader则可以最迅速快捷的找到您想要查找到的表结构信息,简单到输入关键字查找即可得到结果。当您...

    Toad 使用快速入门

    a) 打开存储过程编写器的几个途径: 单击总菜单栏上的第三个按钮:   点击Database - > Procedure Editor , 可以通过Schema browser来调用 b) 一些特点和优点: 1. 强大的自定义设置:从保留字的显示方式...

    【最新版】navicat150_mysql_en.dmg【亲测可用】最好的MySQL / MariaDB管理和开发工具

    这个全面的前端为数据库管理,开发和维护提供了直观而强大的图形界面。 数据传输,数据同步和结构同步可帮助您更轻松快捷地迁移数据,从而减少开销。提供详细的分步指南,以跨数据库传输数据。使用数据和结构同步来...

Global site tag (gtag.js) - Google Analytics