搞不懂,DB2到底有什么优势???

Jedimaster 2003-05-18 12:53:20
我不听IBM的那些套话,反正我的机器装了DB2后用的就不爽!最小安装都200M,MSSQL SERVER2000才多大?都有GUI的操作平台。

速度巨慢,使用界面不友好,真不知道IBM的这个东西干什么
...全文
372 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
db2boy 2003-07-14
  • 打赏
  • 举报
回复
nidm()的话我同意,可爱
tz_529 2003-07-14
  • 打赏
  • 举报
回复
DB2的存储过程很麻烦,我们的项目开始的存储过程全部转移到客户端去了,因为个人版根本不能编译,要安装C的编译器,很麻烦!这是DB2的缺点之一
DB2的死锁太频繁了,而且很多锁都不是应用系统产生的,我们花了不少时间去跟踪,发现是什么SYSFUNCTIONS表锁,也不知道怎么搞的!有时客户系统极慢!(200多个客户的大容量操作)
DB2的东西比较复杂,SUN的人也称IBM就喜欢将简单东西复杂化。所以DB2的东西用起来陷阱(姑且这么称吧),一不小心就会掉下去!
MS的东西很大路,平心而论,速度确实还可以,主要是并发性等几个关键方面根本不能比,但两种产品的市场定位不一样,没必要拿来比到是真的!
ORACLE的东西感觉上还是最好的,虽然ORACLE用的最少!
DB2的三个工具(我比较喜欢的)
Quest Central for DB2 (可以方便的检测死锁及原因,对SQL语句的分析)
RAPID SQL(最棒的DATAMANAGER)
DBArtisan(甚至可以通过这个来学习DB2的常见设置的影响)
nidm 2003-07-12
  • 打赏
  • 举报
回复
我觉的DB2是真做技术的,ORACLE是一半一半.M$是绝对向钱看,只要赚钱,什么都赶.包括打倒NETSCAPE,搞毁SYBASE的事情.
nidm 2003-07-12
  • 打赏
  • 举报
回复
对于WIN/LINUX/UNIX, DB2 和ORACLE是用同样的方式:写一套源程序(C/C++)在不同的PLATFORM上编译.所以在技术的角度上,不可能ORACLE在UNIX上好很多,或者,DB2在LINUX上好很多.
对于市场上,因为ORACLE最早打UNIX天下(那时还没有LINUX和WIN), 所以它有很多忠诚的用户.IBM在这两年在推广LINUX,加上自己资金和技术雄厚,所以很快就取的LINUX上的成功.
WINDOWS,总所周知的非技术原因,M$站的比例很大.但是它所能处理的数据量和PERFORMANCE,也因为操作系统的问题,而局限性很大
nidm 2003-07-10
  • 打赏
  • 举报
回复
觉得liangxinf(maomao)的说法很形象.只是大家都没有用过DB2 的大炮,所以
就没有一个好的认识了.在这里大家都是用ORACLE和DB2在WINDOWS/LINUX/UNIX上的版本比较.在这些操作系统上,它们个有优势.一旦包DB2/390这个大炮抬出来,ORACLE就哑了.
leonzhao 2003-07-10
  • 打赏
  • 举报
回复
Linux的话,现在DB2的市场大概5x%,占有觉得优势的。
zcx5201314 2003-07-09
  • 打赏
  • 举报
回复
liangxinf
db2是多库结构.

oracle是单库的

可比嘛:)
leonzhao 2003-07-07
  • 打赏
  • 举报
回复
我觉得Oracle有他的好处,但是很多东西都是Oracle不能和IBM拼的。比如说:DB2 II,访问Oracle的速度有时候比直接访问Oracle的速度都快,为什么?IBM是个技术型公司,那么多开发人员不是白吃饭的哦
liangxinf 2003-07-07
  • 打赏
  • 举报
回复
不恰当的比喻,鸟枪与大炮.
你打鸟和猎一头大象使用的工具肯定不同.
sqlserver 和db2也一样,不同的使用途径,各有优势.
楼主不要再说这样的话了,不要一安装就这样抱怨,没有真正的使用,你没发言权的.
昨天oracle81.7新建一个库,用了一个小时,而db2新建一个库也就几分钟啊.
mojiewen2006 2021-07-09
  • 举报
回复
@liangxinf 新建一个库是什么情况?需要几分钟?
roc_fu 2003-07-06
  • 打赏
  • 举报
回复
小弟以前用过的数据库不少,SQL Server,Sybase,Oracle都用过较长时间,最近作数据仓库项目,开始接触DB2,对DB2的一些东西不是很了解,但与ccbzzp(ccbzzp) 的一些观点有些不同,对于不明白的不敢乱说,只能对一下两点,从实际角度比较

