Database 类别下的文章

Oracle HTML DB 更名Oracle Application Express(APEX) , 与 Oracle 10g Express Edition 的命名原则一致了.

Oracle HTML DB 的开发代号为 Marvel(奇迹),这倒似乎是个不错的名字, Gary Myers 在 Blog 中怀念这个名字. Application Express 这个名字恐怕很多人会和Application Server 混淆,至少我觉得还不如原来的 HTML DB , 听起来大致知道这个工具是作什么的, 或者是 Oracle WebApp Express 也不错 :)

现在在 OTN 上已经有一个针对 Oracle Application Express 的入口. 文档上也去掉了所有的旧的 HTML DB 的字样. 软件下载的位置(Download Apex).

Oracle 在新闻稿中说:

Over 175,000 users have downloaded Oracle Application Express since its initial release in February 2004.
不知道实际上有多少中国用户用这个工具开发具体的应用?

Oracle XE 创建新的数据库

Oracle XE 目前的技术信息相对还是比较少的,Tom 主持的 XE 论坛也登录不了,大多数时候都是页面打不开,页面打开了,也告诉我没有注册,注册了后告诉我没有权限查看。还是自己捉摸好一点。

如何为 Oracle 10g XE 创建一个新的数据库实例 ? 看了上一篇 Oracle XE 自带的数据库如何创建 的解释之后就容易很多了.

如果是 Windows 平台, 首先确保没甚么重要数据在当前的这个 XE 实例中. 然后调用 oradim -delete -sid xe 删除当前的系统服务(就是 Windows 服务).

然后运行 D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts 中的 XE.bat 批处理即可.速度相对还是比较快的.

简单的说了一下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 命令之外,其他差异不大.

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 10g] 表空间更名

简单介绍

在 Oracle 10g 以前的版本,更改表空间名字是几乎不可能的事情,除非删除,重新创建,大费周章。Oracle 10g 新添加了一项更改表空间名字的功能,使得更改表空间名字瞬间即可完成。是个较为人性化的功能。

Added@2006/01/17:更名操作会更新数据字典、控制文件、联机数据文件头部等的表空间名字信息但是不会更改表空间 ID.

旧的技术新闻:MySQL5.1.3 发布的时候新增了分区(Partitioning)功能。 在 MySQL 5.1 的手册中已经可以看到相关的技术描述

MySQL 目前支持水平分区,也就是针对行的分区,主要有四种分区类型:

  • RANGE 分区
  • LIST 分区
  • HASH 分区
  • KEY 分区 --类似 HASH 分区,只是要根据用户定义的表达式来进行分区

MySQL 的 Key 分区类型,和微软的 Yukon (SQL Server 2005) 的分区方式很类似的,相对灵活一些,而 Oracle 的复合分区则为范围分区与 HASH 的结合体,这样略失灵活,但是便于管理。

最近公司的 DBA 团队购买的 Cost-Based Oracle Fundamentals 到货,居然还没被借走,趁早借回来一睹为快。

此前,我曾经说过对这本书的期盼。这本书的作者是大名鼎鼎的 Jonathan Lewis。翻开该书的介绍部分,Lewis 在 03 年 9 月份就开始准备本书的写作,足足用了 22 个月来写作。估计可能也是因为 Lewis 如此慢而严格的写作导致 Addison-Wesley 出版社终止与他的合作。而 Lewis 的辛苦没有白费,Apress 出版社接手了这本书的运作。到现在为止,我才读了两章,只窥一斑,还没见全豹,出版社的站点上也有样章可以下载.毫无疑问,这是一本出色的Oracle 图书,连 Thomas Kyte 也大发赞美之言。这本书获得 2006 年度的 Oracle Magazine Editor's Choice 奖应该没有悬念,虽然 Thomas Kyte 也出版了 Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions ( Expert Oracle Database Architecture 系列的第一部,这本书国内已经有出版社拿到版权,正在寻找译者)

其实这篇 Blog 我倒更想说说 出版这本书的出版社 Apress .

在一连串大手笔收购动作之后,终于看到 Oracle 发布了一个新的产品: 免费的 GUI 数据库管理、开发工具 Raptor.

从 Oracle 10g 大大加强 Oracle Enterprise Manager 工具上即可看出 Oracle 准备争夺 Quest 等公司的数据库管理产品市场,而现在,更明显的是,Oracle 还想夺取客户端开发工具的一席之地。该工具目前和 PL/SQL Developer 这样的轻量级工具的轻巧精致还相差甚远(毕竟还只是一个预览版,)。不知道 Oracle 是否受到 IBM 的 Eclipse 项目的影响,而准备把这个工具发展成类似 Eclipse 的庞然大物,把 JDeveloper 的一些功能作为插件加进来。

关于归档

本页包含 Database 类别下的所有文章.

上一类别为 Arch.

Geek 为下一类别.

回到 首页 查看最近发表的文章或者查看所有 归档文章.