oracle使用规范
本规范旨在帮助开发人员逐步建立合理使用数据库的意识,对数据库相关的资源申请、业务规范使用等提供规范性的指导,从而为公司业务系统稳定、健康地运行提供保障。
以下所有规范会按照【强制】、【建议】两个级别进行标注,对于【强制】级别的设计需强制修改调整。
[TOC]
基础规范
- 【强制】禁止开通公网地址,禁止部署在公网可访问的服务器上
- 【强制】新实例强制 版本 oracle 21c
- 【强制】新实例强制 端口 1522,默认1521
- 【强制】新实例强制 数据库字符集 AL32UTF8、国家字符集 AL16UTF16
- 【强制】禁止将生产环境数据库部署在容器中
- 【强制】原则上在线事务处理系统(OLTP)和在线分析报表系统(OLAP)不能在同一个服务器上运行
开发规范
对象命名规范
所有对象命名应该遵循下述原则:
- 【强制】凡是需要命名的对象,其标识符不能超过30个字符;
- 【强制】名称必须以英文字母开头,不得以 _(下划线) 作为起始和终止字母;
- 【强制】各种名称(表名、字段名、索引名等)的所有字符,必须使用大写;
- 【强制】所有名称的字符范围为:A-Z、0-9、_#$,禁用小写、保留字、特殊符号、汉字和空格;
库表设计
- 【强制】oracle 对表名大小写不敏感,在创建表时,表名会自动转换大写,禁止通过添加双引号""来设定字符的大小写形式
- 【强制】名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则
- 【强制】使用英文单词或词组作为表名,不得使用汉语拼音,不使用复数
- 【建议】单表的数据量控制在2000万或数据容量超过20G以内,否则考虑归档或分区
- 【强制】新建的库表必须添加注释
索引设计
- 【强制】除了临时表、外部表、流水表、日志表,其他表都要建立主键
- 【强制】主键不能使用含有实际语义的列,应该增加一个number类型的字段做主键
- 【建议】表和索引原则上应该使用不同的表空间存储,并且不同DML频度的表的索引,放在不同的表空间中
注:绝大多数情况下,动态表的索引必然是动态的,静态表的索引必然是静态的,依据对表的分析来确定索引的动静性
SQL设计
- 【强制】禁止使用游标、存储过程、视图、触发器、自定义函数
- 【强制】各表之间相同意义的字段必须同名
- 【建议】尽量少用in操作符,使用exits替代in操作符
- 【建议】DML操作涉及到大数据量时,请分解为多次执行
安全规范
- 【强制】业务账号不允许dba权限,仅赋予resource和connect权限
grant resource,connect to user_xxx;
- 【强制】对事务的提交,MySQL默认是自动提交,Oracle默认不自动提交,需要用户手动 commit; 提交
- 【强制】对于一个完成了的事务,请用commit显示提交,这是避免锁争用的锁等待的需要,特别是对DML操作频繁的表
- 【强制】程序中必须显示关闭数据库连接,不仅正常执行完后需显示关闭,而且在异常处理块(例如java的exception段)也要显示关闭