oracle数据库开发规范
Oracle数据库设计规范建议
Oracle数据库1 数据对象的命名规范1.1 通用规范1.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。
主要目的很明确,让人容易明白这个对象是做什么用的;1.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写;1.2 数据库对象命名规范1.2.1 表的命名1.2.1.1 表名的前缀:前缀_表名_T。
为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:1.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名;1.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。
表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。
比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员;1.2.2 视图命名:相关表名_V(或者根据需要另取名字);1.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义);1.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);1.2.5 函数命名:函数名称_FUN(用英文表达函数作用);1.2.6 触发器命名:触发器名称_TRI(用英文表达触发器作用);1.2.7 索引命名:表名_字段名_IDX(如果存在多字段索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail 上建立联合索引,命名为表名_cus_cut_cur_IDX,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立联合索引,就命名为表_tid_tom_tna_IDX;1.2.8 唯一索引命名:表名_字段名_UNI(如果存在多字段唯一索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立唯一索引,命名为表名_ cus_cut_cur_UNI,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 custid, custom,custname上建立唯一索引,命名:表_tid_tom_tna_UNI;1.2.9 主键命名:表名_字段名_PK(如果存在多字段主键,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立主键,命名为表名_cus_cut_cur_PK,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立主键,命名:表_tid_tom_tna_PK;1.2.10 外键命名:表名_主表名_字段名_FK;1.2.11 Sequence命名:表名_列名_SEQ(或者根据需要另取名字);1.2.12 Synonym命名:与对应的数据库对象同名;1.2.12 JAVA命名:遵守公司相应的JAVA命名规范;2 SQL的设计和使用2.1 Sql 书写规范2.1.1 尽量不要写复杂的SQL:过于复杂的S QL可以用存储过程或函数来代替,效率更高;甚至如果能保证不造成瓶颈的话,把条SQL拆成多条也是可以的。
(完整版)Oracle数据库规划设计和运行维护方案
Oracle数据库规划设计和运行维护方案(V1。
0)目录1。
前言 (6)1。
1. 编写目的 (6)1。
2。
方案说明 (6)1.3. 预期读者 (7)2。
数据库部署模式 (7)2.1. 单机模式 (7)2.2. 双机热备模式(HA模式) (8)2.3。
集群模式(RAC) (9)2。
4. 主从模式(DataGuard) (10)2.5。
混合模式(DataGrard+RAC) (10)2。
6。
数据库运行模式选择 (11)3。
系统特点和数据库类型 (11)3。
1。
业务系统的特点 (11)3。
1.1。
OLTP特点 (12)3.1.2。
OLAP特点 (13)3。
2。
数据库的规模 (13)3.3。
数据库版本建议 (13)4. 数据库运行环境规划 (14)4.1。
主机规划 (14)4。
2. 网络规划 (15)4.3. 存储规划 (17)5。
数据库安装部署规划 (19)5.1。
软件安装路径 (19)5。
2. 表空间设计 (19)5.2.1. 业务数据量估算 (19)5。
2。
2。
表空间使用规则 (21)5.2.3。
表空间的概念和分配原则 (25)5。
2.4。
表空间的参数配置 (26)5.2。
5. Undo/temp表空间的估算 (30)5.2。
6. 表的参数设置 (30)5.2。
7. 索引的使用原则 (31)5。
3. 文件设计 (32)5.3。
1. RAC配置文件 (32)5.3。
2. 参数文件 (33)5。
3。
3. 控制文件 (34)5。
3.4。
重做日志文件 (35)6。
数据库应用规划 (37)6。
1。
数据库用户设计 (37)6。
1。
1。
用户权限规划 (37)6.1.2。
用户安全实现 (39)6。
1。
3. 用户类型及角色命名规范 (41)6.2. 数据库分区 (44)6.2。
1. 数据库分区介绍 (44)6。
2.3. 物理分割 (45)6。
2。
4. 数据分区的优点 (45)6.2.5. 数据分区的不足 (45)6.2。
数据库开发安全规范
数据库开发安全规范1. 密码安全- 使用强密码:密码应包含大小写字母、数字和特殊字符,并且长度应不少于8位。
- 定期更换密码:为了保持数据库的安全性,管理员应定期更换数据库密码。
- 不保存明文密码:开发人员不得将用户密码以明文形式存储在数据库中。
2. 数据备份和恢复- 定期备份数据:管理员应定期备份数据库中的重要数据,以防止数据丢失或损坏。
- 离线备份:备份数据应存储在不同物理位置的离线设备上,以防止数据丢失或被未经授权的访问者篡改。
- 定期测试数据恢复:管理员应定期测试数据库备份的可恢复性,以确保在发生数据丢失时能够快速进行恢复操作。
3. 访问控制- 最小权限原则:管理员应为开发人员分配最小必要权限,以降低数据泄露和滥用的风险。
- 严格权限控制:数据库用户应仅被授予其工作所需的权限,以防止未经授权的访问和数据泄露。
- 监控和审计:管理员应实施日志监控和审计机制,以便及时检测和响应异常访问行为。
4. 网络安全- 防火墙配置:数据库服务器应配置防火墙,限制从外部网络访问数据库的连接。
- 加密通信:数据库的网络通信应使用加密协议,如SSL/TLS,以确保数据在传输过程中的安全性。
- 远程访问限制:禁止未经授权的远程访问数据库,仅允许经过身份验证的用户进行远程访问。
5. 安全审计- 定期安全审计:管理员应定期进行数据库安全审计,包括检查权限配置、访问日志、异常行为等,以发现潜在的安全隐患。
- 及时处理安全漏洞:一旦发现数据库安全漏洞,管理员应立即采取措施进行修复,以防止被黑客利用。
以上是数据库开发安全规范的主要内容。
管理员和开发人员应严格遵守这些规范,以保护数据库中的数据安全和用户隐私。
oracle数据库开发规范
编程规范1:所有数据库关键字和保留字都大写;字段、变量的大小写2:程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。
必须使用空格,不允许使用【tab】键。
3:当同一条语句暂用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。
4:不允许多个语句写到一行,即一行只写一条语句。
5:避免把复杂的SQL语句写到同一行,建议要在关键字和谓词处换行。
6:相对独立的程序块之间必须加空行。
BEGIN、END独立成行。
7:太长的表达式应在低优先级操作符处换行,操作符或关键字应放在新行之首。
不同类型的操作符混合使用时,用括号隔离,使得代码清晰。
8: 不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系。
9:运算符以及比较符左边或者右边只要不是链接的括弧,则空一格。
10:if 后的条件要用括号括起来,括号内每行最多两个条件。
11:减少控制语句的检查次数,如在else( if..else)控制语句中,对最常用符合条件,尽量往前被检查到。
尽量避免使用嵌套的if 语句,在这种情况应使用多个if 语句来判断其可能。
命名规范1:不使用数据库关键字和保留字,为了避免不必要的冲突和麻烦。
2:严禁使用带空格的名称来给字段和表命名,会出错误而终止。
3:用户自定义数据库对象:表,视图,主外键,索引,触发器,函数,存储过程,序列,同义词,数据库连接,包,包体风格要保持一致。
数据库名称1-8个字符,其他对象1-30个字符,数据库连接不操过30个字符。
使用英文字母、数字、下划线。
除表外,其他对象命名最好用不同的前缀来区别。
表tbl_/t_视图v_序列seq_簇c_触发器trg_存储过程sp_/p_函数f_/fn_物化视图mv_包和包体pkg_类和类体typ_主键pk_外键fk_唯一索引uk_普通索引idx_位图索引bk_4:PL/SQL对象和变量命名规则输入变量i_输出变量o_输入输出变量io_普通变量v_全局变量gv_常量大写游标cur_用户自定义类型type_保存点spt_不允许使用中文和特殊字符用户对象命名应全部为小写,且不允许使用控制符号强制转换对象为小写字符变量命名,要有具体含义,能表明变量类型。
oracle数据库设计课程设计
oracle数据库设计课程设计一、课程目标知识目标:1. 理解Oracle数据库的基本概念,掌握数据库设计的基本原理;2. 学会使用SQL语言进行数据库的基本操作,如创建表、查询数据、更新数据等;3. 掌握数据库设计规范,能够设计出结构合理、性能优良的数据库表结构;4. 了解数据库的安全性和一致性约束,能够为数据库设置合理的约束条件。
技能目标:1. 能够运用所学知识独立完成小型信息系统的数据库设计;2. 能够熟练运用SQL语言进行数据库的操作,解决实际问题;3. 能够运用数据库设计原则对现有数据库进行优化,提高数据库性能;4. 能够分析实际业务需求,撰写数据库设计文档,为软件开发提供支持。
情感态度价值观目标:1. 培养学生对数据库技术的兴趣,激发学习积极性,提高自主学习能力;2. 培养学生具备良好的团队合作精神,能够在团队项目中发挥积极作用;3. 培养学生严谨、细致的学习态度,对待数据库设计和操作能够认真负责;4. 通过数据库技术在实际案例中的应用,使学生认识到信息技术对社会发展的积极作用,增强社会责任感。
二、教学内容1. Oracle数据库基础知识- 数据库概念、发展历史及Oracle数据库特点- 数据库体系结构、数据库存储结构- SQL*Plus工具的使用2. SQL语言基础- 数据定义语言(DDL):创建、修改、删除表- 数据操纵语言(DML):插入、查询、更新、删除数据- 数据控制语言(DCL):权限管理、事务控制3. 数据库设计原理- 实体关系模型(ER模型)及其转换- 数据库设计范式:1NF、2NF、3NF、BCNF- 数据完整性、约束条件设置4. Oracle数据库高级应用- 索引、分区、视图、序列的应用- 存储过程、函数、触发器的创建与使用- 数据库性能优化、备份与恢复5. 实践项目- 设计一个小型信息系统的数据库,包括表结构设计、数据操作、完整性约束设置等- 对数据库进行性能优化,分析并解决性能瓶颈- 撰写数据库设计文档,进行项目展示与交流教学内容按照以上五个方面进行组织,确保学生能够系统地掌握Oracle数据库的设计与应用。
ORACLE数据库安全规范
数据库安全规范1概述1.1适用范围本规范明确了Oracle数据库安全配置方面的基本要求。
1.2符号和缩略语2 ORACLE安全配置要求本规范所指的设备为ORACLE数据库。
本规范提出的安全配置要求,在未特别说明的情况下,均适用于ORACLE数据库。
本规范从ORACLE数据库的认证授权功能和其它自身安全配置功能提出安全要求。
2.1账号ORACLE应提供账号管理及认证授权功能,并应满足以下各项要求。
2.1.1按用户分配帐号2.1.2删除或锁定无关帐号2.1.3用户权限最小化要求内容在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权限。
grant 权限to user name; revoke 权限 from user name;2、补充操作说明用第一条命令给用户赋相应的最小权限用第二条命令收回用户多余的权限业务测试正常4、检测操作业务测试正常5、补充说明2.1.4使用ROLE 管理对象的权限1. 使用Create Role 命令创建角色。
2.使用用Grant 命令将相应的系统、对象或 Role 的权限赋予应用用户。
2、补充操作说明对应用用户不要赋予 DBA Role 或不必要的权限。
4、检测操作 1.以DBA 用户登陆到 sqlplus 中。
2.通过查询 dba_role_privs 、dba_sys_privs 和 dba_tab_privs 等视图来检查 是否使用ROLE 来管理对象权限。
5、补充说明操作指南1、参考配置操作检测方法3、判定条件要求内容使用数据库角色(ROLE )来管理对象的权限。
操作指南1、参考配置操作检测方法 3、判定条件2.1.5控制用户属性可通过下面类似命令来创建 Profile ,并把它赋予一个用户CREATE P ROFILE <p rofile_name>LIMIT FAILED_LOGIN_ATTE MPTS 6PASSWORD REUSE TIME 60P ASSWORD_REUSE_MAX 5P ASSWORD_VERIFY_FUNCTIONvenfy_fu nctionP ASSWORD_LOCK_TIME 1/24;ALTER USER<user_name> P ROFILE <p rofile_ name 〉; 2、补充操作说明4、检测操作2.查询视图dba_profiles 和dba_usres 来检查profile 是否创建。
Oracle数据库管理与开发第9章 系统安全管理
INSERT
SELECT
UPDATE
创建用户角色
创建用户角色的语法:
create role role_name [ not identified | identified by [password] | [exeternally] | [globally]]
试一试
创建一个名为designer的角色,该角色的口令为123456
创建用户
试一试
创建一个mr用户,口令为mrsoft,并设置默认的表空间为users,临时表 空间为temp的用户。
SQL> create user mr identified by mrsoft default tablespace users temporary tablespace temp;
安全特性
3.过程安全 过程方案的对象权限(其中包括独立的过程、函数和包)只有EXECUTE权限,将这个权限 授予需要执行的过程或需要编译另一个需要调用它的过程。 (1)过程对象。具有某个过程的EXECUTE对象权限的用户可以执行该过程,也可以编译引 用该过程的程序单元。过程调用时不会检查权限。具有EXECUTE ANY PROCEDURE系统权限的 用户可以执行数据库中的任何过程。当用户需要创建过程时,必须拥有CREATE PROCEDURE 系统权限或者是CREATE ANY PROCEDURE系统权限。当需要修改过程时,需要ALTER ANY PROCEDURE系统权限。 拥有过程的用户必须拥有在过程体中引用的方案对象的权限。为了创建过程,必须为过程 引用的所有对象授予用户必要的权限。 (2)包对象。拥有包的EXECUTE对象权限的用户,可以执行包中的任何公共过程和函数, 能够访问和修改任何公共包变量的值。对于包不能授予EXECUTE权限,当为数据库应用开发 过程、函数和包时,要考虑建立安全性。
Oracle数据库操作规范
1命名原则1.1约定ü是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定;ü命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割ü避免使用Oracle的保留字如LEVEL、关键字如TYPE(见Oracle保留字和关键字);ü各表之间相关列名尽量同名;ü除数据库名称长度为1-8个字符,其余为1-30个字符,Database link名称也不要超过30个字符;ü命名只能使用英文字母,数字和下划线;1.2表名规则如下:命名规则为xxx_yyy_TableName。
xxx表示子系统的名称,由三个字母构成;yyy表示子系统中的子模块的名称(可以没有);TableName为表含义TableName规则如下:ü使用英文单词或词组作为表名,不得使用汉语拼音ü用名词和名词短语作表名ü不使用复数正确的命名,例如:sys_userbiz_order1.3存储过程规则如下:命名规则为xxx_yyy_StoredProcedureName。
xxx表示子系统的名称,由三个字母构成;yyy 表示子系统中的子模块的名称(可以没有);StoredProcedureName为存储过程含义StoredProcedureName规则如下:ü用动词或动词短语来命名,并带有宾语ü需要符合用Pascal 命名规则。
ü尽量谨慎地使用缩写ü尽量不要和关键字重合ü不要用任何名前缀(例如U,B)üStoredProcedureName内不使用下划线ü当操作依赖条件时,一般结尾使用By+条件存储过程正确的命名,例如:sys_InsertUsersys_SearchUserByUserIDsys_DeleteUserByUserID1.4视图规则如下:ü视图的命名采用xxx_yyy_ViewName_v。
Oracle数据库编码规范
Oracle数据库编码规范1目的使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。
2适用范围本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工作。
3规范3.1书写规范丑陋的书写规范不仅可读性较差,而且给人以敬而远之的感觉;而良好的书写规范则给人以享受和艺术的体验。
3.1.1大小写风格规则3.1.1.1所有数据库关键字和保留字命名使用大小写不做要求。
3.1.2缩进风格规则3.1.2.1程序块严格采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。
必须使用空格,不允许使用【Tab】键。
以免在用不同的编辑器阅读程序时,因【Tab】键所设置的空格数目不同而造成程序布局不整齐。
规则3.1.2.2当同一条语句需要占用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。
IF flag = True THENSelect usernameInto vUserInfoFrom userInfoWhere userId = ‘id’END IF;3.1.3空格及换行规则3.1.3.1不允许把多个语句写在一行中,即一行只写一条语句且一行最长不能超过80字符;规则3.1.3.2避免将复杂的SQL语句写到同一行,建议要在关键字和谓词间换行。
WHERE子句书写时,每个条件占一行。
规则3.1.3.3相对独立的程序块之间必须加空行。
BEGIN、END独立成行。
3.1.4其它规则3.1.4.1确保变量和参数在类型和长度上与表数据列相匹配。
如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。
3.2命名规范对于命名规范来说,想要做到完全统一的确是不可能的任务。
命名规范更多的是个人层面的爱好,既使无法完全做到一致,但是我们仍然要尽量去遵守。
3.2.1字段命名规范在此仅提供几种常见的命名方法,如表3-2-1所示。
表3-2-1 命名规范表规则3.2.1.1不建议使用数据库关键字和保留字,原因是为了避免不必要的冲突和麻烦。
Oracle数据库编程规范
密级公开()普通(√)秘密()机密()绝密()Oracle数据库编程规范文档编号:<文档编号(按照文档编码规范)>文档归类:<文档归类>作者:李程扬创建时间:2005-11-14修改时间:2005-11-15版本号:v1.0文档传阅:一、数据库对象创建及命名规范1、数据库字段及对象命名规范a.数据库命名规范与PB编程规范对命名方式的约定可相互参照;b.命名单词间分隔用下划线[_],尽可能使用与业务相匹配的单词或其缩写;c.绝对不允许使用拼音首码及简单数字的命名方式;d.Oracle对于对象或字段名称长度有限制,最多31个字符;2、字段定义及类型说明a.字段定义仅能使用以下类型i.date:日期时间类型,存入日期字段的数据若未指明时间,时间缺省就是[00:00:00];若未指明日期,则日期缺省是[1900-01-01];对于年份[number(4,0)]与月份[number(6,0)]这类数据,一般用number类型定义;ii.number:数值类型,字段所占空间与每一行数据相关,即有多少存多少;要注意其定义小数位是包含在总长度中,如number(12,2)——总长度为12位,其中小数占2位;iii.char:定长字符串类型,不论字符串信息多少都要占用所定义长度的空间,不足的部分用空格填充;对于一些更新操作比varchar2效率高;长度限制为255;iv.varchar2:非定长字符串类型,字符串信息多少就占多少空间,所以对于此类型数据在存入数据库前要去空格,以防止多余空格造成字段关联错误;相比char可节省很多存储空间,某种程序上可提高网络传输效率;长度限制为4000个字符;v.clob:一般存大于4000个字节的字符串信息,如数据窗口的语法;vi.blob:一般存二进制数据,如图片;b.对于字符串类型,除数据固定长度字段(如char(1)、SICK_ID),其它情况都必须使用varchar2类型;c.对于number与varchar2类型,在定义时要预留足够的长度,因为这两种类型都是按实际数据来分配存储空间,这样才能避免数据需求变长,字段长度修改造成程序错误(数据窗字段及数值变量小数位定义);d.应尽量使用number类型定义代码、状态字段;相比char或varchar2,这可最大程度地节省空间,并可显著提度检索效率;当然,同类型已定义的字段,为兼容原先设计,还是必须使用旧的类型定义;e.字段命名约定i.字段名称不必像PB变量使用前缀来标识其数据类型;ii.字段常用后缀如下ID/No表示唯一的序列号标识;其中ID多用于表示对人或物的标识,即指的是一种标志(如Sick_ID);而No多用于对连续号或流水号的标识(如单据号Apply_No)Code 表示项目代码(如项目代码Item_Code)Name 表示名称(如项目名称Item_Name)Class 表示类别(如单据类别Apply_Class)Operator 表示操作员(类型用varchar(27),如Apply_Operator)Time 表示日期或日期时间(如Audit_Time)Dept 表示科室(如开单科室Apply_Dept)Flag 表示标志(字段类型用char(1),值为Y或N)Status 表示状态(字段类型用char(1))iii.常见业务字段名称及类型定义如下3、数据库对象定义说明:创建对象时一定要指定是在哪个模式下面a.表i.下面列出建表步骤(一般在PB6中新建表,再拷出相应建表语法)建表语法创建主键及索引创建同义词对象授权(所有新建对象都必须授权给zhiydba)ii.对于表命名有以下常用后缀_master:主表_detail:细表_record:记录表_dict:系统字典/用户字典_config:用户配置表iii.不推荐使用表外键约束,也不推荐除空值以外的其它约束检查,这类约束判断一般在程序中处理;b.主键:一种特殊的索引i.主键名都是以pk_作为前缀,后面一部分用表名,即pk_+表名ii.所有表都必须创建主键,否则这些表就没办法做更新操作c.索引i.索引名以idx_作为前缀,后面一部分用表名+索引相关列名或其缩写ii.创建索引时一定要记得指明其所在模式(一般与表在同一模式下),这一点程序员常会遗漏;iii.索引也要区分是唯一索引还是可重复索引;iv.要查询的列尽可能创建索引,一般不推荐使用多列组合索引,而应分开建立索引;如病人ID或查询时间字段;另外,用到组合索引时要注意索引列的顺序;v.一个表索引最多不能超过7个,否则会影响数据更新效率,且占用存储空间,即:索引越多、查询效率高、但更新操作慢、存储占用高;vi.对于值内容单一(如只有0与1)或大部分数据是空值的字段不用建索引;对于某些数据量很少的表(如字典),也是不用建索引;d.视图:其命名以v_作为前缀,统一建在zhiydba模式下(可省去授权)e.序列号:其命名以_seq作为后缀,统一建在zhiydba模式下;主要用于数据表的主键字段取唯一值(如单据号),对于字典代码就没必要用序列号;f.同义词:创建相应对象的同义词主要是便于编程(public),做到对象模式无关g.用户:即模式h.函数及存储过程:除非开放接口给其它软件供应商,否则不使用这两类对象,因为包(package)就可代替其功能,并便于分类组织;i.后台包/Java包:不用深入了解,知道有这些东西就可;j.后台任务(Job):后台计划任务执行,通过dba_jobs可查询当前在执行任务;k.触发器:Oracle的触发器一般都认为在事务处理上不安全,所以除非特殊接口,否则不准使用触发器;二、Oracle常用函数1、Oracle的PL/SQL语言是对SQL的过程性语言扩展,当前Oracle的SQL语法遵循SQL92标准;2、完整PL/SQL函数集可查阅\\Research\ZHIS4_Tools\Database\Oracle8i资料\doc\server.816\a76989\toc.htm3、字符串相关函数a.||:字符串合并操作符b.trim:去字符串前后空格,一定要记住存取字符串数都要调用此函数去空格c.substr:截取字符串的一部分内容,也PB的mid函数功能一样d.to_char:将数值型或日期型数据转化为字符类型,如to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')e.lpad/rpad:在串值左/右重复填充指定的字符串,与PB的fill函数功能类似f.upper/lower:字符串都转为大写/小写4、日期相关函数a.+/-:加/减天数操作符b.to_date:将字符串类型数据转为日期型信息,如to_date('2005-11-15','yyyy-mm-dd')c.trunc:去掉时间那部分信息,常用于按日期检索数据d.add_months:增加月份5、数值相关函数:a.to_number:将字符串类型数据转为数值型,如to_number(to_char(operation_time,'yyyymmdd'))要注意,如果待转化数据包含非数字内容,就会报Oracle错误b.trunc:按指定小数位精度截取6、其它函数a.nvl:空值判断,这是很常用的函数;对于PL/SQL的空串与空值是一样的,即在SQL语法中没必要像PB一样判断空串;b.decode:条件分支判断,if elsec.sign:判断数值的符号,可用于>或<判断,常与decode合起来使用;7、伪列:在SQL语法中可以和普通列一样使用a.sysdate:取当前数据库所在服务器的时间——系统时间b.rownum:用于限制检索行数c.rowid:当前检索行的唯一内部定位标识符8、序列号取值:nextval,取序列号的下一数值9、特殊表:dual10、解析表列类型信息的命令:desc(describe)三、Oracle事务处理1、事务概念a.在PB编程中,事务开始于SQL更新操作或行锁,结束于提交(commit)或回滚操作,即一个事务的开始与结束是隐式由系统自动控制;b.在中断任何事务前(如弹出提示框或窗口),一定要把事务提交或回滚;c.注意:任何出错函数都会自动把事务回滚,再弹出相应提示;要注意判断返回值2、并发控制(锁机制/资源争用):多用户操作程序必须会遇到并发问题,数据库系统中一般通过锁来防止并发a.锁类型/锁粒度:PB编程中常用到的是排它锁,而Oracle内部处理一般是共享锁(如update/delete操作)i.行级锁:select for update语法;推荐在程序中使用;ii.表级锁:lock table语法;杜绝在程序中使用表级锁,除非是同一事务中对表的所有数据进行修改操作,否则极易引发数据库阻塞;b.死锁类型i.行间死锁:在不同事务处理中,a行与b行的锁表顺序相反;ii.表间死锁:在不同事务处理中,A表与B表的锁表顺序相反;c.死锁与阻塞:可认为两者是共生的,都源于对数据库资源未能及时释放i.死锁:Oracle对于死锁会在一定时间范围内检测到并自动解锁,但此过程需占有大量资源,大量事务并发死锁时常造成数据库变慢,客户端操作没有响应,严重情况下会引起系统崩溃;若Oracle没能及时解锁,这时数据库就会发生大量阻塞;ii.阻塞:一般是程序事务处理长时间未能提交或回滚,导致事务所占数据库资源未能释放,系统响应时间变量,大量阻塞也会使平常不会出现的行级死锁大量出现,从而使系统陷入资源争用的死循环,除非这时手工干预或引发阻塞的事务释放资源,否则最终结果必然是系统崩溃;iii.系统崩溃:指数据库系统对客户端操作无任何响应,且客户端无法连接;数据库所在服务器(一般是windows2000)对鼠标或键盘操作也无响应,这种情况下只能是重启服务器;四、数据库编程容错1、SQL执行语句容错:任何数据库操作都必须判断是否正确执行(sqlca)a.查询语句错误判断(select/cursor/execute immediate)sqlca.sqlcode:=0(正确),-1(出错),f_sqlerr/sqlca.sqlcode=100b.更新语句错误判断(update/insert/delete)sqlca.sqlcode/sqlnrows:数据更新影响行数,f_sqlerror2、PB程序错误判断a.数据窗口更新错误判断:update(true,false)=1/resetupdateb.数据窗口内部错误处理:dberror事件c.应用级错误:systemerror事件五、SQL执行效率问题1、客户端等待最占用时间的部分就是数据库操作及网络传输,网络问题不是这文档所涉及的,下面主要针对数据库操作讲一些常用优化方法;2、Oracle的SQL语法从提交命令到输出结果一般要经过以下几步:语法分析、语义分析、执行路径分析、……3、Oracle的优化方式:基于规则(base rule)/基于选择(base choose),一般推荐用基于选择(base choose)的优化方式,但可在检索语法中设置特殊的优化方式;4、SQL查询语句优化列举:尽可能利用索引,减少表间关联字段a.关联的字段不能加上使用表达式(函数、计算式等),特殊是修改数据窗口的检索条件时(SetSQLSelect),如:to_char(operation_time,'yyyy-mm-dd')=正确的写书方式应为:selectfrom dispensary_sick_price_itemwhere operation_time >= to_date('2005-11-15','yyyy-mm-dd')and operation_time < to_date('2005-11-16','yyyy-mm-dd');b.特别要注意对于字符型字段与数值参数关联(或反过来数值型字段与字符参数关联),一定要把参数先转化为与字段同样的类型,否则即使字段有建索引也没办法用到,因为Oracle分析SQL语法时会自动把字段加上相应的函数处理以匹配参数;即所有参数类型定义应与所关联字段匹配,或对类型转化要显示在参数中处理;c.多表关联时,尽可能使用主键列;d.尽可能用exists/not exists语法,而不是in/not in语法;一般若子查询数据量较小可用in语法,若子查询行数可能会超过100条,则必须使用exists语法,且Oracle的in语法有最多999行限制;e.尽量使用绑定变量,主要是动态执行的SQL语法(用动态游标),这样可在SQL执行预处理时省却语法分析阶段所占的时间,特别是在循环语句中;f.char和varchar2字段类型关连:i.char与char:不论两字段长度定义如何,都能利用索引;ii.varchar2与varchar2:也与其长度定义无关,但要注意要么后面都没空格,要么空格数量要一致才能用到索引;iii.char与varchar2:除非varchar2字段空格补足到与char定义长度一样,否则没办法用到索引;g.对于大数据量表新建索引时,一定要记得分析索引analyze index comm.PK_IC_CARD_DEPOSIT(索引名) compute statistics;5、判断SQL执行情况的方法:可通过在SQLPlus设置以下命令,然后执行所要分析的SQL语法,就可以得到其执行路径与执行时间等信息set autotrace on/set autotrace traceonly(不显示所检索的数据)set timing on6、大幅提高批量数据处理效率的方法——后台包,如床位计价、每日报表基表数据生成等;对于一些医院业务高峰常用模块(如住院摆药、单据扣费等)也常把这类业务写在后台包中处理;7、数据库连接接口:正常情况下都是使用PB原生Oracle接口,且按其客户端配置尽可能用高版本的Oracle客户端;六、数据库操作安全问题1、不准在PB的数据库管理窗口中执行SQL更新语法,必须在sqlplus执行,这样才能判断执行结果,防止更新语法写错(如where条件写漏了),以决定提交(commit)还是回滚(rollback);2、更新数据前先用相同条件的select语法查看,且把检索出的数据导出备份(用PB或程序员助手),以便出错时恢复数据(很有中能SQL语法没错,但需求是错的);3、除非是清库才使用truncate table语法(直接提交,无法回滚,且无数据库日志),否则删除所有数据只能使用delete from 语法;七、数据库管理相关1、Oracle数据库文件a.初始化文件:initzhis4.ora与spfilezhis4.ora(Oracle9i才有)b.密码文件:可用命令orapwd创建c.控制文件:control filed.数据文件:Oracle系统文件、临时表空间文件、回滚段数据文件、用户数据文件e.日志文件:在线日志与归档日志2、手工启动/关闭数据库实例a.启动实例(初始化文件):startup nomount->alter database mountb.启动实例(控制文件):startup mount->alter database openc.启动实例(数据文件):startup/startup opend.关闭实例:shutdown immediate3、数据库备份机制:a.[硬件]双机热备b.[软件]文件备份(在线热备/离线冷备)c.[软件]导出备份(全库导出/增量导出)4、重建数据库相关(详细步骤参见创建数据库步骤.txt)a.修改数据库实例名:创建实例,init文件实例参数修改,重建控制文件b.数据库文件路径修改:init文件控制文件路径修改,重建控制文件c.实例名与数据库文件路径都不变:拷到相同目录,直接启动。
Toad for Oracle标准操作指南(规范开发流程)v2.5
Toad for Oracle标准操作指南(规范开发流程)Quest Software2012版本信息目录1序 (5)2开发流程剖析 (5)2.1标准开发流程描述 (5)2.2Toad推荐流程 (5)3标准操作指南 (7)3.1准备开发环境 (7)3.1.1准备 (7)3.1.2目的 (7)3.1.3操作 (7)3.2PL/SQL业务逻辑设计 (8)3.2.1准备 (8)3.2.2目的 (9)3.2.3操作 (9)3.3测试用例设计 (9)3.3.1准备 (9)3.3.2目的 (9)3.3.3操作 (10)3.4PL/SQL程序编写 (12)3.4.1准备 (12)3.4.2目的 (13)3.4.3操作 (13)3.5PL/SQL格式化 (14)3.5.1准备 (14)3.5.2目的 (14)3.5.3操作 (14)3.6PL/SQL编译 (16)3.6.1准备 (16)3.6.2目的 (16)3.6.3操作 (16)3.7PL/SQL代码规范性检查 (17)3.7.1准备 (17)3.7.2目的 (17)3.7.3操作 (17)3.8PL/SQL单元测试 (19)3.8.1准备 (19)3.8.2目的 (19)3.8.3操作 (19)3.9PL/SQL调试 (21)3.9.1准备 (21)3.9.2目的 (22)3.9.3操作 (22)3.10PL/SQL代码规范性第二次检查 (23)3.11PL/SQL代码性能检查 (23)3.11.1准备 (23)3.11.2目的 (23)3.11.3操作 (23)3.12PL/SQL性能优化 (24)3.12.1准备 (24)3.12.2目的 (24)3.12.3操作 (24)3.13SQL与PL/SQL代码可扩展性测试 (26)3.14数据库对象发布 (27)3.14.1准备 (27)3.14.2目的 (27)3.14.3操作 (27)1序通过实际案例描述Toad的标准操作,目的是使两个项目组的每一位开发者(包括测试者)都可以使用Toad完成所有常规操作。
Oracle设计规范!
Oracle设计规范!⼀哥们整理的Oracle的设计规范,相当的不错,贴这以备后续之需!⽬录1、数据库模型设计⽅法规范1.1、数据建模原则性规范1.2、实体型之间关系认定规范1.3、范式化1NF的规范1.4、范式化2NF的规范1.5、范式化3NF的规范1.6、反范式化冗余字段使⽤规范1.7、数据库对象命名基本规范2、表的设计规范2.1、表的主键规范2.2、表的主键列规范2.3、使⽤注释的规范2.4、⼀个表所含字段总长度的规范2.5、⼀个表所含字段访问频繁度的规范2.6、⼀个表所含数据量的规范2.7、⼤对象字段(BLOB,CLOB)使⽤规范2.8、增量同步表的设计规范2.9、表的表空间使⽤规范2.10、索引的表空间使⽤规范3、设计分区表的规范3.1、RANGE分区的规范3.2、LIST分区的规范3.3、HASH分区的规范3.4、RANGE-LIST分区的规范3.5、RANGE-HASH分区的规范4、索引的设计规范4.1、主键索引的规范4.2、唯⼀约束索引的规范4.3、外键列索引的规范4.4、复合索引的规范4.5、函数索引的规范4.6、位图索引的规范4.7、反向索引的规范4.8、分区索引的规范4.9、索引重建的规范5、SQL访问规范5.1、避免SELECT *5.2、避免笛卡尔运算5.3、使⽤CTAS备份5.4、INSERT时需写全列名5.5、⼤数据量的DML5.6、完成事务及时commit5.7、java的变量绑定5.8、perl的变量绑定5.9、避免重复访问:使⽤group5.10、避免重复访问:竖向显⽰变横向现实5.11、避免重复访问:⽤表更新表5.12、数据库连接及时关闭6、实施规范6.1、Oracle版本规范6.2、数据库部署规范6.3、Oracle内存初始化6.4、Oracle字符集选择规范6.5、Oracle归档规范6.6、磁盘结构规范6.7、数据⽂件形式6.8、开发⼈员的备份规范1、数据库模型设计⽅法规范1.1、数据建模原则性规范原则对于涉及数据库的项⽬,需要构建数据库逻辑模型图,逻辑模型图是项⽬组成员之间在数据库层⾯沟通交互的依据,必须规范画图(表,主键,外键,关系)衡量对于表的个数在20个以上的模型,需要数据组参与设计,并需DBA作最终审核⽅法对于OLTP系统,采⽤范式化思想进⾏模型设计,对于OLAP系统,采⽤⾯向问题及多级颗粒度的思想进⾏模型设计实施采⽤主流的模型设计软件⼯具PowerDesigner,ERStudio,ERWin 1.2、实体型之间关系认定规范原则所有实体型间的业务逻辑关系,除了语义上保留其原有的业务关系外,本质上都要转化成关系数据库的三种关系(1:1)(1:N)(N:M)衡量对于3个及以上实体型之间的“多元关系”,需要数据组参与设计衡量对于3个及以上实体型之间的“多元关系”,需要数据组参与设计⽅法⽐如实体型A和实体型B之间的关系,可以通过问两个问题来确定他们之间的关系:⼀个A可以对应⼏个B?⼀个B可以对应⼏个A?(1)⼀个A对应⼀个B,相反⼀个B对应⼀个A,那么A对B就是1:1关系;(2)⼀个A对应多个B,相反⼀个B对应⼀个A,那么A对B就是1:N关系;(3)⼀个A对应多个B,相反⼀个B对应对个A,那么A对B就是N:M关系;实施(1)1:1关系选取任何⼀个表的主键到另⼀个表中作为外键来体现;(2)1:N关系将1表的主键在N表中以外键形式存在来体现;(2)N:M关系采⽤“关系表”来体现,该关系表的主键是由相关实体表的主键组成的符合主键,各实体表主键不但组成了该关系表的主键,同时也被看作外键在该关系表中存在;(4)对于三个以上表之间的“多元关系”常需要和反范式化冗余字段结合起来设计,以保证查询速度;1.3、范式化1NF的规范原则OLTP系统的模型,需要符合第三范式衡量对于表在20个以上的模型,需要数据组参与设计⽅法范式化要求:INF:列是访问的最⼩单位,具有原⼦性,不可再被分割;实施依据具体情况对相应属性进⾏拆分或者合并。
ORACLE对象命名规范
科技提升品质管理保证质量服务创造价值创新确保领先ORACLE数据库对象命名规范编写:高帅审核:批准:修改说明目录1引言 (4)1.1目的 (4)1.2范围 (4)1.3参考资料.......................................................................... 错误!未定义书签。
2国网标准化命名规范 (4)2.1基本原则 (4)2.2实体(表)的英文命名规则 (4)2.3属性(列)的英文命名规则 (5)2.4主键的英文命名规则 (5)2.5外键的英文命名规则 (5)3内部补充命名规范................................................................. 错误!未定义书签。
3.1表分区(P ARTITION) (5)3.2索引(I NDEX) (6)3.3视图(V IEW) (6)3.4物化视图(M ATERIALIZED V IEW) (6)3.5临时表 (6)3.6触发器(T RIGGER) (6)3.7过程(P ROCEDURE) (6)3.8函数(F UNCTION) (7)3.9包(P ACKAGE &P ACKAGE B ODY) (7)3.10序列发生器(S EQUENCE) (7)3.11数据链接(D ATABASE L INK) (7)3.12类型(T YPE &T YPE B ODY) (7)3.13角色(R OLE) (7)3.14目录(D IRECTORIE) (7)3.15表空间(T ABLESPACE) (7)4附录 (8)4.1常用缩写简表 (8)1引言1.1目的本规范的目的是让数据库设计人员,在进行数据库对象设计时,确保命名的标准化、规范化。
通过建立命名规范,促使每个设计人员养成良好的习惯,提高对象的可识别性,促进团队交流和新员工的学习,以保证软件产品的质量。
Oracle数据库安全配置规范【华为】
目录1概述 (2)1.1适用范围 (2)1.2内部适用性说明 .......................................................................................................... 错误!未定义书签。
1.3外部引用说明 .............................................................................................................. 错误!未定义书签。
1.4术语和定义 .................................................................................................................. 错误!未定义书签。
1.5符号和缩略语 (2)2ORACLE安全配置要求 (2)2.1账号 (2)2.2口令 (7)2.3日志 (11)2.4其他 (13)1概述1.1适用范围本规范明确了Oracle数据库安全配置方面的基本要求。
1.2符号和缩略语2ORACLE安全配置要求本规范所指的设备为ORACLE数据库。
本规范提出的安全配置要求,在未特别说明的情况下,均适用于ORACLE数据库。
本规范从ORACLE数据库的认证授权功能、安全日志功能,和其他自身安全配置功能提出安全要求。
2.1账号ORACLE应提供账号管理及认证授权功能,并应满足以下各项要求。
2.1.1按用户分配帐号2.1.2删除或锁定无关帐号2.1.3限制SYSDBA用户的远程登录2.1.4用户权限最小化2.1.5使用ROLE管理对象的权限2.1.6控制用户属性2.1.7启用数据库字典保护2.2口令2.2.1静态口令认证的密码复杂度控制2.2.2静态口令认证的密码生命周期2.2.3静态口令认证的密码重复使用限制2.2.4景泰口令认证的连续登录失败的帐号锁定策略2.2.5更改数据库默认帐号的密码2.2.6操作系统级的帐户安全策略2.3日志2.3.1登录日志功能2.3.2DDL日志2.3.3数据库审记2.4其他2.4.1VPD与OLS2.4.2Data Vault2.4.3Listener设定密码保护2.4.4设定信任IP集2.4.5加密网络传输2.4.6断开超时的空闲远程连接2.4.7限制DBA组中的操作系统用户数量。
Oracle数据库开发实用教程第四章
执行脚本文件:使用START或“@”命令
• 语法格式:START filename[.sql] [arg1 arg2] 或者@filename • 例如:SQL>@ d:\testscript.sql;
文件操作命令
脚本文件的注释 REMARK:单行注释,放在一行语句的头部,表示该 行为注释 --:单行注释
• • • • • • • • SQL>SELECT emp_no,ename FROM scott.emp WHERE deptno=&no AND job=’&v_job’; 输入no的值:10 输入v_job的值:MANAGER 原值1:SELECT emp_no,ename FROM scott.emp WHERE deptno=&no AND job=’&v_job’; 新值1:SELECT emp_no,ename FROM scott.emp WHERE deptno=10 AND job=’MANAGER’; EMPNO ENAME ----- -------7782 CLARK
文件操作命令
SQL脚本文件:可以存储经常执行的SQL*Plus命令、 SQL语句或PL/SQL程序。 SQL*Plus对SQL脚本文件的操作包括脚本文件的创建 、文件的装载、编辑和执行 脚本文件的创建
命令格式:
• SAVE filename [CREATE]|[REPLACE]|[APPEND]
文件操作命令
SQL语句和PL/SQL块会保存到SQL缓冲区中,而SQL*Plus命令 不会自动保存到缓冲区中,可以使用INPUT命令,将SQL*Plus命 令输入到缓冲区,然后使用SAVE命令保存包含SQL*Plus命令在 内的查询语句到指定的文件 例如: SQL>clear buffer buffer已清除 SQL>INPUT 1 COLUMN sal HEADING 'MONTHLY SALARY' 2 SELECT ename,job,sal from scott.emp 3 SQL>save d:\testscript replace 已写入file d:\testscript.sql 注意:此时无法执行缓冲区的内容,但是可以执行相应的脚本文件
数据库设计与开发规范
数据库设计与开发规范1.数据库命名规范:-数据库名、表名、字段名应使用小写字母,并用下划线分隔单词,避免使用特殊字符或关键字。
-数据库、表、字段名应具有描述性,能够清晰地表达其含义。
2.表设计规范:-表应具有主键,用于唯一标识每一条记录。
-表应遵循第三范式,避免数据冗余。
-避免使用过多的表关联,以提高查询效率。
3.字段设计规范:-字段应具有合适的数据类型,确保数据完整性和查询效率。
-字段应具有明确的含义,避免使用模糊或缩写的名称。
-字段应尽量避免为空,除非确实需要。
4.索引设计规范:-针对经常被查询的字段,可以创建索引以加快查询速度。
-索引应选择适当的数据结构和算法,以提高查询效率。
-避免创建过多的索引,以降低写操作的开销。
5.SQL语句规范:-SQL语句应使用缩进、换行等格式化方式,提高可读性。
-避免直接使用字符串拼接的方式构建SQL语句,以防止SQL注入攻击。
-避免使用SELECT*,尽量指定需要查询的字段。
6.数据库安全规范:-设置合适的账号和密码,确保只有授权的用户可以访问数据库。
-定期备份数据库,以防止数据丢失。
-对于敏感数据,应加密存储,确保数据安全性。
7.性能优化规范:-避免每次查询都进行全表扫描,通过合适的索引和优化SQL语句提高查询效率。
-合理分析查询日志和慢查询日志,找出性能瓶颈并进行优化。
-定期进行数据库表的优化和碎片整理,提高数据库性能。
8.数据库文档规范:-对于重要的数据库、表和字段,应编写相应的文档,包括设计意图、用途和使用方法等。
-更新数据库结构时,应及时更新数据库文档以保持一致性和可维护性。
以上是一些常用的数据库设计与开发规范,通过遵守这些规范可以提高数据库系统的可靠性、可维护性和性能。
此外,规范的制定也依据具体的应用场景和业务需求,不同项目可能会有不同的规范要求。
oracle命名规范
1、编写目的使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。
2、适用范围本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工作。
3、对象命名规范3.1 数据库和SID数据库名定义为系统名+模块名Ø全局数据库名和例程SID名要求一致Ø因SID名只能包含字符和数字,所以全局数据库名和SID名中不能含有“_”等字符3.2 表相关3.2.1 表空间Ø面向用户的专用数据表空间以用户名+_+data命名,如Aud用户专用数据表空间可命名为Aud_dataØ面向用户的专用索引表空间以用户名+_+idx命名Ø面向用户的专用临时表空间以用户名+_+tmp命名Ø面向用户的专用回滚段表空间以用户名+_+rbs命名Ø面向应用的表空间以应用名+_data/应用名+_idx/应用名+_tmp/应用名+_rbs命名ØLOB段数据专用表空间以其数据表空间+_+lobs命名,如上例中数据表空间为Aud_data,则LOB段表空间可命名为Aud_data_lobs3.2.2 表空间文件表空间文件命名以表空间名+两位数序号(序号从01开始)组成,如Aud_data01等3.2.3 表表命名要遵循以下原则:Ø一般表采用“系统名+t_+模块名+_+表义名”格式构成Ø若数据库中只含有单个模块,命名可采用“系统名+t_+表义名”格式构成Ø模块名或表义名均以其汉语拼音的首字符命名,表义名中汉语拼音均采用小写,且字符间不加分割符;Ø表别名命名规则:取表义名的前3个字符加最后一个字符。
如果存在冲突,适当增加字符(如取表义名的前4个字符加最后一个字符等)Ø临时表采用“系统名+t_tmp_+表义名”格式构成Ø表的命名如dft_gy_cbap:系统名(电费df)+t_+模块名(高压gy)+_+表义名(抄表安排cbap)dft_cbbj: 系统名(电费df)+t_+表义名(抄表标记cbbj)dft_tmp_hj: 系统名(电费df)+tmp+表义名(合计hj)(此处为临时表)Ø关联表命名为Re_表A_表B,Re是Relative的缩写,表A和表B均采用其表义名或缩写形式。
oracle数据库标准
oracle数据库标准Oracle数据库标准。
Oracle数据库是全球领先的企业级关系数据库管理系统,被广泛应用于各种规模的企业和组织中。
作为数据库管理员或开发人员,了解和遵循Oracle数据库的标准是至关重要的。
本文将介绍Oracle数据库的标准,并对其重要性进行探讨。
首先,Oracle数据库标准涵盖了数据库设计、数据存储、查询优化、安全性和可靠性等方面。
在数据库设计阶段,应该遵循Oracle的设计规范,包括表的范式化、索引的创建和外键约束的应用。
此外,数据存储方面需要考虑到表空间的管理、数据文件的组织和存储结构的优化。
在查询优化方面,需要根据实际业务需求设计合适的查询语句,并利用索引、分区等技术提升查询性能。
同时,数据库的安全性和可靠性也是Oracle数据库标准中不可或缺的部分,包括用户权限管理、数据备份和恢复策略等。
其次,遵循Oracle数据库标准的重要性不言而喻。
首先,遵循标准可以提高数据库系统的性能和稳定性。
通过合理的设计和优化,可以降低数据库的响应时间,提升系统的吞吐量,从而提高业务处理效率。
其次,遵循标准可以降低系统维护成本。
规范的数据库设计和管理可以减少系统故障和数据损坏的风险,降低维护成本和风险。
最后,遵循标准可以提升开发人员的工作效率。
规范的数据库结构和查询优化可以减少开发人员的工作量,提升开发效率,缩短系统上线时间。
在实际应用中,我们应该如何遵循Oracle数据库标准呢?首先,需要充分理解Oracle数据库的设计原则和最佳实践,包括官方文档、技术博客和培训课程等。
其次,需要结合实际业务需求进行数据库设计和优化,避免盲目套用标准,应用灵活性和创新性。
同时,需要建立完善的数据库管理和监控体系,及时发现和解决数据库性能和安全问题。
最后,需要不断学习和更新数据库技术知识,跟随Oracle数据库的发展和变化,不断优化和改进数据库系统。
综上所述,Oracle数据库标准是数据库设计和管理的重要指导原则,遵循标准可以提高数据库系统的性能和稳定性,降低维护成本,提升开发效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程规范1:所有数据库关键字和保留字都大写;字段、变量的大小写2:程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。
必须使用空格,不允许使用【tab】键。
3:当同一条语句暂用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。
4:不允许多个语句写到一行,即一行只写一条语句。
5:避免把复杂的SQL语句写到同一行,建议要在关键字和谓词处换行。
6:相对独立的程序块之间必须加空行。
BEGIN、END独立成行。
7:太长的表达式应在低优先级操作符处换行,操作符或关键字应放在新行之首。
不同类型的操作符混合使用时,用括号隔离,使得代码清晰。
8: 不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系。
9:运算符以及比较符左边或者右边只要不是链接的括弧,则空一格。
10:if 后的条件要用括号括起来,括号内每行最多两个条件。
11:减少控制语句的检查次数,如在else( if..else)控制语句中,对最常用符合条件,尽量往前被检查到。
尽量避免使用嵌套的if 语句,在这种情况应使用多个if 语句来判断其可能。
命名规范1:不使用数据库关键字和保留字,为了避免不必要的冲突和麻烦。
2:严禁使用带空格的名称来给字段和表命名,会出错误而终止。
3:用户自定义数据库对象:表,视图,主外键,索引,触发器,函数,存储过程,序列,同义词,数据库连接,包,包体风格要保持一致。
数据库名称1-8个字符,其他对象1-30个字符,数据库连接不操过30个字符。
使用英文字母、数字、下划线。
除表外,其他对象命名最好用不同的前缀来区别。
表tbl_/t_视图v_序列seq_簇c_触发器trg_存储过程sp_/p_函数f_/fn_物化视图mv_包和包体pkg_类和类体typ_主键pk_外键fk_唯一索引uk_普通索引idx_位图索引bk_4:PL/SQL对象和变量命名规则输入变量i_输出变量o_输入输出变量io_普通变量v_全局变量gv_常量大写游标cur_用户自定义类型type_保存点spt_不允许使用中文和特殊字符用户对象命名应全部为小写,且不允许使用控制符号强制转换对象为小写字符变量命名,要有具体含义,能表明变量类型。
5:注释规范源程序有效注释量必须在30%左右。
统一文件头的注释,针对存储过程,函数进行功能性描述,入出参数说明。
/******************************************************************* 名称:功能描述:修订记录版本号编辑时间编辑人修改描述入出参数说明返回值描述(针对函数)*******************************************************************/所有变量定义需要添加注释,说明该变量的用途和含义。
程序分支必须书写注释,这些语句是程序实现某一特定功能的关键。
在程序块的结束行加注释,表明程序块结束。
注释应与描述的代码相似,对代码的注释应在其上方或右方现今为止,不能放在下面。
禁止在注释中使用缩写,特别是非常用的缩写。
注释要与描述的内容进行相同的缩排。
注释上面的代码应空行隔开。
注释用中文书写。
尽量使用”--” 进行注注释。
行尾注释须使用”--” 。
6:分区表命名分区表的表名可以遵循普通表的正常命名规则。
主要用途的缩写+下划线+yymm。
按地域分布的子公司库存表(每个区域一个分区),分区名这为表的主要用途的缩写+区域的缩写。
最小分区名字为before_data 规则3.4.5:最大分区名字为after_data 规则3.4.5:子分区的名字为:父分区名+下划线+sub+ 下划线+no( 区域缩写),根据实际情况进行组合。
分区表本地索引命名在正常索引名的最后一个下划线前加L。
分区表全局索引命名在正常索引名的最后一个下划线前加G。
DML操作规范1:减少控制语句的检查次数,应将最常用的符合条件前置以便被检查到。
2:避免使用SELECT *语句,给出字段列表,避免出现在表结构变化时程序无法识别的情况。
3:INSERT 语句必须给出字段列表,避免在表结构变化时发生编译错误。
4:从表中同一笔记录中获取记录的字段值,须使用一SQL 语句得到,不允许分多条SQL 语句。
5:当一个PL/SQL 或SQL 语句中涉及到多个表时,始终使用别名来限定字段名,这使其它人阅读起来更方便,避免了含议模糊的引用,其中能够别名中清晰地判断出表名。
6:禁止进行字段数据类型的隐式转换,所有转换必须进行明确的数据类型转换说明:隐式转换会导致字段上的索引失效,而进行显式转换,会提醒到开发人员该种操作会导致索引失效7:禁止在多表关联的时候,在非索引字段上的关联;8:进行模糊查询时,禁止条件中字符串直接以“%”开头;9:尽量使用DECODE来简化SQL访问数据库的次数10:避免使用HAVING子句, HA VING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.11:当PL/SQL或SQL语句中涉及多个表时,始终使用别名来限定表名和字段名。
12:确保变量和参数在类型和长度上与表数据列相匹配,否则较宽或较大数据进来时会异常。
13:使用EXISTS/NOT EXISTS替代IN/NOT IN14:采用表连接替代EXIST15:复杂的SQL是否由设计不当引起,复杂的SQL考虑用程序块来执行。
处理的优先级静态SQL>动态SQL绑定变量的SQL>动态SQLSQL>PL/SQL过程SQL>游标遍历ORACLE函数>自定义函数16: 使用ORACLE分析函数来代替同一表多次的关联。
17: 使用动态SQL时要绑定变量。
18:不要把空的变量直接与比较运算符比较,如果结果可能为空,应使用IS NULL 货IS NOT NULL 或NVL函数进行比较。
19:order by 后面字段不唯一时分页会出现问题,分页时如果order by 后面的字段不唯一,一定要让order by 唯一,最佳方案是增加一pk,如实在没办法则可以追加rowid,order by 后尽量避免使用rowid。
20:聚集函数max、min、sum 在没有记录得符合查询条件的情况下返回null,不会产生no_data_found 异常。
21:避免频繁commit,尤其是把commit 写在循环体中每次循环都进行commit。
22:使用绑定变量,避免常量的直接引用。
23:避免不必要的排序24:对于数字型的唯一键值,用序列sequence 产生。
25:索引的规则:建立索引常用的原则如下:1)、表的主键、外键必须有索引2)、数据量超过1000 行的表应该有索引3)、经常与其它表进行连接的表,在边接字段上应建立索引4)、经常出现在where 子句中的字段且过滤性极强的,特别是大表的字段,应该建立索引5)、索引字段,尽量避免值为null6)、复合索引的建立需要仔细分析;尽量考虑用单字段索引代替;A. 正确选择复合索引中的第一个字段,一般是选择性较好的且在where 子句中常的字段上;B. 复合索引的几个字段是否经常同时以and 方式出现在where 子句中?单字段查询是否极少其至没有?如果是,则可以建立复合索引;否则考虑单字段索引;C. 如果复合索引中包含的字段经常单独出现在where 子句中,则分解为多个单字段索引;D. 如果复合索引所包含的字段超过3 个,那么仔细考虑其必要性,考虑减少复合的字段;E. 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;7). 频繁DDL 的表,不要建立太多的索引;8). 删除无用的索引,避免对执行计划造成负面影响;让SQL 语句用上合理的索引。
合理让SQL 语句使用索引的原则如下:首先,看是否用上了索引,对于该使用索引而没有用上索引的SQL 语句,应该想办法用上索引。
其次,看是否用上了索引,特别复杂的SQL 语句,当其中where 子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。
错误的索引不仅不会带来性能的提高,相反往往导致性能的降低。
26:like 子句尽量前端匹配数据库设计1:数据库设计文档中,必须包含表数据保留时间;2:数据库设计文档中,必须包含表在最大保留时间下的数据量;3:数据库设计文档中,如果表为分区表,必须包含分区条件;4:数据库设计文档中,必须包含表的读写频率;5:单SEGMENT (如单个普通表,分区表的单个分区,单个普通索引,分区索引的单个分区)原则上不得超过2GB大小;6:和其他表有关联的表,和其他表功能一致的字段类型以及长度,尽量使用相同的列名;7:禁止依靠设计数据库表之间的主外键关系来保证数据一致性;:8:需要UPDATE的字段,不得设计为分区条件字段;9:如无特别需要,原则上,字符类型选择变长字段,数字类型选择NUMBER;10:如无特别需要,原则上不得设定表的并发度,压缩等属性;11:无特别说明,每个表的索引,不得超过5个;单字段上的索引不得超过2个;(即一个单字段最多可在上面建立一个单字段索引和一个组合索引包含这个字段);复合索引原则上不得超过3个字段;12:原则上,分区表的索引必须是分区索引;13:频繁出现在where字句里的字段建议建立索引;14:用来和其他表关联的字段建议建立索引;15:索引字段建议有高的选择性和过滤性(count(distinctid)/count(*)>0.6);16:在where子句里作为函数参数的字段,不能创建索引,不建议建立函数索引;17:建立索引的时候,建议考虑到SELECT和INSERT,UPDATE,DELETE的平衡;18:一般建议在查询数据量10%以下使用索引;19:WHERE子句的查询条件构成索引字段前导字段;选择性更高的字段放在组合字段索引的前导字段;如果字段选择性接近,则把频繁查询的字段放在前面;如果字段查询频率相同,则把表中的数据的排列顺序所依据的字段放在前面;20:进行GROUP BY或者是ORDER BY的字段应在组合字段索引的前导字段;21:所有序列应设置CACHE值为不低于10022:如果要求获得的字段具有强连续和强排序性,则不适宜使用序列23:视图中不允许出现ORDER BY排序24:基于多表关联的视图,必须在字段名前指定表别名;视图的基础数据尽量从表中获取,尽量不要嵌套视图25:存储过程,必须有异常捕获代码在存储过程中变量的声明集中在AS和BEGIN中完成,不允许在代码中随意定义变量。
完成相同功能模块的变量放在一起,不同模块一空行隔开。
存储过程中严禁使用GOTO语句进行跳转有循环更新的存储过程,必须进行批量提交,且必须进行事务控制存储过程中如果打开了dblink,则在存储过程正常或者异常退出必须关闭所有打开的dblink存储过程中如果使用了游标,则在存储过程正常或者异常退出必须关闭所有打开的游标存储过程中如果有更新,必须在异常捕获代码中做回退操作。