作者 | LaoYuanPython 责编 | 欧阳姝黎
出品 | CSDN原力计划
引言
笔者及所在团队从 2000 年开始的 CRM 等系统开发,一直主要使用 Oracle 数据库作为应用数据库,开发方式包括使用 PLSQL 编写存储过程/数据库函数/触发器、使用 ODBC 或 OCI 和 ProC 开发 C 应用、使用 JDBC 开发 Java 应用、使用 tuxdeo 开发中间件应用等。这些应用开发笔者所在团队自己做过,也委托华为、亚信、思特奇等国内厂商合作做过,整体来说 Oracle 数据库功能强大、性能出众、系统健壮,确实是 OLTP 联机事务处理的最受欢迎的数据库。
因 Oracle 服务费居高不下、加上国产数据库也走出了一条自己的路,因此数据库国产化也越来越被提上日程,也有部分应用走出了成功之路,但众多传统应用进行国产数据库的改造需要大量投入,也需要一个逐步试点及改造的过程,因此 Oracle 仍然是国内众多单位持续应用的选择。
今天老猿结合二十余年的 Oracle 数据库应用开发和运维的经验教训,总结在使用 Oracle 数据库环境中的应用开发中需要注意的一些注意事项,这些问题不但可以作为 Oracle 数据库开发的注意事项,大多数也适用于常见的关系型数据库开发甚至非关系型数据开发。
实际上,在数据库应用开发上,开发和维护关联度是非常大的,好的开发设计会给维护带来极大方便。因此虽然维护关注的角度和开发有所不同,但在部分内容上二者是统一的。
禁忌1:触发器代码忌复杂
数据库触发器由于可以基于表级进行所有应用或手工 DML 操作数据增删改查的前向或后向处理,易于收敛逻辑,使用方便,容易受到众多开发人员的喜爱。
但在使用上触发器与操作数据的事务处于同一个事务,因此比较适合简单处理逻辑,切忌不能在触发器上使用复杂逻辑,一般推荐在 10 行左右代码比较适合,否则容易导致事务处理出现问题。
如果一定要通过触发器进行复杂逻辑处理,最好的做法是通过触发器将需要处理的数据写入到单独的任务表中,然后使用单独进程对任务表数据进行处理。这样能使得触发器和触发源二者的事务解耦,又能收敛相关数据处理。