• 如何快速的进行sql脚本升级


    sql脚本升级即从一个老的脚本升级到一个新的全量的脚本。比如公司有某一个项目,有的客户已经用这个项目了,数据库里面去掉以前的初始化数据外,现在还有了客户自己的数据。但是这个版本中有严重的bug,所以为了让最新的war包适配以前数据库,必须对以前的数据库进行升级。在这里脚本升级以mysql脚本升级到mysql脚本(mysql升级到oracle,oracle升级到mysql这里没有考虑)

    在升级脚本的过程中我们的已知条件是:以前老版本的初始化脚本(包括创建表,初始化数据)这里用A表示,还有新版本的初始化脚本(包括创建表,初始化数据)这里用B表示。所以升级脚本(B-A)

    我们已知B-A的内容可能有新增了的一些表,一些索引,一些视图等等。还有多了很多初始化数据。

    如果我们直接用肉眼未免太慢,也不保险。

    所以必须通过其他方式解决。

    第一步:看新脚本中比老脚本中多了哪些表,哪些索引:

    sql语句是:其中TABLE_SCHEMA='A'或者TABLE_SCHEMA='B'就是我们常讲的数据库名。这个sql检查的是A库中比B库中多的表。

    select * from (select table_name from information_schema.`TABLES` where TABLE_SCHEMA='A') a where a.table_name  not in (select table_name from information_schema.`TABLES` where TABLE_SCHEMA='B');


    select * from (select index_name from information_schema.STATISTICS where TABLE_SCHEMA='B') a where a.index_name not in (select index_name from information_schema.STATISTICS where TABLE_SCHEMA='B');

    第二步是看新脚本中的表结构是否改变,也就是是否在一个表中增加了一列,或者减少了一列,或者某列的数据类型和长度改变了。

    查询数据库A的每张表中的列数

    设A=select a.table_name,count(a.column_name) column_count from information_schema.columns a
    where table_schema = 'A'
    group by a.table_name order by a.table_name;

    查询数据库B的每张表中的列数

    设B:select a.table_name,count(a.column_name) column_count from information_schema.columns a
    where table_schema = 'A'
    group by a.table_name order by a.table_name;

    则查询的语句是:

    select * from A LEFT JOIN  B on A.table_name=B.table_name;

    把上面的A和B代入得到总的sql语句,sql语句如下所示:

    select * from (select a.table_name,count(a.column_name) column_count from information_schema.columns a
    where table_schema = 'thailand'
    group by a.table_name order by a.table_name) A LEFT JOIN (select a.table_name,count(a.column_name) column_count from information_schema.columns a
    where table_schema = 'thailand'
    group by a.table_name order by a.table_name) B on A.table_name=B.table_name;

    查询的结果如下图所示:

    通过这两个sql语句,可以为我们升级脚本减少一些时间。

  • 相关阅读:
    Oracle 数据库管理脚本 命名规范
    Oracle 插入大量数据
    9i Data Gurad 报ORA12154: TNS:could not resolve service name 错误
    Oracle OCM 认证指南
    Redo Log 和Checkpoint not complete
    自己录制的Oracle 相关视频(陆续更新)
    自己录制的Oracle 相关视频(陆续更新)
    Oracle Rman 命令详解(List report backup configure)
    linux下手动删除数据库实例
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/9891228.html
Copyright © 2020-2023  润新知