By kamus, on July 24th, 2010
试用了达梦数据库6.02 for Linux版本。测试的操作系统为CentOS 5虚拟机,数据库软件从此处下载。
本文并未像老杨那样做产品功能性的测试,实际上老杨已经测试的够详细了。
只是作为Oracle的重度用户,在用户体验上将DM和Oracle做些许比较,大部分集中在DM的isql和Oracle的sql*plus上,当然这些比较还很肤浅,权当一看。
1. 最重要的,最诚恳的建议,达梦应该在网上提供完全没有任何技术限制的软件下载,包括达梦企业版和安全版。达梦不需要怕别人免费用自己的数据库,而应该怕别人没有兴趣用自己的数据库。如果免费使用的人数有1万,那么希望进行技术讨论的人数就可能会有1千,而1千个踊跃讨论的用户将会带来更多的免费使用人群,这些人群中只要有1%愿意付费,就是达梦的成功。只有虚怀若谷才能海纳百川。
2. 字符界面的静默安装速度很快,但是安装过程中的英文提示有“Whether to ”字样,我明白是想表达“是否要”的意思,但是出现在安装提示中比较奇怪,建议全部去掉。比如:
Whether to Initialize the Database (Y/y,N/n) [Y/y]:y Whether to Modify DataBase Initiation Parameter (Y/y,N/n) [N/n]:y Whether to Modify SYSDBA Password (Y/y,N/n) [N/n]:
3. 安装文档中并没有提及在Linux环境需要创建另外的用于安装DMDBMS的用户组和用户,因此这可能会让大家都使用root用户来安装DM数据库,实际上在我的测试环境中也是使用root用户的。建议对于安装程序和文档都做相应修改,明确建议DM数据库应该安装在自己的用户下。比如用户组是dba,用户是dmusr。
4. 即使在安装过程中选择了安装示例数据库,但是在安装结束以后并没有发现有BOOKSHOP数据库。
5. 安装完毕以后需要重新login,因为 export LD_LIBRARY_PATH=/u01/dmdbms/bin这样的设置仅仅更新在.bash_profile中了,但是当前环境没有生效,此时运行isql会报错:
./isql: error while loading shared libraries: libdmapi.so: cannot open shared obj
建议不要依靠LD_LIBRARY_PATH这样的设置,或者在安装后立刻在当前环境中使 . . . → Read More: User Experience Suggesion for Dameng Database
By kamus, on July 14th, 2010
这段时间有客户的10gR2数据库经常遭遇执行计划不稳定的现象,应该是直方图信息(Histogram)+绑定变量窥视(Bind Variable Peeking)造成的问题,藉此分享一下直方图的使用经验,但是我非常希望能听到针对本文的不同声音。测试环境Oracle 11.2.0.1 for Windows X64。
创建一个测试表。
DROP TABLE t; CREATE TABLE t AS SELECT rownum n1, ROUND(rownum/100) n2, ‘xxxx’ n3 FROM dba_objects WHERE rownum<=10000;
这样我们生成了一张表T,其中有一万行记录。 N1字段可以认为是主键,有10000个distinct值(1-10000),这是一个数据分布均匀的字段; N2字段有101个distinct值,除了第一个值0和最后一个值101之外,其它的值都有100行记录,我们可以认为这是一个数据分布均匀的字段; N3字段有10000个值都是xxxx,实际上这也仍然是一个分布均匀的字段。
对于这三种类型的字段,我们都不应该去收集直方图信息,因为没有意义。那么直方图信息之所以需要存在的根本意义在哪里?
一. 我们何时该做 直方图究其根本实际上就是一个数据分布的图示,这个图示是为了在生成SQL执行计划的时候给Oracle的CBO更多的信息,换句话说,就是当在where条件中的某些列可能由于列值的不同而希望CBO制定出不同的执行计划时,我们需要直方图。
反过来说,什么情况下我们不需要直方图呢?或者说直方图的存在是没有意义的呢? 1. 当此列不用于查询时,也就是这个字段永远不会出现在where条件中(注意:即使是用于表连接那也算是出现在where条件中)。 2. 当此列无论给予什么比较值,我们都希望永远是一种执行计划时。上面例子中的3个字段都属于这种情况。 对于N1或者N2出现在where条件中,我们希望永远是用该列上的索引扫描(当然需要在该列上先创建索引),对于N3出现在where条件中,我们希望永远是全表扫描。这样的执行计划的制定,只要有表级别的统计信息就足够了,直方图信息的出现不但不会对制定正确的执行计划有帮助,甚至会出现奇怪的现象导致执行计划不稳定。
二. 我们可以怎样做 那么我们继续看一下收集直方图信息的方法,众所周知,是需要使用DBMS_STATS.GATHER_TABLE_STATS存储过程的,并且是由这个存储过程中的method_opt参数决定的。可以由以下几种选择。
method_opt=>’for columns size skewonly [column_name]‘ 什么是SKEWONLY?先看一下Oracle官方文档中的定义。
Oracle determines the columns to . . . → Read More: Oracle Histogram Investigation
By kamus, on July 6th, 2010
当前最新的Oracle数据库版本得益于30余年饱含技术创新的开发。在Oracle数据库的演变过程中有以下值得纪念的成绩。
甲骨文的创建 1977年, Larry Ellison, Bob Miner和Ed Oates创立了软件研发实验室,后来成为Relational Software, Inc. (RSI)。在1983年,RSI改名为甲骨文系统公司,再后来就成为了甲骨文公司。
第一个商用关系型数据库问世 1979年,RSI发布了Oracle V2(第二版本),这是第一个商用的SQL-Based关系型数据库,是关系型数据库发展历史上的里程碑。
Oracle数据库跨平台版本发布 在1983年发布的Oracle Version 3是第一个可以运行在主机、小型机、PC上的关系型数据库。用C语言编写,这就使跨平台成为可能。
在并发性控制,数据分布和扩展性方面得以增强 Oracle Version 4中推出了多版本读一致性。在1985年发布的Version 5支持客户端/服务器架构以及分布式数据库系统。而Version 6更是带来了再磁盘IO,行级锁,扩展性以及备份恢复上的多项增强。同时,Version 6中也推出了PL/SQL语言的第一版,这是对于SQL语言的过程性扩展。
PL/SQL存储程序单元 1992年发布的Oracle7,推出了PL/SQL存储过程以及触发器。
对象和分区 1997年发布的Oracle8拥有了面向对象的关系型数据库特征,支持了大量新的数据类型。同时,Oracle8开始支持大表的分区。
互联网计算 1999年发布的Oracle8i数据库,提供了对于互联网协议的本地支持,还有服务器端对于Java的支持。Oracle8i是为了互联网计算而设计的,使数据库被部署在多层环境中成为可能。
Oracle真正应用集群(RAC) 2001年发布的oracle9i数据库中推出了Oracle RAC,允许多个数据库实例同时读写一份数据库。另外,Oracle XML数据库 (Oracle XML DB) 的出现提供了存储和查询XML的功能。
网格计算 2003年发布的Oracle10g推出了网格计算。这个版本实现了让客户在廉价服务器上创建网格架构来部署虚拟计算资源。主要目的就是使数据库能够自行管理和自行调优。Oracle自动存储管理(Oracle ASM)的推出也对虚拟化和简单化数据库存储管理提供了很大帮助。
管理性、可诊断性和可用性 2007年发布的Oracle11g,推出了大量新特性,让系统管理员和开发人员可以迅速适应业务需求变化。关键点就是在所有可能的场合都尽可能通过自动化和信息结合来精简信息框架。
以上均翻译自Oracle联机文档《Oracle® Database Concepts》。 更详细的文章可以参看:Oracle Celebrates 30 Years of . . . → Read More: Brief History of Oracle Database