Oracle XE自带数据库如何创建的?XE.sql脚本定义实例究竟是怎样的?阅读下文,您可以找到这些问题的答案。

Oracle XE自带数据库是如何创建的呢?这是很多人都提到过的问题,下面就为您详细介绍Oracle XE自带数据库创建的过程,供您参考。

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

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

  1. 2010-01-24  20:47             1,783 cloneDBCreation.sql
  2. 2010-01-24  20:47               321 CloneRmanRestore.sql
  3. 2010-01-24  20:48             2,410 init.ora
  4. 2010-01-24  20:48             2,177 initXETemp.ora
  5. 2010-01-24  20:47               929 postDBCreation.sql
  6. 2010-01-24  20:47               780 postScripts.sql
  7. 2010-01-24  20:47             1,334 rmanRestoreDatafiles.sql
  8. 2010-01-24  20:47             1,424 XE.bat
  9. 2010-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.

  1. variable devicename varchar2(255);
  2. declare
  3. omfname varchar2(512) := NULL;
  4. done boolean;
  5. begin
  6. dbms_output.put_line(' ');
  7. dbms_output.put_line(' Allocating device.... ');
  8. dbms_output.put_line(' Specifying datafiles... ');
  9. :devicename := dbms_backup_restore.deviceAllocate;
  10. dbms_output.put_line(' Specifing datafiles... ');
  11. dbms_backup_restore.restoreSetDataFile;
  12. dbms_backup_restore.restoreDataFileTo(1, 'D:\oraclexe\oradata\XE\system.dbf', 0, 'SYSTEM');
  13. dbms_backup_restore.restoreDataFileTo(2, 'D:\oraclexe\oradata\XE\undo.dbf', 0, 'UNDOTBS1');
  14. dbms_backup_restore.restoreDataFileTo(3, 'D:\oraclexe\\oradata\XE\sysaux.dbf', 0, 'SYSAUX');
  15. dbms_backup_restore.restoreDataFileTo(4, 'D:\oraclexe\oradata\XE\users.dbf', 0, 'USERS');
  16. dbms_output.put_line(' Restoring ... ');
  17. dbms_backup_restore.restoreBackupPiece

18.('D:\oraclexe\app\oracle\product\10.2.0\server\config\seeddb\EXPRESS.dfb', done);

  1. if done then
  2. dbms_output.put_line(' Restore done.');
  3. else
  4. dbms_output.put_line(' ORA-XXXX: Restore failed ');
  5. end if;
  6. dbms_backup_restore.deviceDeallocate;
  7. end;

26./

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

在 Oracle 816 以后的版本中,Oracle 提供了一个包:DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE 包是由 dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包. 是 Oracle服务器和操作系统之间 IO 操作的接口.由恢复管理器直接调用。
OracleXE 直接用这个包从一个种子备份 '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, 通过如下过程定义端口:

  1. begin
  2. dbms_xdb.sethttpport('8080');
  3. dbms_xdb.setftpport('0');
  4. end;

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

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

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

出处:http://wenku.baidu.com/view/ca8d637fa417866fb84a8eaf.html

最新文章

  1. 0017 Java学习笔记-集合-集合一般:HashSet和HashMap
  2. PHP 用html方式输出Excel文件时的数据格式设置
  3. Linux_06------Linux的磁盘管理
  4. HNU OJ10086 挤挤更健康 记忆化搜索DP
  5. C#中Linq延迟执行问题
  6. dev layoutControl 控件使用
  7. 腾讯云安装openvz,高速搭建測试环境
  8. servlet与Javabean之间的区别
  9. Spark环境搭建(四)-----------数据仓库Hive环境搭建
  10. Python 获取类对象的父类
  11. 通过示例学习JavaScript闭包
  12. linux判断日志文件大小进行清理
  13. AccessText热键的使用
  14. Android开发实现计算器的例子
  15. AngularJS的日期格式化有两种形式
  16. GitHub Desktop使用
  17. git 回滚到上个版本命令以及忽略某些文件提交
  18. 任务调度 Quartz 学习(二) CronTrigger
  19. 一个有意思的 Java HashSet 问题
  20. redhat5.8系统学习

热门文章

  1. Python 在字符串中处理html 和xml
  2. sql server中的怎么把数值型转换为字符串
  3. nats
  4. springcloud14---zuul
  5. noip2017普及 兔纸游玩记
  6. linux 查看数据库和表
  7. G_M_C_美食节
  8. 【转】TCP端口号记录
  9. zeptojs库解读1之整体框架
  10. Uva 11178 Morley's Theorem 向量旋转+求直线交点