2. DB2的GUI管理工具比ORACLE的好,运行速度开,虽然都是JAVA开发的
DB2的GUI管理工具装上之后,发觉比ORACLE的GUI慢了N倍,客户机器端速度也急剧下降,虽然两个产品的管理工具都用java开发,这一点没有什么好争论的,我想用过这两种数据库的人都有感觉,一些工具确实Oracle没有提供,但是有PL/SQL Developer这样的第三方工具可用,DB2下就一直没有这样顺手的工具,DB2自己提供的工具简直就没法用。总的感觉Oracle象一个产品,DB2象一个集成项目,很凌乱。

6。db2可以包char,date,time,timestamp之类的保留字作为表的字段名,ORACLE不行。
oracle不是完全不能用关键字作表或字段名,time,timestamp是肯定可以的,刚才我还试了一下,Pro C对这样的表访问,也就是动态SQL访问就可以了,但是非要用关键字来建表又有什么意义咧?
APIMFC 2003-07-04
  • 打赏
  • 举报
回复
gz
dotcode 2003-07-04
  • 打赏
  • 举报
回复
那么,请问还有oracle的地位吗?请问全世界财富100强里100%都是用DB2还是既有db2又有oracle呢?个人认为在作程序的时候同时对oracle和DB2进行测试,DB2好像有时便的很慢,而且在建立连接的时候很费时间,感觉oracle要好点。至于DB2的界面真的很慢,远比不上DBone之类的。顺便问一下quest center这个东东到哪可以下呀,发给我也可以james.jia@fusion-system.com,邮箱容量较大,还有toad这个东东不是用作oracl的吗?
leonzhao 2003-07-04
  • 打赏
  • 举报
回复
oracle在国内因为盗版的原因,非常普及,这也算是中国特色了~
ccbzzp 2003-07-04
  • 打赏
  • 举报
回复
6。db2可以包char,date,time,timestamp之类的保留字作为表的字段名,ORACLE不行。
7。db2的container(dms的时候与datafile一样),加入新的后,db2会自动把数据重新自动平均分配到各个containor中。db2中可以间接删除数据文件,ORACLE可能只用drop and recreate的办法。
8。 db2 can rename tablespace except catalog tablespace



ccbzzp 2003-07-04
  • 打赏
  • 举报
回复
1. DB2的import/export 功能强大,使用方便
2. DB2的GUI管理工具比ORACLE的好,运行速度开,虽然都是JAVA开发的
3. DB2的DAS,比ORACLE的OEM好用,需要资源少,速度快,配置简单
4. db2的back/recover很简单,最多一天学会
5. db2比oracle多一个SMS表空间类型,就是一个table对应一个文件



leonzhao 2003-07-03
  • 打赏
  • 举报
回复
我同意!我同意!
db2boy 2003-07-03
  • 打赏
  • 举报
回复
虽然 SQL Server 比以前有些进步,但从技术上和 DB2 还不是不是一个级别的。很多人使用它很大程度上是因为易用性好一些,但如果你真的理解 DB2,使用起来也很容易。
SenerityChzr 2003-07-03
  • 打赏
  • 举报
回复
如果你知道全世界财富100强里100%都是用DB2,而500强里70%都是用DB2的话,你就能知道答案了!
leonzhao 2003-06-29
  • 打赏
  • 举报
回复
"另一个要求的是速度,是效率"

这一点我也不是很赞同,SQL Server在单个用户做简单的查询的时候速度也许不错,但是如果数据量上升,查询复杂,并发多的时候就明显看出SQL Server的效率低下了。
yangni25 2003-06-28
  • 打赏
  • 举报
