首先在数据库中建两个用户: 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)
高手!
Posted by mining lamp | Dec 22, 2006 8:51 PM
好。
pl/sql developer 中提供的 [工具]-[比较用户对象]功能跟这个类似。
但是那个得手工操作。不好做自动运行计划.
Posted by K | Mar 9, 2007 4:41 PM
能不能做到所有内容的同步,比如我有一个用户a和一个用户b,我要把a里面的所有东西都同步到b中去,包括存储过程,函数,包,以及表,序列,等等。再加上数据的同步,就可以做数据库的迁移用了。
Posted by leeecho | Apr 6, 2007 1:03 PM
同步数据, 没那么简单, 不知道多少公司想做同步数据这样的工具呢, 可是没有什么好的产品出来.
Posted by anysql | Apr 6, 2007 1:19 PM