首页 | 摘要显示 | 上一页 1 2 3 4 5 6 7 下一页

Tools Archives

December 22, 2006

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

阅读全文

December 30, 2006

2006年本站的原创软件下载排名

    在过去的1年中, 利用空余时间继续开发一些软件, 由于网站被毁灭过一次, 因此下面的统计其实是06年最后5个月中后三个月(前两个月没有awstats统计)的值.

    下面是通过中文页面来下载的次数:

    对于这个下载次数, 我个人还是比较满意的, 下面是通过英文页面来下载的次数:

  • dcba.zip, 50次
  • aul_trial.zip, 47次
  • anysql.zip, 23次
  • ociuldr.zip, 22次

    其中dcba.zip是OTop/OPMon/OTune工具的集合. 对于英文的结果只能说明我的英文文档还没有做好, 但愿07年有更好的结果, 让我的工具能给更多的人带来一点方便.

January 2, 2007

在ociuldr的SQL中使用绑定变量

    在以前的ociuldr中不能使用绑定变量, 现在作了一些改进, 允许传入最多20个绑定变量(我想也够用了吧), 所有的变量类型都被当作VARCHAR2类型. 这样的改进不知道是否有必要, 还不得而知.

SQL> select * from tab;

TNAME                          TABTYPE         CLUSTERID
------------------------------ -------------- ----------
AULEXT                         TABLE
A_SEQ_SYN                      SYNONYM
A_V                            VIEW
OBJD_LIST                      TABLE
T                              TABLE
TRANSACTION_CACHE_IOT_0        TABLE
T_HASH                         TABLE
T_LOB                          TABLE
T_LONG                         TABLE
T_LONGRAW                      TABLE
T_TRUNC2                       TABLE
T_TRUNC4                       TABLE

12 rows selected.

C:MYDUL>ociuldr user=anysql/anysql@test -
         query="select * from tab where tname like :P_NAME" -
         arg:p_name=T%

       0 rows exported at 2006-07-05 14:21:12
       8 rows exported at 2006-07-05 14:21:12

C:MYDUL>cat uldrdata.txt
T,TABLE,
TRANSACTION_CACHE_IOT_0,TABLE,
T_HASH,TABLE,
T_LOB,TABLE,
T_LONG,TABLE,
T_LONGRAW,TABLE,
T_TRUNC2,TABLE,
T_TRUNC4,TABLE,

    这样改是因为有一次要导出很多数据, 于是按某个字段划分范围重复执行. 我已将更新后的文件上传到本站, 需要用此功能的请重新下载.

January 30, 2007

ociuldr的新选项, 是否在第一行打印字段名

    自从blue_princeociuldr在1小时内导出了7亿条(50G)记录后, 他就坚持不懈地使用ociuldr来从Oracle中导出数据到格式化文本, 并提出众多的无理要求, 如要支持分成几个文件导出.

    今天他又提出了一个新要求, 要在文件的第一行打印字段名, 以符合他们的规范. 我没有立马答应, 但承诺将它列为2008年工作重点, 结果他说要坐车过来请我吃饭, 要我立马完成. 于是我立马改进, 立马在主页上发布他欠我一饨饭的信息, 下次谁要和我一起去杭州的, 就占光好了.

    为了实现这个功能, 增加了一个head选项, 默认还是不打印字段名, 当设为Yeson时就会在文件的第一行打印出字段名了. 如下面的命令:

ociuldr user=anysql/anysql query="select * from tab" head=on

    生成的文件如下所示:

TNAME,TABTYPE,CLUSTERID
A,TABLE,
A_V,VIEW,
CCC,TABLE,
FACT_SALES,TABLE,
......

    为了这么点小事写一篇Blog? 实在是太没有东西可写了. 本站重在原创, 虽是小事, 也是原创, 故写.

March 13, 2007

写了一个从Oracle复制到MySQL的Perl角本

    根据对实体化视图的研究及昨天的设想, 花了大约一个早上的时间, 写了一个从Oracle复制到MySQL的Perl角本, 早上测试时还是比较有趣的. 在现在的角本中, 源表名和目标表名可以不一样, 但字段名必须一样.

    做测试时, 先开一个窗口, 运行刷新角本:

C:\AnySQL>perl refresh_mysql.pl -s anysql:anysql:test -t mysql:root:mysql:localhost:test -c myrefresh.conf
02/13 12:52:25 - 1 tables will be processed.
02/13 12:53:06 - Start replication from T_MVLOG to T_MVLOG with sequence 10196 to 10199 ...
02/13 12:53:07 - End replication from T_MVLOG to T_MVLOG with sequence 10196 to 10199.
02/13 12:53:26 - Start replication from T_MVLOG to T_MVLOG with sequence 10200 to 10203 ...
02/13 12:53:27 - End replication from T_MVLOG to T_MVLOG with sequence 10200 to 10203.
02/13 12:54:11 - Start replication from T_MVLOG to T_MVLOG with sequence 10204 to 10204 ...
02/13 12:54:12 - End replication from T_MVLOG to T_MVLOG with sequence 10204 to 10204.
02/13 12:56:13 - Start replication from T_MVLOG to T_MVLOG with sequence 10205 to 10207 ...
02/13 12:56:14 - End replication from T_MVLOG to T_MVLOG with sequence 10205 to 10207.
02/13 13:11:41 - Start replication from T_MVLOG to T_MVLOG with sequence 10208 to 10211 ...
02/13 13:11:42 - End replication from T_MVLOG to T_MVLOG with sequence 10208 to 10211.

    在源端(Oracle)中插入一些记录, 并作查询:

SQL> SELECT * FROM T_MVLOG;

COL1                 COL2
-------------------- ------------------------------
MLOG$_T_MVLOG        TABLE
MV_T_MVLOG2          TABLE
RUPD$_T_MVLOG        TABLE
T_MVLOG              TABLE

    等了3-5秒钟后, 在目标端(MySQL)中进行查询:

mysql> select * from t_mvlog;
+---------------+-------+
| COL1          | COL2  |
+---------------+-------+
| MLOG$_T_MVLOG | TABLE |
| MV_T_MVLOG2   | TABLE |
| RUPD$_T_MVLOG | TABLE |
| T_MVLOG       | TABLE |
+---------------+-------+
4 rows in set (0.00 sec)

    接下来事是要进行更多的测试, 以及进行压力测试. 就算玩玩的角本, 也有很多需要改进的地方.

上一页 1 2 3 4 5 6 7 下一页

当前分类: Tools

Creative Commons License
本站版权: 共用创作 CC
署名-非商业性-相同方式分享
本站基于MT-3.36免费版
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql