« December 2005 | 首页

1 2 3 4 5 6 7 8 (Page 3 of 8)



| February 2006 »

January 24, 2006

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 命令之外,其他差异不大.

January 23, 2006

Oracle 10g XE 的字符集问题

有朋友问我关于 Oracle 10g XE 的字符集问题[比如这位]。这个问题首先要看 Oracle XE 的安装文档,当前的 XE 有有两种字符集之分:Western European 与 Universal 。

  • 西欧(Western European)  数据库用 WE8MSWIN1252 字符集创建,适合单字节的拉丁文,HTML DB 的界面是英文。当前的 Beta 版本都用的这个字符集。所以有的朋友在导入数据的时候会遇到问题。
  • Universal 创建数据库的字符集是 AL32UTF8 . HTML DB 可以是双字节文字,比如中文. 要在正式版才可以提供。

那么是不是当前测试版本的 XE 不支持中文存储 ? 其实不是的。参考这个XE NLS_LANG 注册表设定图示 把 字符集设定为 WE8MSWIN1252,或者是 在命令行设定 NLS_LANG 为 AMERICAN_AMERICA.WE8MSWIN1252, 还是可以输入中文并显示中文的。参考这个图. 而在 HTML DB 的界面下,可能显示乱码。需要把 IE 的语言首选项中的英文放到中文前面。

在试用过程中,你会发现 Oracle XE 做的的确非常简单易用,Windows 上安装只需要一路点击鼠标即可,Linux 上的安装也是简单的几步。而 HTML DB 的界面使得使用起来也友好了许多。但是,有利必有弊,你会发现,Oracle 在隐藏了很多细节内容之后,如果想定制这个数据库甚至无从下手。

我相信绝大多数用户都会这样的疑问:

  • Oracle XE 自带的数据库如何创建的?
  • 能否突破服务器CPU 个数和 4G 数据的限制?
  • 如何创建新的 Database ?
  • 字符集的问题是如何产生的?


且听下回分解......

January 22, 2006

本周言论 之 等我们的产品成熟起来时我才用

搜狐把博客做起来时我才用,一般我是等我们的产品成熟起来时才用。
--张朝阳 [来源]

评价一个东西好不好,最好仔细的用过,明白了,才好评论。如果看了一眼,甚至只是看了一眼别人的评论就去发表反对意见,很不合适。
--霍炬(virushuo)针对网友对爱搞搞Blog 工具的众说纷纭

我最开始做这个东西(Discuz!)就是为了找工作,首先这个软件本身会有很多人用,用了以后我就出名,出名以后我可以找一份好的工作,我不想念研究生或者在求学方面做进一步的尝试
--Discuz! CEO 戴志康 接受新浪采访所说.

如果Oracle认为他已经受到了来自MySQL的威胁,那么这(收购Innobase公司)就是一个非常简单的反击措施,对于它来说只是花了一笔零花钱。这是对MySQL偷偷的狠狠一击--Paola Lubet.他曾是Oracle公司负责数据库营销的主管。[来源]

我他妈在自己的blog上放广告,你丫唧唧歪歪个什么劲呢
--Keso 写了篇《在blog上做广告》,有网友质疑,Keso 回应

假汉芯 MP3 播放器只能几年如一日重复播放三首歌:《沧海一声笑》、《挪威的森林》、《天冷就回家》,芯片居然无法更新曲目。
--传言有人匿名举报汉芯造假。[看看]


这一系列 Blog 记录我看到的一些有趣、有意义或者是比较幽默的言论。尽量减少自己的评论。当然,这些言论只是我本周看到的,不一定是发生在本周。

BTW:并不要刻意模仿

January 21, 2006

什么是 egosurf

最近好多人尝试了 egosurf.org 这个站点提供的服务:egosurf . 什么是 egosurf ? 这个词拆开来是 ego(自我.本我.心理学术语)+ surf(网络冲浪). 根据 Eric S. Raymond 的《黑客大辞典》中的定义

To search the net for your name or links to your web pages(在网络上搜索自己的名字或者自己Web页面的链接). Perhaps connected to long-established SF-fan slang egoscan,
to search for one's name in a fanzine.

最早了解这个词是从车东[怎么又是这个家伙:)]的 Ego Surfing = Ego + Surfing . Blogger 进行 egosurf 的应该不少(虽然很多人可能没意识到), 其实如果把一个站点看作一个互联网实体,也是应该进行 egosurf 的. 因为通过这个行为能够做到以下几点:

  • 1. 更好的了解自己的站点信息,以便吸引更多的有针对性的读者
  • 2. 知识发现. 了解哪些用户通过自己的站点内容引发出更多的内容,这些内容有哪些与自己提供的信息能够互补.
  • 3. 满足自己的虚荣心 ;) 或者了解自己/站点的影响力

下面说说我进行 egosurf 的一点点经验:

  • 谁链接了我?. 通过搜索引擎的搜索反向连接.比如 Google 可以用 link:www.dbanotes.net/ 此外,针对单独页面的 Refer 脚本[比如 Booso Refer Stat System]也可以尝试一下. 但要注意,站外的脚本因为数据交互的问题可能会拉慢页面.
  • 谁引用了我的内容? 针对 Blog, 如果针对 Blog , 可以Google 的 Blog Search 输出 RSS , 然后用RSS 阅读工具即可动态反映相关的 Blog 引用信息.Technorati 是一个很好的选择. 可以查看所有引用我Blog内容的链接信息.
  • 谁收藏了我的页面? del.icio.us365key 是必须的工具.先收藏自己的一些重要的页面,然后就可以观察有哪些读者把页面收藏为书签.
  • 我的站点那些内容吸引读者? 针对这个问题, Awstats 工具是一个不错的选择,而且, Awstats 也提供反向链接信息, 以及关键字信息, 这也是必不可少的功能; 另一个好工具是 Google 的 Analytics 服务. 虽然以前我曾经对这个工具产生怀疑,但是使用了一段时间之后,发现 Analytics 的交互性要比 Awstats 强多了. Analytics 其实也提供一些其他 egosurf 功能, 但是因做不到实时性,显得有些受限制.

想 egosurf ? 在自己常用的搜索引擎上搜索一下自己的名字或者网络常用的 ID , 看看会有多少结果? 简单吧?

更多了解:
Egosurfing with PHP and Google
Ego Surfing = Ego + Surfing

本站相关标签|Tags Cloud