当前位置:首页 > 技术知识 > 正文内容

【Oracle】同实例中两个不同 owner 的表字段进行比较

maynowei7个月前 (09-09)技术知识76

文中使用的Oracle版本为10g。

本次介绍的脚本主要用于对同实例中的两个相同的表进行字段的差异比对。听起来很奇怪吧,这都是因为以前开发过程不规范导致的,不然不应该会出现这么荒唐的脚本才对。我说几个关键字估计大家都能够猜想到了,“联合开发”、“异地沟通”、“交叉开发”、“时间紧迫”、“在线排Bug”、“紧急修复”......

在这个脚本出来的时候,我个人还不知道Navicat这款软件(毕竟那时候还是小小的程序员没有想那么多,只着眼解决眼前的问题)不然直接用表结构对比就解决了。有一天线上出现问题,经排查发现上线时执行的数据库脚本存在问题,线上数据库与仿真数据库存在大量表结构差异。

一下子晴天霹雳,这无疑是重大事故。项目经理首当其冲领了盒饭(被辞退),之后就要考虑怎样修复问题。我那时候的提议被采纳了并且修复了这个问题。

以下操作在DBA和项目负责人陪同下一同完成:

  1. 找到一个干净的环境,将上线前一天晚上备份的dmp文件进行了还原(注意这里只还原了表结构);
  2. 再将现生产上的所有表进行表结构的备份,在同一个环境下还原;
  3. 之后根据以下脚本对表结构进行对比
select a.TABLE_NAME,
a.COLUMN_NAME as  acol, 
b.COLUMN_NAME as bcol, 
a.DATA_TYPE as adt,
a.DATA_LENGTH as adl,
b.DATA_TYPE as bdt,
b.DATA_LENGTH as bdl
from (
  (select a.TABLE_NAME,
     a.COLUMN_NAME,
     a.DATA_TYPE,
     a.DATA_LENGTH
     from DBA_TAB_COLUMNS a
     where a.OWNER = '<owner1>' 
     and a.TABLE_NAME='<table_name>'
    ) a 
  left join 
  (select a.TABLE_NAME,
     a.COLUMN_NAME,
     a.DATA_TYPE,
     a.DATA_LENGTH
     from DBA_TAB_COLUMNS a
     where a.OWNER = '<owner2>' 
     and a.TABLE_NAME='<table_name>'
    ) b 
  on a.COLUMN_NAME = b.COLUMN_NAME)

这个脚本能够定位到被修改过的字段和差异部分内容。

  1. 将差异内容导出来后让开发人员自行确认,并整理好修复脚本;

还好,这次事故修改的只是字段,若是触发器或者存储过程就麻烦了。
虽然整个修复过程只耗费了半小时,但是再一次让我觉得这个规范这个东西是很有必要的,很多时候项目为了快裁剪了很多东西后面要补的时候特别费劲。

相关文章

Objective-C :Category(category什么意思)

Category 引入在日常的开发中,可能会碰到这样的需求:给某个类增加方法。比如说,需要给NSString类增加一个打印的方法。当然,我们可以新建一个类比如TestString,并继承NSStrin...

如何正确理解Java领域中的并发锁,我们应该具体掌握到什么程度?

苍穹之边,浩瀚之挚,眰恦之美; 悟心悟性,善始善终,惟善惟道! —— 朝槿《朝槿兮年说》写在开头对于Java领域中的锁,其实从接触Java至今,我相信每一位Java Developer都会有这样的一个...

不需安装oracleclient连接oracle数据库方案

在Oracle官方发布ODP.net之前,我们通常使用微软的System.data.OracleClient进行Oracle数据库操作,它的缺点是必须要装Oracle客户端OracleClient,如...

Navicat Premium 连接 Oracle 数据库

Navicat Premium是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL、SQLite、Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便。...

Oracle又双叕开始严查JDK,连夜提桶跑路

哈佛商业报道了最近几起北美的JDK许可问题公司用了来源不明的JDK,怕蹲里面,连夜提桶跑路The company uses JDK from unknown sources, and is afrai...

Oracle 11g安装教程完整版(oracle 11g 安装教程)

由于工作需要,将安装的经验分享给大家。第一步:首先准备安装文件包:Oralce 11.2.0.4 64bit和plsqldev1405x64如图所示:第二步:将2个文件解压到同一个目录,如图所示:第三...