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

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

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

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

规范要求

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

  • 更新时用什么账号去连接哪台服务器的哪个实例?
  • 账号对应的密码应该如何传递给sqlplus命令?
  • 更新的是程序包、存储过程还是视图?
  • 多个更新之间是否有前后依赖关系?

更新文件的命名规范

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

sqlplus 账号/密码@IP地址:端口/实例名 @更新文件

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

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

01_admin_1.1.1.1_insA_package.pck

密码和相关信息储存

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

发布过程

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

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

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

其它说明

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

  • 账号和密码信息要提前录入到sqlplus中转机(务必确保账号安全)
  • Oracle服务器相关信息(IP、端口、实例名)也需要提前录入到sqlplus中转机
  • 更新文件中的语法和符号必须规范(例如行尾的“;”号,包头包体结束位置的“/”)等等
  • 数据库、sqlplus客户端的编码尽量保持一致

作者:徐晗


其他讨论

赣州银行增强科技创新,实现一键灾备切换

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

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

Powershell 挖矿病毒处理与防范

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

原文发布于微信公众号 - 嘉为科技(canway_service)

原文发表时间:2019-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券