15 Minutes of Fame

豆瓣上看到一个怪怪的词”15分钟名组”,找了一下,原来是有来历的.

英语有话叫”15 minutes of fame”. 意思是每个人都有机会出名,但往往名气片刻即逝。

查找一下,在英文 Wikipedia 上是这么解释的:

In popular culture, 15 minutes of fame refers to a sudden state of celebrity that is believed unlikely to continue long enough to affect the new celebrity’s life.

我倒是感觉汉语中有一句话和这个英文词很有几分神似,那就是”马粪蛋也有发烧的时候” :)
豆瓣推这个功能取代原来的”最受欢迎的N个小组”的目的很明显:去中心化. 的确要承认,这是一个不错的解决”中心化”的办法.
相对来说,对于一些个人 Blogger , 搜索引擎还是能够经常给我们 15 Minutes of Fame 一下的, 比如 最近就有很多人通过一个关键字”个人总结“而访问到我.当然有的时候”名气”也会给你带来”负面效应”,如果是软件下载或者图片被恶意链接, 浏览一旦多起来,和DDos 差不多.

继续阅读

版权,Web 标准,BSP与其他

前一段时间,收到蓝色理想网站编辑的来信,问可否转载我写的内容.我的回答是:只要遵守了我首页声明的创作共用的版权声明,转载是没问题的.我最近写过赛迪网涉嫌抄袭我的 Blog ,最近好多 Blogger 都在抨击一些不注意版权的网站(包括AnySQL,eygle,罗胖子),说起来都是咬牙切齿,义愤填膺,可见 Blog 反侵权,任重道远.而蓝色理想的编辑的负责态度,相比之下难能可贵.

最近手疼, 对站点的大的改动不多,小的修改不少. 首页现在基本上是符合 Web 标准了. 但还有很多我不满意的地方.在阅读过 Designing with Web Standards , 发现这本书也有对中文页面没说透的地方,比如字体的选择, 似乎国内的设计者也很少对中文页面的字体作过多的讨论(一些 BSP 提供的模板,中文部分真是惨不忍睹).Blog 中, 开始有计划的减少”中文斜体”的使用, 下一步,准备对超链接作一下规范,尽量作有说明性的超链接. 而不是只简单的用”这里”,”查看点击这里”之类的字眼.所有的改动都是悄悄进行的, 恐怕只有非常细心的读者才会发现.

继续阅读

关于我的一个笑话

今年我闹出来的笑话不少, 上个礼拜加班, 熬了一夜, 就闹出了笑话. 我家的 Laura 在自己的 Blog 上写的,题目为 「DBA的生活」:

昨天,Fenng 加班一夜,晨归。
倒头则睡。
偶临走前对他说:我去上班啦。
他费了半天劲儿,说:”别忘了……数据库……归档……”
偶晕倒。

不如上学的时候能熬夜了, 我记得有一个五一长假, 总算有电脑可以临时用几天, 结果弄了六个通宵. 把自己搞的怪物一样, 特瘦, 不过精神头还够.

EOF

哦,开头日期写错了,这都 2006 年了,我还当 2005 年过呢. 说起 2005 年, 我最愚蠢的一个决定是错选了一款笔记本(巨大,特沉)作为工作电脑. 背来背去的累个半死. 动不动被同事笑. 我回答一律是: 可以防身.

Oracle XE 自带的数据库如何创建的?

简单的说了一下Oracle 10g XE 的字符集问题, 我们接下来看看 Oracle 10g XE 自带的数据库如何创建的.

老实说,最开始在 Windows 上安装 XE 的时候,步骤非常简单,还以为 Oracle 已经掩盖了全部细节呢,安装之后浏览一下相关目录就清晰多了.我把 XE 安装到 D: 盘,在 D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts 目录下有如下文件:

