使用sqlplus进行Oracle数据库批量自动发布

应用系统的更新发布在企业日常运维中是一件比较常见工作,有文件的备份替换,也会有数据库方面的更新操作。本文介绍如何通过一台装有sqlplus工具的中转机对不同应用的Oracle数据库进行自动化发布。


经常遇到使用PL/SQL图形化工具对Oracle数据库进行相关的更新操作,例如程序包、触发器、存储过程、视图以及表中的数据。如果是单用户对单台数据库更新少量的内容,这个操作还可以接受,如果数据库服务器比较多,并且要切换不同的用户去更新大量的内容,这种方式就会比较低效繁琐,面对这种场景,实现后台自动化更新就很有必要。


如何通过一台sqlplus中转机对不同的Oracle数据库在后台完成更新示意如下:

dcbf7b3628e1a3cd5062b52b9c74d17c

规范要求

按照上图示意在后台完成数据库的发布更新需要一定的规范支持,简单来讲就是要让sqlplus工具能很明确的获取到以下几点信息:


  • 更新时用什么账号去连接哪台服务器的哪个实例?

  • 账号对应的密码应该如何传递给sqlplus命令?

  • 更新的是程序包、存储过程还是视图?

  • 多个更新之间是否有前后依赖关系?


更新文件的命名规范

通过sqlplus命令去连接Oracle数据库完成一次更新需要账号、密码、Oracle服务器的IP地址、侦听的端口、实例名、更新文件所在的路径,用法如下:

0079nlvZly1g6udjqhr8nj30j701zdfo.jpg

其中账号、IP地址、端口、实例名属于可公开的信息,这一部分内容可以连同更新次序和更新类型一起组织到文件名称中


例如【次序_账号_IP_实例名_XXX.类型】,示例:

01_admin_1.1.1.1_insA_package.pck


密码和相关信息储存

通过sqlplus进行数据库更新时用到的相关信息在本例中是储存在sqlplus中转机上,只有root账号可以获取到,并且密码是以密文的形式储存,密码的密文储存在以下路径的文件中(文件名是账号的密文):.XXX/.IP地址/.账号的密文,数据库实例名和端口号储存在以下路径中的文件中:.YYY/.IP地址/.实例名,整个路径只有root账号可以访问。示例如下:


7b2ee822f8f0e75100d51ea082efd109


发布过程

更新文件相关规范已经确定好,发布过程可以使用编写好的脚本(shell或bat等)轮询执行要更新的文件,从sqlplus中转机依次将内容更新到对应的Oracle服务器。


本例结合嘉为"应用发布"这款SaaS将数据库发布过程流程化,调用发布脚本实现定时或实时更新,具体情况见下图:


1e1a37691cd0985ae18105273634b4af

无需逐个登录Oracle服务器,来回切换不同账号,更新过程中的日志如下图所示:


017d26e31468220ac03387faff89a2e9



其它说明

本例通过sqlplus发布Oracle更新,需要有以下几个前提:

  • 账号和密码信息要提前录入到sqlplus中转机(务必确保账号安全)

  • Oracle服务器相关信息(IP、端口、实例名)也需要提前录入到sqlplus中转机

  • 更新文件中的语法和符号必须规范(例如行尾的“;”号,包头包体结束位置的“/”)等等

  • 数据库、sqlplus客户端的编码尽量保持一致。


作者:徐晗



文章到此结束了~

想到中秋即将来临啦!有没有很期待呀~

在此先预祝大家中秋节快乐



佳节好文

业务复杂、数据庞大、应用广怎办?了解下分布式事务的解决思路!

SaaS设计:自动化服务启停设计示例 

这里有份选择云服务商的攻略,请查收…


猜你喜欢

转载自blog.51cto.com/11811406/2437208