Oracle9i数据库设计指引大全.docx
《Oracle9i数据库设计指引大全.docx》由会员分享,可在线阅读,更多相关《Oracle9i数据库设计指引大全.docx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Oracle9i 数据库设计指引全集1 数据库物理设计原则1.1 数据库环境配置原则1.1.1 操作系统环境:对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9i RAC的集群数据库的方法,集群节点数范围在264个。对于大型数据库系统,可以采用Sun Solaris SPARC 64位小型机系统或HP 9000 系列小型机系统。RAD5 适合只读操作的数据库,RAD1 适合OLTP数据库1.1.2 内存要求对于linux操作系统下的数据库,由于在正常情况下Oracle对SGA的管理能力不超过1.7G。所以总的物理内存在4G
2、以下。SGA的大小为物理内存的50%75%。对于64位的小型系统,Oracle数据库对SGA的管理超过2G的限制,SGA设计在一个合适的范围内:物理内存的50%70%,当SGA过大的时候会导致内存分页,影响系统性能。1.1.3 交换区设计当物理内存在2G以下的情况下,交换分区swap为物理内存的3倍,当物理内存2G的情况下,swap大小为物理内存的12倍。1.1.4 其他环境变量参考Oracle相关的安装文档和随机文档。1.2 数据库设计原则1.2.1 数据库SID数据库SID是唯一标志数据库的符号,命名长度不能超过5个字符。对于单节点数据库,以字符开头的5个长度以内字串作为SID的命名。对于
3、集群数据库,当命名SID后,各节点SID自动命名为SIDnn,其中nn为节点号:1,2,,64。例如rac1、rac2、rac24。1.2.2 数据库全局名数据库全局名称:1.2.3 数据库类型选择对于海量数据库系统,采用data warehouse的类型。对于小型数据库或OLTP类型的数据库,采用Transaction Processing类型。1.2.4 数据库连接类型选择Oracle数据库有专用服务器连接类型和多线程服务器MTS连接类型。对于批处理服务,需要专用服务器连接方式,而对于OLTP服务则MTS的连接方式比较合适。由于采用MTS后,可以通过配置网络服务实现某些特定批处理服务采用专
4、用服务器连接方式,所以数据库设计时一般采用MTS类型。1.2.5 数据库SGA配置数据库SGA可以采用手工配置或按物理内存比例配置,在数据库初始设计阶段采用按比例配置方式,在实际应用中按系统调优方式修改SGA。1.2.6 数据库字符集选择为了使数据库能够正确支持多国语言,必须配置合适的数据库字符集,采用UTF8字符集。注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,具体过程如下(切记设定的字符集必须是ORACLE支持,不然不能start)1.2.7 数据库其他参数配置1.2.7.1 DB_FILESDb_files是数据库能够同时打开的文件数量,默认值是200个。当数据库规划时文件
5、数量FILES接近或超过200个时候,按以下估计值配置:1.2.7.2 Db_block_size一个extent要是5个blocks的倍数为好,如:一个blocks是4096字节,那一个extent就是2M、4M或8M为好。Db_block_size是数据库最小物理单元,一旦数据库创建完成,该参数无法修改,db_block_size按以下规则调整:数据仓库类型: db_block_size尽可能大,采用8192 或 16384OLTP类型: db_block_size 用比较小的取值范围: 2048 或 4096Blocks推荐是系统操作的块倍数(裸设备块大小是512字节,NTFS是 4K,
6、使用8K的方式在大部分系统上通用)。1.2.8 数据库控制文件配置1.2.8.1 控制文件镜象多个控制文件存放在不同的物理位置。1.2.8.2 控制文件配置控制文件中参数设置,最大的数据文件数量不能小于数据库参数db_files。1.2.9 数据库日志文件配置1.2.9.1 日志文件大小日志文件的大小由数据库事务处理量决定,在设计过程中,确保每20分钟切换一个日志文件。所以对于批处理系统,日志文件大小为几百M 到几G的大小。对于OLTP系统,日志文件大小为几百M以内。1.2.9.2 日志文件组数量对于批处理系统,日志文件组为510组;对于OLTP系统,日志文件组为 35组,每组日志大小保持一致
7、;对于集群数据库系统,每节点有各自独立的日志组。1.2.9.3 日志成员数量为了确保日志能够镜象作用,每日志组的成员为2个。1.2.10 数据库回滚段配置在Oracle9i数据库中,设计Undo表空间取代以前版本的回滚段表空间。Undo 表空间大小的设计规范由以下公式计算:Undospace = UR * UPS *db_block_size+ 冗余量UR: 表示在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。UPS:表示在undo中,每秒产生的数据库块数量。例如:在数据库中保留2小时的回退数据,假定每小时产生200个数据库块。则Undospace = 2
8、* 3600 * 200 * 4K = 5.8G1.2.11 数据库临时段表空间配置数据库临时段表空间根据实际生产环境情况调整其大小,表空间属性为自动扩展。1.2.12 数据库系统表空间配置系统表空间大小1G左右,除了存放数据库数据字典的数据外,其他数据不得存储在系统表空间。1.3 数据库表空间设计原则1.3.1 表空间大小定义原则当表空间 大小小于操作系统对最大文件限制时,表空间由一个文件组成。如果表空间大小大于操作系统对最大文件限制时,该表空间由多个数据文件组成,表空间的总大小为估算为:Tablespace + sum (数据段+索引段)*150%。1.3.2 表空间扩展性设计原则表空间数
9、据文件采用自动扩展的方式,扩展容量快大小按2的整数倍(1M、2M、4M、8M、16M、32M、64M)进行扩展,创建表空间时尽量采用nologing选项。表空间的最大限制一般采用unlimited,除非确切知道表空间数据文件的最大使用范围。(一般windows 32位系统的文件最大2G,64位的unix系统系统文件最大128G,但也要注意文件格式设定的文件大小),建议最大为2G。表空间采用local管理方式,例如:1.4 裸设备的使用一个scsi设备可以 14个分区,unix操作系统256个分区,性能比文件系统方式高15%左右,空间大于要小于(实际分区大小减两个ORACLE的数据块),比如10
10、0M,大于为100000K,推荐在unix使用软连接(ln)方式把裸设备形成文件,用加入表空间时加resue 选项,当然也可只接把设备加入表空间,移动裸设备使用dd命令对于windows平台,oracle提供软连接工具,实现裸设备的使用,计算一条记录的长度2 数据库逻辑设计原则2.1 命名规范2.1.1 表属性规范2.1.1.1 表名前缀为Tbl_ 。数据表名称必须以有特征含义的单词或缩写组成,中间可以用“_”分割,例如:tbl_pstn_detail。表名称不能用双引号包含。2.1.1.2 表分区名前缀为p 。分区名必须有特定含义的单词或字串。例如 :tbl_pstn_detail 的分区p
11、2004100101表示该分区存储 2004100101时段的数据。2.1.1.3 字段名字段名称必须用字母开头,采用有特征含义的单词或缩写,不能用双引号包含。2.1.1.4 主键名前缀为PK_。主键名称应是 前缀+表名+构成的字段名。如果复合主键的构成字段较多,则只包含第一个字段。表名可以去掉前缀。2.1.1.5 外键名前缀为FK_。外键名称应是 前缀+ 外键表名 + 主键表名 + 外键表构成的字段名。表名可以去掉前缀。2.1.2 索引4.1.2.1 普通索引前缀为IDX_。索引名称应是 前缀+表名+构成的字段名。如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。表名可以去掉前缀。
12、2.1.2.2 主键索引前缀为IDX_PK_。索引名称应是 前缀+表名+构成的主键字段名,在创建表时候用using index指定主键索引属性。2.1.2.3 唯一所以前缀为IDX_UK_。索引名称应是 前缀+表名+构成的字段名。2.1.2.4 外键索引前缀为IDX_FK_。索引名称应是 前缀+表名+构成的外键字段名。2.1.2.5 函数索引前缀为IDX_func_。索引名称应是 前缀+表名+构成的特征表达字符。2.1.2.6 蔟索引前缀为IDX_clu_。索引名称应是 前缀+表名+构成的簇字段。2.1.3 视图前缀为V_。按业务操作命名视图。2.1.4 实体化视图前缀为MV_。按业务操作命名
13、实体化视图。2.1.5 存储过程前缀为Proc_ 。按业务操作命名存储过程2.1.6 触发器前缀为Trig_ 。触发器名应是 前缀 + 表名 + 触发器名。2.1.7 函数前缀为Func_ 。按业务操作命名函数2.1.8 数据包前缀为Pkg_ 。按业务操作集合命名数据包。2.1.9 序列前缀为Seq_ 。按业务属性命名。2.1.10 表空间2.1.10.1 公用表空间前缀为Tbs_ 。 根据存储的特性命名,例如: tbs_parameter 。2.1.10.2 专用表空间Tbs_nn。该表空间专门存储指定的某一个表,或某一表的若干个分区的数据2.1.11 数据文件nn.dbf 。nn =1,2
14、,3,4,等。2.1.12 普通变量前缀为Var_ 。 存放字符、数字、日期型变量。2.1.13 游标变量前缀为Cur_ 。存放游标记录集。2.1.14 记录型变量前缀为Rec_ 。 存放记录型数据。2.1.15 表类型变量前缀为Tab_ 。 存放表类型数据。2.1.16 数据库链前缀为dbl_ 。 表示分布式数据库外部链接关系。2.2 命名2.2.1 语言命名应该使用英文单词,避免使用拼音,特别不应该使用拼音简写。命名不允许使用中文或者特殊字符。英文单词使用用对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名当一个单词不能表达对象含义时,用词组组合,如果组合
15、太长时,采用用简或缩写,缩写要基本能表达原单词的意义。当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。2.2.2 大小写名称一律大写,以方便不同数据库移植,以及避免程序调用问题。2.2.3 单词分隔命名的各单词之间可以使用下划线进行分隔。2.2.4 保留字命名不允许使用SQL保留字。2.2.5 命名长度表名、字段名、视图名长度应限制在20个字符内(含前缀)。2.2.6 字段名称同一个字段名在一个数据库中只能代表一个意思。比如telephone在一个表中代表“电话号码”的意思,在另外一个表中就不能代表“手机号码”的意思。不同的表用于相同内容的字段应该采用同样的名称,字段类型定义。
16、2.3 数据类型2.3.1 字符型固定长度的字串类型采用char,长度不固定的字串类型采用varchar。避免在长度不固定的情况下采用char类型。如果在数据迁移等出现以上情况,则必须使用trim()函数截去字串后的空格。2.3.2 数字型数字型字段尽量采用number类型。2.3.3 日期和时间2.3.3.1 系统时间由数据库产生的系统时间首选数据库的日期型,如DATE类型。2.3.3.2 外部时间由数据导入或外部应用程序产生的日期时间类型采用varchar类型,数据格式采用:YYYYMMDDHH24MISS。2.3.3.3 大字段如无特别需要,避免使用大字段(blob,clob,long,
17、text,image等)。2.3.3.4 唯一键对于数字型唯一键值,尽可能用系列sequence产生。2.4 设计2.4.1 范式如无性能上的必须原因,应该使用关系数据库理论,达到较高的范式,避免数据冗余,但是如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗余,但基本上要达到3NF.如非确实必要,避免一个字段中存储多个标志的做法。如11101表示5个标志的一种取值。这往往是增加复杂度,降低性能的地方。2.4.2 表设计2.4.2.1 逻辑段设计原则2.4.2.1.1 Tablespace每个表在创建时候,必须指定所在的表空间,不要采用默认表空间以防止表建立在系统表空间上导
18、致性能问题。对于事务比较繁忙的数据表,必须存放在该表的专用表空间中。2.4.2.1.2 Pctused默认pctused导致数据库物理空间利用率非常低40%左右;对于update比较少或update不导致行增大的表,pctused可设置在6085之间;对于update能够导致行增大的表,update设置在4070之间2.4.2.1.3 Initrans对于需要并行查询或者在RAC数据库中需要并行处理的表,initrans设置为2的倍数,否则,不设该值。2.4.2.1.4 Storage2.4.2.1.4.1 Initial尽量减少表数据段的extents数量,initial的大小尽量接近数据段
19、的大小64K,128K, ,1M,2M,4M,8M,16M ,等按2的倍数进行圆整。例如表或分区数据段大小为28M,则initial取32M。2.4.2.1.4.2 Next表或分区扩展extents的大小,按上述方法进行圆整。当表或分区数据段无法按Initial接近值进行圆整的情况下,其大小可以按 Initial+Next进行圆整。此时,必须设置Minextents=2。例如:表或分区数据段大小为150M,则Initial=128M;Next=32M,Minextents=2。2.4.2.1.4.3 Minextents该参数表示表创建时候Extents的初始数量,一般取12。2.4.2.1
20、.4.4 Pctincrease表示每个扩展Extents的增长率,设置pctincrease=0能够获得较好的存储性能。2.4.2.2 特殊表设计原则2.4.2.2.1 分区表对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字段的几个关键值进行分布,则采用列表分区;对于静态表,则采用hash分区或列表分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区方法。2.4.2.2.2 聚蔟表如果某几个静态表关系比较密切,则可以采用聚蔟表的方法。2.4.2.3 完整性设计原则2.4.2.3.1
21、主键约束关联表的父表要求有主健,主健字段或组合字段必须满足非空属性和唯一性要求。对于数据量比较大的父表,要求指定索引段。2.4.2.3.2 外键关联对于关联两个表的字段,一般应该分别建立主键、外键。实际是否建立外键,根据对数据完整性的要求决定。为了提高性能,对于数据量比较大的标要求对外健建立索引。对于有要求级联删除属性的外键,必须指定on delete cascade 。2.4.2.3.3 NULL值对于字段能否null,应该在sql建表脚本中明确指明,不应使用缺省。由于NULL值在参加任何运算中,结果均为NULL。所以在应用程序中必须利用nvl()函数把可能为NULL值得字段或变量转换为非N
22、ULL的默认值。例如:NVL(sale,0)。2.4.2.3.4 Check条件对于字段有检查性约束,要求指定check规则。2.4.2.3.5 触发器触发器是一种特殊的存储过程,通过数据表的DML操作而触发执行,起作用是为确保数据的完整性和一致性不被破坏而创建,实现数据的完整约束。触发器的before或after事务属性的选择时候,对表操作的事务属性必须与应用程序事务属性保持一致,以避免死锁发生。在大型导入表中,尽量避免使用触发器。2.4.2.4 注释表、字段等应该有中文名称注释,以及需要说明的内容。2.4.3 索引设计对于查询中需要作为查询条件的字段,可以考虑建立索引。最终根据性能的需要决
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle9i 数据库 设计 指引 大全
限制150内