ORACLE数据库中 表是最基本的内容 可以说 表设计的好坏直接跟数据库的性能相关 所以 在设计表的时候 除了要遵循其固有的数据库准则之外 还需要看个人的数据库管理经验 下面我就把这些经验分享一下 或许对大家有所帮助 一 表该存放在哪里 我们都知道 在ORACLE数据库中 使利用空间这个概念来管理表对象的 在数据库创建的时候 数据库中已经建立了一些表空间 那么当我们新建立表的时候 这个新表的位置该放在什么地方呢这就好像吃饭时的坐的位置一样 是有讲究的 一般来说 我们在新建表的时候 至少要遵循如下建议 一是在数据库创建的时候 在数据库中已经有了一个SYSTEM的表空间 一般情况下 这个表空间中 只包含数据字典及Oracle系统对象 如果我们将我们的表建立在这个空间上的话 那是要降低数据库的性能的 所以 一般我们是不建议用户把表格建立在这个空间上 但是 若我们不只一个人维护数据库 如有八个人共同设计数据库系统时 如何才能保证其他用户不在SYSTEM表空间中建立数据库表格呢最好的办法就是通过权限控制 如我们可以给每个数据库设计人员指定一个默认的表空间 让他们只能在这个表空间中建立表格 如此的话 就能防止他们在SYSTEM表空间中建立自己的数据表格 从而对数据库的运行性能产生不良影响 所以 若给每个用户设置默认表空间的话 那么用户在建立具体的表时 不用具体指定表空间了 二是我们在为某个应用设计数据库的时候 最好先对表的空间进行规划 一般情况下 不要把数据表随意的分散到不同的表空间中去 如我们在为一个ERP系统设计数据库的时候 若把采购部门相关的表跟销售部门相关的表放到两个不同的表空间中去 这是不明智的做法 这么处理的话 会降低某些数据库管理和维护 *** 作的效率 如数据的备份与恢复 *** 作;而且 也无法集中管理属于某个特定应用的数据 所以 我们一般建议 在规划数据库表空间的时候 把相同应用的表放在同一个表空间中去 如果要区分不同部门或者不同模块的表的话 我们可以在表的命名上动脑子 如我们在设计ERP系统的数据库中 可以根据其应用模块的不同 在前面加上前缀来进行识别 如跟系统基本配置相关的表 我们可以用AD为前缀;而跟销售部门相关的表 我们可以加上SA前缀等等 如此的话 这些表具体是属于哪个模块的 就一清二楚了 完全没有必要为此设置不同的表空间 这是ORACLE数据库初学者经常会犯的错误 主要是对ORACLE表空间的定义不是很熟悉所导致的 二 对预计存储数量比较大的表时 要给与额外的重视 有些表非常的大 我们这边说的大 不一定是说结构复杂 而是指在这个表格中 预期会存储比较多的数据 为了提高对这个表格的处理效率 我们在事先要做出一定的安排 否则的话 后续对这些大表进行查询 插入等 *** 作的话 速度会很慢 所以 我们就有必要在数据库设计的时候 先预先估计一下表的数据存储量 把一些数据量大的表格 做一些额外的设置 如在ERP软件的数据库设置中 一般来说 产品数据与物料清单数据这两个表的数据量会比较大;而从长远看的话 销售订单 采购订单 生产订单 记账凭证等这种单据类相关的表格其数据量也会比较大 一年两年可能感觉不出来 但是 到十年后 这个纪录数量就会很庞大 而像ERP系统这种大型的信息化管理项目 用个几十年时很正常的事情 而且 为了记录的完整性 也不建议用户把以前的数据删除 所以 为这种应用进行数据库设计的时候 要充分考虑这些大表的性能问题 具体的来说 设计大表的时候 可以考虑遵循如下的建议 一是不要为大表设置存储的限制 在ORACLE数据库中 可以为每张表格设置存储配额限制 如此的话 表最大容量就不能超过这个限制 对于一些数据容量比较小的表格 这么设置时合理的 可以提高空间的利用率 但是 若数据量比较大的话 就不建议事先设置表的存储空间了 如ERP系统的销售订单表 其刚开始可能记录量很小 第一年预计只有 G的记录容量 但是 估计在十年后 这个记录容量就会达到 G了 在这种情况下 我们怎么来给其设置存储空间呢一开就设置 G空间 这也是不合理的 而且 设置存储空间 就意味着有可能产生存储碎片 从而影响到数据查询的效率 所以 在数据库表的设计过程中 若某些应用的表可能会有比较大的数据容量时 建议不要对其存储空间做出任何的限制 二是要为这大表分配足够的临时空间 如我们使用ERP系统时 要查询产品资料信息 我们都知道 产品信息的话 有些企业这个纪录数非常的庞大 而且在查询时 我们还会经常的进行排序 *** 作 如有时候会按照产品编码对查询出来的数据进行排序 当记录少的话 还好;但是 当记录多的话 这个排序动作 要求具有比较大的临时存储空间 所以 当某个表预计会有很大的记录数量的时候 我们就要给其分配足够多的临时空间 临时空间的存储参数设置取决于临时表空间的默认储存参数设置 我们可以更改这些参数 以达到我们对要求 若没有给大表分配足够多的临时空间的话 则排序的动作将会很慢 而且很可能不成功 三是要考虑将表与表的索引分离存放 大表所对应的索引通常也比较大 一般来说 索引的数量是随着表记录的数量增加而增加 两者是接近于一个正比例的关系 所以 通常表的记录容量大的时候 索引数量也会很庞大 针对这种情况 我们考虑突破我们上面讲的表空间的规则定义 而考虑把表和他的索引分别存储于不同的表空间中 甚至在条件允许的情况下 分别存储于不同的硬盘中 这么做的好处是什么呢最大的好处是让索引比较容易的获得所需要的连续的存储空间 从而提高输入输入的效率 通俗的说 就是可以提高数据的查询效率 如不这么处理的话 查询大容量的记录的话 数据库可能需要花费 秒;而如此设计的话 就可能把时间缩短为 秒 这是一个很明显的性能改善 三 如何给表命名 上面我在讲如何为表分配存储空间的时候 已经讲到过这方面的问题 下面 我就将对这个问题进行详细的描述 以帮助数据库管理员掌握一套好的数据库命名规则 首先 毋庸置疑的 在为标命名的时候 要遵循ORACLE数据库的基本命名规则 如不能以数字开头为表命名 如不能利用数据库的关键字为表命名 如表的名字不能重复等等 这些是最基本的要求 就不用我多费口舌了 除了要遵循这些基本的命名规则外 在实际工作中 为了数据库后续的维护等方面出发 我们还是要遵循一些额外的规则 这些规则跟ORACLE定义的规则不同 我们所讲的规则没有约束力 可以说 只是业界的一些共识而已 你若不怎么处理 ORACLE数据库也不会说你错误 只是后续维护的时候 会比较麻烦而已 一是在对数据库命名的时候 最好能跟体现表的分类关系 如最常见的 我们在设计数据库的时候 表都是按系统的具体模块来区分的 如根据前端系统要求的不同 数据库的表大致可以分为系统基本配置表 销售模块表 采购模块表 报表模块表等等 我们可以根据这些模块的不同 分别给与不同的前缀来区分 这么做的好处是很明显的 如一看到表最大名字 就可以知道这个表是属于哪个应用的 哪个模块的 这无疑可以提高数据库设计与前台软件开发的效率 同时 数据库中默认的排序规则是按名字来排序的 所以 为表格设置类别前缀的话 可以把同一类的表格排在一起 方便我们察看 二是对表格命名的时候 要考虑可读性 而不能随便阿狗阿猫的乱取名字 最常见的是 那些刚学数据库的人 在表命名的时候 如要建几张测试表 就会随便命名如TEST TEST 之类的 虽然这只是测试 但是 也不符合我们的命名过则 要做测试的话 那就以TEST开头 然后后面加上具体要测试的内容 如此的话 我们才可以通过表的名字知道该表具体的用途 而不用打开表去看里面具体的结构或者注释才能知道我们需要的信息 所以 在设计表的名字的时候 还要关注一下其的可读性 lishixinzhi/Article/program/Oracle/201311/18317
按下Next之后 Oracle Universal Installer会显示等下要安装的Oracle i产品摘要 确认无误之后按下Install就会开始档案复制与安装动作了 图十七 要安装的Oracle产品摘要 依照您所使用的硬件环境不同 安装的时间可能需要数十分钟 甚至一 两个钟头 麻烦的是中途还需更换光盘片 所以只能在旁边看杂志啰!过了一会儿以后画面上将会跳出一个窗口 提醒您放入Oracle i的第二片安装程序光盘 如果您是从硬盘的解压缩后的资料来源所安装 则只要切换至第二片安装程序所在目录即可 但如果是从光盘片安装的读者们可能会发现此时光驱无法退片!这时候请参考下列步骤更换光盘片 开启另一个终端机窗口 执行umount指令 卸载光驱 > unmount /cdrom更换为第二片安装程序 重新mount光驱 > mount /cdrom然后就可以继续安装动作了! / / png > 图十八 安装程序正在进行档案复制动作 注 也许某些读者会发现一个问题 在执行umount指令之后却收到 device is busy 的讯息 无法卸载光驱以及更换光盘片!还记得在执行runInstaller时 我有提醒各位不要在/cdrom下执行吗如果您切换至/cdrom下才执行runInstaller 这时光驱会被系统锁定 无法umount 除非您可以找出是哪一个process锁住光驱 利用root身分将其kill掉!否则………只好重来一次啰!! Step 系统安装后的组态设定等到安装程序将所有档案复制到系统之后 安装程序会再度要求您以root身分执行root sh程序 (位于 ORACLE_HOME 所指向的目录下 如/opt/oracle/product/ ) / / png > 图十九 进行系统环境设定之提示窗口 / / png > 图二十 利用root身分执行root sh程序 此时您可以在另一个终端机窗口执行root sh (注意身分需切换为root) 该程序会询问您bin目录之位置 如果与默认值相同的话请直接按下Enter键 否则需输入正确的bin目录位置 执行root sh之后再回到图十九的窗口内按下OK即可继续后续的设定工作 Step 执行Oracle数据库组态工具系统安装的最后一个阶段会自动执行数据库组态工具程序 其中包含两个特殊的辅助精灵 Oracle网络设定辅助精灵(Oracle Net Configuration Assistant)与Oracle数据库建置辅助精灵(Oracle Database Configuration Assistant) / / png > 图二十一 执行Oracle数据库组态工具 第一个自动执行的是Oracle网络设定辅助精灵 您可以借由本精灵组态Oracle数据库服务器所监听的Oracle Instance 网络服务名称(Net Service Name)以及透过网络管理其它Oracle i数据库之相关设定 因为我们是第一次安装Oracle i 所以您可以先按下Cancel取消本精灵的执行 往后如果需要进行相关设定 再执行netca指令就可以激活该程序 / / png > 图二十二 Oracle网络设定辅助精灵欢迎画面 第二个步骤会在port 安装Oracle Web Server 完毕之后会激活最重要的Oracle数据库建置组态精灵(Oracle Database Configuration Assistant 简称DBCA) 这个步骤是必要的 因为目前Oracle Universal Installer只在您的系统中安装了Oracle i数据库服务器 尚未建置任何Oracle数据库!(感觉有点像是建置了一间图书馆 可是却里面没有任何书籍!这间图书馆能用吗?)所以必须借由DBCA协助我们建置第一个Oracle i数据库 当然了 DBCA并不是建立Oracle数据库的唯一方法 往后我会详细为大家介绍Oracle i数据库内部运作的原理 到时候再介绍其它建立Oracle数据库的方法以及相关注意事项 利用Oracle Database Configuration Assistant建立Oracle i数据库DBCA精灵激活之后会出现如下图之欢迎画面 请按下Next继续 / / png > 图二十三 Oracle Database Configuration Assistant欢迎画面 选定DBCA所要执行的工作Oracle数据库建置组态精灵主要提供三项数据库的管理工作 分别是数据库建立与删除 以及更改数据库组态设定 而Oracle i的DBCA还加入一项新功能 数据库模板管理功能(Manage Templates) 这里请选择第一项Create Database / / png > 图二十四 选定DBCA所要执行的工作 Tips: 数据库模板管理功能在Oracle i数据库系统内 您可以利用 数据库模板管理功能 简化您的数据库管理工作 例如您可以将Oracle数据库设定储存为XML文件格式之模板档案(template) 优点如下 将现有的数据库设定储存成为模板文件之后 当您需要建立第二个相同的数据库时 就不需要重复设定相同的参数 修改现有模板文件以建立新的Oracle数据库 将模板文件复制到其它Oracle数据库服务器 相当于将数据库之组态设定复制到另外一台Oracle服务器 选择建立数据库所需之模板文件 DBCA提供三种预设的模板文件 Data Warehouse 建置资料仓储 线上分析系统用数据库 Transaction Processing 建置线上交易系统用数据库 General Purpose 建立一般功能性数据库 / / png > 图二十五 选择建立数据库需之模板文件 建议第一次安装之读者选择General Purpose选项 表一 二 三 四 五则整理出General Purpose选项中各参数之系统默认值 供各位读者参考 表一 一般性参数之默认值 / / jpg >表二 起始参数(Initialization parameter)之默认值 / / jpg > / / jpg > 表三 数据库档案相关之参数默认值 / / jpg > 表四 控制文件之参数默认值 / / jpg > 表五 重置交易纪录文件群组之参数默认值 / / jpg > 如果您已经熟悉如何设定各数据库参数 不想使用以上三种模板建立数据库的话 可利用第四个选项New Database自行设定所有Oracle数据库参数 但如果您对于这方面不是很有经验的话 建议您尽量不要使用该选项建立数据库! 表六 七 八 九 十 十一则整理出New Database选项中各参数之系统默认值 供各位读者作为设定时之参考 表六 一般性参数之默认值 / / jpg > lishixinzhi/Article/program/Oracle/201311/17159
常用的数据库字段类型如下:
字段类型 中文说明 限制条件 其它说明
CHAR 固定长度字符串 最大长度2000 bytes
VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题
LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作
RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等
LONG RAW 可变长度的二进制数据 最大长度2G 同上
BLOB 二进制数据 最大长度4G
CLOB 字符数据 最大长度4G
NCLOB 根据字符集而定的字符数据 最大长度4G
BFILE 存放在数据库外的二进制数据 最大长度4G
ROWID 数据表中记录的唯一行号 10 bytes 格式,为0或1
NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes
NUMBER(P,S) 数字类型 P为整数位,S为小数位
DECIMAL(P,S) 数字类型 P为整数位,S为小数位
INTEGER 整数类型 小的整数
FLOAT 浮点数类型 NUMBER(38),双精度
REAL 实数类型 NUMBER(63),精度更高
数据类型 参数 描述
char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。可做索引的最大长度3209。
number(m,n) m=1 to 38
n=-84 to 127 可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575316,则真正保存到字段中的数值是57532。
如:number(3,0),输入575316,真正保存的数据是575。
date 无 从公元前4712年1月1日到公元4712年12月31日的所有合法日期,Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
long 无 可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw 无 可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob /clob /nclob 无 三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
可以执行读取、存储、写入等特殊 *** 作。
bfile 无 在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
Oracle 8i可以读取、查询BFILE,但是不能写入。
大小由 *** 作系统决定。
以上就是关于怎样管理好ORACLE数据表全部的内容,包括:怎样管理好ORACLE数据表、Oracle 9i 数据库管理实务讲座(一)-如何安装Oracle 9i Enterprise E、请教几个关于oracle数据库里常见数据类型的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)