-
Mar20
20种让你的Apache更安全的设置
Posted in Linux, 557 views
-
原文来自: http://www.petefreitag.com/item/505.cfm
一. 确定你安装了最新的安全补丁.先把本文del.icio.us了,然后再回来看其他的。
二. 隐藏Apache的版本号,以及其他一些信息apache的默认设置公开了apache的版本号,操作系统,甚至还有已经安装了的apache组件。黑客们会利用这些信息更方便的去攻击你。并且,这些信息告诉了所有人:你的apache并没有经过配置
你可以在httpd.conf文件中,加上或者修改两条代码,隐藏信息。
ServerSignature Off
ServerTokens Prod
ServerSignature apache生成的一些页面底部,比如404页面,文件列表页面等等。
ServerTokens指向被用来设置Server的http头回响。设置为Prod可以让HTTP头回响显示成这样….
Server: Apache如果是个超级偏执狂,你可以修改源代码或者使用mod_security,来显示比Apache更多的东西.
确定apache是运行在它之下的用户和组之下。很多apache安装之后他们是运行在nobody之下的。所以,每个运行在nobody之下的apache,将会被同组的邮件服务其攻击。
chown apache.apache /var/…
User apache
Group apache确认根目录的东西是关闭的我们不希望apache有修改根目录的权限。 所以,建议你所有的网站都放在一个目录下面(我们称为/web,你可以象这样设置:
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Order Allow,Deny
Allow from allQUOTE:
由于我们设置了Options None 和AllowOverride None,这将关闭options权限和覆盖权限,你现在必须为每个文件夹加上explicitly,为他们恢复Option和Override权限。关闭文件夹浏览你可以在httpd.conf的Directory标签中间加上一个Options指令
。 设置Options为None或者-Indexes
Options -Indexes关闭服务器的side includes也要添加一条Optoions指令到Directory 标签中, 使Options 为 None或者-Includes
Options -Includes关掉CGI如果你不用CGI,那就在Directory标签中加上一条Options指令关掉他。 使Options为None或者-ExecCGI
Options -ExecCGI不要让apache进入象征性links中(我理解的是#)也是在directory中修改Options 为 -FollowSymLinks
Options -FollowSymLinks关闭多选项关闭所有选项
Options none关闭几个选项
Options -ExecCGI -FollowSymLinks -Indexes关闭对 .htaccess 文件的支持。也在Directory标签中,但是AllowOverride指令
AllowOverride none
如果你需要Overrides,需要确认他们不能被下载。改变他们的文件名,而不是原来的.htaccess, 比如可以改为.httpdoveride, 或者屏蔽所有的.ht开头的文件。
AccessFileName .httpdoverride
Order allow,deny
Deny from all
Satisfy All运行 mod_securitymod_security 是一个非常好用的Apache组件.
通过mod_security你可以达到以下效果:简单的过滤
正则表达式过滤
URL 编码验证
Unicode编码验证
核查
Null值攻击预防
上传大小限制
服务器身份掩藏
内置Chroot支持
更多…关掉一些不需要的组件去module documentation 看一下你到底需要哪些组件. 好多时候你会发现,你并不需要….
一行一行去查找你的httpd.conf里是否包含LoadModule, 可以用#放在行首去关闭组件。 如果象搜索组件,可以运行:
grep LoadModule httpd.conf
这里有些组件常常打开的,但是不需要。
mod_imap,mod_include,mod_info,mod_userdir,mod_status,mod0cgi,mod-autoindex.确认只有root有阅读apache配置文件和bin文件的权限。chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache减少Timeout值默认设置timeout指令是300秒。 你可以减小他,以预防一些潜在攻击。
Timeout 45减小最大请求apache有很多指令来减小请求数,一个很好的指令是LimitRequestBody指令。 这条指令默认设置是无线的。 如果你想设置上传文件不能超过1MB, 你可以这样写:
LimitRequestBody 1048567
如果不允许问文件上传。你可以设得更小。其他得指令,可以看看LimitRequestFields,LimitrequestFieldSize , LimitRequestLine. 这些指令都是默认设置。但是你必须去优化他们,成为你需要的。
限制XML body区的大小如果你运行了mod_dav,你会希望限制XML 请求的body大小。 LimitXMLRequestBody指令只有在Apache2中有。 并且他的默认值是1个millon字节大小,大约1M, 很多教材上说这里设置为0比较好,这就意味着多大的文件都可以上传,如果你需要上传大文件的话。 但是如果你简单的改变一下控制。 你可以大概的设置成10MB
LimitXMLRequestBody 10485760
限制并发apache有些设置可以限制并发请求。MaxClients就是服务器能承受的最大用户值。
其他的指令比如MaxSpareServers,MaxRequestsPerChild, Apache2上的 ThreadsPerChild,ServerLimit,和MaxSpareThreads 和你的系统硬件配置的配合都是很重要的。IP限制地址段如果你有一些资源只能给特定的网段使用…176。16.0.0–176.16.0.16
Order Deny,Allow
deny from all
Allow from 176.16.0.0/16
或者也可以限定单一IP
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
调整KeepAlive 设置MaxKeepAliveRequests –> 100 — (你需要的数)
KeepAliveTimeout –> 15 –(你需要的数)在Chroot环境运行apache(没翻译. )chroot allows you to run a program in its own isolated jail. This prevents a break in on one service from being able to effect anything else on the server.
It can be fairly tricky to set this up using chroot due to library dependencies. I mentioned above that the mod_security module has built in chroot support. It makes the process as simple as adding a mod_security directive to your configuration:
SecChrootDir /chroot/apache
There are however some caveats however, so check out the docs for more info -
No Comments »
-
Mar18
-

全球气候变暖是个老话题,老到现在恐怕很多人一眼扫过这个词而没有任何想法。
《难以忽视的真相》是一部精心制作、触动人心的记录片,让我们重新审视我们的地球。戴维斯·古根海姆导演,克林顿政府的副总统阿尔·戈尔主演。就象本片的片尾字幕所说的一样,看过本片的人最好推荐本片给周围的朋友,唤醒每个人的环保意识。本片应该算是一部科普片,这部科普片真正做到了让人“不看不知道,一看吓一跳”,在观看本片之前,还真不知道地球的环境问题已经严峻到了这个地步。如果在你的内心深处还存在一点点对地球的珍惜,还愿意承担一点点对地球的责任,你就应该先看看这部电影,然后,最重要的,行动起来,从自己做起。这是一部比任何电影都要有用和对人类负责的电影,每一个地球人都应该看一看。
---片尾字幕---
气候危机可以解决
就从这里开始
你能减少你的二氧化碳排放
甚至减少到0
购买节能电器:比如节能灯泡
改进你的调温器:换成定时的
减少冷暖气的能耗
对房屋作节能评估
改进隔热性能
加强能源的循环利用
有能力的话
请购买混合动力汽车
多步行 或者骑自行车
乘坐轻轨或者地铁
告诉你的父母不要毁了
你以后赖以生存的世界
如果你是家长
请与你的孩子一起
拯救他们以后赖以生存的世界
使用可再生能源
咨询当地能源公司
是否提供绿色能源
如果他们不提供 询问原因
选举致力于解决气候危机的领导人
上书国会
如不采纳 就参加国会竞选
植树:种很多很多树
到所在社区呼吁
参与电台热线、在报纸上宣传
坚决减少美国的二氧化碳排放
联合国际上的力量
阻止全球变暖
减少我们对进口石油的依赖
帮助农民种植醇类燃料作物
提高能源经济标准
减少汽车尾气排放
如果你祷告
祈祷人类能拿出改变的勇气
非洲的古谚说
当你祈祷的时候
也同时采取行动
鼓励身边的人都来观看这部电影《难以忽视的真相》
尽可能了解气候危机的知识
然后把知识变成行动的力量-EOF-
-
No Comments »
-
Mar18
-
96年上初一,学校机房有40台DX-66计算机,从此开始接触计算机。那时候Windows95还见不着,操作环境是DOS6.22。刚开始是一摸黑,啥也不懂。只知道DIR能列目录,CD能改变目录,光标不闪了就是死机。教材有着所有国产计算机图书的通病,一开始就罗列一大堆艰涩难懂的概念,完全没有直观的讲解,跟一个连磁盘是啥样都没见过的人讲磁盘的扇区、磁道=.=。课也比较无聊,就是DOS命令+WPS+CCED+五笔。后3个,对于初一学生来说,那是多么枯燥的东西……好在有几个喜爱计算机的同学,经常一起琢磨琢磨,弄点好玩的东西。
初一下半学期,开了一个计算机兴趣小组,教C语言。开班第一天有40多人,机器不够,但上了几节课之后就有人学不懂不来了。人越来越少,到期末的时候,还剩下10多个学生,另2个还是外校过来学的。既然是兴趣小组,也就不能指望所有人都有那么大兴趣。老师教的很认真,大家学的也很认真。教材只有老师那里有一本,谭浩强版,学生们只是听老师讲、做演示。条件虽然不怎么好,但教学方式值得称道。机房是一个novell的无盘工作站系统,老师随时可以接管学生的屏幕,所以讲课不需要黑板,学生坐在机器前,老师在主机上做演示,所有人都能看的清清楚楚。课程的结构大致是:概念讲解、范例、学生练习、总结。老师讲完例子之后立即就会安排一个题目让大家做,有问题随时问。等大家差不多写完了,挑一个写的最好的程序,再拿出老师自己写的程序,给大家做分析讲解。有实际写代码的经验,对概念的理解要深刻的多,这一个学期每周2天的学习,虽然仅仅是C语言入门,但我受益匪浅。在兴趣小组学习的C,10年后的现在我也依然记得清楚。
最有趣的一个命令是attrib,因为是公用无盘系统,40台学生机访问的都是同一个硬盘,文件存储比较混乱,经常被人误删文件。后来那个外校来学C语言的同学教我们一招——attrib。给文件加属性,隐藏、只读。几个人都开始给自己的文件加属性,藏起自己的,寻找别人的。很快还发现一个奇怪的隐藏目录,这个目录名是空白。大家疑惑不解,老师也不说是怎么回事。后来看到一点资料,才知道是用ASCII码的255命名的。进目录一看,新大陆啊。原来这里存放的是机房的登陆管理程序,每个人的固定机器号和密码都在一个文本文件里写着。从此以后,任何一台机器都可以随便使用了。^^
我还搞过一次破坏:一次想给所有机器添加自己的密码,但是字符太多,就只把姓名和密码填了。但是这个用Pasic写的程序读数据不是按文本行,而是按固定字节读取的,我少写了几个字符,后面的用户和密码就全部错位了。第二天来学校,十几台计算机不能登陆。幸好我跟老师比较熟,没K我……
当时随身磁盘中必备的一些软件:
ARJ 压缩
ACE 压缩,有了这个就没再用ARJ
rar 压缩,有了这个就没再用ACE
pctools 5.0 磁盘工具,改文件、修磁盘、杀病毒,它好像啥都能干。不过我拿来最大的用处就是改仙剑奇侠传和金庸群侠传=.=
sea 图片浏览工具,当时很常见的PCX图片格式现在基本已经见不到了
HD-COPY 软盘高速复制软件,并有软盘扩容和磁头清洗功能。1.44M的软盘能扩成1.8M,不过扩了以后经常读不出来,于是再用badcopy
BadCopy 专门读坏文件的工具,不知道原理是啥。看到最新版本已经是3.8在XP下运行了
doskey 这个很多人不知道,这是dos的外部命令,运行doskey命令行就可以上下翻页,方便许多,DOS7.0以后就集成进DOS了。
有一个很精美的坦克大战游戏,删掉几个readme之类的文件后刚好能在一张软盘内运行,流传了很久。Windows95在97年跟着联想1+1开始普及,但学校机房在99年升级之前用的一直是DOS,Windows 3.2都很少,对DOS很有感情。现在工作中Linux用的很多,常常对着黑底白字的终端敲打半天,乐此不疲。与鼠标点击相比,这种感觉更真实,看着满屏的字符随着指尖滚动,好像是在弹奏音乐。这种对字符界面的喜爱,源自DOS。直到WindowsME出现,DOS实模式消失,才真正远离DOS。
-
No Comments »
-
Mar17
-
GB2312
范围: 0xA1A1 - 0xFEFE
汉字范围: 0xB0A1 - 0xF7FE
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。 GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规 定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。GB2312- 80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码 范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。GBK
范围: 0×8140 - 0xFEFEGB2312-80 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱鎔基的“鎔”字,未收入 GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方 便,对于搜索引擎等软件的构造来说也不是好消息,而且这种表示没有统一标准。从我们对人民日报 98 年数据的处理过程中,得出这样的经验:回填外字最困难的就是如何得到这种表示方法的集合。
为了解决这些问题,以及配合 UNICODE 的实施,全国信息技术化技术委员会于 1995 年 12 月 1 日《汉字内码扩展规范》。GBK 向下与 GB2312 完全兼容,向上支持 ISO-10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0×8140-0xfefe,剔除高位0×80的字位。其所有字符都可以一对一映射到Unicode2.0。
字集
GBK 共收入21886个汉字和图形符号,包括:GB2312 中的全部汉字、非汉字符号。
BIG5 中的全部汉字。
与 ISO-10646 相应的国家标准 GB13000 中的其它 CJK 汉字,以上合计 20902 个汉字。
其它汉字、部首、符号,共计 984 个。
GBK 编码区分三部分:汉字区 包括
GBK/2:OXBOA1-F7FE, 收录 GB2312 汉字 6763 个,按原序排列;
GBK/3:OX8140-AOFE,收录 CJK 汉字 6080 个;
GBK/4:OXAA40-FEAO,收录 CJK 汉字和增补的汉字 8160 个。
图形符号区 包括
GBK/1:OXA1A1-A9FE,除 GB2312 的符号外,还增补了其它符号
GBK/5:OXA840-A9AO,扩除非汉字区。
用户自定义区
即 GBK 区域中的空白区,用户可以自己定义字符。
編碼
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。微 软公司自 Windows 95 简体中文版开始支持 GBK 代码,標準叫法是 Windows codepage 936,也叫做 GBK(國標擴展),它也是 8-bit 的變長編碼。據我所知 GBK 從來沒成爲過正式的國家標準,只不過因爲 Windows 的普及,它已經成爲事實上的標準了。但目前的多数搜索引擎都不能很好地支持 GBK 汉字。
由前电子部科技质量司和国家技术监督局标准化司于1995年12月颁布的指导性规范。(GBK的 K是“扩展”的汉语拼音第一个字母)
GBK作为非 UCS ( ISO/IEC 10646 ) 体系的代码页,适用于中文信息的处理、交换、存储、传输、显现、输入和输出。
GBK 与国家标准 GB 2312-80 信息处理交换码所对应的、事实上的内码标准兼容;同时,在字汇一级支持 ISO/IEC 10646-1 和GB 13000-1 的全部中日韩 (CJK) 汉字(20902字)。GBK除了包含GB2312-80 和GB12345-90中包括的全部非汉字符号外,还涵盖我国台湾地区中文标准交换码TCA-CNS 11643 -92 ( 与其对应的内码为Big5;以下用Big5泛指二者。) 中的绝大多数符号。
从Windows95中文版起,Windows NT 3.51, 4.0, Windows2000, Windows CE, Linux已经全面支持GBK,起到了从GB 2312向Unicode过渡的承上启下的重要作用。
GBK尽管在字汇一级支持CJK,是目前最大的Code Page ;它在体系结构、代码空间上,仍然是完全不同于ISO/IEC 10646 和Unicode的。BIG5
范围: 0xA140 - 0xF9FE, 0xA1A1 - 0xF9FEBig5是台湾的IIIT1984年发明的,CNS 11643-1992( Chinese National Standard)
是扩展版本,主要大家用的还是big5
每个字由两个字节组 成,其第一字节编码范围为0xA1~0xF9,第二字节编码范围为0×40~0×7E与0xA1~0xFE,总计收入13868个字 (包括5401个常用字、7652 个次常用字、7个扩充字、以及808个各式符号)GB18030:
GB18030-2000(GBK2K)在GBK的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。GBK2K从根本上解决了字位不够,字形不足的问题。它有几个特点:
它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。
编码是变长的,其二字节部分与GBK兼容;四字节部分是扩充的字形、字位,其编码范围是首字节0×81-0xfe、二字节0×30-0×39、三字节0×81-0xfe、四字节0×30-0×39。
它的推广是分阶段的,首先要求实现的是能够完全映射到Unicode3.0标准的所有字形。
它是国家标准,是强制性的。
补充:
中文信息编码标准,常用的是GB2312-1980,GB12345,GB13000(GBK),
以及最新标准GB18030。GB2312的汉字编码规则为:第一个字节的值在0xB0到0xF7之间,第
二个字节的值在0xA0到0xFE之间。GB12345和GB13000是对GB2312-1980的扩充,所有已经包含在GB2312
中的汉字编码不变,另外增加更多的码位。其编码规则大致为:第一
个字节的值在0×81到0xFE之间,第二个字节的值在0×40到0xFE之间。GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。
GB18030 编码是一二四字节变长编码。 一字节部分从 0×0~0×7F 与 ASCII
编码兼容。 二字节部分, 首字节从 0×81~0xFE, 尾字节从 0×40~0×7E 以及
0×80~0xFE, 与 GBK标准基本兼容。 四字节部分,
第一字节从 0×81~0xFE, 第二字节从 0×30~0×39, 第三和第四字节的范围和前
两个字节分别相同。 四字节部分覆盖了从 0×0080 开始, 除去二字节部分已经
覆盖的所有 Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到
了与 Unicode 标准一一对应,这一点与 UTF-8 编码类似。UTF_8字符集
UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化 为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节, 而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到 那样的UNICODE字符。
Hong Kong GCCS是香港政府为big5加的3049个字,(Government Chinese Character Set)
香港增补字符集(HKSCS)是后来的标准,包括了Big5和ISO10646的编码,所以HKSCS的big5
版是补充了GCCS的增强版,ISO10646是UCS(universal character set),ISO是政府组织
Unicode是电脑业界组织,不过UCS和Unicode的字库一样编码字数统计:
GB2312 6763个汉字
GB12345 6866个汉字
GBK 21003个汉字
GB18030 27000个汉字
Big5 13053个汉字
CNS11643 48,027个汉字 -
No Comments » charset chinese gb utf-8
-
Mar17
中北大学 North University of China
Posted in Life, Something, 635 views
-
中北大学
North University of China
简称:NUC山西省规划山西的硅谷(太原高科技信息产业园)所在地,山西第一个一级学科博士点,第一个国家级重点实验室,第一个国家发明奖,动态测控全国第一,世界一流,仪器排在清华、天津大学之后,兵器第三,电子山西第一,十一五投资十五个亿……种种排下来,能获此殊荣的只有一个,那就是中北大学(NUC)。
1941年,彭德怀老总在山西省省会太原市创建了中国军工第一所院校,为中国抗日和解放事业的人才培养做出了巨大贡献的“人民兵工第一校”。建国后,成为新中国国防部属8所本科院校之一,此时名为太原机械学院;1993年改名华北工学院,2004年正式更名为中北大学。
山西太原是全国重工业基地,山西煤炭产量全国第一、晋商全国闻名,又是我国李唐王朝的发祥地,文化积淀深厚。民国初期(阎锡山时期)高等教育全国有名,文革后逐步衰落。现在要重整昔日雄风,造就全国一流大学。踏实纯朴的中北人接下了这个重担。斜靠大山,腕挎汾河,国家一级文物窦大夫祠邻靠学府,太原第二大园林柏林园四季长青,杨柳依依,曲径山泉,这些都赋予了中北大学积极浓厚的求学和向上的品格,赋予中北人世代奋斗的优秀品质。经过几十年的发展,学校现有 2 个博士学位授权一级学科,18 个博士点,2 个博士后流动站;11 个硕士学位授权一级学科, 58个硕士点, 58 个本科专业。拥有1个国防科工委重点学科和 8 个省部级重点学科。拥有“电子测试技术”国防科技重点实验室、“仪器科学与动态测试”教育部重点实验室、“动态测试技术”国家重点实验室培育基地,还有先进制造技术、集成精密成型、传爆药研究开发及性能检测、无损检测技术等多个国家、省部级重点实验室和工程研究中心。
NUC的活力源于其人文精神是深深扎在中华民族脊梁之上的。它的活力就体现在一代代中北人的奋发图强,从我国兵器人才培养基地到航天人才贡献奖,再到神州飞船唯一的一次专场答谢,从航天突出贡献奖获得者到北京国防战线标兵的女工程师,从很早招收哈工大等名牌大学本科毕业的研究生到第一个国家国防重大基础研究973项目。
60多年的办学历史(很年轻的)和浓郁的文化积淀,学校以鲜明的人才培养特色为国家培养出各类优秀人才 7 万余名。“留得住、用得上、干得好”的中大毕业生一直深受兵器、航天、航空、部队和企事业等用人单位的欢。中国的陆海空装备,某战略导弹战斗部核心导引设备,高科技战车微风传感仪,导弹黑匣子,神舟飞船的遥感和测量,神州号宇宙飞船的安全保障,这其中都凝结了中北人的智慧和实力。“不偏为中,有容乃大”(中国工程院院士朵英贤校友寄语)。
NUC的历史:中北大学(NUC)是一所具有光荣历史的高等院校,她的前身是 1941 年八路军总司令部在太行抗日根据地创办的我党我军第一所兵工学校 —— 太行工业学校,历经抗日战争和解放战争的战斗洗礼,几经变迁,饱经沧桑。 2000 年学校六十周年校庆时,薄一波为学校慨然题词“人民兵工第一校”。
1949 年学校从北京迁入太原(现址),更名为华北兵工职业学校,后又冠名为华北兵工工业学校,太原机械制造工业学校, 1958 年升格为太原机械学院。后经国务院和中央军委批准, 1961 年北京工业学院(现北京理工大学) 4 个常规兵器专业(火炮、自动武器、弹药、引信)的教师、学生、实验设备、图书资料等全部迁入我校。 1962 年沈阳工学院两个常规兵器专业(火药、炸药)也相继迁入,使学校规模和整体办学水平得到了充实和提高。 1963 年我校划归国防科委直接领导,成为当时的国防工业 8 大本科院校之一。 1971 年归属到第五机械工业部,同年 7 月,奉本部军管会命令学校停办。 从1971到1982年,13年中,NUC不复存在.
1982年,学校重建,困难重重,可以说是不再是以前有相当规模和影响力的NUC,党的十一届三中全会以后,学校得到了迅速的发展和提高。 1993 年更名为华北工学院,隶属于兵器工业总公司。 1999 年,随着高校管理体制改革的推进,我校成为由国防科工委与山西省人民政府共建、以地方管理为主的高校,标志着我校进入了一个新的发展阶段。 2004 年 6 月,经教育部批准,学校更名为中北大学。
-
No Comments »
-
Mar15
Google Lab
Posted in View, 561 views
-
Google实验室有许多新奇的产品,当然,都还在试验阶段……
几个感兴趣的:
Google趋势
能查看某关键字在全世界的搜索分布状况Google MARS
来自NASA的火星地图...质量、速度都挺不错Code reserch
专门搜索开源代码 -
No Comments »
-
Mar15
Tao Te Ching
Posted in View, 512 views
-
The Way that can be experienced is not true;
The world that can be constructed is not true.
The Way manifests all that happens and may happen;
The world represents all that exists and may exist.
To experience without intention is to sense the world;
To experience with intention is to anticipate the world.
These two experiences are indistinguishable;
Their construction differs but their effect is the same;Beyond the gate of experience flows the Way,
Which is ever greater and more subtle than the world.深奥吧...
其实是E文版的《道德经》的第一章^^
中文都不太明白,英文更看不懂第一章是这么写的:
道 可 道 , 非 常 道 。 名 可 名 , 非 常 名 。
无 名 天 地 之 始 ﹔ 有 名 万 物 之 母 。
故 常 无 , 欲 以 观 其 妙 ﹔ 常 有 , 欲 以 观 其 徼 。
此 两 者 , 同 出 而 异 名 , 同 谓 之 玄 。玄 之 又 玄 , 众 妙 之 门 。
-
No Comments »
-
Mar14
-
一个比较大的应用,更新class的时候resin经常死掉,现在不得不在每次更新前停止resin服务,更新完了再开启。这个不是一个服务器应有的状态...太不稳定的。每次输入httpd stop的时候都很郁闷。
看到几个resin优化的信息,单机双JVM这个感觉有点意思,应该能解决现在的问题。先记录一下,白天测试。
1、-Xms/-Xmx参数
Resin启动时通过bin目录下的wrapper.pl文件进行控制,我们可以修改这个文件来加一些参数,比如要加入Java的-Xms和-Xmx参数
进行
vi /usr/local/resin-2.1/bin/wrapper.pl
找到并修改以下这行为:
$JAVA_ARGS="-Xms512m -Xmx512m";具体参数请根据自己的应用进行调节
2、单台Web Server+多个JVM
当有多台服务器时, 可以把负载均衡到一台Web Server和多个JVM上, 这比用路由器或防火墙实现负载平衡较为廉价,最主要的优点是采用Resin自己的负载平衡机制,可以保证使同一个session停留在同一台计算机上.
配置例子:
...
在各台机器上启动resin就可以了,Resin会对具体请求的Session进行编码,当同一个用户第二次请求时,会用同一台机器进行处理。
3、单机配置
单台机器上运行一个Web Server和两个JVM. 其中一个是主JVM, 另一个是备份JVM, 如果主JVM失效(服务中断或崩溃), 将启用后备JVM维持Servlet Engine仍然可用,在resin.conf中的相应配置例子如下:
...
启动时应该分别单独地启动这两个sun进程. 例如unix下:
linux> httpd.sh -pid srun1.pid -server a start
linux> httpd.sh -pid srun2.pid -server b start在NT下:
c:\resin1.2> bin/httpd -install-as ResinA -server a
c:\resin1.2> bin/httpd -install-as ResinB -server b但在启动后,只有6802接受处理请求,当6802的JVM失效时,Resin会自动将请求交给6803备份JVM处理。
4、集群
http://www.caucho.com/resin-3.0/config/tcp-sessions.xtp -
No Comments »
-
Mar13
Oracle分析函数参考手册
Posted in Database, 469 views
-
本文转载自xsb Oracle Blog
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。
除本文内容外,你还可参考:
ROLLUP与CUBE http://xsb.itpub.net/post/419/29159
分析函数使用例子介绍:http://xsb.itpub.net/post/419/44634本文如果未指明,缺省是在HR用户下运行例子。
开窗函数的的理解:
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
over(order by salary range between 50 preceding and 150 following)
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150
over(order by salary rows between 50 preceding and 150 following)
每行对应的数据窗口是之前50行,之后150行
over(order by salary rows between unbounded preceding and unbounded following)
每行对应的数据窗口是从第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)主要参考资料:《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章
AVG
功能描述:用于计算一个组和数据窗口内表达式的平均值。
SAMPLE:下面的例子中列c_mavg计算员工表中每个员工的平均薪水报告,该平均值由当前员工和与之具有相同经理的前一个和后一个三者的平均数得来;SELECT manager_id, last_name, hire_date, salary,
AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavg
FROM employees;MANAGER_ID LAST_NAME HIRE_DATE SALARY C_MAVG
---------- ------------------------- --------- ---------- ----------
100 Kochhar 21-SEP-89 17000 17000
100 De Haan 13-JAN-93 17000 15000
100 Raphaely 07-DEC-94 11000 11966.6667
100 Kaufling 01-MAY-95 7900 10633.3333
100 Hartstein 17-FEB-96 13000 9633.33333
100 Weiss 18-JUL-96 8000 11666.6667
100 Russell 01-OCT-96 14000 11833.3333CORR
功能描述:返回一对表达式的相关系数,它是如下的缩写:
COVAR_POP(expr1,expr2)/STDDEV_POP(expr1)*STDDEV_POP(expr2))
从统计上讲,相关性是变量之间关联的强度,变量之间的关联意味着在某种程度
上一个变量的值可由其它的值进行预测。通过返回一个-1~1之间的一个数, 相关
系数给出了关联的强度,0表示不相关。
SAMPLE:下例返回1998年月销售收入和月单位销售的关系的累积系数(本例在SH用户下运行)SELECT t.calendar_month_number,
CORR (SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.calendar_month_number) as CUM_CORR
FROM sales s, times t
WHERE s.time_id = t.time_id AND calendar_year = 1998
GROUP BY t.calendar_month_number
ORDER BY t.calendar_month_number;CALENDAR_MONTH_NUMBER CUM_CORR
--------------------- ----------
1
2 1
3 .994309382
4 .852040875
5 .846652204
6 .871250628
7 .910029803
8 .917556399
9 .920154356
10 .86720251
11 .844864765
12 .903542662COVAR_POP
功能描述:返回一对表达式的总体协方差。
SAMPLE:下例CUM_COVP返回定价和最小产品价格的累积总体协方差SELECT product_id, supplier_id,
COVAR_POP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVP,
COVAR_SAMP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVS
FROM product_information p
WHERE category_id = 29
ORDER BY product_id, supplier_id;PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS
---------- ----------- ---------- ----------
1774 103088 0
1775 103087 1473.25 2946.5
1794 103096 1702.77778 2554.16667
1825 103093 1926.25 2568.33333
2004 103086 1591.4 1989.25
2005 103086 1512.5 1815
2416 103088 1475.97959 1721.97619.
.COVAR_SAMP
功能描述:返回一对表达式的样本协方差
SAMPLE:下例CUM_COVS返回定价和最小产品价格的累积样本协方差SELECT product_id, supplier_id,
COVAR_POP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVP,
COVAR_SAMP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id) AS CUM_COVS
FROM product_information p
WHERE category_id = 29
ORDER BY product_id, supplier_id;PRODUCT_ID SUPPLIER_ID CUM_COVP CUM_COVS
---------- ----------- ---------- ----------
1774 103088 0
1775 103087 1473.25 2946.5
1794 103096 1702.77778 2554.16667
1825 103093 1926.25 2568.33333
2004 103086 1591.4 1989.25
2005 103086 1512.5 1815
2416 103088 1475.97959 1721.97619.
.COUNT
功能描述:对一组内发生的事情进行累积计数,如果指定*或一些非空常数,count将对所有行计数,如果指定一个表达式,count返回表达式非空赋值的计数,当有相同值出现时,这些相等的值都会被纳入被计算的值;可以使用DISTINCT来记录去掉一组中完全相同的数据后出现的行数。
SAMPLE:下面例子中计算每个员工在按薪水排序中当前行附近薪水在[n-50,n+150]之间的行数,n表示当前行的薪水
例如,Philtanker的薪水2200,排在他之前的行中薪水大于等于2200-50的有1行,排在他之后的行中薪水小于等于2200+150的行没有,所以count计数值cnt3为2(包括自己当前行);cnt2值相当于小于等于当前行的SALARY值的所有行数SELECT last_name, salary, COUNT(*) OVER () AS cnt1,
COUNT(*) OVER (ORDER BY salary) AS cnt2,
COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING
AND 150 FOLLOWING) AS cnt3 FROM employees;LAST_NAME SALARY CNT1 CNT2 CNT3
------------------------- ---------- ---------- ---------- ----------
Olson 2100 107 1 3
Markle 2200 107 3 2
Philtanker 2200 107 3 2
Landry 2400 107 5 8
Gee 2400 107 5 8
Colmenares 2500 107 11 10
Patel 2500 107 11 10.
.CUME_DIST
功能描述:计算一行在组中的相对位置,CUME_DIST总是返回大于0、小于或等于1的数,该数表示该行在N行中的位置。例如,在一个3行的组中,返回的累计分布值为1/3、2/3、3/3
SAMPLE:下例中计算每个工种的员工按薪水排序依次累积出现的分布百分比SELECT job_id, last_name, salary, CUME_DIST()
OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist
FROM employees WHERE job_id LIKE 'PU%';JOB_ID LAST_NAME SALARY CUME_DIST
---------- ------------------------- ---------- ----------
PU_CLERK Colmenares 2500 .2
PU_CLERK Himuro 2600 .4
PU_CLERK Tobias 2800 .6
PU_CLERK Baida 2900 .8
PU_CLERK Khoo 3100 1
PU_MAN Raphaely 11000 1DENSE_RANK
功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。密集的序列返回的时没有间隔的数
SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与RANK函数的区别)SELECT d.department_id , e.last_name, e.salary, DENSE_RANK()
OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.department_id IN ('60', '90');DEPARTMENT_ID LAST_NAME SALARY DRANK
------------- ------------------------- ---------- ----------
60 Lorentz 4200 1
60 Austin 4800 2
60 Pataballa 4800 2
60 Ernst 6000 3
60 Hunold 9000 4
90 Kochhar 17000 1
90 De Haan 17000 1
90 King 24000 2FIRST
功能描述:从DENSE_RANK返回的集合中取出排在最前面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录
SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
WHERE department_id in (20,80)
ORDER BY department_id, salary;LAST_NAME DEPARTMENT_ID SALARY Worst Best
------------------------- ------------- ---------- ---------- ----------
Fay 20 6000 6000 13000
Hartstein 20 13000 6000 13000
Kumar 80 6100 6100 14000
Banda 80 6200 6100 14000
Johnson 80 6200 6100 14000
Ande 80 6400 6100 14000
Lee 80 6800 6100 14000
Tuvault 80 7000 6100 14000
Sewall 80 7000 6100 14000
Marvins 80 7200 6100 14000
Bates 80 7300 6100 14000.
.
.FIRST_VALUE
功能描述:返回组中数据窗口的第一个值。
SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的第一个值对应的名字,如果薪水的第一个值有多个,则从多个对应的名字中取缺省排序的第一个名字SELECT department_id, last_name, salary, FIRST_VALUE(last_name)
OVER (PARTITION BY department_id ORDER BY salary ASC ) AS lowest_sal
FROM employees
WHERE department_id in(20,30);DEPARTMENT_ID LAST_NAME SALARY LOWEST_SAL
------------- ------------------------- ---------- --------------
20 Fay 6000 Fay
20 Hartstein 13000 Fay
30 Colmenares 2500 Colmenares
30 Himuro 2600 Colmenares
30 Tobias 2800 Colmenares
30 Baida 2900 Colmenares
30 Khoo 3100 Colmenares
30 Raphaely 11000 ColmenaresLAG
功能描述:可以访问结果集中的其它行而不用进行自连接。它允许去处理游标,就好像游标是一个数组一样。在给定组中可参考当前行之前的行,这样就可以从组中与当前行一起选择以前的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行),其相反的函数是LEAD
SAMPLE:下面的例子中列prev_sal返回按hire_date排序的前1行的salary值SELECT last_name, hire_date, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK';LAST_NAME HIRE_DATE SALARY PREV_SAL
------------------------- ---------- ---------- ----------
Khoo 18-5月 -95 3100 0
Tobias 24-7月 -97 2800 3100
Baida 24-12月-97 2900 2800
Himuro 15-11月-98 2600 2900
Colmenares 10-8月 -99 2500 2600LAST
功能描述:从DENSE_RANK返回的集合中取出排在最后面的一个值的行(可能多行,因为值可能相等),因此完整的语法需要在开始处加上一个集合函数以从中取出记录
SAMPLE:下面例子中DENSE_RANK按部门分区,再按佣金commission_pct排序,FIRST取出佣金最低的对应的所有行,然后前面的MAX函数从这个集合中取出薪水最低的值;LAST取出佣金最高的对应的所有行,然后前面的MIN函数从这个集合中取出薪水最高的值SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
WHERE department_id in (20,80)
ORDER BY department_id, salary;LAST_NAME DEPARTMENT_ID SALARY Worst Best
------------------------- ------------- ---------- ---------- ----------
Fay 20 6000 6000 13000
Hartstein 20 13000 6000 13000
Kumar 80 6100 6100 14000
Banda 80 6200 6100 14000
Johnson 80 6200 6100 14000
Ande 80 6400 6100 14000
Lee 80 6800 6100 14000
Tuvault 80 7000 6100 14000
Sewall 80 7000 6100 14000
Marvins 80 7200 6100 14000
Bates 80 7300 6100 14000.
LAST_VALUE
功能描述:返回组中数据窗口的最后一个值。
SAMPLE:下面例子计算按部门分区按薪水排序的数据窗口的最后一个值对应的名字,如果薪水的最后一个值有多个,则从多个对应的名字中取缺省排序的最后一个名字SELECT department_id, last_name, salary, LAST_VALUE(last_name)
OVER(PARTITION BY department_id ORDER BY salary) AS highest_sal
FROM employees
WHERE department_id in(20,30);DEPARTMENT_ID LAST_NAME SALARY HIGHEST_SAL
------------- ------------------------- ---------- ------------
20 Fay 6000 Fay
20 Hartstein 13000 Hartstein
30 Colmenares 2500 Colmenares
30 Himuro 2600 Himuro
30 Tobias 2800 Tobias
30 Baida 2900 Baida
30 Khoo 3100 Khoo
30 Raphaely 11000 RaphaelyLEAD
功能描述:LEAD与LAG相反,LEAD可以访问组中当前行之后的行。Offset是一个正整数,其默认值为1,若索引超出窗口的范围,就返回默认值(默认返回的是组中第一行)
SAMPLE:下面的例子中每行的"NextHired"返回按hire_date排序的下一行的hire_date值SELECT last_name, hire_date,
LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired"
FROM employees WHERE department_id = 30;LAST_NAME HIRE_DATE NextHired
------------------------- --------- ---------
Raphaely 07-DEC-94 18-MAY-95
Khoo 18-MAY-95 24-JUL-97
Tobias 24-JUL-97 24-DEC-97
Baida 24-DEC-97 15-NOV-98
Himuro 15-NOV-98 10-AUG-99
Colmenares 10-AUG-99MAX
功能描述:在一个组中的数据窗口中查找表达式的最大值。
SAMPLE:下面例子中dept_max返回当前行所在部门的最大薪水值SELECT department_id, last_name, salary,
MAX(salary) OVER (PARTITION BY department_id) AS dept_max
FROM employees WHERE department_id in (10,20,30);DEPARTMENT_ID LAST_NAME SALARY DEPT_MAX
------------- ------------------------- ---------- ----------
10 Whalen 4400 4400
20 Hartstein 13000 13000
20 Fay 6000 13000
30 Raphaely 11000 11000
30 Khoo 3100 11000
30 Baida 2900 11000
30 Tobias 2800 11000
30 Himuro 2600 11000
30 Colmenares 2500 11000MIN
功能描述:在一个组中的数据窗口中查找表达式的最小值。
SAMPLE:下面例子中dept_min返回当前行所在部门的最小薪水值SELECT department_id, last_name, salary,
MIN(salary) OVER (PARTITION BY department_id) AS dept_min
FROM employees WHERE department_id in (10,20,30);DEPARTMENT_ID LAST_NAME SALARY DEPT_MIN
------------- ------------------------- ---------- ----------
10 Whalen 4400 4400
20 Hartstein 13000 6000
20 Fay 6000 6000
30 Raphaely 11000 2500
30 Khoo 3100 2500
30 Baida 2900 2500
30 Tobias 2800 2500
30 Himuro 2600 2500
30 Colmenares 2500 2500NTILE
功能描述:将一个组分为"表达式"的散列表示,例如,如果表达式=4,则给组中的每一行分配一个数(从1到4),如果组中有20行,则给前5行分配1,给下5行分配2等等。如果组的基数不能由表达式值平均分开,则对这些行进行分配时,组中就没有任何percentile的行数比其它percentile的行数超过一行,最低的percentile是那些拥有额外行的percentile。例如,若表达式=4,行数=21,则percentile=1的有5行,percentile=2的有5行等等。
SAMPLE:下例中把6行数据分为4份SELECT last_name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM employees
WHERE department_id = 100;LAST_NAME SALARY QUARTILE
------------------------- ---------- ----------
Greenberg 12000 1
Faviet 9000 1
Chen 8200 2
Urman 7800 2
Sciarra 7700 3
Popp 6900 4PERCENT_RANK
功能描述:和CUME_DIST(累积分配)函数类似,对于一个组中给定的行来说,在计算那行的序号时,先减1,然后除以n-1(n为组中所有的行数)。该函数总是返回0~1(包括1)之间的数。
SAMPLE:下例中如果Khoo的salary为2900,则pr值为0.6,因为RANK函数对于等值的返回序列值是一样的SELECT department_id, last_name, salary,
PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary) AS pr
FROM employees
WHERE department_id < 50
ORDER BY department_id,salary;DEPARTMENT_ID LAST_NAME SALARY PR
------------- ------------------------- ---------- ----------
10 Whalen 4400 0
20 Fay 6000 0
20 Hartstein 13000 1
30 Colmenares 2500 0
30 Himuro 2600 0.2
30 Tobias 2800 0.4
30 Baida 2900 0.6
30 Khoo 3100 0.8
30 Raphaely 11000 1
40 Mavris 6500 0PERCENTILE_CONT
功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数PERCENT_RANK,如果没有正好对应的数据值,就通过下面算法来得到值:
RN = 1+ (P*(N-1)) 其中P是输入的分布百分比值,N是组内的行数
CRN = CEIL(RN) FRN = FLOOR(RN)
if (CRN = FRN = RN) then
(value of expression from row at RN)
else
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)
注意:本函数与PERCENTILE_DISC的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:在下例中,对于部门60的Percentile_Cont值计算如下:
P=0.7 N=5 RN =1+ (P*(N-1)=1+(0.7*(5-1))=3.8 CRN = CEIL(3.8)=4
FRN = FLOOR(3.8)=3
(4 - 3.8)* 4800 + (3.8 - 3) * 6000 = 5760SELECT last_name, salary, department_id,
PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY salary)
OVER (PARTITION BY department_id) "Percentile_Cont",
PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary) "Percent_Rank"
FROM employees WHERE department_id IN (30, 60);LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Colmenares 2500 30 3000 0
Himuro 2600 30 3000 0.2
Tobias 2800 30 3000 0.4
Baida 2900 30 3000 0.6
Khoo 3100 30 3000 0.8
Raphaely 11000 30 3000 1
Lorentz 4200 60 5760 0
Austin 4800 60 5760 0.25
Pataballa 4800 60 5760 0.25
Ernst 6000 60 5760 0.75
Hunold 9000 60 5760 1PERCENTILE_DISC
功能描述:返回一个与输入的分布百分比值相对应的数据值,分布百分比的计算方法见函数CUME_DIST,如果没有正好对应的数据值,就取大于该分布值的下一个值。
注意:本函数与PERCENTILE_CONT的区别在找不到对应的分布值时返回的替代值的计算方法不同SAMPLE:下例中0.7的分布值在部门30中没有对应的Cume_Dist值,所以就取下一个分布值0.83333333所对应的SALARY来替代
SELECT last_name, salary, department_id,
PERCENTILE_DISC(0.7) WITHIN GROUP (ORDER BY salary )
OVER (PARTITION BY department_id) "Percentile_Disc",
CUME_DIST() OVER (PARTITION BY department_id ORDER BY salary) "Cume_Dist"
FROM employees
WHERE department_id in (30, 60);LAST_NAME SALARY DEPARTMENT_ID Percentile_Disc Cume_Dist
------------------------- ---------- ------------- --------------- ----------
Colmenares 2500 30 3100 .166666667
Himuro 2600 30 3100 .333333333
Tobias 2800 30 3100 .5
Baida 2900 30 3100 .666666667
Khoo 3100 30 3100 .833333333
Raphaely 11000 30 3100 1
Lorentz 4200 60 6000 .2
Austin 4800 60 6000 .6
Pataballa 4800 60 6000 .6
Ernst 6000 60 6000 .8
Hunold 9000 60 6000 1RANK
功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。
SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)SELECT d.department_id , e.last_name, e.salary, RANK()
OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.department_id IN ('60', '90');DEPARTMENT_ID LAST_NAME SALARY DRANK
------------- ------------------------- ---------- ----------
60 Lorentz 4200 1
60 Austin 4800 2
60 Pataballa 4800 2
60 Ernst 6000 4
60 Hunold 9000 5
90 Kochhar 17000 1
90 De Haan 17000 1
90 King 24000 3RATIO_TO_REPORT
功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。
SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
FROM employees
WHERE job_id = 'PU_CLERK';LAST_NAME SALARY RR
------------------------- ---------- ----------
Khoo 3100 .223021583
Baida 2900 .208633094
Tobias 2800 .201438849
Himuro 2600 .18705036
Colmenares 2500 .179856115REGR_ (Linear Regression) Functions
功能描述:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用。
REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2)
REGR_INTERCEPT:返回回归线的y截距,等于
AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)
REGR_COUNT:返回用于填充回归线的非空数字对的数目
REGR_R2:返回回归线的决定系数,计算式为:
If VAR_POP(expr2) = 0 then return NULL
If VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1
If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 then
return POWER(CORR(expr1,expr),2)
REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)
REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)
REGR_SXX: 返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)
REGR_SYY: 返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)
REGR_SXY: 返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)(下面的例子都是在SH用户下完成的)
SAMPLE 1:下例计算1998年最后三个星期中两种产品(260和270)在周末的销售量中已开发票数量和总数量的累积斜率和回归线的截距SELECT t.fiscal_month_number "Month", t.day_number_in_month "Day",
REGR_SLOPE(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_SLOPE,
REGR_INTERCEPT(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month) AS CUM_ICPT
FROM sales s, times t
WHERE s.time_id = t.time_id
AND s.prod_id IN (270, 260)
AND t.fiscal_year=1998
AND t.fiscal_week_number IN (50, 51, 52)
AND t.day_number_in_week IN (6,7)
ORDER BY t.fiscal_month_desc, t.day_number_in_month;Month Day CUM_SLOPE CUM_ICPT
---------- ---------- ---------- ----------
12 12 -68 1872
12 12 -68 1872
12 13 -20.244898 1254.36735
12 13 -20.244898 1254.36735
12 19 -18.826087 1287
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 20 62.4561404 125.28655
12 26 67.2658228 58.9712313
12 26 67.2658228 58.9712313
12 27 37.5245541 284.958221
12 27 37.5245541 284.958221
12 27 37.5245541 284.958221SAMPLE 2:下例计算1998年4月每天的累积交易数量
SELECT UNIQUE t.day_number_in_month,
REGR_COUNT(s.amount_sold, s.quantity_sold)
OVER (PARTITION BY t.fiscal_month_number ORDER BY t.day_number_in_month)
"Regr_Count"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.fiscal_year = 1998 AND t.fiscal_month_number = 4;DAY_NUMBER_IN_MONTH Regr_Count
------------------- ----------
1 825
2 1650
3 2475
4 3300
.
.
.
26 21450
30 22200SAMPLE 3:下例计算1998年每月销售量中已开发票数量和总数量的累积回归线决定系数
SELECT t.fiscal_month_number,
REGR_R2(SUM(s.amount_sold), SUM(s.quantity_sold))
OVER (ORDER BY t.fiscal_month_number) "Regr_R2"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.fiscal_year = 1998
GROUP BY t.fiscal_month_number
ORDER BY t.fiscal_month_number;FISCAL_MONTH_NUMBER Regr_R2
------------------- ----------
1
2 1
3 .927372984
4 .807019972
5 .932745567
6 .94682861
7 .965342011
8 .955768075
9 .959542618
10 .938618575
11 .880931415
12 .882769189SAMPLE 4:下例计算1998年12月最后两周产品260的销售量中已开发票数量和总数量的累积平均值
SELECT t.day_number_in_month,
REGR_AVGY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
"Regr_AvgY",
REGR_AVGX(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_month_desc, t.day_number_in_month)
"Regr_AvgX"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND s.prod_id = 260
AND t.fiscal_month_desc = '1998-12'
AND t.fiscal_week_number IN (51, 52)
ORDER BY t.day_number_in_month;DAY_NUMBER_IN_MONTH Regr_AvgY Regr_AvgX
------------------- ---------- ----------
14 882 24.5
14 882 24.5
15 801 22.25
15 801 22.25
16 777.6 21.6
18 642.857143 17.8571429
18 642.857143 17.8571429
20 589.5 16.375
21 544 15.1111111
22 592.363636 16.4545455
22 592.363636 16.4545455
24 553.846154 15.3846154
24 553.846154 15.3846154
26 522 14.5
27 578.4 16.0666667SAMPLE 5:下例计算产品260和270在1998年2月周末销售量中已开发票数量和总数量的累积REGR_SXY, REGR_SXX, and REGR_SYY统计值
SELECT t.day_number_in_month,
REGR_SXY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxy",
REGR_SYY(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_syy",
REGR_SXX(s.amount_sold, s.quantity_sold)
OVER (ORDER BY t.fiscal_year, t.fiscal_month_desc) "Regr_sxx"
FROM sales s, times t
WHERE s.time_id = t.time_id
AND prod_id IN (270, 260)
AND t.fiscal_month_desc = '1998-02'
AND t.day_number_in_week IN (6,7)
ORDER BY t.day_number_in_month;DAY_NUMBER_IN_MONTH Regr_sxy Regr_syy Regr_sxx
------------------- ---------- ---------- ----------
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
1 18870.4 2116198.4 258.4
7 18870.4 2116198.4 258.4
8 18870.4 2116198.4 258.4
14 18870.4 2116198.4 258.4
15 18870.4 2116198.4 258.4
21 18870.4 2116198.4 258.4
22 18870.4 2116198.4 258.4ROW_NUMBER
功能描述:返回有序组中一行的偏移量,从而可用于按特定标准排序的行号。
SAMPLE:下例返回每个员工再在每个部门中按员工号排序后的顺序号SELECT department_id, last_name, employee_id, ROW_NUMBER()
OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
FROM employees
WHERE department_id < 50;DEPARTMENT_ID LAST_NAME EMPLOYEE_ID EMP_ID
------------- ------------------------- ----------- ----------
10 Whalen 200 1
20 Hartstein 201 1
20 Fay 202 2
30 Raphaely 114 1
30 Khoo 115 2
30 Baida 116 3
30 Tobias 117 4
30 Himuro 118 5
30 Colmenares 119 6
40 Mavris 203 1STDDEV
功能描述:计算当前行关于组的标准偏离。(Standard Deviation)
SAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积标准偏离SELECT last_name, hire_date,salary,
STDDEV(salary) OVER (ORDER BY hire_date) "StdDev"
FROM employees
WHERE department_id = 30;LAST_NAME HIRE_DATE SALARY StdDev
------------------------- ---------- ---------- ----------
Raphaely 07-12月-94 11000 0
Khoo 18-5月 -95 3100 5586.14357
Tobias 24-7月 -97 2800 4650.0896
Baida 24-12月-97 2900 4035.26125
Himuro 15-11月-98 2600 3649.2465
Colmenares 10-8月 -99 2500 3362.58829STDDEV_POP
功能描述:该函数计算总体标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(Standard Deviation-Population)
SAMPLE:下例返回部门20、30、60的薪水值的总体标准偏差SELECT department_id, last_name, salary,
STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_std
FROM employees
WHERE department_id in (20,30,60);DEPARTMENT_ID LAST_NAME SALARY POP_STD
------------- ------------------------- ---------- ----------
20 Hartstein 13000 3500
20 Fay 6000 3500
30 Raphaely 11000 3069.6091
30 Khoo 3100 3069.6091
30 Baida 2900 3069.6091
30 Colmenares 2500 3069.6091
30 Himuro 2600 3069.6091
30 Tobias 2800 3069.6091
60 Hunold 9000 1722.32401
60 Ernst 6000 1722.32401
60 Austin 4800 1722.32401
60 Pataballa 4800 1722.32401
60 Lorentz 4200 1722.32401STDDEV_SAMP
功能描述: 该函数计算累积样本标准偏离,并返回总体变量的平方根,其返回值与VAR_POP函数的平方根相同。(Standard Deviation-Sample)
SAMPLE:下例返回部门20、30、60的薪水值的样本标准偏差SELECT department_id, last_name, hire_date, salary,
STDDEV_SAMP(salary) OVER
(PARTITION BY department_id ORDER BY hire_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev
FROM employees
WHERE department_id in (20,30,60);DEPARTMENT_ID LAST_NAME HIRE_DATE SALARY CUM_SDEV
------------- ------------------------- ---------- ---------- ----------
20 Hartstein 17-2月 -96 13000
20 Fay 17-8月 -97 6000 4949.74747
30 Raphaely 07-12月-94 11000
30 Khoo 18-5月 -95 3100 5586.14357
30 Tobias 24-7月 -97 2800 4650.0896
30 Baida 24-12月-97 2900 4035.26125
30 Himuro 15-11月-98 2600 3649.2465
30 Colmenares 10-8月 -99 2500 3362.58829
60 Hunold 03-1月 -90 9000
60 Ernst 21-5月 -91 6000 2121.32034
60 Austin 25-6月 -97 4800 2163.33077
60 Pataballa 05-2月 -98 4800 1982.42276
60 Lorentz 07-2月 -99 4200 1925.61678SUM
功能描述:该函数计算组中表达式的累积和。
SAMPLE:下例计算同一经理下员工的薪水累积值SELECT manager_id, last_name, salary,
SUM (salary) OVER (PARTITION BY manager_id ORDER BY salary
RANGE UNBOUNDED PRECEDING) l_csum
FROM employees
WHERE manager_id in (101,103,108);MANAGER_ID LAST_NAME SALARY L_CSUM
---------- ------------------------- ---------- ----------
101 Whalen 4400 4400
101 Mavris 6500 10900
101 Baer 10000 20900
101 Greenberg 12000 44900
101 Higgins 12000 44900
103 Lorentz 4200 4200
103 Austin 4800 13800
103 Pataballa 4800 13800
103 Ernst 6000 19800
108 Popp 6900 6900
108 Sciarra 7700 14600
108 Urman 7800 22400
108 Chen 8200 30600
108 Faviet 9000 39600VAR_POP
功能描述:(Variance Population)该函数返回非空集合的总体变量(忽略null),VAR_POP进行如下计算:
(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)
SAMPLE:下例计算1998年每月销售的累积总体和样本变量(本例在SH用户下运行)SELECT t.calendar_month_desc,
VAR_POP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
VAR_SAMP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Samp"
FROM sales s, times t
WHERE s.time_id = t.time_id AND t.calendar_year = 1998
GROUP BY t.calendar_month_desc;CALENDAR Var_Pop Var_Samp
-------- ---------- ----------
1998-01 0
1998-02 6.1321E+11 1.2264E+12
1998-03 4.7058E+11 7.0587E+11
1998-04 4.6929E+11 6.2572E+11
1998-05 1.5524E+12 1.9405E+12
1998-06 2.3711E+12 2.8453E+12
1998-07 3.7464E+12 4.3708E+12
1998-08 3.7852E+12 4.3260E+12
1998-09 3.5753E+12 4.0222E+12
1998-10 3.4343E+12 3.8159E+12
1998-11 3.4245E+12 3.7669E+12
1998-12 4.8937E+12 5.3386E+12VAR_SAMP
功能描述:(Variance Sample)该函数返回非空集合的样本变量(忽略null),VAR_POP进行如下计算:
(SUM(expr*expr)-SUM(expr)*SUM(expr)/COUNT(expr))/(COUNT(expr)-1)
SAMPLE:下例计算1998年每月销售的累积总体和样本变量SELECT t.calendar_month_desc,
VAR_POP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
VAR_SAMP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Samp"
FROM sales s, times t
WHERE s.time_id = t.time_id AND t.calendar_year = 1998
GROUP BY t.calendar_month_desc;CALENDAR Var_Pop Var_Samp
-------- ---------- ----------
1998-01 0
1998-02 6.1321E+11 1.2264E+12
1998-03 4.7058E+11 7.0587E+11
1998-04 4.6929E+11 6.2572E+11
1998-05 1.5524E+12 1.9405E+12
1998-06 2.3711E+12 2.8453E+12
1998-07 3.7464E+12 4.3708E+12
1998-08 3.7852E+12 4.3260E+12
1998-09 3.5753E+12 4.0222E+12
1998-10 3.4343E+12 3.8159E+12
1998-11 3.4245E+12 3.7669E+12
1998-12 4.8937E+12 5.3386E+12VARIANCE
功能描述:该函数返回表达式的变量,Oracle计算该变量如下:
如果表达式中行数为1,则返回0
如果表达式中行数大于1,则返回VAR_SAMP
SAMPLE:下例返回部门30按雇佣日期排序的薪水值的累积变化SELECT last_name, salary, VARIANCE(salary)
OVER (ORDER BY hire_date) "Variance"
FROM employees
WHERE department_id = 30;LAST_NAME SALARY Variance
------------------------- ---------- ----------
Raphaely 11000 0
Khoo 3100 31205000
Tobias 2800 21623333.3
Baida 2900 16283333.3
Himuro 2600 13317000
Colmenares 2500 11307000=====================================
连续求和问题:select name,sum(cnt) over(order by rownum) from t1;
-
No Comments »
-
Mar12
RHAS4安装NTFS文件系统
Posted in Linux, 585 views
-
在用过了Redhat的高级服务器版本后,越来越喜欢这个发行版了。
对于我这样linux和XP双系统的用户来说,一个必须要解决的问题就是:RHAS不支持ntfs文件系统。对此,只能以用三方软件来解决:使用linux-ntfs.org提供的ntfs模块。因为涉及到内核,所以与通常的linux软件安装略有不同。官方安装文档是最重要和最有效的参考,其实如果能够看明白linux-ntfs.org的Instructions文档,完全可以忽略本文。因为本文就是以Instructions为基础整理的。
1、获取正确的RPM
在左侧栏 RedHat and Fedora 段中,选择Help and Information---Instructions
在Instructions的WhichRPM段落中,找到 'whichrpm' script.在本地以'whichrpm' script的内容建立脚本文件
如#vi whichrpm
赋予脚本可执行权限
#chmod 700 whichrpm
执行 'whichrpm'脚本
#./whichrpm
脚本将分析你的linux系统内核,并给出一个相应内核的kernel-ntfs RPM包下载连接。比如我的系统给出了如下信息
Web Page: http://www.linux-ntfs.org/content/view/135/71/
Version: 2.6.9-11.EL
Section: Single Processor
Arch: i686打开连接下载指定的RPM
根据脚本给出的信息,我下载的是:kernel-module-ntfs-2.6.9-11.EL-2.1.20-0.rr.6.0.i686.rpm2、安装RPM
#rpm -ihv kernel-module-ntfs-2.6.9-11.EL-2.1.20-0.rr.6.0.i686.rpm
如果安装中发现任何问题,查询Help Section文档,后续步骤出现的问题也需要查看Help Section.
载入kernel─ntfs模块:
#/sbin/modprobe ntfs
查看ntfs信息
#dmesg | grep NTFS
NTFS driver v1.1.22 [Flags: R/O MODULE]
#cat /proc/filesystems
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev tmpfs
nodev shm
nodev pipefs
ext3
ext2
nodev ramfs
nodev devpts
ntfs至此,NTFS文件系统已经添加成功
3、挂载NTFS分区
#mkdir /media/library
#mount /dev/hda6 /media/library/ -t ntfs -r -o umask=0222对应的fstab字段
/dev/hda6 /media/library ntfs ro,umask=0222 0 0
-
No Comments »

Comments