|
本帖最后由 nife 于 2012-5-11 17:19 编辑
王飞鹏2011 发表于 2012-5-9 16:37 ![]()
好的,我们学习了。“环境变量的对比;关于实例、库、用户、模式的比对;锁管理的对比;UNDO的对比;REDO ...
环境变量:ORACLE很简单,就是在系统层的用户环境设一些ORACLE_HOME,SID,PATH之类的。DB2的除了系统层DB2INSTANCE,PATH之类,还有一类环境变量是通过db2set设置的。Db2set这类似变量,与其说是环境变量,不如说是属于参数变量,因为其设置是直接影响数据库运行特性的,跟db cf和dbm cf里的参数功能是一样的。
实例、库、用户、模式:ORACLE简化理解:在单机上,实例和库可以认为是等同的,一个实例对应该一个库;在RAC上,就是多个实例,管理一个库。在ORACLE里用户和模式也可以理解成一个东西,两都合二为一了。用户在数据库里管理的,跟OS没关的。 而在DB2里四个概念,都是独立的,都不能简单的等同的。一个实例下可以有多个数据库。用户和模式也是区分开的。用户其实是OS层面的用户。 两种数据库对实例、模式的定义是一样的。
锁的管理:在ORACLE中,对锁很少关心,它是在BLOCK中的一个标置位,不用专门在内在中分配空间维护。号称SELECT永远不会被阻塞。更多可能会关注latch的问题。DB2在内在中分配空间来管理锁,会有所锁升级之类的问题,(一个表的行锁过多,升级为表级锁)。最初非常不习惯。SELECT也会加锁。默认是自动COMMIT,若不自动COMMIT,很容易引起锁超时问题。刚开始接触DB2时,用TAOD工具,还特意将它设为非自动COMMIT,后来发现经常有锁超时,最后检查发现原来是自己的TAOD加了锁未释放,天啊,以前用ORACLE时,都没有这样的事发生。后来还是乖乖的设成自动COMMIT。 关于latch的问题,ORACLE的资料挺多的,讲得很深入详细,对了解ORACLE的内存管理非常有用。DB2这方面的资料很少,没有发现有什么深入的资料。
REDO:ORACLE一般是几组日志,循环使用。日志文件的文件名不会变的。DB2的有LOGPRIMARY和LOGSECOND日志之分。当主日志不够用了,就会使用辅助日志。当使用归档模式后,日志的文件名序列不断增长的,但并不是新建的,其它也是循环使用,只是将旧日志重命为新名已而。最初看到文件名,还非常迷惑不解,为啥不循环使用呢? 两者的REDO作用都一样,都是为了前滚。DB2的REDO其实也包含了UNDO。
UNDO:ORACLE有专门的UNDO表空间,且可以保证一个记录可以有多个片本。也因为有多版本所以号称SELECT操作永远不会被阻塞。DB2里没有专门的UNDO表空间,UNDO记录(前镜像值),也是放在REDO记录里。由于没有多版本,因此在以前它的SELECT操作是有可能被阻塞的。直到V9.7的新特性:当前落实读,才实现了SELECT操作不受阻塞。 在DB2里应该是没有UNDO这个说法的。
表空间的管理:ORACLE的逻辑层次:表空间>段>区>块。物理上就是DATAFILE。10G以前,要么是RAW,要么就是DATAFILE。到了10G有ASM管理方式。 DB2的数据库管理(DMS),系统管理(SMS),自动存储器管理。还有一个容器的概念,可以是DATAFILE,也可以是一个目录。逻辑层次:表空间>区>块
系统视图:应该说ORACLE有非常多的系统视图,v$开头,DBA开头,USER开头等,对数据库状态的监控都是通过系统视图来完成的。接触DB2,开始日常运维时,第一件事就是想了解它的系统视图,但发现它的视图比较少,也比较有限。同时它还提供DB2PD这样的命令来显示一些系统状态。当然还有SNAPSHOT和一些表函数。但几种方式的功能都是重叠的。感觉都不知用那个好。官方建议用DB2PD,因为它不会占资源,或引起锁问题,但DB2PD命令的过滤功能有限,用得不是很顺手,打命令后,全屏都是信息,都不知看那些。
性能报表:ORACLE有AWR或STATPACK或ASH。DB2的SNAPSHOT不知算不算是报表,SNAPSHOT监控的内容还是非常直观有用的,但它没有形成历史记录。
我的经验都是在运维管理方面,也不知道能分离些啥感悟和经验。对比学习是为了更好更快的掌握DB2,感觉认知与理解都还比较肤浅,远还未达到深入对比分析它们设计优劣的境地。呵呵。 |
|