首页 > 代码库 > 项目产品化升级数据库脚本问题——如何查询两个数据库差异的库表或者数据

项目产品化升级数据库脚本问题——如何查询两个数据库差异的库表或者数据

        项目产品化能够解决svn版本问题,防止一个现场发现问题需要修改多套程序的问题。但是同时带来新的问题,在项目需求变化的时候或者升级一个产品的时候,对应的数据库脚本就成为关键,这里介绍一个解决方法——数据链对比法。 通过建立数据链对比缺少的库表以及各种配置数据。当然,如果在开发的时候就合理的管理的数据库脚本就不会存在这样的问题

 

        步骤:

1、建立数据链,打开pl/sql,右键点击database_links——新建,填写信息即可,对应的sql语句为,这里我建一个名字叫TEST的数据链

-- Drop existing database link 
drop database link TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM;
-- Create database link 
create database link TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM
  connect to **** identified by ****
  using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ***.**.**.**)(PORT = 1521)))(CONNECT_DATA =http://www.mamicode.com/(SERVICE_NAME = **)))';


2、使用数据链作对比,这里介绍一下wm_concat()这个函数,这个函数可以将行值变成一列

select wm_concat(a.table_name)
  from user_tables a
 where a.table_name not in (select table_name from user_tables@TEST)


这样就可以得到现场库与开发库之间数据库库表的差异,导出不存在的库表。

如果有数据库配置表,也可以用同样的方法查出现在数据库中缺少的配置数据

项目产品化升级数据库脚本问题——如何查询两个数据库差异的库表或者数据