首页 | 分页显示

Developer Archives

May 3, 2008

AIX下C语言取得Load值

    在AIX下可以用libperfstat包来方便地取得Load Average的三个值. #include <stdio.h> #include <sys/time.h> #include <sys/proc.h> #include <libperfstat.h> int main(int argc, char *argv[]) {   perfstat_cpu_total_t...

February 29, 2008

向Zizzy项目注入MyLOG

    开源项目网(SourceForge)上出现了一个名为Zizzy的项目, 指在挑战Quest公司的拳头产品Shareplex或GoldenGate, 打造免费的基于日志的Oracle复制软件, 我开始研究Oracle日志格式时, 也定的这个目标, 可惜失败了. 是从Jonah Harris主管的Oracle Internals网站得到这个项目信息的. 现在这个项目中还没有任何代码或文档可以看, 而本人的MyLOG则已经可以解出SQL语句了, 只是凭着我一个人, 无法再研究下去了而已, 而我也很难找到志同道合者并有空余时间和精力继续下去, 早就有开源的想法了.     只要有人真的愿意好好做下去,...

January 23, 2008

了解了一下Memcached

    Cache从来都是一种主要的优化手段, 从Oracle的角度, Cache技术无所不在. Library Cache Cursor Cache Data Cache Connection Cache / Pool Query Cache Client Data Cache...

December 14, 2007

简单Perl XML编程

    XML出来好久了, 亏我很早就用Java写程了, 但从没有写过处理XML的程序, 前段时间在整Text Links Ads的广告代码时, 发现了一段Perl处理XML的样本程序, 因为也常用XML来写工具, 如果将配置文件改成XML文件, 倒是件好事, 就在这儿总结一下. 下面是我要处理的一个XML文件的内容: <?xml version="1.0" encoding="UTF-8"?> <rows>   <row col1="AnySQL"...

September 10, 2007

