我的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指定的数据库进行导出, 除了自动生成修复角本外, 还给出了一个比较报告:
