Oracle9i与SYBASE ASE12.5相比的几个不足

原创 2004年07月25日 16:53:00

Oracle9iSYBASE ASE12.5相比的几个不足<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />千千如梦 2004-7-24

 

 

Oracle9iASE12.5分别是世界主流数据库厂商ORACLESYBASE公司的主打产品,拥有相当大的市场份额。本文抛开两者之间在体系结构、技术路线上的差异,纯粹从使用者的角度出发,整理了Oracle9iSYBASE Adaptive Server Enterprise 12.5 (简称ASE12.5)相比的几个不足,至于ASE12.5Oracle9i相比的不足则不在本文的讨论范围。

1 不支持正则表达式:熟悉Unix/LinuxASE12.0/12.5的人都知道正则表达式的灵活、功能强大。像“查找所有包含数字的表名称”这样的需求,在ASE12.5中极其简单:

select name from sysobjects where type=”U” and name like “%[0-9]%” (这里sysobjects相当于Oracle9i中的all_objects),而Oracle9i的实现要颇费一番周折了,一般情况下很多人都是写一个函数实现,以下就是刚学Oracle的时候写的一个实现该功能的函数:

CREATE OR REPLACE function is_number(p_str in varchar2)

return number

as

  w_char char(1);

  i      number :=1;

begin

  while  i <= length(p_str) loop

       w_char := substr(p_str,i,1);

       if w_char >='0' and w_char <='9' then

          return 1;

       end if;

    i:=i+1;

    end loop;

  return 0;

end;

/

Oracle9i调用一个自定义的PL/SQL函数开销会很大;远不及ASE12.5的内部实现。

2  UPDATE语句的“蹩脚”,在数据库的应用中,两个表关联update是很常见的,如有如下两个表:t_a(id,name,point,…),t_b(id,point,…) id均为主键或unique index,现要实现根据id的对应关系将t_b表上point加至t_apoint。我们来看Oracle9iASE12.5的实现:

/** For Oracle9i **/

Update t_a a

Set   a.point=a.point+(select b.point from t_b b where b.id=a.id)

Where exists (select 1 from from t_ b where b.id=a.id)

/

/** For ASE12.0/12.5 **/

Update t_a

Set    point=a.point+b.point

From  t_a a,t_b b

Where  a.id=b.id

Go

Oracle9i的语句似乎不顾清晰、容易误解,而且查看执行计划发现t_b表或索引扫描了2遍!ASE12.5只扫描了1遍。虽然第2遍是逻辑读,但总觉得不甘心;

有时如果t_b表较小,且id上无索引,我宁愿采用cursor方式,多次试验表明

Create INDEX+关联UPDATE要快得多。还有就是采用Oracle9iOLAP特性,用merge 语句来完成。

3临时表技术的比较:

 

ITEM

存储位置

DDL

数据生命周期

ORACLE9i

任何表空间

用户自己维护,表名是全局(数据库用户)唯一

Session / Transaction

ASE12.5

Tempdb

用户create;用户drop或系统drop,表名Session级唯一

Session

 

 

 

 

 

虽然两者各有所长,但我觉得ASE12.5的实现似乎更得临时的精髓在每个会话期间,“召之即来”,不用担心与别人重名,#11 #22 #aa #bb随个人喜好创建,挥之即去”, 会话结束亦不必显式删除,由系统代劳,不必担心垃圾表存在。

 4  Count的问题还是Distinct的问题?select 语句使用 distinct 关键字修饰以返回唯一的行集,这在统计分析、剔除重复数据尤为重要,但是有时仅想统计一个总数呢?我第一次是这样写的:

Select count(distinct a,b,c) from my_table 结果语法不对,只好修改为:

Select count(*) from ( select distinct a,b,c from my_table ) 方得以通过,心想这一定是distinct惹的祸,但随后发现distinct 被冤枉了,因为即使是:

Select count(a,b,c) from my_table 也是不行的。只能写成:

Select count(*) from ( select a,b,c from my_table )

但在ASE12.5上无论是Select count(distinct a,b,c) from my_table 还是Select count(a,b,c) from my_table 均能得出正确结果。

5  数据导入导出工具的比较:Exp/Imp在备份和恢复方面用的比较多,且受版本(高低版本、32bit/64bit)、语言影响较大,且sqlldr 只能算作导入工具,严格来说Oracle9i没有表数据的文本级的导出工具!相反,ASE12.5bcp 的在表数据导入导出方面的很灵活,格式也很简单,很容易做应用程序的输入。还有视图、存储过程、触发器的导出工具defncopy也很好用;至于Oracle9i,我N+1次遇到以下情况:

问:我怎么得到某个存储过程的代码啊?

答:有没有装client阿?

问:装了!

答:打开Enterprise Manager Console,登录后在方案下面找吧

……

问:怎么麻烦阿?

答:那你有没有装Toad或者PL/Develop,这些工具好用点

问:没有啊!

答:L

或者

问:我怎么得到某个存储过程的代码啊?

答:有没有装client阿?

问:装了,可我在主机上啊!

答:那你用sqlplus看罢,

set long 300

select text from all_source where name=’YourName’

go

问:哇,怎么麻烦阿

答:L

要是在ASE12.0

问:我怎么得到某个存储过程的代码啊?

答:用defncopy

问:怎么用啊

答:我靠,这么简单!你还用问阿!J

6  联机备份:虽然Oracle9i提供了冷、热备份技术,但是与ASE12.5基于Open Server技术的联机实时备份Backup Server相比似乎逊色不少,将备份的介质直接拿到另外一台ASE12.5进行Load,很快很简单就能获得一个时效性极强的镜像数据库环境。而我觉得Exp/Imp比较琐碎,且限制也较多。

Oracle9i附带的命令行工具如sqlplus exp/imp sqlldr等,执行时无一例外都将输出时间、版本、版权信息,给像我这样喜欢用shell处理结果的人来说徒增不少麻烦,相比ASE12.5isql bcp defncopy 的干净利落,是Oracle9i的无聊和自恋,还是埃里克森(Larry Ellison)的霸气呢?

 

sybase数据库中时间类型转换以及比较

sybase omnibus中时间类型转换
  • bsh_csn
  • bsh_csn
  • 2016年08月19日 09:17
  • 2461

【Mybatis】从JDBC到Mybatis的改进

本文从原始的JDBC编程,到Mybatis的改进谈起,主要侧重Mybatis再这期间的一些特点和封装。 首先先看一段原始JDBC的查询数据库表记录的操作。Public static void mai...
  • u010176014
  • u010176014
  • 2016年07月25日 22:16
  • 3577

Java 计算两个日期相差月数、天数

package com.myjava;import java.text.ParseException;import java.text.SimpleDateFormat;import java.uti...
  • ninjya_luck
  • ninjya_luck
  • 2015年12月31日 13:40
  • 1153

Sybase ASE12.5 dbcc

说明 数据库一致性检查程序 (dbcc) 检查数据库的逻辑和物理一致性,并提供 统计信息、计划和修复功能。 语法 dbcc addtempdb( dbid | databbase_na...
  • xujinyang
  • xujinyang
  • 2011年11月15日 18:43
  • 1223

Sybase ASE12.5重建存在用户库的master(master库异常,尝试其他方法不能正常启动服务后)

1、编辑$SYBASE/ASE-12_5/install/RUN_etoh2 --RUN_etoh2指的sybase安装目录install下服务启动文件 在命令行最后加入:-T3607 ...
  • xujinyang
  • xujinyang
  • 2011年11月14日 15:14
  • 1550

关于AIX小型机 Sybase ASE 12.5数据库的惊险瞬间

广州市某银行的一些内部关键业务平台为AIX小型机+Sybase ASE 12.5,此应用平台数据量巨大,每天都有超过10G的数据量生成,每一个星期备份一次,并且有大流量访问网站。因为访问繁忙,数据库负...
  • yingpansjhf
  • yingpansjhf
  • 2013年08月27日 15:55
  • 400

Sybase ASE 12.5 For SUN Solaris (NFS方式)

Sybase ASE 12.5 For SUN Solaris 数据库安装步骤 (1) 准备安装介质 如果在本地安装,则直接将Sybase光盘插入到光驱中。 如果在远程安装,则需要将本...
  • wwp1026
  • wwp1026
  • 2011年12月13日 16:52
  • 450

oracle9i安装问题

在RHAS3上成功安装Oracle9204 1、从网上下载redhat Enterprise Linux Advanced Server3的四个安装文件,安装时swap分区设置为内存的二倍。不要...
  • xiaotengyi2012
  • xiaotengyi2012
  • 2012年06月15日 12:35
  • 430

Oracle9i的详细安装与卸载步骤(有图解)

Oracle9i的安装和卸载详解      本章将以Windows操作系统为例讲述Oracle9i数据库的安装                                           ...
  • ww1102406372
  • ww1102406372
  • 2017年03月31日 13:41
  • 142

Oracle9i和10G软件及补丁下载地址

请大家使用迅雷下载,链接如下: oracle 9206 patchset: ftp://updates.oracle.com/3948480/p3948480_9206_AIX64-5L....
  • gongmq83
  • gongmq83
  • 2013年11月21日 14:52
  • 1027
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle9i与SYBASE ASE12.5相比的几个不足
举报原因:
原因补充:

(最多只允许输入30个字)