最新出的好加速wqhg下载

weixin_39820835 2019-05-14 02:00:16
想要好加速。来找我吧。什么SF。都能开。
绝对是无敌。我还有2个挂。没传上来
相关下载链接://download.csdn.net/download/zhanghuang520/2200596?utm_source=bbsseo
...全文
19 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
相关推荐
1.创建一个OpenGL窗口: 在这个教程里,我将教你在Windows环境中创建OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退.它是我们以后应用程序的框架. 理解OpenGL如何工作非常重要,你可以在教程的末尾下载源程序,但我强烈建议你至少读一遍教程,然后再开始编程. 2.你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何在空间放置模型,并且会知道深度缓存的概念。 3.添加颜色: 作为第二课的扩展,我将叫你如何使用颜色。你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色。 注意三角形上的颜色是如何混合的。 颜色为OpenGlL 工程增加很多。通过理解平面着色(flat coloring)和平滑着色(smooth coloring),你能显著的改善你的OpenGL Demo的样子。 4.旋转: 在这一课里,我将教会你如何旋转三角形和四边形。左图中的三角形沿Y轴旋转,四边形沿着X轴旋转。 这一章将引入两个变量, rtri 被用来存储三角形的角度, rquad存储四边形的角度。 和容易创建一个多边形组成的场景。让这些物体动起来是整个场景变得生动起来。在后面的课程钟我将教给你如何绕屏幕上的一个点旋转物体,使得物体绕屏幕而不是它的轴转动。 5.3D形体: 既然我们已经领会到多边形,方形,色彩和旋转。现在该建立3D物体了。我将使用多边形和矩形c创建3D物体。这次我们将扩展上一章的教程,并且将三角形转换成一个彩色的棱锥,把正方形变为一个实心正方体。棱锥使用混合色,正方体每个面使用一种颜色。在3D空间创建物体可能很费时间,但是所获得的结果(收获)值得这样做。充分发挥你的想象力吧。 6.纹理映射: 你想要它,它现在就在这里了,那就是 ... 纹理映射!!!在这一章我将教会你如何将一幅位图(bitmap)映射到正方体的六个面上去。我们将使用第一章的OpenGL代码来创建工程。创建一个空的窗口比修改上一课的代码更容易。 你将会发现第一章的代码在对于快速创建工程来说是及其有价值的。第一章的代码为你设置了一切,你所需要做的只是集中精力为效果编程。 7.纹理滤波, 光照和键盘控制: 的,我希望到现在你已经理解了所有的东西,因为这是一个巨大的教程。我想教给你两个新的方法来过滤(filter)你的纹理,简单的光照,键盘控制并且还可能更多 :) .如果你对到这一课为止你所学的东西并不充满信心,那就回头复习一下。玩一下其它课程的代码,不要操之过急。最专心把每一课学,而不是蜻蜓点水,只知道如何把东西做来。 8.混合 有理由等一下,一个来自很酷的Hypercosm的程序员伙伴问(我)他是否可以写一章关于混合的教程。第八课通常正是讲混合的,所以太巧了。这一章教程扩展了第七章。混合是一项很酷的技术 .. 我希望你们能享受这一章教程。这一章的作者是Tom Stanis他在这制作一章上花费了很多精力,所以让他知道你觉得怎么样。混合可不是一个讲的话题。 9.在3D空间中移动位图: 这一章覆盖了一些你们要求的主题,你想知道如何移动你在3D屏幕空间上创造的物体。你想要知道如何在屏幕上绘制一幅位图,并且位图的黑色部分不会覆盖它后面的东西。你想要简单的动画,想要更多的混合的应用,这一章将教会你所有这些。You'll notice there's no spinning boxes(yaker:很惭愧这一句我不是很明白)。前面的课程覆盖了OpenGL的基础,每一章都基于前面的内容。前面的课程涵盖了基础的OpenGL,每一课都是在前一课的基础上创建的。这一课是前面几课知识的综合,当你学习这课时,请确保你已经掌握了前面几课的知识。 10.加载3D世界,并在其中漫游: 你一直期待的教程来了!这一章友一个叫Lionel Brites的伙伴制作。这一课里你讲学到如何导入一个3D世界。代码仍然使用第一章的,但是,课程页面只是解释了新的部分,包括导入3D场景,在3D世界中移动。下载VC++代码并且在你阅读教程的同时阅读代码。按[B]键控制混合,[F]键控制滤波,[L]键控制光照(但光并不随场景移动),还有[Page UP]和[Page Down]键。我希望你能喜欢Lionel对网站的贡献。我有空的时候我会让这个教程更容易学习。 11.旗帜效果 (飘动的纹理): 这一章教程由Bosco带给你。他就是那个创造了很酷的小Demo: worthless的家伙。他喜欢每个人对他的Demo的反映,并且决定更进一步,在他的Demo的最后解释他怎么实现这么酷的效果的。这一章教程构建在第六章的代码之上。阅读完这一章之后,你将能弯曲,折叠以及操纵你自己的纹理。这绝对是个很漂亮的效果,并且比纹理固定的旗帜得多。如果你喜欢这一章,请发邮件给bosco让他知道。 12.显示列表 想知道如何加速你的OpenGL程序么?每次为放置一个物体在屏幕上而写很多代码让你厌烦了吧?如果是这样,这一章就是为你准备的。学习如何用OpenGL来显示列表。只用一行代码预构建和显示物体。使用预编译物体加速你的程序。不要再一次又一次写重复的代码。让显示列表为你做所有的工作吧!这一章里我们将建造Q-bert金字塔(Q-bert是一款游戏),感谢显示列表,我们只需要用不多的几行代码。 13.位图字体 这一课我们将创建一些基于2D图像的字体,它们可以缩放,但不能旋转,并且总是面向前方,但作为基本的显示来说,我想已经够了。 14.图像字体 在一课我们将教你绘制3D的图形字体,它们可像一般的3D模型一样被变换。 15.图形字体的纹理映射: 这一课,我们将在上一课的基础上创建带有纹理的字体,它真的很简单。 16.看起来很酷的雾 这一课是基于第7课的代码的,你将学会三种不同的雾的计算方法,以及怎样设置雾的颜色和雾的范围。 17.2D 图像文字 在这一课中,你将学会如何使用四边形纹理贴图把文字显示在屏幕上。你将学会如何把256个不同的文字从一个256x256的纹理图像中分别提取来,并为每一个文字创建一个显示列表,接着创建一个输函数来创建任意你希望的文字。 18.二次几何体 利用二次几何体,你可以很容易的创建球,圆盘,圆柱和圆锥。 19.粒子系统 你是否希望创建爆炸,喷泉,流星之类的效果。这一课将告诉你如何创建一个简单的例子系统,并用它来创建一种喷射的效果。 20.蒙板 到目前为止你已经学会如何使用alpha混合,把一个透明物体渲染到屏幕上了,但有的使用它看起来并不是那么的复合你的心意。使用蒙板技术,将会按照你蒙板的位置精确的绘制。 21.线,反走样,计时,正投影和简单的声音 这是我第一个大的教程,它将包括线,反走样,计时,正投影和简单的声音。希望这一课中的东西能让每个人感到高兴。 22.凹凸映射,多重纹理扩展 这是一课高级教程,请确信你对基本知识已经非常了解了。这一课是基于第六课的代码的,它将建立一个非常酷的立体纹理效果。 23.球面映射 这一个将教会你如何把环境纹理包裹在你的3D模型上,让它看起来象反射了周围的场景一样。 24.符号,扩展,剪裁和TGA图像文件的加载 在这一课里,你将学会如何读取你显卡支持的OpenGL的扩展,并在你指定的剪裁区域把它显示来。 25.变形和从文件中加载3D物体 在这一课中,你将学会如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型。 26.剪裁平面,蒙板缓存和反射 在这一课中你将学会如何创建镜面显示效果,它使用剪裁平面,蒙板缓存等OpenGL中一些高级的技巧。 27.阴影 这是一个高级的主题,请确信你已经熟练的掌握了基本的OpenGL,并熟悉蒙板缓存。当然它会给你留下深刻的印象的。 28.贝塞尔曲面 这是一课关于数学运算的,没有别的内容了。来,有信心就看看它吧。 29.Blitter 函数 类似于DirectDraw的blit函数,过时的技术,我们有实现了它。它非常的简单,就是把一块纹理贴到另一块纹理上。 30.碰撞检测 这是一课激动的教程,你也许等待它多时了。你将学会碰撞剪裁,物理模拟太多的东西,慢慢期待吧。 31.模型加载 你知道大名鼎鼎的Milkshape3D建模软件么,我们将加载它的模型,当然你可以加载任何你认为不错的模型。 32.拾取, Alpha混合, Alpha测试, 排序 这又是一个小游戏,交给的东西会很多,慢慢体会吧 33.加载压缩和未压缩的TGA文件 在这一课里,你将学会如何加载压缩和为压缩的TGA文件,由于它使用RLE压缩,所以非常的简单,你能很快地熟悉它的。 34.从高度图生成的美丽地形 这一课将教会你如何从一个2D的灰度图创建地形 35.在OpenGL中播放AVI视频 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错。你可以试试。 36.放射模糊和渲染到纹理 如何实现放射状的滤镜效果呢,看上去很难,其实很简单。把渲染得图像作为纹理提取来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试。 37.卡通映射 什么是卡通了,一个轮廓加上少量的几种颜色。使用一维纹理映射,你也可以实现这种效果。 38.从资源文件中载入图像 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用。 39.物理模拟简介 还记得高中的物理吧,直线运动,自由落体运动,弹簧。在这一课里,我们将创造这一切。 40.绳子的模拟 怎样模拟一根绳子呢,把它想象成一个个紧密排列的点,怎么样有了思路了吧,在这一课你你将学会怎样建模,简单吧,你能模拟更多。 41.体积雾 把雾坐标绑定到顶点,你可以在雾中漫游,体验一下吧。 42.多重视口 画中画效果,很酷吧。使用视口它变得很简单,但渲染四次可会大大降低你的显示速度哦:) 43.在OpenGL中使用FreeType库 使用FreeType库可以创建非常看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个做魔兽世界的。尝试一下吧,我只告诉你了基本的使用方式,你可以走的更远。 44.3D 光晕 当镜头对准太阳的时候就会现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了。看看吧。 45.顶点缓存 你想更快地绘制么?直接操作显卡吧,这可是前沿的图形技术,不要犹豫,我带你入门。接下来,你自己向前走吧。 46.全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据。看看吧,驱动程序为你做完了一切。 47.CG 顶点脚本 nVidio的面向GPU的C语言,如果你相信它就学学吧,同样这里也只是个入门。记住,类似的语言还有微软的HLSL,OpenGL的GLSL,ATI的shaderMonker。不要选错哦:) 48.轨迹球实现的鼠标旋转 使用鼠标旋转物体,很简单也有很多实现方法,这里我们教会你模拟轨迹球来实现它.
学语法,学技巧,学开发,这些其实都是为了能开发通用产品,然后为人民服务,促进社会发展,减少重复劳动,创造价值。 当对某个语法,程序的性能、功能等等都没兴趣了,就会对软件产品有兴趣了,没有行业知识就做技术性的产品,有丰富的行业知识后就做行业通用产品。毕竟语法和技巧是难销售去的,还是需要靠产品。 当有非常大的客户,天天在用我们开发来的系统组件,每天有几百个人用,每天处理几百个单据的审核,可以灵活设置几百个单据模板的流程时,也会有很大的成就感,也不不会觉得空虚,也不会觉得自己被社会抛弃了一样,也会多很多生存的安全感,生活就更有奔头了一样了。 1:源码开放对同行客户有很大的吸引力,因为很多大客户都怕受制于人,例如一期项目预算是10万,但是若想进行二期项目必须50万才可以,否则不给你更新系统不升级系统等等或者修改任何一个小功能都要收费,由于第一期就受制于人了,将来开展项目时就会非常被动,而且有任何修改都需要找开发商进行二次开发,而且二次开发的费用往往会非常昂贵,因为源码没在手上非常难进行个性化开发,毕竟有些客户也是有一定的开发能力,软件的应用也非常有深度,所以客户希望不要封装得过于厉害,能开放的部分都开放。甚至是没有任何源码加密处理,源码开放的更容易得到客户的信任,但是也会有很大的经济利益受不到保护的问题会来,这就看开发人员怎么定位自己了。 2:软件的架构要灵活,否则经不起折腾,需要多年长期维护的软件系统,若软件的架构不,编码质量不高,自己都维护不下去了,虽然都说每个人都爱自己的孩子,软件产品也是我们自己的孩子,但是软件实在难以忍受了,都想重构了。 毕竟软件可以杀掉了再重新来,自己的孩子再丑也只能认了。重新来过的代价就是多年来自己认真测试的成果很多都会被丢弃了,什么都从零又开始,只是积累了一些丰富的经验教训,新的开发起来会顺利一些,但是也是倒退50步前进100步的事情,虽然是又前进了50步,但是折腾了150步了,付的代价也是很昂贵的。 3:提前要做准备,没事干的时候就完善组件,其实很早就有个小梦想,就是开发一个又简单又用的工作流程审批组件,也不需要过于复杂,也不需要过于庞大,又简单又用,能把实际工作中的大部分问题都能解决的,一个人就可以维护起来的工作流程审批组件,因为太庞大了,不调试,不实施,客户使用起来也难,虽然有100个功能,但是常用的就是10个功能,可能那90个复杂的功能都没能派上用处,那我们就开发那10多个功能,然后相对廉价,实施简单,使用简单就可以了,若客户真有超级复杂的需求,那就购买个相对昂贵的工作流产品就可以了,我们就定位简易工作流程审批就可以了,甚至是一个人就能维护,集成,实施起来的工作流程审批组件。 有了这个梦想后就有空了就开发开发,捉摸捉摸软件是否用,少玩游戏,少放松,少于了,因为觉得这个东西早晚会有人需要,而且还可以销售不错的价位,能创造社会价值,一般人也在短期内难模仿,所以一直坚持断断续续开发了很多年,今年终于有客户需要了,也很顺利就集成进去了。 4:事先需要有充分的测试,程序的修改、功能改进,又会引起其他模块的不稳定运行,人毕竟不是神仙,修改了这个程序忘记测试另外的页面,毕竟系统的互相之间的关联也是很多,不是那么简单的添加、修改、删除就可以了,其实我们在项目的后期也是很怕系统的改进的,因为一改进很多测试都需要重新测试过,否则。 5: 虽然客户在乎功能强大,但是客户在乎的是程序稳定,不要任何事情,经过这些年的开发,总结一个经验,我们开发人员往往很理想的设计100个强大功能,但是客户经常用的重点功能其实就是20个,剩下的80个功能可能客户不怎么用,但是我们开发人员往往喜欢把精力放在另外80个功能的改进完善上,我也经常会有这样的错误发生,现在修改程序时常常会先想,哪些功能是最有必要首先修改完善的,哪些功能是可以缓一缓的,哪些功能必须是不能一个错的。 6: 天天很多人在用的,天天实战的软件,难蒙魂过关,负责领导说了也未必算数,因为每天有上百个人在用的软件,若某些功能不用,下面的人天天会叫,会反对领导的强硬下达的命令,因为人多了,哪个功能都跑不掉,总会有一个人会需要用某个功能,这时候你想偷懒,想蒙混过关是绝对没门的,只能硬着头皮往前冲,只有把软件做了才有希望能验收通过,很多开发人员也不敢卖自己的软件就是因为就怕惹麻烦,还不如干脆不卖。 7:客户往往是说得简单,验收的时候要求很高。在谈项目时客户往往会说,这个简单的很,不就几天就能弄了吗?这么简单的功能,增加一个,功能加来加去,加到最后开发人员崩溃了,项目周期无限延长,项目成本也变成了无底洞了,若是公司承担这个还,若是自己承担就会很压抑了。 8: 测试与实际环境的差距还是很大的,莫名奇妙的问题都会发生,我们开发人员使用的电脑往往配置都很高,但是几百个人的电脑就未必这样了,有的电脑运行非常慢,他都可以点3下提交按钮,我们自己的电脑上开发的时候速度是很快,更本来不及点3下,但是神奇的实际环境里,很多人都可以点3下,他们更本不会很听话的,点一下后等待提示信息了。 本来客户是购买了一套系统,需要安装两套,一个老板,同时审核2个以上公司的申请单据,但是老板要安装一套软件,老板不会让你装个3-5套系统在他的电脑上,每个公司都要在内网办公,老总又在外网办公,这时候不仅仅要设置防火墙,单点登录,还需要能满足一个老总的特殊需求,他的需求可比几百人的需求还重要,老板都用着不爽更别说其他普通员工用得是否爽了。 9:客户会多很多变态的合理需求,这里为啥说变态,又说非常合理?因为很多需求存在就有他一定的合理性。例如我们在实施过程中遇到了以下几个需求,也是很合理的,实现起来也很不容易。例如单据里显示签名,签名时间,审核意见,越级审批,单据共享,单据是否可以打印,单据是否允许修改,彻底退回,退回给某个审批节点,某个审核步骤可以任意选人等等,其实这些需求都很合理,只是有时候我们没提前预料到,等客户把需求讲来了,再实现就很辛苦了。因为手上还有很多事情需要处理,不只是处理这么几个新需求。 10:需要承受一些心理压力,例如一个大型生产性企业在用的ERP里,一天可能需要审批的单据有100-200个以上,就是采购订单就有这么多,日常的各种单据可能有500多个,每天有100多个人在系统上进行审批流程作业,系统一问题电话就满天飞,客户的抱怨、牢骚就可以淹没你,而且还会影响人家工厂的正常业务,甚至老板也都会知道这个事情,而且还会在大会上讲这个事情,很多问题都可以推在这个上成为理由,而且对推动系统也会形成很多阻力,只要有那么几次过事情,客户就会说你的系统不用,那看哪次哪次系统崩溃了影响了工作等等,而且都会在公司内部大规模传播开来,会让开发人员很没面子,所以实施一个核心的系统组件往往会有一定的心理压力在,我们需要克服这些心理压力,迎难而上,啥也不干就什么麻烦事情也没了,我们总不能等死还得找点儿事情干。 11:验收付款都会有个比较长的周期,我们往往会把很多事情想得过于简单,例如签订了合同了,就不是可以付款了吗?程序开发了就不是可以结款了?其实并没有那么简单,很多大客户的付款都需要走个审批流程,有些大客户的付款流程可能需要3个月才会付款,一般客户都需要走半个月左右,特别是收尾款,或者合同中的大部分款项时,客户往往会控制得很严格,我们一般会有1个月左右的付款周期才会实际一些,例如我们软件都开发了上线了,测试也都通过了,那就等一个月后客户会付款就比较实际,除非遇上非常顺利的情况1周就可以了。 12: 来回交通费用要充分计算在项目费用里,有的客户可能在大半个中国的距离,只能飞来飞去,而且这些客户相对来说都是高品质高档次的客户,他们虽然在项目预算上有些克扣,精打细算,但是了问题还是希望有高品质的服务,一般从沿海飞新疆需要5个小时左右,其他不远的城市一般2个小时就可以到达了,若稍微提前预订机票相对也是不贵的,只是当天的机票会比较贵,所以在做项目预算是要充分考虑,可能要来回跑几次,其次就是形象也不能太差着装也需要注意,很多程序员都不在乎这个,其实是有些不对的。 在外地做紧急项目住宿也尽量一些,休息了,才能干工作,有时候有个良的环境,工作起来效率也高,而且有个安静,干净的,网络畅通的办公环境,加班也效率高。 13:电话费就别想省了,我们开发人员总有一个小缺点,就是节省电话费,能不打电话就不打电话,发电子邮件, QQ消息,电脑语音等等,其实这些有时候都没电话方便,电话也有他存在的道理,其实可以使劲打,一个月顶多两三百元的电话费,而且我最近也感受到了一个事情,相对而言电话费越多的人越是成功一些的人,电话费越少的,越是普通老百姓一些,我的电话费一般200元左右徘徊,我们一个老总的电话费最多时有1500元,我从来没一个月电话费到过1500元,所以我也跟人家差距一大截,有必要的电话费就别节省了。 14:网络远程技术支持,网络可以改变距离也的确是这么个事情,有时候紧急的事情,通过网络远程协助也的确很方便,每个维护都到现场也是要命的事情,特别是远距离的客户,不过现在的网速还是有些不畅通,中国应该加大速度建设超级宽带网络,有时候远程协助网络很卡,甚至是无法远程控制。 现在几乎家家都上网,网络与现实中的高速公路没啥区别了,网络发达了,软件技术服务地区的差别就更小了,很多新的软件公司将会崛起,也有很多新的理念可以得到发挥优点,现在很多新兴的技术受制于网络带宽的太多了,国家也应该重视宽带网络的建设了。 国家建设宽带网络,也是可以促进社会的进步,很多硬件厂商的设备可以更快的卖了,可以有更多的就业机会,很多网络技术人员的需求也多了,我们的基于网络的软件也卖了,家里上网打游戏,网络学习也更顺畅了,其实比那些很多没啥大用的形象更加有实际意义。 15:需要有很多合作伙伴,其实整个项目里什么都一个人干不太实际,现在一个WEB系统需要的东西太多了,图片处理等我们有网络化的合作伙伴,要处理某个图片,网上一发过去需求讲几个小时后就给处理了,有的人专门处理统计图表的问题SVN远程可以更新代码,例如工作流程定义又有专门的网络合作伙伴,有些小模块也有专门的网上的合作伙伴,虽然客户那里我们就1个人,但是在网络上的合作伙伴往往会有4-5个,我们一般是协同作战,这样干活相对不累,轻松一些,将来我们打算再找个专业的测试人员,能把我们开发的软件能快速进行系统的测试,还有编写文档的人,这些人都需要慢慢的寻觅,形成一个虚拟的网络化软件开发团队,毕竟组建一个真实的,哪怕是10个人的软件开发队伍,也是需要比较昂贵的人力成本的,一般人是承受不来的。 16: 工期不能想得过于乐观,长这么大,没怎么见过开发类的软件项目能在3个月内彻底结束的,大家再简单的软件开发项目也有3个月的项目预算周期比较,否则会把自己搞的很累,客户也很累,学会有目的有计划的工作生活是很有必要,会显著提高生活质量,生活得更加轻松愉快。 作者:吉日嘎拉 QQ:252056973 将权限管理、工作流管理做到我能力的极致,一个人只能做那么很少的几件事情。
疯狂的程序员绝影 1HelloWorld 天已经七分黑了,屋里却还没开灯。这个全身黑衣服的男子突然像想起什么,从包里掏烟,抽一只,递给旁边的人:“兄弟,抽烟么?”――那烟是红塔山。 旁边那人连忙一边摆手,一边说:“不,不。”语气有点紧张,像那黑衣服递过来的不是烟, 是海洛因。 这个黑衣服的男子,后来的网名叫“绝影”。他旁边那个,后来被他们称为“土匪”。这件屋 子,就是他们大学寝室。 第一天到学校,其实没有一点新鲜的感觉。绝影的舅舅和舅妈就在这里教书,早在这学校还 不叫“大学”的时候,绝影已经在学校足球场学骑自行车了。 要说念大学,最忌讳的就是在自己家门口念。哪怕你就住北大院子,也一定要去清华。土匪觉得这学校不错,不光是土匪觉得不错,看就业形势,也的确不错。但是绝影就一肚子憋屈。其实这间寝室和别的寝室也没什么特别,也就四张床四张电脑桌。电脑桌当然有,但是电脑就要自己往上面放。既然没有电脑,那要电脑着有什么用呢?还占着地方。唯一不同的是寝 室里的一个人――和别的不一样,这间寝室有个不属于这个班的人――他叫王江。 王江他特别,不仅因为他不是这班的,还因为他吹的牛皮很特别。 大一晚上谈什么?当然是谈高考。 于是王江就叹息:哎呀,差一分呐。 土匪附和道:哎呀,就差那么五分。 王江:老天无眼,把我弄到这么个学校来。 土匪:凑合吧,四年后考研,又是条汉。 王江:不行,我要让我老爸再想想办法。 土匪:都怪我老子没本事。比我差的都去了那学校。 王江:我老爸没问题。但我就是这么一个人,不轻易去找他的。 土匪:那你这辈子就给毁了。 王江:明天就去办退学。 土匪:你去退,我跟你一起去退。 …… 两人谈得热血沸腾,仿佛他们老爸一个是教育部长,一个是清华校长,想去清华北大还不易 如反掌耳。仿佛大前途就在向他们招手,只等明天退学。 绝影跟另一个后来被叫做叫“超薄”的人一直没发话。超薄是因为听不懂他们的四川方言。绝影呢,心里一直在郁闷:要没有舅舅和舅妈,还有舅妈的爸爸,他根本就进不了这学校。不光进不了这学校,甚至进不了中国和外国任何一所大学。 第二天,王江去退学了。土匪没去。问土匪为什么?土匪说:“他太不成熟了。唉,年龄小,办事不牢靠。” 后来,王江的爸爸到了学校。绝影觉得王江的老爸怎么看也不像教育部长,甚至连自己的老爹都没法比。虽然经过这几天王江的洗礼,应该算是“如雷贯耳”了,但就是咋看咋不行。他老爸不停的说:“儿哟,再考个大学要多少钱哟。这学费都交了8000多了哟……” 所以最后,王江也没能退成学。不过因为这次退学风波,王江一举成为专业上的名人。为啥?为啥要退学?此地不留爷,自有留爷处。所以,退学是小事,但是敢退学就是大事了。至少有办法退了之后再弄个大学念去。 再后来,土匪和王江都当了各自班的学习委员。绝影什么也不是。绝影本来想弄个生活委员当的。因为生活委员不需要什么技术含量,而且绝影是本地人,在竞选上应该有很多优势。可是偏偏在竞选的时候,绝影住院了。 所谓红颜祸水。要不是因为红颜,绝影就不会住院。 说那天绝影终于约到那妹妹吃饭。那妹妹是谁?隔壁专业的。长什么样?没见过。怎么认识的?网上。所以没见过才有神秘感,绝影才那么激动。 那天中午,绝影拍了拍土匪:“走了!约会去了!”于是换鞋。这时候,一个炸雷响起,哗~~天花板上日光灯断成两截,一截摔成碎片,另一截直接插到绝影的脚背上。绝影拔这一截,脚背上立刻露直径两公分大的窟窿。绝影正在纳闷,这么大个洞,怎么就不见流血呢?正想着,血就开始扑扑地往外喷。 土匪傻了,但还是知道叫寝室管理员。寝室管理员也傻了,说外面下着雨呢。楼长说:你背也得把学生背到校医院去。 绝影没傻。绝影说:“等等。”拿起电话:“我来不成了。我脚上现在有个洞,正在往外喷血。”那妹妹一听急了:“少来了第一次约会你就找借口。” 绝影仍然很平静:“真的。唉,血还在喷,真不行了。管理员要送我去医院,要不你在你们楼下等我,去校医院要从你们楼下过。你看是不是真的。” 管理员背起绝影就走。到校医院有两条路,一条是正道,直通医院。一条还得上个坡又下个坡,不过能从妹妹寝室楼下路过。绝影说:走坡路。管理员也真傻了,径直往坡上爬。路过妹妹楼下,绝影往四周看了五遍,一个人也没有。来不急多想,就到了校医院。 因为是外伤,情况并不是很严重,也就是清洗伤口,缝针。绝影心里惦记着那妹妹,可那时候手机手机还没现在这样普及,普及的是传呼机。也就是有人找你,给你打个传呼,那小机器就滴滴地叫,上面有他的电话,你再给他打回去。 绝影跟办公室的医生说:我要打两个电话。 第一个电话,打给妹妹。妹妹又在那边说:“你肯定是骗人的,我去了,一个人也没有,还下那么大雨。”绝影连忙解释:“真的,我已经到医院了,管理员跑的太快,比你下楼还快。要不你亲自到医院来看,我在这等你。” 第二个电话,打给舅妈:“舅妈我脚上被砸了个洞,在医院呢,你赶紧通知我妈。”打完了。绝影就坐那等妹妹。土匪来了,超薄来了,王江来了,妹妹也来了。绝影傻了。因为这个妹妹长的实在有点抱歉。后来因为这个妹妹,绝影被他们三个,不,是全班,嘲笑了四年。那妹妹说:“我叫朴素”。所以,以后每次嘲笑绝影的时候,只需要说两个字:朴素。 所谓红颜祸水。本来只缝了两针。没想到当天晚上就开始剧痛。绝影痛得下不了床,除了上厕所,打饭什么的都让土匪代劳,土匪不愿意,不愿意也得去,因为土匪是学习委员。后来连上厕所也不行了。干脆弄了个可乐瓶子,每天让土匪倒三次瓶子。 绝影的妈妈终于第一次来了学校。说的第一句话是:注意锁柜子。接着就让寝室管理员背着他往校医院跑。 医生还是那个医生,说:“X光都打了,没有任何问题,再吃两道药就了。” 绝影说:“痛的不能走路“。医生说:“那就租副拐杖去吧,押金十元,每天租金两毛。” 从校医院来,绝影就拄了双拐杖。他说:“妈不行我还是痛,带我去城里的医院吧。”去了城里的医院,绝影就开始住院了,因为伤口已经严重感染。 2DOS 两周后绝影院了。院的时候还是拄着拐杖。 这两周里,发生了两件大事:一、绝影决定追一个妹妹;二、土匪和王江开始做生意了。和每个念大一的学生一样,土匪和王江想做生意。于是他们就真开始做生意。“批发商”说:“乒乓球拍2元一副。想要吗?”要。要就先买圆珠笔芯,500元买一万根。 为了拿到2元一副的球拍,他们就真买了一万根圆珠笔芯。 绝影回到寝室,他们已经卖到第三天,总共卖掉8根笔芯,每根卖1毛钱。绝影说:“你们就是傻的啊?这个学校总共多少人?3万。就算有3000人买,每人每月买1根,都要3个月才卖完。你们都不是做生意的材料。看我去弄个大CASE过来。” 绝影这么说,就这么去做了。正到学校开运动会,校园里凡是能挂的地方都挂了赞助商的广告。他觉得做广告这个CASE不错。怎么说广告设计制作也算是个有技术含量的工作,总比蹲街头卖笔芯强。 绝影不会做广告,王江有个朋友到是会做。但事情就是这样,你不会造车,但可以去卖车;你不会下蛋,但可以炒蛋炒饭卖。而且卖车的肯定比造车的更会卖车,炒蛋炒饭的肯定比母鸡更会炒蛋炒饭。 绝影决定要做一个广告代理商――其实就是拉广告的,用现在比较流行的话,就是一托儿,广告托儿。他是这么幻想的:有一天,他穿着笔挺的西装,打领带,掏名片,彬彬有礼地递给土匪,上面赫然印着:XX广告公司XXXX大学总代理。就这个派头,告诉土匪他们:你们也就只配摆路边摊卖笔芯。比如卖车的找个的造车的不容易,炒蛋炒饭的找只母鸡不容易,拉广告的要找个的做广告的更不容易。大的广告公司,别人瞧不起你;小的广告公司,绝影瞧不起别人。 一直过了半个月,这事情才总算落实,还像模像样跟人家签了代理合同。其实这家广告公司整个还没有他们寝室大,公司就两人:一个男的,一个女的。没办法,绝影想就这么一个小的公司,人家在容易就范。人家想,就这么一个小小的大学生,才容易就范。事情到最后,绝影没有穿西装打领带,也没有名片。他同学给他打电话说要打印点资料,绝影在电话这头说:“打什么打?拿给我到公司去打,不要钱的。”其实在学校外头用激光打印,每张A4是3毛钱,到那家公司,就是6块钱,不过因为他是代理,就给他算4块钱。这时他才知道,有时候生意就是亏着本也得做。一个月下来,绝影陪了15块钱。土匪他们卖掉100多根笔芯。绝影还是觉得他算赢了。因为他做了2笔业务。 这个月,他跟广告公司那两人也混熟了些。那两人原来是一对,男的以前在她学校教书,女的就是他学生。后来因为她,男的也教不成书了,于是就来开了这么一家广告公司。绝影打心眼里佩服他,因为能泡妹妹就是很牛B,如果能从学校泡到妹妹,那就更牛B了。因为佩服他,跟他说了很多客套话,没想到一客套,让那男人更牛B起来:“想我堂堂一个程 序员,现在却在搞这个。唉……” 这时候,绝影才第一次听到“程序员”这个词。程序员是什么?他不知道。他问:“程序员能找到教书的工作吗?” “当然,一点问题都没有。随便哪个学校都能教。想我那个年代,这城市有多少程序员,数都能数来。我还报了高程,唉……差一点。” 能去教书当然,因为去教书才有可能从学校里泡个妹妹来,才有可能和他一样牛B。这么想着,绝影说:“我也想做程序员。” “你不行,你连程序是啥都不懂。” “我不懂,你可以教我,你不是很牛B吗?” “那是,可是多年没教书了。废了。” …… 绝影和他畅谈了一个下午,事情终于定了下来。那男人教绝影怎样做“程序员”,报酬是每节课60块钱,一节课是45分钟。谈到钱的事情,大家都有点不快乐。绝影一周的生活费是100元,而那男人却反复说,当年我上一节课是80块钱。“知道不,程序员的课,都是高级课,除了我,没几个能上这课的。” 人最怕听到“高级”这个词,比如“高级工程师”,“XXXX高级技术”。那东西,听起来就是离凡人很远的。听他这么说,绝影咬了咬牙,“吧,就每周我过来上一节课。要些什么东西?” “一支笔一个本儿还有60块钱。” 末了,他还补充一句:“程序员,还是有前途滴。” 回到学校,绝影跟土匪他们说:“我要做程序员。”土匪用很鄙夷的眼光把他打量了一转:“广告做倒闭了?” “跟你们说了也没用,你懂吗?程序员比做广告,那就相当于做广告比摆地摊,十倍也。这是高级技术。以你现在的智商,跟你说了,怕你理解不了。” 这次,土匪换了种眼光,不是鄙夷,是怀疑。 周六,绝影去了广告公司,说实话做代理这个事他实在撑不下去了。正借着这个机会向他摊牌:“没时间,要学习,还要上课,代理的事情就先缓一缓。”那男人也没多说什么,因为让绝影做代理他也没赚到多少钱,还不如花45分钟动动嘴皮子。 第一堂讲基础,什么是基础?基础就是“DOS”。什么是“DOS”?“DOS”就是“DiskOperationSystem”“磁盘操作系统”。那男人这样讲着,“DOS”有些啥命令?往本上记。 绝影也不知道,只管往本上记,说实话什么是“DOS”,他也没见过。因为那个年代,计算机早就被“Windows”占领,“DOS”流行的年代,他还在念小学。但什么是牛人,绝影知道:牛人就是坐在黑背景显示器前,嗒嗒嗒往键盘上敲着字符,然后屏幕不断地向下滚。这就是“高级技术”,或者“专家级工程师”。那男人说,“DOS”就是这玩艺。他想那要是这玩艺学了,在土匪面前往电脑里面把这些命令一敲,那还不迅速展现他“专家级水平”。那比穿西装打领带递上名片神奇十倍。这么想着,他记得更认真了,并且坚定不移地认为这60块钱还是花的值得的。 从那以后,绝影总是抱着他那个本。虽然上面的东西,什么“DIR”呀,“MD”呀,“RD”呀他早就背得滚瓜烂熟,但本还是每天都抱着,并且每天都在看。为什么?就是给土匪神秘感。他不懂,你越不给他看,他越觉得那技术真是“高级”。要让他看到就这么几个简单的命令,那还不被他笑死。 可寝室里谁也没有电脑,那感觉就像刚拿了驾照却没有车开――手痒。这个时候如果谁有电脑,在他面前这么一坐,嗒嗒嗒往键盘上这么一敲,屏幕网上一翻滚,肯定成偶像,谁叫他们什么也不懂,做就要做别人都不懂的。不过这年头,懂“DOS”的还真没几个。“Windows”害死人咧! 没条件,只纸上谈兵,他对土匪说:“知道什么是‘DOS’吗?‘DOS’就是‘DiskOperationSystem’,磁盘操作系统。”有时候,你跟别人讲一个英文简写的全称,会让人对你刮目相 看。比如大家都在说“TMD”,“NMD”,你跟他们说:“‘TMD’是‘战区导弹防御系统’,‘NMD’是‘国家导弹防御系统’。”这样保证引起别人的注意。现在的社会就是,谁吸引了眼球,谁就吸引了Money。 绝影又去上了2次课,他明显感觉有点撑不住,因为每月就剩下40块的生活费。土匪问:“去上个课多少钱啊?”他总是说:“要什么钱?就凭和我老师的感情……”你要跟土匪说45分钟花60元钱,还不被他笑死,在绝影眼中,土匪就是一个只配摆地摊卖笔芯的粗人。话是这样说,可是他自己感觉真的是越来越撑不下去。想想,程序员也是人,也还是要抽烟吃饭,总不能一个程序员活活给饿死吧。不去上课了,那也不行,那还是会被土匪他们笑死。因为不去,就表示当初的决定是错误的,那个什么程序员的神话也就是假的。 绝影不能轻易承认自己的错误,特别是这么高调的错误。 他又去上了2次课,还是每天抱着他那宝贝本,这一天,土匪兴奋地冲进寝室,对着绝影扬起手中一张单子吼道:“你神奇个屁呀,咱们马上开程序课了,还有上机呢。”绝影拿过那单子,那是一张新的课表,星期二下午第二讲和星期四上午第二讲上写着:数据库原理与应用(宴斌)。下面盖着教务处的红印。 3第一个梦想 这个宴斌,大家都说长的像刘仪伟。后来看了《天天美食》绝影才真觉得刘仪伟和宴斌简直一模一样。所以你在脑子里想想《爱情呼叫转移》的那个俏皮的天使,就能知道宴斌的模样。《数据库原理与应用》实际就是《数据库应用》,像“原理”这么高深的东西,不能说,不能说,说了你们也无法理解。这话是宴斌自己说的。 开发工具用的VFP,也有人叫VP,绝影还是喜欢叫“VisualFoxpro”,还是因为有时候,你跟别人讲一个英文简写的全称,会让人对你刮目相看。宴斌说这东西很用,拿微软的广告语来说:Nothingrunfastthanfox。 绝影特别羡慕宴斌,首先是因为他可以一边望着投影仪,一边往Command窗口中敲打命令――不是敲打,是游走,仿佛并不是用手指头去敲打命令,而是命令是为他手指头的游走而设计。唯一不一样的是引号:如果一个命令包含一对引号,他会先打上两个引号,然后再往中间插入字符。 后来绝影知道,宴斌的指法还是不标准的,他不能用左手的SHIFT和右手的引号配合,而总是用右边的SHIFT,这样打,可以减少指法的乱套的次数。 又去学了几次“DOS”,绝影决定再不去。他感觉自己还真有点傻,微软已经把“Windows”升级到“XP”,连那个DOS窗口也只不过是个虚拟机,要早两年,他在电脑前面这么一坐,嗒嗒嗒往键盘上这么一敲,屏幕网上一翻滚,肯定成偶像,但现在,别人只有可能嘲笑你那486的老爷机应该淘汰了。时代在改变,技术和人们对技术的看法也在改变。比如早二三百年,唱歌跳舞的都是下九流等于是做鸡的,现在那职业都是大腕啊,哪个不是后面跟一大群“粉丝”;再早二三十年,穿百大挂的都是“救死扶伤”的天使,现在却成了人见人怕的“魔鬼”;再早二三年,穿西装打领带的都是牛B的白领,现在都成了卖保险搞推销的代名字。而且那男人虽然长像厚道但心也太不厚道,60块钱一节的学费足足顶得上重修一个学分,等于他每周去他那里重修一个学分。起码在学校里重修了还有张成绩单结业证,他那里就连个评语什么也没有。 不去,一定是要有交代的。他跟土匪说:“已经结业了。凭着我的激情和智商,普通人练一二百年的上乘武功,我也就一两年。那老师都说了:教到这,已经没法教了。”土匪只是对他微微一笑,仍然用鄙夷的目光打量着他,仿佛今天的结果,正证明了他当初的猜想。尽管在绝影心里,总觉得土匪笨得无可救药,但有时候不得不承认,土匪还是有很多正确的思想。 他跟那男人,什么也没说,在他那边看了,这人昨天还的,今天就人间蒸发了。 大家都觉得《数据库原理与应用》这课是门鸡肋课,每周就两讲,还只有两个学分。在这个大学里面,或者说这群人里面,往往用多少多少学分来评价一门学问的重要性。比如《高等 数学》,多达六个学分,那么谁都不敢怠慢,因为考不及格的重修费是60元每学分。 什么是鸡肋课,就是每个人都在他自己的课表的这门课旁边标注一个“可旷”或者“选修”。至于怎么过考试,大底有3种办法:一、正道:认真上课,老师讲什么记什么,老师写什么抄什么,老师勾什么背什么;二、小道:考试前一天,有钱人将课本缩引,成本在十元钱左右,没钱人抄写课本,字迹工整,井井有条;三、旁门左道:借口问一高深的题目接近老师,饭是一定要请吃的,有可能还要送西瓜或者烟,钱一定不能送:首先作为学生你送的那点钱还不够老师买两包烟,他看不上,再有就是送钱的性质恶劣,比如你拿板砖砸伤一人,那充其量就算打架斗殴,违反《治安管理处罚条例》拘留15天。要是你拿刀捅人了,那刀可是凶器,故意伤害罪,最少入狱3年。 说实话,绝影对这门课还是比较失望,那课本的15章标题明明是《简单的程序设计》,但宴 斌说期末考试只考到14章,像宴斌故意跟他有仇。虽然离放假还有一个多月,但期末考试题目已经来,让所有人大吃一惊:用VisualFoxpro做个简单的通讯录。这根本不在上面三点应付考试的办法当中,打倒一大片啊。大家恐慌了。 绝影不怕。 自己往后看,什么是程序?书上说“程序就是把一系列命令合起来”。书的最后一章是个例子:《简单的人事管理系统》,从随书光盘打开那个例子,绝影的手在抖。那明明就是个软件,就像他平时在电脑上看到的Word,VisualFoxpro一样,都有个窗口,有菜单,点点鼠标,居然有反应。这简直跟黑洞洞的DOS窗口有天壤之别。你要有一天,忽然做了这么把“简单”的通讯录做成这个样子,拿给土匪他们看,他们肯定会惊得目瞪口呆。 这就是程序员。绝影一边看一边想一边忍不住哈哈大笑,这时候对宴斌又有了点感,要是 把课往后面一讲,大家都能做这么个来,就没那么大的震撼效果了。 要做别人做不到的。 “小时候家里穷……”绝影跟朋友聊天总喜以这句开头,小时候家里穷,现在怎么怎么样,这样话题一下就可以展的很开。所谓“放之四海皆准”,就是和VB里面的万能变量一样。不过那时候的确也很穷,35个人一个班,人人寝室里的电脑桌都空着,上机课又相当于学驾照:虽然学驾照就是学开车,但往往要几天才能看到一次车,而且你刚上去连档都没推上去后面的人就不停的说:了,你已经可以了,把机会留给我们。没有条件创造条件也要上。去网吧。 网吧,又有空调,冬暖夏凉。绝影大大咧咧地做过去:“网管,给我找台有光驱的机子。”有些网吧,还有那么一两台CS服务器有光驱,他就把VisualFoxpro的光盘小心翼翼地交给网管,让网管把里面的东西弄到他这台机器上来。大部分网吧都条件简陋,没有光驱,就从网上下。Microsoft的主页上就能下到VisualFoxpro,6.0的版本,还英文版的。所谓便宜没货,既然都免费下载了,难道绝影就没想到VisualFoxpro最终会倒闭,没有前途的。网速,可以2个小时下载来,装上就可以做一个通宵,说不定明天来都还在,那时候网吧根本没有什么“万象管理系统”,“还原精灵”,对于大多数Windows98的系统,甚至按F8启动到DOS下面,就可以直接把C盘Format掉。 半个月,绝影天天这样跑着网吧,土匪也天天跑着篮球场。土匪他们不急:车到山前必有路,试肯定要考,东西肯定也要教,但是法不责众,每个老师每月期挂的学生人数是有指标的,自己还不一定这么倒霉。 再过半个月,绝影终于等到这一天,就是他扬眉吐气的一天。这个有窗口,有菜单,可以用鼠标点,可以弄成一个exe,随便拷贝到哪台机器上――当然,要先装VisualFoxpro――都能运行的通讯录诞生了。 他小心翼翼地把这门个1.3M的exe压缩,拷贝到磁盘,回想起这一个月来的种种困难,有3点:一、如何去掉运行时那个VisualFoxpro窗口。在网上查了资料,可是没有。那时候的网可不像现在,要什么有什么,甚至连叫鸡的电话都有。没办法,给宴斌发个邮件,自从发了那封邮件,宴斌就成了他心目中的偶像。为啥?他竟然回了邮件,并且还告诉他怎么做。二、如何调用API。调用API,那可是VisualFoxpro里面的高级技术,因为太高级了,其实他也没弄懂什么是API,你能想像API竟然是ArmorPiercingIncendiary吗?不过书上有例子,依样画葫芦。这一调用,就可以把当前时间显示来,也就在通讯录里面多这门点附加功能。三、如何把那东西弄成exe。想像一下,要是每个软件运行的时候都要你先装上VisualFoxpro,把它打开,然后把你那一大堆项目文件装载进来,再点“Debug”或者“Run”,那不把人都累死,那还不如自己拿纸做的通讯录记了。在这个问题也不难,书上最后一章。做成exe,表示他已经把这本书能讲的全学了,也算功德圆满了。 这次他很鄙夷地看了看王江做的通讯录,虽然王江经过他朋友一个学期广告制作的培训,在IT界也算有点名气,而且功课的成绩也很,但在他看来,王江做那个通讯录也不过尔尔。当然,这就许就是宴斌心目中标准的期末考试答案。他幻想着当宴斌打开他的磁盘,双击鼠标运行,立刻露的惊讶的表情。所以,他很有道理用鄙夷的目光来审视王江的期末答卷。陆陆续续的开始交期末考试答卷。绝影是最早的一批。于是和交答卷一样,陆陆续续有人来找他,他也就陆陆续续地名了。 “做程序员就是。”绝影这样想,他的第一个梦想实现了。 4电源里的病毒 王江向来对绝影腹诽就很多,眼看这学期的风光又被绝影抢尽,心里很是不爽,他是一个不甘于位居第二的人,显而易见,一处和二处就有本质上的区别。他郑重地告诉大家,他要买个电脑。这是一件振奋人心的事情。王江往寝室搬电脑的那天,楼梯走廊和过道都围满了人,就差给显示器上戴朵大红花。虽然到最后在这栋楼里,电脑已经普及到几乎人手一台的地步,而且档次越来越高,但人们的心里,为啥要追求处女和美女,往往只有第一个和最贵的一个能给人留下深刻印象。 要么你做第一个,要么你做最的一个,其他的都没啥大意思。 王江第一次点亮电脑的时候,绝影看见显示器左上方显示了个32M,他终于可以鄙夷地对王江说:“才32M内存,那也太垃圾了。”王江什么也没说。 很多时候就是这样,不需要钱的人往往有钱;不需要美女的人往往周围美女成群;不需要电脑的人往往有电脑。就这样人把大的资源都给霸占了。绝影知道他比王江更需要一台电脑,但他不能问家里要,要也不会给。从小到大,他学的就是学校教的,什么奥数啊,少年宫啊,钢琴啊,画画啊,这些增值功能,父母都是不可能同意的,当然,父母会很赞成,但是不同意。比如现在手机,给你订一大堆彩铃啊,GPRS啊,天气预报啊,笑话啊,你心里自然也十分不爽。 绝影老说:“事已至此,不必难过,在天无绝人之路。”果然天无绝人之路。学期结束的时候,他得到一个打工的机会。工作是在一家超市里做“办事员”。“办事员”听上去挺不错,至少比叫“服务员”。上班的第一天,课长跟他讲:“你就做‘办事员’,‘办事员’上面是‘组长’,‘组长’上面是‘课长’,‘课长’上面是‘处长’,‘处长’上面的你就不用知道了。下面的必须完全服从上面的安排。当然,可以保留意见,但不得当面顶撞。” “那‘办事员’下面是什么?” “‘办事员’下面没有了。” 正视现实,即使一个卖安利的人,都会自称“XX顾问”。绝影这样想,觉得待遇也不错,每天20元的工资,还能管一两顿饭,关键是自己还是大学生,跟这群“办事员”比起来,他还是有些莫名其妙的优越感。特别感觉自己《数据库原理与应用》拿到了90分的高分,别人问:“学啥的?”他就可以大大咧咧地说:“搞数据库的。” 处长说:“今天第一天,就上个通班吧。”那语气,仿佛上通班就是对他照顾有加。当天,绝影就发现他上当了,本来这工作是两班倒,所谓上通班,就是早班和晚班一起上。他想去争取点加班费,因为这样实在不公平。 处长说:“新来的吧,难怪不懂规矩。上通班锻炼人,懂不。头发剃了,搞服务行业的,不像样。”第二天,绝影6点就起床了,晚上回家是11点。人躺在床上,就像散了架。在一个月很快就过去了。在这一个月里,发生了几件重要的事情: 一、旁边部门负责卖“红泥花生”的花生妹跟他说:“我喜欢你。” 二、在超市里碰到一次自己的辅导员。她说:“听宴斌说你计算机很不错啊。” 三、在超市里遇到了自己初中的暗恋的女同学。那可是个才女,正因为是个才女,所以班主任棒打鸳鸯,让他请了家长。那女同学很惋惜地看着他,问:“你现在怎么这样?”她想他应该没有念书了。他很平静的说:“这样也有很多乐趣。”她要他的电话,他没给,他说他们以后也不会联系的。 四、课长让发给他一张农行卡,里面有600元人民币。 离开超市的时候,绝影在那一刹那决定信仰马克思并且决定信仰一辈子,他真实具体地体会 到资本家是如何榨取工人的剩余价值。 拿到600块钱,绝影妈妈又给了他600,因为之前说,只要他去打工,妈妈也再给他开一份工资。他用这1200大洋换到了他人生中的第一件大件:一台崭新的赛扬366二手电脑。第一次点亮电脑,他看见显示器左上方显示8M。卖电脑的不断跟他解释这8M是显卡显存不是内存。现在他才意识到王江的32M,他又输给他了。那天晚上,他把电脑放凳子上,自己躺在床上,给机器装了个WindowsXPProfession,装了两次,一夜没睡。 开学的时候,又有几个人的电脑桌上摆了电脑。绝影跟别人说机器是从家里搬来的,因为别人的机器都是新机器,而且在那一年,WindowsXP和P4普及已成事实,你要跟他们说你用的赛扬366而且还是二手的,那还不被人笑死。严格的说,绝影非常庆幸电脑没有实行年检和强制报废制度。 一辆宝马7X,你敢开230Km/h的速度在马路上跑么?不敢。奔奔呢?是奔奔就敢,只要人不事,别说跑230,就是跑320都不怕?什么是牛B?把卫星放上天那不叫牛B,把汽车放上天才叫牛B。所以,绝影就经常在他那赛扬366上快乐地跑着极品飞车。 可日子总是那么短暂,他的机器终于点不亮了。在还算是正规渠道购买的,去找他,那卖电脑的人看来也经验丰富。拿几个卡往上面一插:“BIOS坏了,重新刷个吧,估计中了CIH病毒。”刷个BIOS30块钱,可机器总是只能坚持那么几天,看来这CIH确实恐怖。网上去查,说CIH只感染Windows98。绝影又觉得上了大当,看来这机器也不能再叫那人去弄,自己来拆。拆开机箱,他又体会到第一次打键盘的感觉――生怕不小心碰个按钮电脑就爆炸了。其实都没他想的那么复杂,没想到把机箱拆了又装上,机器居然又点亮了。晚上睡觉的时候,土匪问他天天对着电脑最近在干啥。 “研究CIH。” “算了别浪费时间了,还不如花点时间去泡妹妹。强哥他们班上唯一一个妹妹转学;昨天开会的时候没戴眼镜,居然跟电子班上那个恐龙坐到一排,后来差点把我吓死……” “你不懂。研究CIH,准备做病毒了。” “你那点水平我还不知道,你忽悠别人行,骗不了我,装精!” “装精”这个词像是土匪专门为他发明的。他就怕他说这个词。他想不给他展示点大才华他是不肯就范的。 “你懂么?CIH,唯一可以攻击硬件的,通过中断门还是调用门进入0环……”他这样说,其实都是网上讲的,中断门调用门0环是啥?他也不知道,他想直接跟他说“CallGate”,“Ring0”,觉得这样太抽象,不专业。那时候,对他来说所谓研究“CIH”其实就是在网上看看什么是“CIH”,怎样避免中招。 “我要做个病毒,就藏电源里面,电源总不会断电吧,哈哈。就一直藏那里面。”他说的时候,也做着这样的梦:有一天,他可以做个病毒,藏电源里面,电源总不会断电吧,哈哈。就一直藏里面。 直到有一天,他看到一篇文章上面写着:请记住,病毒永远不可能藏在电源里面。 他想:这是为什么呢? 5寻址方式 周五晚上,绝影和往常一样回家。这是他和他们这些大学生唯一不同的地方:他家和大学在一个城市,每周五就可以回家。这样做的处有两点:一、每周只有五天要用生活费;二、可以不用自己洗衣服,冬天的衣服,直接穿回家换就了,夏天的,打包回家换。 这周过来,他和平时有点不一样,土匪见他提了两本书,一本《鲁迅杂文全集》,一本《PC汇编语言程序设计》。土匪对这两本书没都没啥兴趣,他喜欢看武打小说,是“武打”小说,不是“武侠”小说。虽然“打”和“侠”只有一个字的差别,很多时候人的水平都是在一个字之间体现得淋漓尽致。两本书都不算厚,《鲁迅杂文全集》本来就是家里的,因为现在流行拉屎最低配置:晚报一份;建议配置:体坛周报一份+草纸一张;豪华配置:中华一根+花花公子一本+草纸若干。无非就是嘴上刁和手上拿,中华绝影肯定是抽不了,楼下的小卖部根本没有卖中华的;对于手上拿的,他认为报纸肯定没有书,寝室那个小小的厕所,当你把报纸铺开后,根本就没有其它余地了。而书架上什么稍微有意思一点的书要算《思想道德修养》,这本书已经快被翻烂了,其实很多人上学期的《思想道德修养》学习都是在厕所里完成的。不得不看《高等数学》、《普通物理学》这些,难度可想而知。《高等数学》还算。最不服气的就是《普通物理学》,连这也叫“普通”,那妓女的都可能是北大清华毕业。 《PC汇编语言程序设计》是星期天去书店买的。小时候妈妈不准绝影去玩问他去哪里,他说:“去书店。”这样妈妈就会放他去。星期天妈妈问他去哪里,他说:“去打游戏。”这样就去了。他觉得有点可笑,真的去打游戏的时候要说去书店,真的去书店的时候就可以说去打游戏。 买这本书,他其实下了很大决心。早在开广告公司那男人那里学习时,他就已经学到:编程 语言分为:“机器语言”、“汇编语言”、“C语言”……他回想起念初中的时候,班里就有几个有钱人家的孩子去少年宫学计算机,学什么?就学的C语言,上完了就回来跟他们背copyconautoexec.bat……. 他问:“啥语言最难?” “机器语言。” “那就学机器语言。” “没用,学那玩艺,比如你自己坐在‘奔驰’里面,前面再套两匹马给你拉车。那是不仅费力不讨的事,关键是还被人耻笑。” “那就学汇编语言。” 那男人就没再说什么,只对他笑了两声。 对绝影来说,要么就做第一个,要么就做最的一个。当你已然做不成第一个,那你就努力去做最的,要是你感觉也做不到最,那就不要做了。现在姑娘的心理就是:她深深地爱着她认为最的男人,但心里永远想着她的第一个男人。她没有错。 现在他有个绝佳的做第一的机会:在这个班、这个专业有可能整个学校,应该还没人能用汇编语言写程序。所以这一次他不惜一次性花掉半周生活费买了这本书。交钱的时候,他迅速打量了周围的人,有人拿着《天龙八部》,有人拿着《第一次亲密接触》。他十分体面地把这本《PC汇编语言程序设计》往收银台上一放,掷地有声,收银小姐以为他对长时间排队有很大意见,一边跟他说对不起,一边迅速打单。 这是绝影买的第一本关于编程的书,虽然上学期学了《数据库原理与应用》,他也想买几本书来提高提高,奈何那种书页数和价格都太离谱,平均下来每页0.15元,截图大概占到10%。但是土匪仍然无情地对他进行了打击,对土匪来说,能够成功地无情打击别人是他最快乐的事情。人无非有两种方法提高自己,一是真的提高自己,二是打击别人提高自己。自从上次绝影去广告公司学习“DOS”失败,土匪更可以以事实为基础,有理有据地对他进行打击。这次不仅是土匪,王江也发动了强大的攻势。自从绝影也有了电脑,王江改变了自己的战略,不再在《数据库原理与应用》上跟他斗,他成功转型到平面设计上,他有个朋友会广告设计,这是得天独厚的优势。并且平面设计这个东西本来就是从视觉上震撼别人。所以王江的转型相当成果。对一个搞平面设计成果的人,书架上摆几本《Flash设计与制作》,《Photoshop入门与提高》那是相当正常并且能跟自己的身份很配合的事情。现在寝室夜谈要讨论的重点就是:对于绝影这样的人,往书架上摆《PC汇编语言程序设计》是不是卖弄或自我炒作。据说《相对论》刚刚来的时候世界上只有三个人能看懂它。人生最大的痛苦莫过于没人理解你。绝影没法跟他们讲“技术”,因为他们根本就不懂“技术”。比如你跟猪讲《普通物理学》,要是猪能成功计算杀猪刀进入身体时力量有多大,压强有多大,能够通过给定的猪皮的厚度和强度计算自己应该以多大速度向后缓冲才能成功让杀猪刀无法穿透猪皮,那么你就可以跟土匪和王江讲什么是汇编语言,为什么要学汇编语言了。所以对于这些人,要让他们闭嘴唯一的办法就是拿成果来让他们看。虽然全世界大部分人都不懂《相对论》,但用那理论做原子弹了,全世界的人就都相信它。 领导都说:“顶着压力上。”学习应该是很值得提倡的,绝影没想到现在学习也要顶着压力上。他看那本《PC汇编语言设计》,前面几张都很无聊,后面有些例子,当初他买这书的一个重要因素就是这书里面有很多例子。什么进制啊,原码反码补码啊,他还是没搞懂,虽然这学期《计算机文化基础》也讲这些,但是他还是没懂。他有时候有点恨最早设计计算机的人,他不知道是谁,就恨冯.诺依曼吧,书上都说几十年了,计算机一直都用冯.诺依曼结构,这个是考试常常要考的,就恨他吧。他恨他:人的指头都是十根,十进制端端的,为啥非要在计算机里面用十六进制啊,二进制啊这些抽象的东西,送进去要转换一次,算来还要转换一次,那不是没事找事吗? 再有就是1024的进制,广告公司那男人跟绝影说:“计算机里往上进都是1024,1024是1K,1024K是1M,1024M是1G,G往上还有T什么的,不过说了也没用,现在硬盘啊,内存啊还没达到T计数的水平。至于为什么进位是1024,等你结业的时候再来问我,那时候我再来告诉你。” 后来绝影没去找他,自己给自己结业了,也就失去了知道这个进位数值的机会。不过那堂课对他还是用有的,至少让他知道现在造硬盘的,卖硬盘的都是奸商。你跟他说:20G的硬盘,实际按照1024一除,不过18.6G。他们忽悠人最成功的地方在于他的算法肯定也是对的,而且是大多数甚至所有人的计算方法。再往后面一点讲些简单的指令,什么数据传送指令这些,让他找到一点感觉。 有句话说的:“来”是come“去”是go,“是”yes不是“no”,英语就是顺口溜。mov就是传送数据,add就是加sub就是减。这一切简直太简单了,不用理解,就算全背下来又如何。当然,这都是“简单的指令”。到后来的寻址方式又要人命。十六种寻址方式,那名称又不像mov,add那样简单,不是不简单,简直是绕口:什么基址变址后面居然又有相对基址变址。首先他就不明白什么是寻址,为什么要寻址。偏偏书上说这点又很重要。这就比驴拉磨:驴蒙了眼睛去拉磨,只晓得往前跑,不知道为什么。这是最痛苦的事情。就像中国大学的大部分教材,根本不告诉你为什么要这样,为什么要这样我们下几章再讲,不明白就死背,背了又不理解,这一章不理解下面几章就更不理解,下面几章更不理解就根本不明白为什么要这样。最后到头来整本书学完了也就一锅粥糊里糊涂知道里面有些啥东西而已。这章确实把他弄的很头痛,以至于很长一段时间,问他在干啥,都说:“在研究寻址方式。”他不爱用“学习”这个词,爱用“研究”。因为很多东西他觉得他都是自己在学,没人教他,自
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50) 基本信息 原书名: Expert Oracle Database Architecture 9i and 10g Programming Techniques and Solutions 原版社: Apress 作者: (美)Thomas Kyte    译者: 苏金国 王小振 丛书名: 图灵程序设计丛书 版社:人民邮电版社 ISBN:711515032X 上架时间:2006-8-25 版日期:2006 年10月 开本:16开 页码:737 版次:1-1 内容简介    本书是一本关于Oracle 9i & 10g数据库体系结构的权威图书,涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。    本书面向从事Oracle数据库应用的所有开发人员或DBA。 作译者    Thomas Kyte是Oracle公司核心技术集团的副总裁,从Oracle 7.0.9版本开始就一直任职于Oracle公司,不过,其实他从5.1.5c版本就开始使用Oracle了。 在Oracle公司,Kyte专门负责Oracle数据库,他的任务是帮助使用Oracle数据库的客户,并与他们共同设计和构建系统,或者对系统进行重构和调优。在进入Oracle公司之前,Kyte是一名系统集成人员,主要为美国军方和政府部门的客户构建大规模、异构数据库。 Thomas Kyte就是主持Oracle Magazine Ask Tom专栏和Oracle公司同名在线论坛的那个Tom,他通过这一方式热心地回答困扰着Oracle开发人员和DBA的各种问题。 目录 封面 -41 封底 738 扉页 -40 版权 -39 译者序 -38 序 -36 致谢 -33 前言 -32 配置环境 -25 目录 -4 第1章 开发成功的Oracle应用 1 1.1 我的方法 2 1.2 黑盒方法 4 1.3 开发数据库应用的正确(和不正确)方法 8 1.3.1 了解Oracle体系结构 8 1.3.2 理解并发控制 14 1.3.3 多版本 19 1.3.4 数据库独立性? 25 1.3.5 “怎么能让应用运行得更快?” 41 1.3.6 DBA与开发人员的关系 45 1.4 小结 46 第2章 体系结构概述 47 2.1 定义数据库和实例 48 2.2 SGA和后台进程 53 2.3 连接Oracle 56 2.3.1 专用服务器 56 2.3.2 共享服务器 57 2.3.3 TCP/IP连接的基本原理 58 2.4 小结 61 第3章 文件 63 3.1 参数文件 64 3.1.1 什么是参数? 65 3.1.2 遗留的init.ora参数文件 67 3.1.3 服务器参数文件 69 3.1.4 参数文件小结 75 3.2 跟踪文件 76 3.2.1 请求的跟踪文件 77 3.2.2 针对内部错误生成的跟踪文件 80 3.2.3 跟踪文件小结 83 3.3 警告文件 83 3.4 数据文件 86 3.4.1 简要回顾文件系统机制 86 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 修改跟踪文件 103 3.10 闪回日志文件 104 3.10.1 闪回数据库 104 3.10.2 闪回恢复区 105 3.11 DMP文件(EXP/IMP文件) 106 3.12 数据泵文件 107 3.13 平面文件 110 3.14 小结 111 第4章 内存结构 113 4.1 进程全局区和用户全局区 113 4.1.1 手动PGA内存管理 114 4.1.2 自动PGA内存管理 121 4.1.3 手动和自动内存管理的选择 131 4.1.4 PGA和UGA小结 132 4.2 系统全局区 133 4.2.1 固定SGA 137 4.2.2 重做缓冲区 137 4.2.3 块缓冲区缓存 138 4.2.4 共享池 145 4.2.5 大池 148 4.2.6 Java池 149 4.2.7 流池 150 4.2.8 自动SGA内存管理 150 4.3 小结 151 第5章 Oracle进程 153 5.1 服务器进程 153 5.1.1 专用服务器连接 154 5.1.2 共享服务器连接 156 5.1.3 连接与会话 157 5.1.4 专用服务器与共享服务器 163 5.1.5 专用/共享服务器小结 166 5.2 后台进程 167 5.2.1 中心后台进程 168 5.2.2 工具后台进程 175 5.3 从属进程 178 5.3.1 I/O从属进程 178 5.3.2 并行查询从属进程 179 5.4 小结 179 第6章 锁 181 6.1 什么是锁? 181 6.2 锁定问题 184 6.2.1 丢失更新 184 6.2.2 悲观锁定 185 6.2.3 乐观锁定 187 6.2.4 乐观锁定还是悲观锁定? 197 6.2.5 阻塞 198 6.2.6 死锁 201 6.2.7 锁升级 206 6.3 锁类型 206 6.3.1 DML锁 207 6.3.2 DDL锁 215 6.3.3 闩 218 6.3.4 手动锁定和用户定义锁 226 6.4 小结 227 第7章 并发与多版本 229 7.1 什么是并发控制? 229 7.2 事务隔离级别 230 7.2.1 READ UNCOMMITTED 232 7.2.2 READ COMMITTED 233 7.2.3 REPEATABLE READ 235 7.2.4 SERIALIZABLE 237 7.2.5 READ ONLY 239 7.3 多版本读一致性的含义 240 7.3.1 一种会失败的常用数据仓库技术 240 7.3.2 解释热表上超期望的I/O 241 7.4 写一致性 244 7.4.1 一致读和当前读 244 7.4.2 查看重启动 247 7.4.3 为什么重启动对我们很重要? 250 7.5 小结 251 第8章 事务 253 8.1 事务控制语句 254 8.2 原子性 255 8.2.1 语句级原子性 255 8.2.2 过程级原子性 257 8.2.3 事务级原子性 260 8.3 完整性约束和事务 260 8.3.1 IMMEDIATE约束 260 8.3.2 DEFERRABLE约束和级联更新 261 8.4 不的事务习惯 263 8.4.1 在循环中提交? 264 8.4.2 使用自动提交? 270 8.5 分布式事务 271 8.6 自治事务 273 8.6.1 自治事务如何工作? 273 8.6.2 何时使用自治事务? 276 8.7 小结 279 第9章 redo与undo 281 9.1 什么是redo? 281 9.2 什么是undo? 282 9.3 redo和undo如何协作? 285 9.4 提交和回滚处理 289 9.4.1 COMMIT做什么? 289 9.4.2 ROLLBACK做什么? 296 9.5 分析redo 297 9.5.1 测量redo 298 9.5.2 redo生成和BEFORE/AFTER触发器 300 9.5.3 我能关掉重做日志生成吗? 306 9.5.4 为什么不能分配一个新日志? 310 9.5.5 块清除 312 9.5.6 日志竞争 315 9.5.7 临时表和redo/undo 317 9.6 分析undo 321 9.6.1 什么操作会生成最多和最少的undo? 321 9.6.2 ORA-01555: snapshot too old错误 323 9.7 小结 334 第10章 数据库表 335 10.1 表类型 335 10.2 术语 337 10.2.1 段 337 10.2.2 段空间管理 339 10.2.3 高水位线 340 10.2.4 freelists 342 10.2.5 PCTFREE和PCTUSED 345 10.2.6 LOGGING和NOLOGGING 348 10.2.7 INITRANS和MAXTRANS 349 10.3 堆组织表 349 10.4 索引组织表 352 10.5 索引聚簇表 368 10.6 散列聚簇表 376 10.7 有序散列聚簇表 386 10.8 嵌套表 390 10.8.1 嵌套表语法 390 10.8.2 嵌套表存储 399 10.8.3 嵌套表小结 402 10.9 临时表 402 10.10 对象表 410 10.11 小结 418 第11章 索引 421 11.1 Oracle索引概述 422 11.2 B*树索引 423 11.2.1 索引键压缩 426 11.2.2 反向键索引 429 11.2.3 降序索引 435 11.2.4 什么情况下应该使用B*树索引? 437 11.2.5 B*树小结 448 11.3 位图索引 448 11.3.1 什么情况下应该使用位图索引? 449 11.3.2 位图联结索引 453 11.3.3 位图索引小结 455 11.4 基于函数的索引 456 11.4.1 重要的实现细节 456 11.4.2 一个简单的基于函数的索引例子 457 11.4.3 只对部分行建立索引 465 11.4.4 实现有选择的惟一性 467 11.4.5 关于CASE的警告 467 11.4.6 关于ORA-01743的警告 469 11.4.7 基于函数的索引小结 470 11.5 应用域索引 470 11.6 关于索引的常见问题和神话 472 11.6.1 视图能使用索引吗? 472 11.6.2 Null和索引能协作吗? 472 11.6.3 外键是否应该加索引? 475 11.6.4 为什么没有使用我的索引? 476 11.6.5 神话:索引中从不重用空间 483 11.6.6 神话:最有差别的元素应该在最前面 486 11.7 小结 490 第12章 数据类型 491 12.1 Oracle数据类型概述 491 12.2 字符和二进制串类型 494 12.2.1 NLS概述 494 12.2.2 字符串 497 12.3 二进制串:RAW类型 504 12.4 数值类型 506 12.4.1 NUMBER类型的语法和用法 509 12.4.2 BINARYFLOAT/BINARYDOUBLE类型的语法和用法 513 12.4.3 非固有数值类型 513 12.4.4 性能考虑 514 12.5 LONG类型 515 12.5.1 LONG和LONG RAW类型的限制 516 12.5.2 处理遗留的LONG类型 517 12.6 DATE、TIMESTAMP和INTERVAL类型 523 12.6.1 格式 523 12.6.2 DATE类型 525 12.6.3 TIMESTAMP类型 533 12.6.4 INTERVAL类型 541 12.7 LOB 类型 544 12.7.1 内部LOB 545 12.7.2 BFILE 557 12.8 ROWID/UROWID类型 559 12.9 小结 560 第13章 分区 561 13.1 分区概述 561 13.1.1 提高可用性 562 13.1.2 减少管理负担 564 13.1.3 改善语句性能 569 13.2 表分区机制 571 13.2.1 区间分区 571 13.2.2 散列分区 574 13.2.3 列表分区 579 13.2.4 组合分区 581 13.2.5 行移动 583 13.2.6 表分区机制小结 585 13.3 索引分区 586 13.3.1 局部索引与全局索引 587 13.3.2 局部索引 587 13.3.3 全局索引 594 13.4 再论分区和性能 610 13.5 审计和段空间压缩 617 13.6 小结 618 第14章 并行执行 619 14.1 何时使用并行执行 620 14.2 并行查询 622 14.3 并行DML 628 14.4 并行DDL 631 14.4.1 并行DDL和使用外部表的数据加载 632 14.4.2 并行DDL和区段截断 634 14.5 并行恢复 643 14.6 过程并行化 643 14.6.1 并行管道函数 644 14.6.2 DIY并行化 648 14.7 小结 652 第15章 数据加载和卸载 655 15.1 SQL*Loader 655 15.1.1 用SQLLDR加载数据的FAQ 660 15.1.2 SQLLDR警告 686 15.1.3 SQLLDR小结 686 15.2 外部表 687 15.2.1 建立外部表 688 15.2.2 处理错误 693 15.2.3 使用外部表加载不同的文件 697 15.2.4 多用户问题 697 15.2.5 外部表小结 698 15.3 平面文件卸载 698 15.4 数据泵卸载 708 15.5 小结 710 索引 711 前言 每个人都可能有自己的学习套路。学习一个新工具时,有些人可能只是找一本入门书,粗略地翻翻就浅尝辄止,并相信实践真知;有些人更喜欢系统地研习文档,对每个细节精雕细刻;有些人喜欢收集一些独门密技;有些人喜欢亲身尝试书上的基本用例……。每种方法都有可取之处,但我相信,真正的学习应该是“参考+实践”。盲目实践会频繁遇到本来可以避免的陷阱和失败,耽于参考又会成为纸上谈兵,无法得到真才实学。 学习Oracle时,很多书和资料都很有参考价值,特别是Oracle文档,更是全面地提供了我们想了解的信息。但是文档中没有实战用例,没有告诉我们哪些可行或者哪些不可行,什么情况下可行或者什么情况下不可行,为什么可行或者为什么不可行,它只是“公事公办”为你呈上厚厚的一摞文字,告诉你情况就是这样,你自己看着办吧。Thomas Kyte的这本书正弥补了这一点,他使用大量实际的例子来解释所阐述的概念,由浅入深地传授实战技术。如果你喜欢Oracle,需要更多地了解Oracle,这本书绝对值得一读。 本书第1章强调不要把数据库当成一个黑盒,讨论了开发人员必须了解的数据库的基本特性和功能。第2章提供了一个创建Oracle数据库的绝例子,从中你将深入地了解数据库和实例的概念。第3章介绍了各种类型的文件,特别是重做日志文件、闪回日志文件等。第4章关于内存,具体介绍了一些新选项,如何使用这些选项,以及要注意哪些问题。第5章讨论各个进程的功能。第6章至第8章分别介绍锁和闩、多版本以及事务。这几章是本书的精华,而且也是理解Oracle的关键所在。第9章讨论redo和undo,解释了它们分别是什么,并指如何避免各种可能现的错误。第10章介绍了各种类型的表,其中最重要的是堆组织表、索引组织表、临时表和外部表。你能从这一章中了解到改善性能的一些技巧。第11章讨论了有关索引的问题。第12章涵盖了Oracle中的各种数据类型。第13章讨论了分区,这一章开场白里就提警告——不要把分区当作一个提速开关,并在接下来的内容中详细分析了分区的有关问题。第14章介绍了并行执行,如并行DML、并行DDL等。这里作者给了自己从实际经验中总结的许多见解,指并行DDL是Oracle并行执行的闪光点。最后一章介绍了数据的加载和卸载,不仅详细说明了常用的SQL*Loader工具,还解释了如何用外部表加载数据。尽管外部表从很大程度上优于SQL*Loader,但使用外部表并没有完全摒弃SQL*Loader,而且完全可以利用SQL*Loader来为外部表生成CREATE语句。 在Oracle领域中,大概无人不识Thomas Kyte,也无人不知他的Expert One-on-One Oracle。本书是该书的全新改版,涵盖了Oracle9i和10g,并专门介绍了最重要的Oracle体系结构特性。翻译这样一本巨著,确实让我们很有压力,所以我们不敢马虎,尽力用准确、贴切的语言表述作者的原意。但是由于水平有限,译文肯定有不当之处,敬请批评指正。 译者 2006年7月 “Think”(思考)。1914年,Thomas J. Watson先生加入后来成为IBM的公司时,带来了这样一个简简单单的座右铭。后来,这成为每一位IBM员工的训词,不论他们身居何职,只要需要做决策,并利用自己的才智完成所承担的工作,就要把“Think”谨记于心。一时间,“Think”成为一个象征、一个标志,屡屡现在版物上,人们把它写在日历上提醒自己,而且不仅在IBM内部,就连其他一些公司的IT和企业管理者的办公室墙上也悬挂着这个牌匾,甚至《纽约客》杂志的漫画里都有它的身影。“Think”在1914年是一个很的观念,即使在今天也同样有着重要的意义。 “Think different”(不同凡想)是20世纪90年代苹果公司在其旷日持久的宣传活动中提的一个口号,想借此重振公司的品牌,更重要的是,想改变人们对技术在日常生活中作用的看法。苹果公司的口号不是“think differently”(换角度思考,暗含如何去思考),而是把“different”用作动词“think”的宾语,暗含该思考些什么(与“think big”句式相同)。这个宣传活动强调的是创造性和有创造性的人,暗示苹果电脑在支持创新和艺术成就方面与众不同。 我在1981年加入Oracle公司(那时还叫Relational Software公司)时,包含了关系模型的数据库系统还是一种新兴技术。开发人员、程序员和队伍逐渐壮大的数据库管理员都在学习采用规范化方法的数据库设计原则。在此之后现了非过程性的SQL语言。尽管人们对它很陌生,但无不为其强大的能力所折服,因为利用SQL语言能有效地管理数据,而以前同样的工作需要进行非常辛苦地编程才能完成。那时要思考的东西很多,现在也依然如此。这些新技术不仅要求人们学习新的观念和方法,还要以新的思路来思考。不论是过去还是现在,做到了这一点的人最终都大获成功,他们能最大限度地利用数据库技术,为企业遇到的问题建立有效的创新性解决方案。 想一想SQL数据库语言吧,历史上是Oracle首次推了商业化的SQL实现。有了SQL,应用设计人员可以利用一种非过程性语言(或称“描述性语言”)管理行集(即记录集),而不必使用传统的过程性语言编写循环(一次只能处理一条记录)。刚开始接触SQL时,我发现自己必须“转45°”考虑问题,以确定如何使用诸如联结和子查询之类的集合处理操作来得到我想要的结果。那时,集合处理对大多数人来说还是全新的概念,不仅如此,这也是非过程性语言的概念,也就是说,你只需指定想要的结果,而无需指如何得到这些结果。这种新技术确实要求我“换角度思考”,当然也使我有机会“不同凡想”。 集合处理比一次处理一条记录要高效得多,所以如果应用程序能以这种方式充分利用SQL,就能比那些没有使用集合处理的应用程序表现得更色。不过,遗憾的是,应用程序的性能往往都不尽如人意。实际上,大多数情况下,最能直接影响整体性能的是应用程序设计,而不是Oracle参数设置或其他配置选项。所以,应用程序开发人员不仅要学习数据库特性和编程接口的详细内容,还要掌握新的思路,并在应用程序中适当地使用这些特性和接口。 在Oracle社区中,关于如何对系统调优以得到最佳的性能(或者如何最佳地使用各种Oracle特性)有许多“常识”。这种原本明智的“常识”有时却演变成为一种“传说”甚至“神话”,这是因为开发人员和数据库管理员可能不加任何批判地采纳这些思想,或者不做任何思考就盲目扩展它们。 举一个例子,比如说这样一个观点:“如果一个东西很,那么更多——再多些——会更。”这种想法很普遍,但一般并不成立。以Oracle的数组接口为例,它允许开发人员只用一个系统调用就能插入或获取多行记录。显然,能减少应用程序和数据库之间传递的网络消息数当然很。但是再想想看,到达某个“临界”点后,情况可能会改变。一次获取100行比一次获取1行要得多,但是如果一次获取1 000行而不是100行,这对于提高整体性能通常意义并不大,特别是考虑到内存需求时更是如此。 再来看另一个不加判断就采纳的例子,一般主张关注系统设计或配置中有问题的地方,而不是最有可能改善性能的方面(或者是能提高可靠性、可用性或增强安全性的方面)。请考虑一个系统调优的“常识”:要尽可能提高缓冲区的命中率。对于某些应用,要尽量保证所需数据在内存中,这会最大限度地提高性能。不过,对于大多数应用,最把注意力放在它的性能瓶颈上(我们称之为“等待状态”),而不要过分强调某些系统级指标。消除应用程序设计中那些导致延迟的因素,就能得到最佳的性能。 我发现,将一个问题分解为多个小部分再逐个加以解决,是一种很的应用程序设计方法。采用这种方式,往往能极地、创造性地使用SQL解决应用需求。通常,只需一条SQL语句就能完成许多工作,而你原来可能认为这些工作需要编写复杂的过程性程序才能实现。如果能充分利用SQL的强大能力一次处理一个行集(可能并行处理),这不仅说明你是一个高效率的应用程序开发人员,也说明应用程序能以更快的速度运行! 一些最佳实践取决于(或部分取决于)事实的真实性,有时,随着事实的改变,这些最佳实践可能不再适用。请考虑一句古老的格言:“要得到最的性能,应当把索引和数据放在单独的表空间中。”我经常发现许多数据库管理员都恪守着这个观点,根本不考虑如今磁盘的速度和容量已经大为改观,也不考虑给定工作负载的特殊要求。要评价这个“规则”是否合适,应该考虑这样一个事实:Oracle数据库会在内存中缓存最近经常使用的数据库块(通常这些块属于某个索引)。还有一点需要考虑:对于给定的请求,Oracle数据库会按顺序使用索引和数据块,而不是同时访问。这说明,所有并发用户实际上应该都会执行涉及索引和数据的I/O操作,而且每块磁盘上都会现I/O操作。可能你会于管理方面的原因(或者根据你的个人喜)将索引和数据块分置于不同的表空间中,但绝不能说这样做是为了提高性能。(Thomas Kyte在Ask Tom网站http://asktom.oracle.com上对这个主题做了深入的分析,有关文章可以在“index data table space”中查到。)从中我们可以得到一个教训,要根据事实做决定,而且事实必须是当前的、完备的。 不论我们的计算机速度变得多快,数据库变得多复杂,也不管编程工具的能力如何,人类的智慧和一套正确的“思考原则”仍是无可替代的。所以,对于应用中使用的技术,尽管学习其细节很重要,但更重要的是,应该知道如何考虑适当地使用这些技术。 Thomas Kyte是我认识的最聪明的人之一,他在Oracle数据库、SQL、性能调优和应用设计方面具有渊博的学识。我敢肯定,Thomas绝对是“Think”和“Think different”这两个口号不折不扣的追随者。有位中国的智者说过“授人以鱼,为一饭之惠;授人以渔,则终身受用”,显然Thomas对此深以为然。Thomas很乐于把自己的Oracle知识与大家共享,但他并不只是罗列问题的答案,而是尽力帮助大家学会如何思考和推理。 在Thomas的网站(http://asktom.oracle.com)上、发言稿中以及书中,他其实不断鼓励人们在使用Oracle数据库设计数据库应用时要“换角度思考”。他从不墨守成规,而坚持通过实例,用事实证明。Thomas采用一种注重实效的简单方法来解决问题,按照他的建议和方法,你将成为更高效的开发人员,能开发、更快的应用。 Thomas的这本书不仅介绍Oracle的诸多特性,教你使用这些特性,还反映了以下简单的观点:     不要相信神话,要自己思考。     不要墨守成规,所有人都知道的事情其实很可能是错的!     不要相信传言,要自己测试,根据经过证明的示例做决定。     将问题分解为更简单的小问题,再把每一步的答案组合为一个优秀、高效的解决方案。     如果数据库能更、更快地完成工作,就不要事必躬亲地自己编写程序来完成。     理解理想和现实之间的差距。     对于公司制定的未加证实的技术标准,要敢于提质疑。     要针对当前需求从大局考虑怎样做最。     要花时间充分地思考。 Thomas建议,不要只是把Oracle当作一个黑盒。你不只是在Oracle中放入和取数据。他会帮助你理解Oracle是如何工作的,如何充分利用它强大的能力。通过学习如何深思熟虑地、创造性地应用Oracle技术,你会更快、更地解决大多数应用设计问题。 通过阅读这本书,你会了解到Oracle数据库技术的许多新动态,还会掌握应用设计的一些重要概念。如果你确实领会了这些思想,相信你肯定也会对所面对的难题“换角度思考”。 IBM的Watson曾经说过:“自始以来,每一个进步都源自于思考。仅仅因为‘没有思考’,就造成全世界白白浪费了无数资金。”Thomas和我都赞同这种说法。学完这本书后,利用你掌握的知识和技术,希望你能为这个世界(至少能为你的企业)节省无数资金,把工作干得更色。 Ken Jacobs Oracle 公司产品战略部(服务器技术)副总裁 过去我一直在开发Oracle软件,并与其他Oracle开发人员一同工作,帮助他们构建可靠、健壮的应用程序。在这个过程中积累了一些经验,正是这些经验赋予我灵感,才有了本书中的内容。这本书实际上反映了我每天做了些什么,汇集了我所看到的人们每天遇到的问题。 本书涵盖了我认为最重要的一些内容,即Oracle数据库及其体系结构。我也可以写一本书名类似的其他方面的书,向你解释如何用一种特定的语言和体系结构开发应用程序。例如,我可以告诉你如何使用 JavaServer Pages(JSP)与Enterprise JavaBeans(EJB)通信,EJB再如何使用JDBC与Oracle通信。不过,归根结底,你最后还是要了解Oracle数据库及其体系结构(本书介绍的内容),才能成功地构建这样一个应用程序。要想成功地使用Oracle进行开发,我认为有些内容你必须了解,而不论你是一位使用ODBC的Visual Basic程序员、使用EJB和JDBC的Java程序员,还是使用DBI Perl的Perl程序员,这本书都会介绍这些通用的知识。本书并不推崇哪一种特定的应用体系结构,在此没有比较三层结构和客户/服务器结构孰优孰劣。我们只是讨论了数据库能做什么,另外关于数据库如何工作,我们还会指你必须了解哪些内容。由于数据库是所有应用体系结构的核心,所以这本书适用面很广。 在编写本书时,我对Expert One-on-One Oracle一书中关于体系结构的章节做了全面修订和更新,并补充了大量新的内容。Expert One-on-One Oracle一书所基于的版本是Oracle 8.1.7,在此之后又推了3个版本——两个Oracle9i版本和Oracle数据库10g Release 1,这也是写这本书时的Oracle发行版本。因此,有许多新的功能和新的特性需要介绍。 如果针对9i和10g更新Expert One-on-One Oracle,那么需要补充的内容太多了,那本书原本篇幅较多,再加太多内容就会很难处理。于这个考虑,我们决定分两本书来介绍。这是其中的第一本,第二本书暂定名为Expert Oracle Programming 。 顾名思义,本书的重点是数据库体系结构,并强调数据库本身如何工作。我会深入地分析Oracle数据库体系结构,包括文件、内存结构以及构成Oracle数据库(database)和实例(instance)的底层进程。然后讨论一些重要的数据库主题,如锁定、并发控制、事务、redo和undo,还会解释为什么了解这些内容很重要。最后,我们再来分析数据库中的物理结构,如表、索引和数据类型,并介绍哪些技术能最优地使用这些物理结构。 本书内容 如果开发的选择余地很大,则会带来一些问题,其中一个问题是有时很难确定哪种选择是满足特定需求的最佳选择。每个人都希望灵活性尽可能大(有尽可能多的选择),同时他们又希望能简单明了,换句话说,希望尽量容易。Oracle为开发人员提供的选择几乎无穷无尽。没有人会说“这在Oracle中做不到”,而只会说“在Oracle中你想用多少种不同的方法来实现?”希望这本书能帮你做正确的选择。 如果你不只是想知道做何选择,还想了解有关Oracle特性和功能的一些原则和实现细节,这本书就很适合你。例如,Oracle有一个很棒的特性,称为并行执行(parallel execution)。Oracle文档会告诉你如何使用这个特性,并说明它到底能做什么。不过,Oracle文档没有告诉你应该在什么时候用这个特性,更重要的是没有指什么时候不该使用这个特性。另外,文档一般没有提供特性的实现细节,如果你不清楚,可能会因此而困扰(我指的不是bug,而是说你可能很想知道这个特性如何工作,以及为此是怎样具体设计的,但从文档中找不到答案)。 在本书中,我不仅会尽力阐明各个特性如何工作,还会指什么情况下要考虑使用某个特性或实现,并解释为什么。我认为,理解“怎么做”固然很重要,但理解“什么时候做”和“为什么这样做”(以及“什么时候不做”和“为什么不做”)也同样重要! 读者对象 这本书面向那些使用Oracle作为数据库后端开发应用程序的人员。专业Oracle开发人员如果想了解如何在数据库中完成某些工作,同样可以参考本书。本书相当实用,所以DBA也会对书中的许多内容感兴趣。书中大部分例子都使用SQL*Plus来展示关键特性,所以如果你想通过本书来了解如何开发一个很酷的GUI,可能不能如愿。不过,从这本书中,你将知道Oracle数据库如何工作,它的关键特性能做些什么,以及什么时候应该(和不应该)使用这些特性。 如果你想事半功倍地使用Oracle,如果你想了解使用现有特性的新方法,如果你想知道这些特性在真实世界中如何应用(不只是展示如何使用特性,而是首先分析为什么要用这个特性),就请阅读这本书。作为技术经理,如果你手下的开发人员在开发Oracle项目,你可能也会对这本书感兴趣。从某种程度上讲,技术经理也要懂数据库,而且要知道这对于成功至关重要。如果技术经理想安排员工进行适当的技术培训,或者想确保员工了解他们应该掌握的技术,就可以利用这本书来“充电”。 要想更地学习本书的内容,要求读者:     了解SQL。不要求你能编写最棒的SQL代码,但是如果用过SQL,对SQL有实战经验,这会很有帮助。     掌握PL/SQL。这不是一个必要的前提,但是有助于你“领会”书中的例子。例如,本书不会教你怎样编写一个FOR循环,或者如何声明一个记录类型,这些内容可以参考Oracle文档和许多相关的图书。不过,这并不是说你从本书中学不到PL/SQL的知识。不是这样的。通过阅读本书,你会对PL/SQL的许多特性相当熟悉,而且会学到一些新方法,还会注意到你以前以为不存在的一些包和特性。     接触过某种第三代语言(third-generation language,3GL),如C或Java。我相信,如果你能阅读3GL语言编写的代码,或者编写过这种代码,肯定能顺利地阅读和理解本书中的例子。     熟悉Oracle Concepts手册。 最后再说两句,由于Oracle文档实在太庞大了,这让很多人都有些畏惧。如果你刚开始读Oracle Concepts手册,或者还没有看过,那我可以告诉你,这个手册绝对是一个很的起点。它大约有700页,涉及了你需要知道的许多重要的Oracle概念。其中不会涵盖每一个技术细节(Oracle文档提供了技术细节,不过它有10 000~20 000页之多),但你能从中学到所有重要的概念。 这个手册涉及以下主题(这里所列的并不完整):     数据库中的结构,数据如何组织和存储;     分布式处理;     Oracle的内存体系结构;     Oracle的进程体系结构;     你要使用的模式对象(表、索引、聚簇等);     内置数据类型和用户定义的数据类型;     SQL存储过程;     事务如何工作;     优化器;     数据完整性;     并发控制。 我自己也会时不时地温习这些内容。这些都是基础,如果不了解这些知识,你创建的Oracle应用程序就很容易失败。建议你通读Oracle Concepts手册来了解这些主题。 本书组织结构 为了帮助你更地使用这本书,大部分章节都组织为4个部分。这个划分并不严格,不过有助于你快速地找到感兴趣的方面,从中获得所需的更多信息。本书有15章,每一章都像一本“迷你书”,可以单独成册。有时我会引用其他章中的例子或特性,不过你完全可以从书中任选一章,不参考其他章也能顺利阅读。例如,要理解或使用第14章关于并行机制的知识,就不必先阅读介绍数据库表的第10章。 许多章的格式和风格基本上都一样:     首先是特性或功能的介绍。     说明为什么可能想使用(或者不想使用)这个特性或功能。我会概要地指哪些情况下要考虑使用这个特性,而哪些情况下这个特性不适用。     如何使用这个特性。这里提供的信息不是完全照搬SQL参考资料中的内容,而是会以一种循序渐进的方式组织。我会清楚地指哪些是你需要的,哪些是你必须做的,另外哪些环节需要仔细检查。这一部分包括以下内容:     如何实现这个特性;     许许多多的例子;     如何调试这个特性;     使用这个特性的忠告;     如何(主动地)处理错误。     对上述内容的小结。 书中有相当多的例子和大量的代码,这些都可以从http://www.apress.com的Source Code区下载。下面将详细介绍每一章的内容。 第1章:开发成功的Oracle应用 从这一章开始,我将介绍数据库编程的基本方法。所有数据库创建得并不一样,要想按时、成功地开发数据库驱动的应用,你必须了解你的数据库能做什么,它是怎么做的。如果不清楚你的数据库能做什么,就很可能不断地遭遇“闭门造车”的窘境,徒劳地从头开发数据库本已提供的功能;如果不清楚你的数据库是怎么工作的,很可能开发性能很差的应用,达不到预期的要求。 这一章先根据经验分析了一些应用,这些应用都因为缺乏对数据库的基本理解而导致项目失败。这一章就采用这种“拿例子说话”的方式,讨论了开发人员必须了解数据库的哪些基本特性和功能。关键是,不要把数据库当成一个黑盒,不要认为它能自己努力得答案并自行负责可扩展性和性能。 第2章:体系结构概述 这一章介绍Oracle体系结构的基础知识。首先给两个术语——“实例”(instance)和“数据库”(database)的明确定义,Oracle领域中的许多人都对这两个词存在误解。我们还会简要介绍系统全局区(System Global Area,SGA)和Oracle实例底层的进程,并分析“连接Oracle”这样一个简单的动作是如何实现的。 第3章:文件 这一章将深入介绍构成Oracle 数据库和实例的8类文件。从简单的参数文件到数据文件和重做日志文件(redo log file)都会涵盖。我们将说明这些文件是什么,为什么有这些文件,以及如何使用它们。 第4章:内存结构 这一章讨论Oracle如何使用内存,包括各个进程中的内存(PGA内存,PGA即进程全局区)和共享内存(SGA)。我们会分析手动和自动PGA内存管理之间的区别,并介绍Oracle 10g中的SGA内存管理,还会说明各种方法适用于什么情况。读完这一章之后,你会对Oracle如何使用和管理内存有深入的了解。 第5章:Oracle进程 这一章概述了各种Oracle进程(服务器进程和后台进程),另外还相当深入地讨论了通过共享服务器进程或专用服务器进程连接数据库有何区别。启动Oracle实例时会看到一些后台进程,这一章将逐一介绍其中一些重要的后台进程(如LGWR、DBWR、PMON和SMON),并分别讨论这些进程的功能。 第6章:锁 不同的数据库有不同的行事方法(SQL Server里能做的在Oracle中不一定能做)。应当了解Oracle如何实现锁定和并发控制,这对于应用的成功至关重要。这一章将讨论Oracle解决这些问题的基本方法,可以应用哪些类型的锁[DML、DDL和闩(latch)],还会指如果锁定实现不当会现哪些问题(死锁、阻塞和锁升级)。 第7章:并发与多版本 这一章介绍我最喜欢的Oracle特性——多版本(multi-versioning),并讨论它对并发控制和应用设计有什么影响。在这里能清楚地看到,所有数据库创建得都不一样,具体的实现会对应用的设计产生影响。我们先回顾ANSI SQL标准定义的各个事务隔离级别,并介绍它们在Oracle中的具体实现(还会介绍其他数据库中的实现)。基于多版本特性,Oracle能够在数据库中提供非阻塞读(non-blocking read),本章接下来会分析多版本特性对我们有什么影响。 第8章:事务 事务是所有数据库的一个基本特性,这也是数据库区别于文件系统的一个方面。不过,事务常常遭到误解,很多开发人员甚至不知道他们有时没有使用事务。这一章将讨论Oracle中应当如何使用事务,还列了使用其他数据库进行开发时可能现的一些“坏习惯”。特别地,我们将讨论原子性的含义,并说明原子性对Oracle中的语句有何影响。这一章还会讨论事务控制语句(COMMIT、SAVEPOINT和ROLLBACK)、完整性约束和分布式事务(两段提交或2PC),最后介绍自治事务。 第9章:redo与undo 可能有人说,开发人员不用像DBA那样深入地了解redo(重做信息)和undo(撤销信息)的细节,但是开发人员确实要清楚redo和undo在数据库中所起的重要作用。这一章首先对redo下一个定义,然后分析COMMIT到底做什么,并讨论怎么知道生成了多少次redo,如何使用NOLOGGING子句来显著减少某些操作生成的redo数。我们还研究了redo生成与块清除(block cleanout)和日志竞争(log contention)等问题的关系。 这一章的undo一节中讨论了撤销数据的作用,并介绍哪些操作会生成最多/最少的undo。最后分析“讨厌”的ORA-01555:snapshot too old(ORA-01555:快照太旧)错误,解释导致这个错误的可能原因,并说明如何避免。 第10章:数据库表 Oracle现在支持多种表类型。这一章将分别介绍每一种类型,包括堆组织表(heap organized,也就是默认的“普通”表)、索引组织表(index organized)、索引聚簇表(index clustered)、散列聚簇表(hash clustered)、嵌套表(nested)、临时表(temporary)和对象表(object),并讨论什么时候使用这些类型的表、如何使用以及为什么使用。大多数情况下,堆组织表就足够了,不过这一章还将帮助你认识到在哪些情况下使用其他类型的表更合适。 第11章:索引 索引是应用设计的一个重要方面。要想正确地实现索引,要求深入地了解数据,清楚数据如何分布,并且知道要如何使用数据。人们经常把索引当作“马后炮”,直到应用开发的后期才增加,这就会导致应用的性能低下。 这一章将详细分析各种类型的索引,包括B*Tree索引、位图索引(bitmap index)、基于函数的索引(function-based index)和应用域索引(application domain index),并讨论各种索引应该在哪些场合使用,以及哪些场合不适用。我会在“有关索引的常见问题和神话”一节回答常常被问到的一些问题,如“索引能在视图上使用吗?”和“为什么没有使用我的索引?”。 第12章:数据类型 有许多数据类型(datatype)可供选择。这一章会逐一分析22种内置数据类型,解释这些类型是如何实现的,并说明如何以及何时使用这些数据类型。首先对国家语言支持(National Language Support,NLS)做一个简要的概述;要想充分理解Oracle中简单的串类型,必须先掌握这个基础知识。接下来再讨论广泛使用的NUMBER类型,并介绍Oracle 10g 对于在数据库中存储数值又提供了哪些新的选项。我们主要从历史角度介绍LONG和LONG RAW类型,目的是讨论如何处理应用中遗留的LONG列,并将其移植为LOB类型。然后会深入分析存储日期和时间的各种数据类型,讨论如何处理这些数据类型来得到我们想要的结果。这里还会谈到时区支持的有关细节。 接下来讨论LOB数据类型。我们会说明LOB类型的存储方式,并指各种设置(如IN ROW、CHUNK、RETENTION、CACHE等)对我们有什么意义。处理LOB时,重要的是要了解默认情况下它们如何实现和存储,在对LOB的获取和存储进行调优时这一点尤其重要。本章的最后介绍ROWID和UROWID类型。这些是Oracle专用的特殊类型,用于表示行地址。我们会介绍什么时候可以将它们用作表中的列数据类型(这种情况几乎从来不会现!)。 第13章:分区 分区(partitioning)的目的是为了便于管理非常大的表和索引,即实现一种“分而治之”的逻辑,实际上就是把一个表或索引分解为多个较小的、更可管理的部分。在这方面,DBA和开发人员必须协作,使应用能有最大的可用性和最高的性能。这一章介绍了表分区和索引分区。我们会谈到使用局部索引(在数据仓库中很常用)和全局索引(常见于OLTP系统)的分区。 第14章:并行执行 这一章介绍了Oracle中并行执行(parallel execution)的概念,并说明了如何使用并行执行。首先指并行处理在什么情况下有用,以及哪些情况下不应考虑使用它。有了一定的认识后,再来讨论并行查询的机制,大多数人提到并行执行都会想到这个特性。接下来讨论并行DML(parallel DML,PDML),利用PDML,可以使用并行执行完成修改。我们会介绍PDML在物理上如何实现,并说明为什么这个实现会对PDML带来一系列限制。 然后再来看并行DDL。在我看来,这才是并行执行真正的闪光之处。通常,DBA会利用一些小的维护窗口来完成大量的操作。利用并行DDL,DBA就能充分利用可用的机器资源,在很短的时间内完成很大、很复杂的操作(它只需原先串行执行所需时间的很小一部分)。 这一章的最后将讨论过程并行机制(procedural parallelism),采用这种方法可以并行地执行应用程序代码。这里将介绍两个技术。首先是并行管线函数(parallel pipelined function),即Oracle能动态地并行执行存储函数。第二个技术是DIY并行机制(DIY parallelism),利用这个技术可以把应用设计为并发地运行。 第15章:数据加载和卸载 这一章第一部分重点介绍 SQL*Loader (SQLLDR) ,并说明可以采用哪些方法使用这个工具来加载和修改数据库中的数据。我们会讨论以下问题:加载定界数据,更新现有的行和插入新行,卸载数据,以及从存储过程调用SQLLDR。重申一遍,SQLLDR是一个完备而重要的工具,但它的实际使用也带来很多问题。这一章第二部分主要讨论外部表,这是另外一种数据批量加载和卸载的高效方法。 源代码和有关更新 使用这本书中的例子时,你可能想亲手键入所有代码。很多读者都喜欢这样做,因为这是熟悉编码技术的一种办法。 无论你是否想自己键入代码,都能从Apress网站(http://www.apress.com)的Source Code区下载本书的所有源代码 。即使确实想自己键入代码,下载源代码也很有必要,你可以使用下载的源代码文件检查正确的结果是什么。如果你认为自己的录入可能有误,就可以先从这一步开始。倘若不想自己键入代码,那么除了从Apress网站下载源代码外别无选择!不论采用哪种方式,代码文件都能帮助你完成更新和调试。 勘误表 Apress极力确保文字或代码不会错。不过,错也是人之常情,所以只要发现并修改了错误,我们就会及时告诉你。Apress所有书籍的勘误表都可以在http://www.apress.com上找到。如果你发现一个还没有报告的错误,请通知我们。 Apress网站还提供了其他的信息和支持,包括所有Apress书籍的代码、样章、新书预告以及相关主题的文章等。
发帖
下载资源悬赏专区

1.0w+

社区成员

CSDN 下载资源悬赏专区
其他 技术论坛(原bbs)
社区管理员
  • 下载资源悬赏专区社区
加入社区
帖子事件
创建了帖子
2019-05-14 02:00
社区公告
暂无公告