关于系统数据库和服务现场升级的一些看法

本人目前在一家相当于创业公司吧。

工作也快满一年了,马上着手准备第二次出差去升级我们的系统,但是突然想到一件事情,让我颇有感触,是关于系统现场升级的。

我们迭代开发的系统隔一段时间就会需要到用户的现场去为其进行系统升级,其中升级包括客户端,服务端,以及数据库。

目前我们的做法是什么?

升级服务的方法是,将带过去的新的服务完全替换掉旧的服务,然后人工修改所有服务的相关配置。

升级数据库的方法是,在自己的笔记本上面部署一套我们需要升级的版本的数据库,然后到现场之后利用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,可以作为集群来运行配置中心。

以上完全是个人在这样一家公司工作了将近一年之后的感受,即感觉到一些不好的地方,然后提出了自己的一些想法。

我的想法可能不是很合理,这需要与更加成熟的公司的人进行交流才知道。

希望各位如果看了之后有想法和类似经验的,不吝赐教,小弟在此谢过!!!!

关于系统数据库和服务现场升级的一些看法

时间: 2024-10-27 12:48:37

关于系统数据库和服务现场升级的一些看法的相关文章

【PM】关于系统数据库和服务现场升级的一些看法

工作快满一年了,立即着手准备第二次出差去升级我们的系统,可是突然想到一件事情,让我颇有感触,是关于系统现场升级的. 我们迭代开发的系统隔一段时间就会须要到用户的现场去为其进行系统升级,当中升级包含client,服务端,以及数据库. 眼下我们的做法是什么? 升级服务的方法是,将带过去的新的服务全然替换掉旧的服务,然后人工改动全部服务的相关配置. 升级数据库的方法是.在自己的笔记本上面部署一套我们须要升级的版本号的数据库.然后到现场之后利用TOAD的schema的对照功能(我们用的是Oracle数据

ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计

ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理数据设计 Type:管理软件 Url: 1.A,数据库关系图(Database Diagram) 返回顶部 1.B,数据库设计脚本(Database Design Script)返回顶部 use master go -- =======================================

domino升级系统数据库

升级系统数据库 注意:不同命令和参数请勿同时执行,相同命令和参数可以同时执行多个. 在Domino 服务器的notes.ini中添加如下参数CREATE_R85_DATABASES=1 注意如果加在了最后一行,还要留一个空行. 1.修复系统数据库 1)       打开一个命令行窗口: 2)       进入Domino数据目录,例如“cd D:\Lotus\Domino\Data”(以实际数据目录路径为准): 3)       执行以下命令(以实际程序目录路径为准): D:\Lotus\Dom

Linux系统自带服务罗列

/ect/services 文件列出了系统详细的服务 红色字体为常用服务 acpid ACPI(全称 Advanced Configuration and Power Interface)服务是电源管理接口.建议所有的笔记本用户开启它.一些服务器可能不需要 acpi.支持的通用操作有:"电源开关","电池监视","笔记本 Lid 开关","笔记本显示屏亮度","休眠", "挂机",等等.

sqlserver 标准系统数据库

SQL server系统数据库很重要,大部分时候都不应该修改他们.唯一例外的是model数据库和tempdb数据库.model数据库允许部署更改到任何新创建的数据库(如存储过程),而更改tempdb数据库则是为了帮助扩展数据库以承担更多的负载. 1.Resource数据库 Resource数据库从SQL server 2005引进.它包含了SQL server运行所需的所有的只读的关键系统表.元数据以及存储过程.它不包含任何用户实例或数据库的任何信息,它只在安装新服务补丁时被写入.Resourc

SQL Server 重新初始化系统数据库中的单引号问题

在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中,有以下几个问题: 1:由于机房和IP已经发生变化,因此需要按照命名规则修改服务器名称. 2:原数据库上的数据如登录账号/作业/链接服务器等等需要删除 3:部分服务器因磁盘变动,仅保留系统盘,部分SQL Server文件(如果系统数据库文件)已经丢失 对于问题1和问题2,可以进行手动删除或者写个脚本

SQL Server四个“系统数据库”作用的简介

master.model.msdb.tempdb简称为“3M1T”,在后续的版本选择安装不同的组件后也有其他系统级数据库,如ReportServer.Distribution等,本次主要介绍3M1T数据库. [master数据库]:master数据库是SQL Server中最重要的数据库,记录了SQL Server系统中所有的系统信息,包括登入账户.系统配置和设置.服务器中数据库的名称.这些数据库文件的位置.系统进程. linked server及SQL Server初始化信息等.一旦数据库文件

SQL Server 2012笔记分享-38:了解系统数据库

master 数据库 记录 SQL Server 实例的所有系统级信息. master 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存在.数据库文件的位置以及 SQL Server 的初始化信息.因此,如果 master 数据库不可用,则 SQL Server 无法启动.在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Reso

SQL语句类别、数据库范式、系统数据库组成

前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解. SQL语句类别 SQL语句包括以下三个类别 (1)数据定义语言(Data Definnition Language)即DDL,我们数据最终从何而来,当然首先必须得建立表,所以它包括CREATE.ALTER.DROP表. (2)数据操作语言(Data Manipulation Language)即DML,我们对数据需要进行什么操作,当然无非就是增删改查,