- 浏览: 1171866 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (411)
- ASP (6)
- ASP.NET (2)
- CSS (4)
- HTML (11)
- Javascript (34)
- Java (100)
- PHP (1)
- XML (2)
- Flash/Flex/AS (1)
- 编程理论 (6)
- 操作系统 (23)
- 架构与搭建 (13)
- 软件应用 (39)
- 移动开发及应用 (4)
- UI设计 (2)
- 数据库 (23)
- 围棋 (1)
- 闲语茶楼 (6)
- 金融 (1)
- 其他 (3)
- Linux/Unix (38)
- 项目管理 (3)
- cmd (2)
- ssh (3)
- SVN (1)
- 移动开发 (1)
- HTML5 (1)
- jquery (1)
- redis (1)
- nginx (2)
- webservice (1)
- vmware (1)
- ssl (1)
- eclipse (1)
- sqlite (1)
- spring (2)
最新评论
-
cnhome:
Java 8 下:// 编码String asB64 = Ba ...
不要使用sun.misc.BASE64Encoder -
请叫我翠西狗:
那如果我要用this.getServletContext() ...
JSP/Servlet使用代理或路由器映射时获取服务器地址为内网地址 -
nomblouder:
按照别的博客,别名一直是p4merge,导致一直报错comma ...
win与linux下git配置p4merge为合并比较工具的方法 -
linuxzhang:
请问我按你的方法修改了sts-3.7.3.RELEASE中的o ...
Eclipse中setter/getter方法自动添加属性注释 -
yzh__:
求解答。。。
Struts2定义默认拦截器时需要注意
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开头,然后后面加上具体要测试的内容。如此的话,我们才可以通过表的名字知道该表具体的用途。而不用打开表去看里面具体的结构或者注释才能知道我们需要的信息。所以,在设计表的名字的时候,还要关注一下其的可读性。
发表评论
-
Linux下 和 Windows 下 Oracle Instant Client 的安装.
2014-09-12 11:35 8592Oracle数据库软件十分庞大,数据库引擎有好几个G。通常情 ... -
[MYSQL]时间毫秒数转换
2013-10-15 13:22 8472java中常用bigint字段保 ... -
mysql5.5的源码安装[有用]
2013-09-17 14:57 985--验证md5校验和 [root@tm ... -
【转】CentOS6.3源码安装mysql5.5(多方法)
2013-09-12 15:15 41331.下载MySQL我下载的版本:mysql-5.5.22. ... -
ubuntu上mysql的安装以及基本用法
2012-07-26 10:54 19121.使用apt-get查找当前可用的mysql版本.ap ... -
使用MySQL命令行新建用户并授予权限的方法
2012-04-13 17:13 1634MySQL命令行能否实现新建用户呢?答案无疑是肯定的。而且在使 ... -
Linux下MySql开放访问权限
2012-04-13 17:10 3134在Linux下安装完数据库后,局域网内无法访问。 设置 ... -
oracle数据库中插入特殊符号'&'
2011-06-23 16:32 2492在plsql里边执行:update userinfo s ... -
hibernate中clob处理
2011-04-18 14:30 1995用hibernate封装oracle的clob类型操作起来 ... -
理解ORACLE数据库字符集
2011-04-15 10:32 1329一.引言 ORACLE数据库字符集,即Oracle全 ... -
Sql Server 2005 数据库备份还原后出现“受限制用户”问题的解决
2011-04-13 10:52 2112Sql Server 2005 在备份还原后经常出现数据库“受 ... -
介绍一下Oracle的操作符优化
2009-08-13 10:59 1733IN : IN写出来的SQL比较容易写及清晰易懂但是性能 ... -
Oracle10常见服务总结
2009-08-05 14:04 2045(1)OracleService数据库服务,这个服务会自动地启 ... -
java.sql.SQLException: 无法从套接字读取更多的数据
2009-06-15 17:00 21003本来订单的生成没有问题,但不知什么原因,报了一个这样的异常,致 ... -
MSSQL中删除所有外键约束的方法
2009-04-16 20:55 3664在网上找到了一句得到删除数据库中所有外键约束的语句的sql语句 ... -
sql随机抽取记录
2009-04-03 17:23 2427我们经常想在一个数据表中随机地选取出数据来,比如随机生成考试试 ... -
sql server数据库定时自动备份
2007-03-15 16:40 1790前提:操作计算机上要安装有SQL Server客户端应用程序。 ... -
让SQL自动备份并压缩
2007-06-04 12:19 1810关于SQL自动备份的方法在本Blog中有些过相关的文章 可以 ... -
SQL优化-索引
2008-06-18 15:40 1099微软的SQL SERVER提供了两 ... -
SQL Server数据库完美优化详解
2008-08-26 12:57 1817SQL Server数据库如下 ...
相关推荐
“Oracle 数据导入工具”很可能就是这样一款界面化的工具,它提供了一个友好的图形界面,帮助用户指定数据源、目标表、控制文件设置等,然后执行SQL*Loader的导入操作。这样的工具通常会包含以下功能: 1. **数据源...
Oracle 数据库是一个强大的关系型数据库管理系统,其用户管理和表空间机制是数据库管理和操作的基础。本文主要探讨了 Oracle 用户(user)和表空间(tablespace)的相关概念、创建、配置、修改以及删除等核心操作,...
"使用PLSQL导入导出oracle数据" PL/SQL 是 Oracle 数据库管理系统中的一个过程语言,能够实现数据的导入和导出。下面我们将详细介绍使用 PL/SQL 导入导出 Oracle 数据的几种方式。 Oracle 导出方式 使用 Oracle ...
### Oracle表空间与数据文件的管理 #### 6.1 Oracle引入逻辑结构的目的 Oracle数据库管理系统采用了一种独特的设计思路,即在数据管理和存储层面引入了一系列逻辑结构,以实现更高级别的抽象化处理。这种设计使得...
在Oracle 9i中,企业管理器被分为几个主要部分,包括目标管理、性能监控、故障诊断和数据保护等。 1. **目标管理**:这是企业管理器的核心功能之一,允许用户管理数据库实例、服务器、应用程序服务器和集群。你可以...
Oracle 临时表空间是Oracle数据库管理系统中的一个重要组成部分,主要用于存储执行特定操作时产生的临时数据,例如排序、连接和聚合操作。这些操作在处理大量数据时尤为常见,因此了解临时表空间的使用注意事项对于...
恢复物理删除的数据文件主要涉及以下几个步骤: 1. **识别问题**:首先,确定哪个数据文件被误删,这通常通过查看数据库错误日志或通过`SQL`查询`V$DATAFILE`视图来实现。 2. **备份检查**:检查最近的数据库备份...
SYSAUX表空间是Oracle数据库中的一个重要组成部分,它存储了系统级别的对象和服务,包括数据字典、索引、临时段等。当SYSAUX表空间占用过大时,可能导致数据库性能下降,甚至影响到正常的数据库操作。 **症状分析**...
根据给定文件的信息,“Oracle插入大量数据”的主题围绕着几种有效的策略展开,旨在提升Oracle数据库在大数据量场景下的性能表现。 ### 高速存储设备的应用 首先提及的是采用高速的存储设备来提升读写能力。EMC和...
Oracle企业管理器(Oracle Enterprise Manager,简称OEM)是Oracle公司提供的一个全面的数据库管理工具,它可以帮助管理员...通过本指南,读者将能够掌握OEM的基本使用和高级特性,从而更好地管理Oracle数据库环境。
### Oracle表的管理 #### 一、保存点(Savepoint)...综上所述,Oracle表的管理涉及多个方面,包括事务控制、数据删除、迪卡尔积的避免、自连接以及分页等。掌握这些知识点对于有效地管理和操作Oracle数据库至关重要。
在压缩包`Oracle 数据导入`中,可能包含了关于这些工具的详细使用教程、示例脚本或案例分析,建议仔细阅读并实践,以便更好地理解和掌握Oracle数据导入技术。同时,理解并熟练运用这些工具,将有助于提升数据库管理...
本文将详细介绍Oracle中的几种常见数据类型,并针对每种类型的特点进行分析,旨在帮助中高级编程开发人员以及初学者更好地理解和使用Oracle数据类型。 #### Character 类型 - **CHAR**: 是一种固定长度的字符类型...
在Oracle数据恢复过程中,AUL 5.0的使用步骤可能包括以下几个关键环节: 1. **分析和诊断**:首先,AUL 5.0会扫描受损的数据文件,识别并分析存在的问题,如记录头损坏、块校验失败等。 2. **数据提取**:诊断完成...
在优化Oracle时,我们需要考虑以下几个方面: 1. **内存优化**:合理分配SGA和PGA的大小,避免内存争用,根据系统负载调整各个内存区域的大小。 2. **数据文件和表空间管理**:定期检查数据文件的利用率,合理规划...
根据提供的信息,我们可以总结并深入探讨Oracle开发初期可能遇到的几个关键问题及其解决方案。这些问题包括但不限于安装后的系统运行速度问题、系统默认登录口令以及如何创建数据表。 ### 1. 安装后系统运行速度太...
Oracle数据库11g的可管理性主要体现在以下几个方面: 一、自动数据库诊断监视(ADDM) ADDM是一个革命性的功能,它提供了一套完备的数据库级的性能分析,包括存储、系统资源、空间、应用、SQL以及备份恢复等方面的...
在"恢复oracle数据库delete的数据.txt"文件中,可能会包含具体的恢复步骤、示例SQL语句和注意事项,建议仔细阅读以获取更详细的信息。记得在实际操作前进行充分的测试,以验证恢复策略的有效性。