回复
比较是要看站在什么层面上,否则是比不出什么结果的!外面比较的文章很多,建议大家去看看!
加载更多回复(14)
java 实现连接sql server 20002007-12-16 13:28:00.0 第一种:通过ODBC连接数据库 JAVA语言的跨平台的工作能力(Write Once ,Run Anywhere)、优秀的图像处理能力(我相信现在没有那种语言可以超过JAVA在网络上的图形处理能力)、网络通信功能、通过JDBC数据库访问技术等等,让我们谁都不可否认JAVA语言是SUN公司对于计算机界的一个巨大的贡献。笔者可以描述这样一个场景:有一天你上网完全可以不用IE 或者NETSCAPE,上网就像是玩游戏,你可以获得游戏那么精美的图像和互动的感觉,如果你玩过UO,也许你就知道那种感觉了,但是JAVA做成的东西一定会超过UO的,因为不单单是游戏,也不是单单是浏览器,如果你愿意(要你有钱,有时间,有优秀的JAVA人才)你可以把所有的这一切用Java完全集成出来!!!我不是夸大JAVA的功能,大家可以访问一下http://www.simchina.net的那个社区程序,你就能找到一种感觉了:相信我没有说什么假话 。好了,不说废话了,现在我向你介绍JAVA的数据库访问技术----JDBC数据库访问技术(你可千万不要搞成ODBC了哟!)。 JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我也不知道是不是真的),而且现在的JDBC 3.0据Sun说也能访问Execel等电子表格程序! JDBC对于数据库的访问有四种方式,我们这里只是介绍两种: 第一种是通过ODBC做为“桥”(Bridge)对数据库访问,第二种是直接对数据库访问。 我们先来看看第一种JDBC<-->ODBC访问的流程: JDBC Driver Mannager->JDBC<->ODBC桥->ODBC->数据库客户机驱动库->数据库服务器->返回查询结果,在这种访问中值的我们注意的是虽然JAVA是"Write Once ,Run Anywhere",但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动,当你看了下面的另外一个流程的时候或许你会想:明明下一种更方面,为什么还要有这个东西的产生!呵呵,因为,未必所有的数据库服务器提供商都提供下面的JDBC驱动程序(给JDBC访问提供相应的接口),所以就有了JDBC<->ODBC Bridge。 接着再让我们来看看第二种访问流程: JDBC Driver Mannager->局部JDBC驱动->客户端数据库->数据库服务器->返回查询结果,这种访问事实上是转换JDBC调用为相应的数据库(Oracle, Sybase, Informix, DB2, 和其他的数据库数据库管理系统)的客户端API调用(这么说,不知道大家能不能懂,说简单点就好像ASP不是通过DSN对数据库访问而是通过OLEDB访问,说道这里我还是不知道大家能不能明白我的意思。哎呀,不要扔鸡蛋嘛!),这种方式的访问需要相应的数据库提供商提供相应的JDBC驱动程序,但是有一种好处,可以独立于odbc用于可以随处可Run的客户端的浏览器中的Applet程序。 我们下面将给大家一个通过JDBC-ODBC桥数据库访问的实例,但是在看下面的事例前我想问大家一次:JDK1.3装了吗?数据库驱动装了吗(我使用的是SQLserver)?你该没有使用Linux吧?虽然java支持Linux,但是老兄我可没有使用Linux哟(这同JAVA的Write Once ,Run Anywhere没有关系),由于使用了运行于Win下面的ODBC,我建议你看看这篇东西http://www.aspcn.com/showarticle.asp?id=112,否则你要是有了问题,出不了结果那岂不是要怪我(不过欲加之罪,何患无吃... ...),冤枉呀! 哎呀,说了这么多的废话,还是让我们来看看到底JDBC的调用吧!既然我们是通过odbc访问数据库,所以这个odbc是跑不了的,我们先来设置你的odbc:打开你的odbc数据源->选择系统dsn(Click加新的dsn-)->接下来输入选择数据库类型、输入dsn名:、选择服务器、连接数据库的方式、输入数据库的登陆用户和密码->测试连接,如果测试成功的话,那么你的dsn就建立好了,我的dsn名为Sqlserver.使用的是sqlserver7.0,以 “sa”登陆,密码为空。这些东西都是后面要用道的! 好了下面让我们来看程序代码: (该代码已经通过运行) //########################################################### //代码开始 //########################################################### import java.sql.*; //加载java数据连接包,java基本所有的数据库的调用的都在这个东西里面 public class InsertCoffees { public static void main(String args[]) { String url = "jdbc:odbc:sqlserver"; //取得连接的url名,注意sqlserver是dsn名 Connection con; //实例化一个Connection对象 Statement stmt; String query = "select * from col_link"; //选择所有的Col_link表中的数据输出 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载jdbc-odbc桥驱动 } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); //加载jdbc-odbc桥错误 System.err.println(e.getMessage()); //其他错误 } try { con = DriverManager.getConnection(url, "sa", ""); //数据库连接 stmt = con.createStatement(); //Create 一个声明 stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) "); //执行了一个sql语句生成了一个表col_link的表 stmt.executeUpdate("insert into col_link values('ASP中华网','http://www.aspcn.com')"); stmt.executeUpdate("insert into col_link values('永远到底有多远','http://xuankong.com')"); //执行一个insert into语句 stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'"); //执行一个update语句,更新数据库 ResultSet rs = stmt.executeQuery(query); //返回一个结果集 System.out.println("Col_link表中的数据如下(原始数据)"); //下面的语句使用了一个while循环打印出了col_link表中的所有的数据 System.out.println("站点名 "+" "+"站点地址"); System.out.println("---------------"+" "+"----------------"); while (rs.next()) { String s = rs.getString("sitename"); String f = rs.getString("siteurl"); //取得数据库中的数据 System.out.println(s + " " + f); /*String t = rs.getString(1); String l = rs.getString(2); System.out.println(t + " " + l);*/ /*jdbc提供了两种方法识别字段,一种是使用getXXX(注意这里的getXXX表示取不同类型字段的不同的方法)获得字段名, 第二种*是通过字段索引,在这里我把第二种方法注释了*/ /*你可以访问这个连接获得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/ } stmt.close(); con.close(); //上面的语句关闭声明和连接 } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); //显示数据库连接错误或者查询错误 } } } //########################################################### //代码结束 //########################################################### 在上面这个程序中我想你展示了如何使用JDBC-ODBC连接数据库,使用SQL语句生成一个表,使用SELECT、INSERT 、UPDATE语句取的、插入和更新一个表中的数据,如何通过字段名和字段索引访问数据库中的东东!我希望你能从上面的代码真正的学习到一些东西! 发挥你的想象力,设想一下JAVA到底,比如说可以通过数据库做一个不需要GUI(图形用户界面)的聊天室,呵呵,感觉起来就像在DOS环境下打字的聊天室!哈哈! 最后需要说的是笔者的调试上面程序的环境:WIN2000 , JDK1.3,MS SQLSERVER编辑软件:EDITPLUS 2.01a(这最后的东西可不是废话,虽然早就了一些专业的JAVA开发工具,但是笔者建议JAVA初学者使用文本软件开发JAVA程序) 第二种:直接用jdbc访问数据库 (1) 该实例已经运行通过 jsp连接Sql Server7.0/2000数据库 testsqlserver.jsp如下: <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%> <%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; //pubs为你的数据库的 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from test"; ResultSet rs=stmt.executeQuery(sql); while(rs.next()) {%> 您的第一个字段内容为:<%=rs.getString(1);%> 您的第二个字段内容为:<%=rs.getString(2);%> <%}%> <%out.print("数据库操作成功,恭喜你");%> <%rs.close(); stmt.close(); conn.close(); %> (2)java访问sqlserver服务器 第一步:安装jdbc 点击SQL Server for JDBC驱动程序安装程序setup.exe(可以到微软网站下载 http://msdn.microsoft.com/library/default.asp?rul=/downloads/list/sqlserver.asp下载) 第二步:设置系统变量classpath 假设SQL Server for JDBC 驱动程序安装在d:\jdbc\,则classpath应该设置如下: classpath:=.;…;d:\jdbc\lib; d:\jdbc\lib\mssqlserver.jar; d:\jdbc\lib\msutil.jar; d:\jdbc\lib\msbase.jar; 注意:设置时要在最前面的点号和分号 第三步:编辑java程序并且运行 实例1如下: //import com.microsoft.*; //注意:在java与sql server 连接时不需要这个包,其他书上说这个包是必需的,这个问题有待进一步讨论 import java.sql.*; import java.net.URL; class insert { public static void main(String[] args) { String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=northwind"; String query="select * from categories"; String query1="insert categories values(10,'Hanbao','Sweet')"; String query2="insert categories values(11,'Naicha','Coffee taste')"; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection con=DriverManager.getConnection(url,"sa","739555"); Statement stmt=con.createStatement(); stmt.executeUpdate(query1); stmt.executeUpdate(query2); stmt.close(); con.close(); } catch(SQLException ex) { } catch(java.lang.Exception ex) { ex.printStackTrace(); } } } 实例2如下: //import com.microsoft.*; //注意:在java与sql server 连接时不需要这个包,其他书上说这个包是必需的,这个问题有待进一步讨论 import java.sql.*; import java.net.URL; class java2sqlserver { public static void main(String[] args) { String url="jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=739555;DatabaseName=northwind"; String query="Select * From Categories"; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //DriverManager.setLogStream(System.out); Connection con=DriverManager.getConnection(url); checkForWarning(con.getWarnings()); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(query); dispResultSet(rs); rs.close(); stmt.close(); con.close(); } catch(SQLException ex) { System.out.println(ex.toString()+"----SQLException caught----"); while(ex!=null) { System.out.print("SQLState:"+ex.getSQLState()); System.out.print("Message:"+ex.getMessage()); System.out.print("Vendor:"+ex.getErrorCode()); ex=ex.getNextException(); System.out.println(""); } } catch(java.lang.Exception ex) { ex.printStackTrace(); } } private static boolean checkForWarning(SQLWarning warn) { boolean rc=false; if(warn!=null) { System.out.println("----Warning----"); rc=true; while(warn!=null) { System.out.print("SQLState:"+warn.getSQLState()); System.out.print("Message:"+warn.getMessage()); System.out.print("Vendor:"+warn.getErrorCode()); System.out.println(""); warn=warn.getNextWarning(); } } return rc; } private static void dispResultSet(ResultSet rs) throws SQLException { int i; ResultSetMetaData rsmd=rs.getMetaData(); int numCols=rsmd.getColumnCount(); for(i=1;i<=numCols;i++) { if(i>1) System.out.print(", "); System.out.print(rsmd.getColumnLabel(i)); } System.out.println(""); boolean more=rs.next(); while(more) { for(i=1;i

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