我的DBDiff程序, 可以比较或同步表结构.

    首先在数据库中建两个用户: DBDIFF1和DBDIFF2. 并在DBDIFF1上运行下面的角本:

-- run under user dbdiff1
CREATE TABLE T_DBDIFF1 ( COL1 NUMBER(10), COL2 NUMBER(20));
CREATE TABLE T_DBDIFF2 ( COL1 NUMBER(10) );
CREATE TABLE T_DBDIFF3 ( COL1 NUMBER(10) );

    在DBDIFF2用户下运行以下角本:

-- run under user dbdiff2
CREATE TABLE T_DBDIFF1 ( COL1 NUMBER(10), COL2 NUMBER(20));
CREATE TABLE T_DBDIFF2 ( COL2 NUMBER(10) );
CREATE TABLE T_DBDIFF4 ( COL1 NUMBER(10) );

    然后就可以用ocidiff程序来将DBDIFF1的表结构同步到DBDIFF2用户中, 我们可以看出要做的事情有, 为DBDIFF2下的T_DBDIFF2表加上COL1字段, 并将T_DBDIFF3这个表创建起来. 如下所示:

C:\MYDUL>ocidiff src=dbdiff1/dbdiff dst=dbdiff2/dbdiff
OCIDIFF -- Run the following command to sync dest database:
sqlplus dbdiff2/dbdiff @diff_sql.sql

C:\MYDUL>cat diff_sql.sql
spool diff_sql.log
alter session set sort_area_size=104857600;
alter session set db_file_multiblock_read_count=128;
set define off echo on
ALTER TABLE T_DBDIFF2 ADD COL1 NUMBER(10);
CREATE TABLE "T_DBDIFF3" ("COL1" NUMBER(10, 0))
  STORAGE ( FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) ;

spool off
exit

    ocidiff用exp和imp来获得建表的语法的, 因此要确保运行ocidiff的机器上的exp程序能连接到src指定的数据库进行导出, 除了自动生成修复角本外, 还给出了一个比较报告:

C:\MYDUL>cat diff_rep.txt
Database Object Comparation Report
========================================================
SOURCE=dbdiff1/dbdiff
DEST  =dbdiff2/dbdiff
========================================================

Comparing TABLE difference ...
TABLE_NAME                 Source       Dest
---------------------      -------    -------
T_DBDIFF2                  Unmatch    Unmatch

    COLUMN_NAME                  SRC_DATA_TYPE      DST_DATA_TYPE
    ---------------------   ------------------ ------------------
    COL1                            NUMBER(10)
    COL2                                               NUMBER(10)

TABLE_NAME                  Source       Dest
---------------------      -------    -------
T_DBDIFF3                             MissDst
T_DBDIFF4                  MissSrc

========================================================
Report Finished. Thanks!
========================================================

    并不限定于两个用户在同一个数据库上, 如果有用你就用吧! 如果指定-auto在命令行, 则会自动运行"sqlplus dbdiff2/dbdiff @diff_sql.sql"来进行表结构同步.

留言 (4)

高手!

好。

pl/sql developer 中提供的 [工具]-[比较用户对象]功能跟这个类似。
但是那个得手工操作。不好做自动运行计划.

能不能做到所有内容的同步,比如我有一个用户a和一个用户b,我要把a里面的所有东西都同步到b中去,包括存储过程,函数,包,以及表,序列,等等。再加上数据的同步,就可以做数据库的迁移用了。

同步数据, 没那么简单, 不知道多少公司想做同步数据这样的工具呢, 可是没有什么好的产品出来.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Hi, Joe, is it really you?
  • 乔, 你好, 真是你吗?
  • Hi, Ann. Nice to see you again.
  • 安, 你好. 真高兴再次见到你.
  • It's been a whole year since I last saw you.
  • 我整整一年没见你了.
  • Yes, but you look as pretty now, as you did then.
  • 但你看起来还是那么漂亮.
  • Oh, thank you. How have you been these days?
  • 欧, 谢谢. 这段时间你好吗?