在AnySQL.net中搜索标签(Tags) 'DBD' 的结果:

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

    asyncdata是一个用于同步数据的角本, 基于实体化视图日志或自定义的触发器来获得变更的记录, 然后防照实体化视图刷新的过程来进行数据同步. 几个月之前完成的这一段角本, 现在要拿来作一些数据的迁移用了. 除正确性外, 性能就是最关键的因素了.     在处理SELECT的结果时, 我们已经广泛地使用Array Fetch提升性能了, 不过Array DML真正用得还是不够广的, 相对来说, 在PL/SQL中用得多一些. 现在我要测试的是在Perl中测试Array DML的性能提升.     做的测试是在两个不同的数据中心间进行数据同步, 网络速度肯定是不够快的, 在不用Array DML的情况下, 源节点这边插入一万条记录(表有13个字段, 一个主键索引), 用Perl同步到目标数据库需要40秒, 用dblink的结果更差, 需要一分钟左右. 通过升级DBD Oracle后, 用Array DML方式处理这一万条刻录时(Array Size为500), 只用了4秒钟, 整个速度提升了10倍, 应当可以满足性能要求了.  ...

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

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

角本语言转型, 安装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 to the ActivePerl Community License v2.1? [no] yes Enter top level directory for install? [C:\Perl] c:\usr Create shortcuts to the...

学习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 6697)   Added support for native Oracle Array interface thanks Kristian Nielsen   Added suppot for LOB Locators from Jeffrey Klein.   Updated...

学习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 = (.....); my @col2 = (.....); my $sth = $dbconn->prepare(     "INSERT INTO T_PERLARRAY VALUES (?, ?)"); $sth->bind_param_array(1, \@col1); $sth->bind_param_array(2, \@col2); $rv =...

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

    1, NUM_OF_FIELDS -- 查询返回的字段个数     在执行之后, 就可以用这个属性获得SELECT语句返回的字段数了, 如下所示: $sth->execute(); print("Number of fields: $sth->{NUM_OF_FIELDS}\n");     2, NAME, NAME_UC, NAME_LC -- 取得字段名     这些属性是一个数组, NAME返回的是大小写混合的列名, NAME_UC是大写, NAME_LC是小写. 使用方法如下所示: $sth = $dbh->prepare( "SELECT * FROM megaliths" ); $sth->execute();...

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

    1, AutoCommit -- 是否自动提交     一般来说自动提交不利于应用程序的性能. $dbh->{AutoCommit} = 1; print "AutoCommit: $dbh->{AutoCommit}\n";     2, ChopBlanks -- 取舍CHAR类型后面的空格     当你从数据库中取CHAR类型的值时, 你可以指定要不要带后面的空格, 在数据库中CHAR是定长的, 长足不足时, 后面以空格补充, 但你在写应用程序时, 可能并不想要后面的空格, 这时你可以将这个选项设为1. $dbh->{ChopBlanks} = 1; print "ChopBlanks: $dbh->{ChopBlanks}\n";     3,...

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

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

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

    给SQL语句动态地传入值的方法叫绑定(Bind), 在写数据库有关的角本时, 这是很重要的一点, 在Perl中你可以在SQL中写一个问号表示不确定的值, 不管是在SELECT还是在Insert/Update/Delete语句中, 都一样. 如下所示: my $sth = $dbh->prepare( "select tname from tab         where tname like ?"); ...... my $sth = $dbh->prepare("Delete from test where col1=?");     接下来在执行之前要传入真实的值和类型, bind_param就是用来传入值的, 第一个参数为问题的位置, 从1开始数; 第二个参数为变量的值; 第三个参数是可选的, 为参数的类型. 如下所示:...

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

    在建立连接后, 就可以进行查询了. 可以用prepare函数来准备一个SQL语句, 获得一个Cursor的句柄(Handle)后就可以执行了, 如下所示: my $sth = $dbh->prepare("select ....."); if (!defined($sth)) { ...... } if ($sth->execute()) { ...... }     在调用execute函数(如果成功返回True, 否则False)后, 接下来需要进行Fetch操作才能将查询的结果取出来, 取出记录有很多种方法: my ($col1, $col2, ....); while ( ($col1, $col2, ...) = $sth->fetchrow_array() )...

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

    从data_sources函数知道了连接信息的格式后, 我们就可以连接了, 只要调用DBI的connect函数, 根据连接信息的格式, 可以自动区别数据库类型, 选择合适的数据库驱动进行连接. 一般写法如下: my $dbh = DBI->connect("data source", "username", "password"); my $dbh = DBI->connect("data source", "username", "password", properties);     connect函数如果连接失败会返回undef值, 因此很容易判断连接是否成功: my $dbh = DBI->connect("dbi:Oracle:test8i","anysql", "anysql")             || die("Cannot connect...

学习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 my $drvname (@drvlist) {    print ("$drvname\n"); }     在运行后输出的结果是: ExampleP Oracle Proxy     data_sources函数是用来列出有那些数据库可以连接的,如下面的代码: #!/usr/bin/perl -w #...

为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"就可以了, 这一步不会很久的. 如下所示: ppm> install DBI ==================== Install 'DBI' version 1.53 in ActivePerl 5.8.0.806. ==================== Downloaded 597997 bytes. Extracting 82/82: blib/arch/auto/DBI/Driver_xst.h...

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

    对于管理Unix/Linux上面数据库的DBA来说, 学点Perl是很有用的技术. 来到这个公司后, 所有的数据库都在Unix上, 因此也就有了学习Perl的压力, 可到现在也没有学好, 没有为公司写过一个用Perl语言的小工具. 下面是我学习过程中的第二个程序, 其中用到了DBI来查询数据库的记录. 程序如下: #!/usr/bin/perl -w # use DBI; # Get a database connection Handle. my $dbconn = DBI->connect("dbi:Oracle:tnsname","username","password"); my $row; # Fetch record row by row into an array $row=$dbconn->selectall_arrayref("SELECT TNAME,TABTYPE...

如何编译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         ......     其实在每一个Oracle的客户端库目录下都会有一个"libclntsh.so"的链接指向"libclntsh.so.ver", 如果在ldd的输出中只去查找"libclntsh.so"的话, 就可以解决在8i/9i/10g下的重新编译的问题了. 我在编译OCI程序时, 就没有不同版本的客户端的问题. $ldd ociuldr.bin         libm.so.1 =>     /usr/lib/libm.so.1         libclntsh.so =>  /export/home/oracle/products/9201/lib32/libclntsh.so         ......     今天就将这个方法用在Perl的DBD-Oracle模块中试试吧, 首先下载DBD-Oracle源程序, 然后就可以开始了. 如果你只想替换Oracle.so文件,...

根据标记(Tags)来查找:

分类 | Categories

本站基于MT-3.36免费版, 和Fenng设计的模板.
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql