【PM】关于系统数据库和服务现场升级的一些看法
工作快满一年了,立即着手准备第二次出差去升级我们的系统,可是突然想到一件事情,让我颇有感触,是关于系统现场升级的。
我们迭代开发的系统隔一段时间就会须要到用户的现场去为其进行系统升级,当中升级包含client,服务端,以及数据库。
眼下我们的做法是什么?
升级服务的方法是,将带过去的新的服务全然替换掉旧的服务,然后人工改动全部服务的相关配置。
升级数据库的方法是。在自己的笔记本上面部署一套我们须要升级的版本号的数据库。然后到现场之后利用TOAD的schema的对照功能(我们用的是Oracle数据库)。逐个Schema进行对照,然后找出这些区别。手动将这些区别一个个在用户现场的数据库上进行改动,直到两个数据库一样为止。
并且非常多时候数据库的改动是针对一个功能的,可能建立触发器,job,序列,改动表什么的会存在一些先后顺序,假设不知道这些顺序就通过对照来升级。出错的概率非常大。
顺便提一句,我们的是CS系统。数据库中须要更新的改动包含表结构改动。元数据表的内容的改动,以及其它如序列,存储过程,触发器,Job等的改动。
好吧。我想说的是,服务数量和数据库涉及的Schema以及表的数量少一点的话还好,我们这样做还能应付,要是服务和数据库的Schema多了呢?
那就谁也不想出差了。出错的概率我感觉起码是90%以上,难道你还要搞完了以后现场驻扎測试3天?
个人觉得,我们为什么不这样做呢?
1、关于数据库升级
(1)公司开发环境的SVN为每个系统都维护一个系统目录。目录里面为每个Schema也建立一个Schema目录。每个Schema目录中都包括这样一些文档:“基于版本号X的数据库改动”。当中所有以SQL脚本的形式维护,记录了数据库的改动步骤以及改动人。
(2)系统文件夹的根文件夹以下维护一个文档,是当前现场的数据库各个Schema的版本,以及当前是谁在什么时候为其定版的。
就像以下一样:
在这个基础之上。假设下次你要出差,你所要做的事情就是:
查看当前用户现场的Schema发现各自是版本号25,26,26,26。那么你就到各自的目录以下。将相应的“基于版本号25的数据库改动”,“基于版本号26的数据库改动”,“基于版本号26的数据库改动”。“基于版本号26的数据库改动”这几个文件带上,到现场仅仅须要把文档里面的SQL脚本依次跑一下就可以。
文件中面还有是谁做的改动,这样你跑SQL脚本的时候有什么问题还能够打电话回来问相应的责任人。
然后你出差回来之后,你已经将这几个Schema升级了,所以你须要改动根文件夹以下的文档,进行定版:将相应的版本+1,然后定版历史注明谁在什么时候定版的。
然后还要到各自Schema的目录以下,建立新的文档。命名为“基于版本号X+1的数据库改动”。用于以后开发者记录在新的版本号上面所做的数据库改动。
这样不是非常方便么?
这种方法有一个原则,不能让不论什么人都有改动数据库的权限,要么仅仅有项目负责人来改动数据库,并在这里进行相应的记录,要么让改动数据库的人把SQL脚本发给项目负责人或者别人准们管数据库的人。来在这里记录。
总之。不论什么数据库的改动。须要让清楚我这个机制的人来允许。
2、关于服务升级
个人认为部署和升级服务最烦的就是配置项了(我们后台实用的是WCF服务)。
假设每次升级服务都要手动改动每一个服务的配置项明显不行。
我认为须要有一个统一的地方来进行全部服务的配置,即将整个系统的全部配置进行集中管理!!!
这就须要一个配置中心。整个配置中心维护了整个系统的配置信息。
(1)全部的服务在启动的时候訪问配置中心获取所需的配置项。
(2)现场部署人员能够通过简易的UI界面来操作这个配置中心,增删查改整个系统的配置项。
C#系统的话可能须要自己实现这么一个配置中心,前期能够仅仅做简单的一个节点的配置中心。
JAVA系统的话。能够使用开源的Zookeeper。能够作为集群来执行配置中心。
以上全然是个人在这样一家公司工作了将近一年之后的感受,即感觉到一些不好的地方。然后提出了自己的一些想法。
我的想法可能不是非常合理,这须要与更加成熟的公司的人进行交流才知道。
希望各位假设看了之后有想法和类似经验的,指教。小弟在此谢过。!
!!
【PM】关于系统数据库和服务现场升级的一些看法的更多相关文章
- ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计
ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理 ...
- 替换系统数据库解决SQLSERVER服务启动不了的问题
替换系统数据库解决SQLSERVER服务启动不了的问题 当遇到SQLSERVER服务启动不起来的时候,我们试过把系统的四个数据库master ,model ,tempdb,msdb 替换掉,Windo ...
- SQL Server 系统数据库恢复
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关 ...
- SQL Server 重新初始化系统数据库中的单引号问题
在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...
- CentOS7系统操作httpd服务 - 开机启动/重启/查看状态
第一.启动.终止.重启 systemctl start httpd.service #启动 systemctl stop httpd.service #停止 systemctl restart htt ...
- Linux系统自带服务罗列
/ect/services 文件列出了系统详细的服务 红色字体为常用服务 acpid ACPI(全称 Advanced Configuration and Power Interface)服务是电源管 ...
- sqlserver 标准系统数据库
SQL server系统数据库很重要,大部分时候都不应该修改他们.唯一例外的是model数据库和tempdb数据库.model数据库允许部署更改到任何新创建的数据库(如存储过程),而更改tempdb数 ...
- 关于SQL Server系统数据库详解
介绍这里我们介绍SQL Sever内部的系统数据库的作用和用户数据库之间联系,关于SQL Sever如何管理用户数据库的原理,对于每个数据库开发人员和DBA都是必须掌握的. SQL Sever系统数据 ...
- 中科图新成为Bentley产品培训合作伙伴!质量服务双升级
中科图新从2016年起开办ContextCapture产品培训,目前已累计培训了500多家企事业单位,涉及传统测绘单位.无人机航测.规划设计.建筑工程.水利.电力.交通.文保等十多个行业.实力过硬,口 ...
随机推荐
- java 抽象类 接口 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...
- 【51Nod 1815】【算法马拉松 23】调查任务
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1815 tarjan缩点后在DAG上递推即可. 每个点维护所有根到它的路径 ...
- hdu 4352 数位dp+nlogn的LIS
题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数. 链接:点我 该题的关键是记录LIS的状态,学习过nlogn解法的同学都知道,我们每次加入的元素要和前面的比对替换,这里就 ...
- SpringBoot 部署 docker 打包镜像
SpringBoot 部署 docker 打包镜像 环境: 1.代码编写工具:IDEA 2.打包:maven 3.docker 4.linux 7.JDK1.8 8.Xshell 9.Xftp 第一步 ...
- python开发_count()
python中的count()函数,从字面上可以知道,他具有统计功能 下面来看看具体的demo: 功能:读取一个文件'c:\\test.txt',统计出该文件中出现字符'a'的次数 #python o ...
- fork新建进程——父进程等待子进程结束
#include <sys/types.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h> ...
- JavaScript面试(-------------------------------------------)
this是什么 方法调用模式 构造器调用模式 函数调用模式 apply/call模式 this是什么 —大多语言中,’this’代表由类实例化的当前对象.在JavaScript中,’this’通常表示 ...
- Idea下Python开发平台的搭建
1. python的下载 https://www.python.org/downloads/ 2. idea下python插件的安装 点击File->Settings...->Plugin ...
- Android与Unity交互研究
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46733221 Android与Unity交互研究 unity与android交互的由来 ...
- 百度地图js小结
1.获取javascript API 服务方法,首先申请密钥(ak),才可成功载入APIJS文件. 用法例如以下: <script type="text/javascript" ...