Oracle9i 数据库设计指引全集
数据库物理设计原则
1.1 数据库环境配置原则
1.1.1 操作系统 环境:
对于中小型数据库系统,采用linux 操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9i RAC 的集群数据库的方法,集群节点数范围在2 —64 个。对于大型数据库系统,可以采用Sun Solaris SPARC 64 位小型机系统或HP 9000 系列小型机系统。RAD5 适合只读操作的数据库,RAD1 适合OLTP 数据库
1.1.2 内存要求
对于linux 操作系统下的数据库, 由于在正常情况下Oracle 对SGA 的管理能力不超过1.7G 。所以总的物理内存在4G 以下。SGA 的大小为物理内存的50% —75% 。对于64 位的小型系统,Oracle 数据库对SGA 的管理超过2G 的限制,SGA 设计在一个合适的范围内:物理内存的50% —70% ,当SGA 过大的时候会导致内存分页,影响系统性能。
1.1.3 交换区设计
当物理内存在2G 以下的情况下,交换分区swap 为物理内存的3 倍,当物理内存>2G 的情况下,swap 大小为物理内存的1 —2 倍。
1.1.4 其它环境变量参考Oracle 相关的安装文档和随机文档。
1.2 数据库设计原则
1.2.1 数据库SID
数据库SID 是唯一标志数据库的符号,命名长度不能超过5 个字符。对于单节点数据库,以字符开头的5 个长度以内字符串作为SID 的命名。对于集群数据库,当命名SID 后,各节点SID 自动命名为SIDnn ,其中nn 为节点号:1 ,2 ,…,64 。例如rac1 、rac2 、rac24 。
1.2.2 数据库全局名
数据库全局名称:
<sid>.domain |
1.2.3 数据库类型选择
对于海量数据库系统,采用data warehouse 的类型。对于小型数据库或OLTP 类型的数据库,采用Transaction Processing 类型。
1.2.4 数据库连接类型选择
Oracle 数据库有专用服务器连接类型和多线程服务器MTS 连接类型。对于批处理服务,需要专用服务器连接方式,而对于OLTP 服务则MTS 的连接方式比较合适。由于采用MTS 后,可以通过配置网络服务实现某些特定批处理服务采用专用服务器连接方式,所以数据库设计时一般采用MTS 类型。
1.2.5 数据库SGA 配置
数据库SGA 可以采用手工配置或按物理内存比例配置,在数据库初始设计阶段采用按比例配置方式,在实际应用中按系统调优方式修改SGA 。
1.2.6 数据库字符集选择
为了使数据库能够正确支持多国语言,必须配置合适的数据库字符集,采用UTF8 字符集。
注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,具体过程如下(切记设定的字符集必须是ORACLE 支持,不然不能start )
SQL> shutdown immediate; SQL> startup mount; SQL> alter system enable restricted session; SQL> alter system set job_queue_processes=0; SQL> alter database open; SQL> alter database character set internal_use we8iso8859p1; SQL> shutdown immediate; SQL> startup |
DB_FILES = FILES * 1.5 |
1.2.9 数据库日志 文件配置
1.2.9.1 日志文件大小
日志文件的大小由数据库事务处理量决定,在设计过程中,确保每20 分钟切换一个日志文件。所以对于批处理系统,日志文件大小为几百M 到几G 的大小。对于OLTP 系统,日志文件大小为几百M 以内。
1.2.9.2 日志文件组数量
对于批处理系统,日志文件组为5 —10 组;对于OLTP 系统,日志文件组为3 —5 组,每组日志大小保持一致;对于集群数据库系统,每节点有各自独立的日志组。
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 * 3600 * 200 * 4K =5.8G
1.2.11 数据库临时段表空间配置
数据库临时段表空间根据实际生产环境情况调整其大小,表空间属性为自动扩展。
1.2.12 数据库系统表空间配置
系统表空间大小1G 左右,除了存放数据库数据字典的数据外,其它数据不得存储在系统表空间。
1.3 数据库表空间设计原则
1.3.1 表空间大小定义原则
当表空间 大小小于操作系统对最大文件限制时,表空间由一个文件组成。如果表空间大小大于操作系统对最大文件限制时,该表空间由多个数据文件组成,表空间的总大小为估算为:
Tablespace + sum ( 数据段+ 索引段)*150% 。
1.3.2 表空间扩展性设计原则
表空间数据文件采用自动扩展的方式,扩展容量快大小按2 的整数倍(1M 、2M 、4M 、8M 、16M 、32M 、64M )进行扩展,创建表空间时尽量采用nologing 选项。表空间的最大限制一般采用unlimited ,除非确切知道表空间数据文件的最大使用范围。(一般windows 32位系统的文件最大2G,64位的unix 系统系统文件最大128G , 但也要注意文件格式设定的文件大小), 建议最大为2G 。表空间采用local 管理方式,例如:
CREATE TABLESPACE DATAFILE
NOLOGGING EXTENT MANAGEMENT
AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; |
一个scsi 设备可以14 个分区,unix 操作系统256 个分区, 性能比文件系统方式高15 %左右,空间大于要小于( 实际分区大小减两个ORACLE 的数据块) ,比如100M ,大于为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 的分区p2004100101 表示该分区存储2004100101 时段的数据。
2.1.1.3 字段名
字段名称必须用字母开头,采用有特征含义的单词或缩写,不能用双引号包含。
2.1.1.4 主键名
前缀为PK_ 。主键名称应是前缀+ 表名+ 构成的字段名。如果复合主键的构成字段较多,则只包含第一个字段。表名可以去掉前缀。
2.1.1.5 外键名
前缀为FK_ 。外键名称应是前缀+ 外键表名+ 主键表名+ 外键表构成的字段名。表名可以去掉前缀。
2.1.2 索引
4.1.2.1 普通索引
前缀为IDX_ 。索引名称应是前缀+ 表名+ 构成的字段名。如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。表名可以去掉前缀。
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_ 。按业务操作命名实体化视图。
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 ,3 ,4 ,…等。
2.1.12 普通变数
前缀为Var_ 。存放字符、数字、日期型变量。
2.1.13 游标变数
前缀为Cur_ 。存放游标记录集。
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 或16384
OLTP 类型:db_block_size 用比较小的取值范围:2048 或4096
Blocks 推荐是系统操作的块倍数(裸设备块大小是512 字节,NTFS 是4K ,使用8K 的方式在大部分系统上通用)。
1.2.8 数据库控制文件配置
1.2.8.1 控制文件镜象
多个控制文件存放在不同的物理位置。
1.2.8.2 控制文件配置
控制文件中参数设置,最大的数据文件数量不能小于数据库参数db_files 。 1.2.7 数据库其它参数配置
1.2.7.1 DB_FILES