Perl Array DML的正确错误处理方法

    以前一直以为自已的处理方法是对的, 在asyncdata脚角正式使用了一次后, 发现还是错了.     下面一段是原来的处理角本: my $rv = $delstmt->execute_array({ArrayTupleStatus => \@rowstats}); if (! defined($rv)) {     # Error...

September 4, 2007

在Perl中用Array DML来进行性能调优

    asyncdata是一个用于同步数据的角本, 基于实体化视图日志或自定义的触发器来获得变更的记录, 然后防照实体化视图刷新的过程来进行数据同步. 几个月之前完成的这一段角本, 现在要拿来作一些数据的迁移用了. 除正确性外, 性能就是最关键的因素了.     在处理SELECT的结果时, 我们已经广泛地使用Array Fetch提升性能了, 不过Array DML真正用得还是不够广的, 相对来说, 在PL/SQL中用得多一些. 现在我要测试的是在Perl中测试Array DML的性能提升....

August 16, 2007

终于找到POSIX Thread挂起的原因了

    昨天跑的Thread程序还是停住了, 原因是不能再创建新的线程了, 返回错误代码11, 表示达到了最大能创建的线程数了. 一开始很不明白, 因为就我这个程序, 应当只会有一个线程在去行, 不可能多个. 于是我检查了一下进程占用的内存, 居然高达132MB, 因此是系统资源到了最大限制了(POSIX对最多进程数的限制).     于是我想起了当初用fork/vfork时, 因为没有加入一行代码, 导致了进程结束后, 系统并没有自动回收占用的有关资源,...

August 15, 2007

从OCIThread回到POSIX Thread编程模式

    我要实现的任务其实很简单, 就是想要每隔一定的时间去数据库中获得一些信息, 获得这些信息可能需要运行八到十个SQL语句, 随着数据库上的连接数, 负荷等的不同, 这些查询所需要的时间是不一定的, 有可能十分之一秒就可以返回, 也可能要几秒. 但是我想要的是以固定的间隔打印出这些数据. 于是我就想了一个主进程, 隔一定的时间去产生一个线程, 由线程去执行这些SQL语句, 打印出信息, 这样可以保证时间是很均匀的.     于是我就从fork到vfork, 再到thread(Solaris),...

August 11, 2007

切换到OCIThread多线程编程环境

    多线程的事困扰我好久了, 最初用fork遇到了进程间数据共享的问题, 改成vfork则主进程要等子进程结束后才继续. 后成改成用POSIX的线程(pthread)来写, 结果跑了一天, 我的OCI程序挂起了, 原因是遇到了一个Bug. 今天在网上搜索后发OCIThread, 就是Oracle包装了一层之后的多线程编程环境了. 将程序改了一下, 希望周一来时它没有挂住.     OCIThread要求在其他的OCIThread调用之前先执行如下调用: OCIThreadProcessInit();     然后以OCI_THREADED方式创建OCIEnv对象,...

August 9, 2007

Unix/Linux下C语言POSIX多线程程序示例

    原想用fork机制来实现多个任务并发的, 结果始终没有搞定其中的数据共享问题, 就换成用POSIX线程算了. #include <pthread.h> #include <stdio.h> void *subCall(void *param) {   int *p = param;   (*p) ++;   return...

August 8, 2007

Unix/Linux上C语言fork多个进程的代码示例

    下面一段代码算是一个完整的例子了, 纪念一下. #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() {    pid_t pid;       /* Remove...

Windows Visual C++多线程(Thread)编程示例

    以前总以为用C来编写多线程序是一件很难的事, 但事实上并不是很复杂, 下面就是今天参考网上例子写出来的一段程序. #include <process.h> #include <stdio.h> #include <stdlib.h> void Child( void* pParams ) {    char *data...

May 17, 2007

使用Oracle Chart Builder在页面上画图

    现在总是翻以前的东西, 将要介绍给大家的是我在03年写的一个在页面上画图的Java程序, 我将它命名为WebChart, 是基于Oracle Chart Builder库的, 用Java实现的一个Servlet. 程序可以运行在Tomcat 4以上或Resin 2以上的环境中.     现在给大家展示一张用它画的图:     有兴趣的话可以下载WebChart, 然后解压到Tomcat的webapps目录下, 然后将Oracle的JDBC驱动拷到Tomcat的common\lib目录下....

April 26, 2007

WE8ISO8859P1字符集下,JDBC的中文支持问题

    当数据库的字符集为US7ASCII, WE8DEC, WE8ISO8859P1及WE8MSWIN1252等单字节的字符集时, 使用JDBC时总发现不能准确地处理中文字符, 这个问题几年前就困扰着我, 一直也没有解决的办法. 以前遇到这些数据库的字符集时, 总是将$JAVA_HOME\lib目录下的charsets.jar移走来解决, 但是这样并不能解决CLOB中的中文字符问题. 昨天coolyl又问了这个同样的问题, 我在试验时发现JRE 1.6版本和JRE 1.4版本有所区别, 通过用-Dfile.encoding=ISO-8859-1的命令行选项, 在1.6下可以成功显示汉字, 而1.4下面同样的方法却不行. c:\jdk\sun160\bin\java -Dfile.encoding=ISO-8859-1...

April 10, 2007

Perl的如何操作文件 -- FileHandle

    这几天连续写了几个Perl程序, 有的是自愿写的, 有的是任务型的, 这都无所谓了. 在所有的程序中都有一个共同点, 那就是要么程序要输出到屏蔽, 要么输出到一个文件, 对于刚学Perl的我来说, 这个地方也是花了不少时间查有关资料的, 不过最后让我明白的文档是Perl Doc站点上的FileHandle说明文档. 先说说我是如何处理的.     在我的程序中, 如果在命令行指定了一个log文件名的话, 就向log文件写, 否则就向屏蔽写出....

March 24, 2007

在MySQL中建立实体化视图日志

    在MySQL中建立实体化视图日志表, 在这里基表表名是T_MVLOG, 主键字段是COL1. 日志表结构如下: CREATE TABLE MLOG$_T_MVLOG (    SEQUENCE$$ BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,    DMLTYPE$$...

March 23, 2007

让Perl DBI返回的记录按列存贮

    最新版本的Perl DBI接口定义了Array DML接口, 指将一个数组作为一个绑定变量, 这个在数据库的接口层上是早已经支持的了, 象Oracle Pro*C中早就支持命名用数组了. 但在实际使用中, 去发现一点不方便的地方. 通常Perl中返回结果集是按行排列的, 如下所示: {   ROW1  {col1, col2, col3, col4},   ROW2  {col1, col2,...

March 21, 2007

在Perl中如何派生多进程 -- fork函数

    这个函数当前在学校没有搞懂, 刚从学校出来时也没搞懂, 不会用他来写多线程程序. 今天有人问我在Perl中如何进行多进程编程, 去Google了一把, 发现境界好象比以前高了, 因为感觉上懂了一些了. 下面是写的一个例子: #!/usr/bin/perl # my $pid = fork(); if (!defined($pid)) {   ...

March 20, 2007

角本语言转型, 安装Windows上的Perl环境

    1, 安装Windows上的ActivePerl软件. 在下载后, 点击install.bat角本, 然后按照提示打Yes或No, 下面是将软件安装到c:\usr目录(因为Perl角本的第一行一般是/usr/bin/perl -w)下的例子: Did you read the LICENSE.txt file? [no] yes Do you agree...

March 7, 2007

再见了, Java语言!

    几年以前, 曾经喜欢用Java写编写程序. 历时最长的一个程序是用Java写的数据库交互工具 -- AnySQL. 使用JDBC, 可以连接很多不同的关系数据库, 这是名字中的SQL这几个字段的来源. 又因为用Java写成, 可以运行在不同的操作和硬件平台上, 这是Any这几个字母的来源, 也为了宣传这个工具, 所以申请了AnySQL.net这个网址. 可现在我已经很少再对这个工具作修改了, 也很少再用Java来写工具了, 转向了C及Perl, 个人站点上的内容也不光是这个用Java写成的工具了, 事实上,...

January 19, 2007

Perl中的正则表达式起步之三

    作为了一个DBA, 在接触了正则表达式后, 深深为其所打动, 利用正则表达式可以轻松地简化很多的工作, 并开发出别人刮目相看的工具. 下面简单地写几个例子:     1, 在sed, grep, vi等工具中使用, 下面的例子是grep和vi中删除空行及用sed替换ALTER后面的一个单位为INDEX. grep -v '^\s*$' cr.sql egrep...

January 16, 2007

Perl中的正则表达式起步之二

    单个字符的正则表达式作用有限, 但这是构造复杂的正则表达式的基础, 现在我们就来看一下如何将单个字符扩成多个字符. | : 或者 * : 表示出现0个或多个 + : 表示出现1个或多个 ? : 表示出现0个或1个 {n} : 表示重复出现n次...

Perl中的正则表达式起步之一

    Perl是最强的文本处理语言, 其强大的正则表达式(Regular Expression)支持是其他语言所不及的. 正式表达在很多Unix的工具中都支持, 如grep, awk, sed等. Oracle从10g开始也引入了正式表达式的支持, 因此学好它对DBA来说也是很重要的.     正则表达式只是用于字符串匹配的特征串, 我们从如何表示一个字符开始. [ ] : 表示选择一个字符. (.)...

January 15, 2007

学习Perl DBI -- 以SYSDBA或SYSOPER连接到Oracle

    在连接9i或以上版本的Oracle数据库时, 必须指定SYSDBA或SYSOPER选项, 当你的Perl角本需要以SYS用户连接时, 如何指定呢? #!/usr/bin/perl -w # use DBI; # Get a database connection Handle. my $dbconn =...

January 10, 2007

Perl程序的一个小问题 -- Command not found

    今天发现以前能跑的一个角本, 突然不能跑了. 于是我被要求去看了一下为什么不能跑了? 找到角本后, 直接运行报"Command not found"的错误, 但是我看文件是存在的, 并且执行的权限也是有的, 如下所示: $ p1.pl p1.pl: Command not found $ ls...

学习Perl DBI -- 真正的Array DML支持

    在早期的DBD Oracle (1.18)以前, Array DML的接口是假的, 其实是一条一条地执行的, 而DBD Oracle的主要编写人员也受到了很多开发人员的质问. 在DBD-Oracle v1.19的更改列表中, 我看到了下面的几行: =head1 Changes in DBD-Oracle 1.18 (svn rev...

January 9, 2007

学习Perl DBI -- Array Insert/Update/Delete

    在DBI的较新版本和DBD的最新版本(如: DBD Oracle V1.19)中就支持了Array DML操作, 这样可以大幅提高应用程序的性能, 在Perl中我们可以通过bind_param_array和execute_array来实现, 如下代码所示: my (@rowstats, $rv); $dbh->{AutoCommit} = 0; my @col1 = (.....);...

学习Perl DBI -- 语句的高级属性

    1, NUM_OF_FIELDS -- 查询返回的字段个数     在执行之后, 就可以用这个属性获得SELECT语句返回的字段数了, 如下所示: $sth->execute(); print("Number of fields: $sth->{NUM_OF_FIELDS}\n");     2, NAME,...

学习Perl DBI -- 数据库连接的高级属性

    1, AutoCommit -- 是否自动提交     一般来说自动提交不利于应用程序的性能. $dbh->{AutoCommit} = 1; print "AutoCommit: $dbh->{AutoCommit}\n";     2, ChopBlanks --...

January 8, 2007

学习Perl DBI -- 处理返回记录(Fetch)

    在Perl中, 如果你的记录确保只有一条记录被返回, 则可以用以下的更简单的方法, 而不需要经过Prepare-Bind-Execute-Fetch四个阶段, 如下所示: my ($iniext, $nxtext) = $dbh->selectrow_array (    "SELECT INITITAL_EXTENT, NEXT_EXTENT FROM DBA_TABLESPACES       ...

学习Perl DBI -- 绑定(Bind)变量

    给SQL语句动态地传入值的方法叫绑定(Bind), 在写数据库有关的角本时, 这是很重要的一点, 在Perl中你可以在SQL中写一个问号表示不确定的值, 不管是在SELECT还是在Insert/Update/Delete语句中, 都一样. 如下所示: my $sth = $dbh->prepare( "select tname from tab         where tname like...

学习Perl DBI -- 处理查询语句

    在建立连接后, 就可以进行查询了. 可以用prepare函数来准备一个SQL语句, 获得一个Cursor的句柄(Handle)后就可以执行了, 如下所示: my $sth = $dbh->prepare("select ....."); if (!defined($sth)) { ...... } if ($sth->execute()) {...

学习Perl DBI -- 连接到数据库

    从data_sources函数知道了连接信息的格式后, 我们就可以连接了, 只要调用DBI的connect函数, 根据连接信息的格式, 可以自动区别数据库类型, 选择合适的数据库驱动进行连接. 一般写法如下: my $dbh = DBI->connect("data source", "username", "password"); my $dbh = DBI->connect("data...

学习Perl DBI -- Database Driver

    从今天开始起从头学习Perl的DBI编程, 先接触到的是DBI中的数据库驱动(Driver)对象, 有三个函数可以调用: avaialable_drivers, data_sources和connect. connect是用来连接到数据库的, avaialable_drivers是用来看你所安装的Perl支持那几种数据库. 如下面的代码: #!/usr/bin/perl -w # use DBI; my @drvlist = DBI->available_drivers(); foreach...

January 5, 2007

Perl中文件与目录的操作

  1, 删除文件 -- unlink     如成功返回删除的文件数(True), 否则返回0(False). 如: unlink("test.txt"); unlink("test1.txt","test2.txt"); unlink(<test*.txt>); // "rm test*.txt" under shell   2,...

January 3, 2007

Perl或Shell中的文件测试命令

    最近用Shell和Perl的机会越来越多了, 又开始看相关书籍了, 下面是从书中抄下来的关于文件操作的命令: -r可被当前用户读 -w可被当前用户写 -x可被当前用户执行 -o属于当前用户 -R可被setuid之前的用户读 -W可被setuid之前的用户写 -X可被setuid之前的用户执行 -O性于setuid之前的用户 -e文件或目录存在 -z文件存在并且大小为0 -s文件存在并且大小不为0 -f是否普通文件 -d是否目录 -l是否符号连接 -S是否套接字(Socket)...

December 14, 2006

Array Fetch在Delay时间较长的网络中的重要性

    从我的笔记本连到我们公司的测试数据库服务器的网络Delay时间较长, 因为要从中国到美国, 今天在这个环境下测试了Array Fetch的功效, 估许看完了, 你又得去改你的程序了.     测试软件: AnySQL JDBC 10g     测试语句:   SET AUTOT TRACE...

December 12, 2006

十六进制的ASCII代码表

00NUL01SOH02STX03ETX04EOT05ENQ06ACK07BEL 08BS 09HT 0ANL 0BVT 0CNP 0DCR 0ESO 0FSI 10DLE11DC112DC213DC314DC415NAK16SYN17ETB 18CAN19EM 1ASUB1BESC1CFS 1DGS 1ERS 1FUS 20SP 21! 22" 23#...

December 11, 2006

为Windows上的ActivePerl编译和安装DBD-Oracle模块

    Perl角本的确管用, 应当推荐使用, Windows平台可以用ActivePerl, 它可以免费下载. 为了和Unix一保持一致(/usr/bin/perl), 我是安装到"c:\usr"目录的, 接下来我们就来安装DBD-Oracle模块吧!     首先要安装DBI, ActivePerl默认安装是没有DBI的, 先让机器能连上互联网, 然后运行PERL_HOME的bin子目录下的Perl Package Manager(ppm.bat)程序, 会出现一个命令行, 输入"install DBI"就可以了,...

November 23, 2006

偶学Perl过程中写的第二个程序

    对于管理Unix/Linux上面数据库的DBA来说, 学点Perl是很有用的技术. 来到这个公司后, 所有的数据库都在Unix上, 因此也就有了学习Perl的压力, 可到现在也没有学好, 没有为公司写过一个用Perl语言的小工具. 下面是我学习过程中的第二个程序, 其中用到了DBI来查询数据库的记录. 程序如下: #!/usr/bin/perl -w # use DBI; # Get a...

November 21, 2006

如何编译Perl的Oracle模块?

    发现我们用的Perl在数据库版本变化后(如8i到9i, 9i到10g)时, DBD-Oracle模块都需要重新编译Perl才能工作. 在多种数据库版本混合使用的环境下, 就需要安装几个Perl(或只使用一个版本的客户端)才能解决问题, 其中的原因是因为编译出来的Oracle.so会去找特定版本的Oracle客户端库文件, 如下所示: $ldd ./lib/site_perl/5.8.5/sun4-solaris-64/auto/DBD/Oracle/Oracle.so         libclntsh.so.9.0 =>      /export/home/oracle/products/9201/lib/libclntsh.so.9.0         libnsl.so.1 =>   /usr/lib/64/libnsl.so.1         libsocket.so.1 =>        /usr/lib/64/libsocket.so.1         ......  ...

November 14, 2006

优秀的DataDirect JDBC驱动

    DataDirect是一家专业的数据库驱动提供商, 在04年时我曾经想尽办法想让我的AnySQL在导出Oracle数据到文本时能快一些, 发现在Java 1.4以前的版本中, 就Oracle来说, 这个公司的驱动要比Oracle自带的class12.zip要快很多, 在Java 1.4以上用ojdbc14.jar后, 两者性能基本相等. 如果你还在用Java 1.3的话, 可以试试这个JDBC驱动!     驱动器类名: com.ddtek.jdbc.oracle.OracleDriver com.ddtek.jdbc.sybase.SybaseDriver com.ddtek.jdbc.db2.DB2Driver...

November 8, 2006

我使用的OCI编译环境, 基于Visual C++ 6.0

    以前常用Java来写工具, 后来觉得Java要还一个JRE, 有些不爽的地方, 也存在性能问题. 由于在Java程序上积累了一些经验, 转到C来写一些小工具也不是难事, 他们两者语法基本相同. 况且写工具时编译代码只占用了很小的时间, 大部分时间在想应当具有什么功能?     我写OCI的环境很小, 基本的编译环境是从VC6中拷出一些最基本的文件, 加上OCI的头文件和库文件构成的, 压缩后不到4M, 你可以下载并解压到C盘, 但不支持C++了.  ...

October 18, 2006

修改rsync中TCP Socket的SNDBUF和RCVBUF的大小

    rsync 2.6.8中的"--sockopts"并不能真正起作用, 所以只有自已改了. 在sender.c中加上如下红色部分代码: if (is_a_socket(f_out)) {    set_socket_options(f_out, "SO_SNDBUF=524288");    set_socket_options(f_out, "SO_RCVBUF=524288");    if (verbose)    {...

October 17, 2006

MS VC中如何调用其他DLL中的函数?

    用下面的命令看在oracommon10.dll中有那些函数是可以调用的: C:\TEMP> dumpbin /EXPORTS oracommon10.dll    ordinal hint RVA      name           1    0 000C37C4 DBMSBKRS           2    1 000012C0 OCITypeCollExtTypeCode    ......         ...

October 16, 2006

如何去掉rsync 2.6.8对iconv库的调用?

    最近rsync (2.6.5)遇到了几次拷贝大文件(8GB)挂起(发起拷贝命令的程序不肯退出)的情况, 于是在网上找新版本, 在2.6.8版本的Bug修复列表中找到了一些和这个有关的修正(也不确定), 于是下载了源代码来自已编译, 希望可以解决我们遇到的问题.     在编译过程中, 遇到了iconv包的问题, 在2.6.8中引入了一些新功能(还不清楚), 需要用到字符集转换包(iconv)的库, 我们有很多的机器上都没有装这些包, 因此要去掉对这个包的调用, 让rsync程序拷贝到目标机器就可以运行, 下面是移除的步骤:    ...

August 22, 2006

用C来读取Solaris上的Load Average的三个值

    OS中的Load Average是很有用的信息,在原先的版本中是没有的,今日增加了这个信息. ...... OS Load: 2.37 2.56 2.56 ......     有了这些信息后,可以使这些工具更具有价值. 源程序来自这儿, 在这儿我也抄了一份....

解决Linux/Unix下OCI程序动态库版本的问题.

    这段时间做了好几个基础OCI的程序,在Windows上编译后,不需要重新编译, 就可以适应8i/9i/10g的客户端,但在Linux/Unix上,编译好后到不同的版本的客户端去运行时, 总会提示找不到动态库libclntsh.., 这时可以用以下办法去解决:     第一步,修改genclntsh文件,这个文件在Oracle的bin目录下 # # Library names and locations CLNT_NAM=clntsh         ...

当前分类: Developer

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