2006-01-24  20:47             1,783 cloneDBCreation.sql
2006-01-24  20:47               321 CloneRmanRestore.sql
2006-01-24  20:48             2,410 init.ora
2006-01-24  20:48             2,177 initXETemp.ora
2006-01-24  20:47               929 postDBCreation.sql
2006-01-24  20:47               780 postScripts.sql
2006-01-24  20:47             1,334 rmanRestoreDatafiles.sql
2006-01-24  20:47             1,424 XE.bat
2006-01-24  20:47               716 XE.sql

XE.bat 批处理文件完成如下事情:添加需要的操作系统用户; 创建相关目录存放 Oracle 数据文件;设定 Oracle 环境变量主要是 SID 名字;调用 Oradim 命令创建 XE 的实例; 然后调用 XE.sql 脚本.

XE.sql 脚本首先定义 XE 实例的用户需要用到的密码,然后用 orapwd.exe 创建密码文件, 这些步骤都和普通的 Oracle 创建实例的脚本非常相似.接下里就有意思了:XE.sql 调用 CloneRmanRestore.sql , CloneRmanRestore.sql 调用 rmanRestoreDatafiles.sql.

variable devicename varchar2(255);
declare
omfname varchar2(512) := NULL;
done boolean;
begin
dbms_output.put_line(' ');
dbms_output.put_line(' Allocating device.... ');
dbms_output.put_line(' Specifying datafiles... ');
:devicename := dbms_backup_restore.deviceAllocate;
dbms_output.put_line(' Specifing datafiles... ');
dbms_backup_restore.restoreSetDataFile;
dbms_backup_restore.restoreDataFileTo(1, 'D:\oraclexe\oradata\XE\system.dbf', 0, 'SYSTEM');
dbms_backup_restore.restoreDataFileTo(2, 'D:\oraclexe\oradata\XE\undo.dbf', 0, 'UNDOTBS1');
dbms_backup_restore.restoreDataFileTo(3, 'D:\oraclexe\\oradata\XE\sysaux.dbf', 0, 'SYSAUX');
dbms_backup_restore.restoreDataFileTo(4, 'D:\oraclexe\oradata\XE\users.dbf', 0, 'USERS');
dbms_output.put_line(' Restoring ... ');
dbms_backup_restore.restoreBackupPiece
('D:\oraclexe\app\oracle\product\10.2.0\server\config\seeddb\EXPRESS.dfb', done);
if done then
dbms_output.put_line(' Restore done.');
else
dbms_output.put_line(' ORA-XXXX: Restore failed ');
end if;
dbms_backup_restore.deviceDeallocate;
end;
/

非常有意思.XE 用的是非常规手段: dbms_backup_restore 过程.以前我曾经在 RMAN 备份,未使用catalog,控制文件丢失的解决办法 中作过介绍:

在 Oracle 816 以后的版本中,Oracle 提供了一个包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由 dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包. 是 Oracle服务器和操作系统之间 IO 操作的接口.由恢复管理器直接调用。

Oracle XE 直接用这个包从一个种子备份 ’D:\oraclexe\app\oracle\product\10.2.0\server\config\seeddb\EXPRESS.dfb’ 恢复需要的文件.注意到上面只有四个必要的表空间,Oracle 在发行说明中所说的空间限制就是从这个地方而来.至于能否超过 4g 的限制,我后面再分析.

接下来 XE.sql 调用 cloneDBCreation.sql,这个脚本的主要目的是为了创建一个可用的控制文件.
并利用dbms_backup_restore 的 zerodbid(0) 函数创建了一个新的 DBID .

然后

alter database "XE" open resetlogs;
alter database rename global_name to "XE";

并添加了一个临时表空间 Temp.

这个脚本执行之后,XE.sql 调用 postDBCreation.sql, 通过如下过程定义端口:

begin
dbms_xdb.sethttpport('8080');
dbms_xdb.setftpport('0');
end;
/

最后 XE.sql 调用 postScripts.sql ,主要是一些后续的操作,Patch 脚本什么的.

到此,数据库创建已经完成.也就是图形化安装的时候 1~5 的几个步骤省略的过程.其实没那么复杂.

如果是 Linux 版本,则这一堆脚本在 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/config/scripts 这个目录下.除了调用 oradim.exe 命令之外,其他差异不大.