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

Oracle XE自带数据库创建的过程的更多相关文章

  1. docker 实战---使用oracle xe作为开发数据库(六)

    oracle作为oltp的大佬,非常多行业应用都会用到它.那么在开发的过程中就不可避免的要使用oracle数据库,oracle数据库的版本号有好多,当中express版本号是免费的开发版.它的主要限制 ...

  2. Oracle XE手动建立数据库实例

    参考资料为: [Oracle XE系列之三]使用OMF方式手工创建Oracle XE数据库 - 王立夫 - 博客园http://www.cnblogs.com/opfo/p/5056122.html ...

  3. 【Oracle XE系列之四】创建OracleXE表空间详解

    创建OracleXE表空间示例 sqlplus /nolog connect sys as sysdba SQL> create tablespace OPFOCN  datafile 'C:\ ...

  4. mysql数据库创建函数过程

    1.创建mysql数据库的存储过程,语句 2.选择执行创建的数据库存储过程即可

  5. Oracle 环境部署 以及数据库创建 ,用户新建和权限分配

    1.右键我的电脑--->属性--->高级系统设置 2.环境变量---->新建 总共配置三个变量 (1)变量名 ORACLE_HOME 变量值 G:\app\TH\product\11 ...

  6. oracle使用DataBase Configuration Assistant创建、删除数据库

    可以使用DataBase Configuration Assistant来创建一个心得数据库.Database Configuration Assistant简称是DBCA,是创建.配置以及管理数据库 ...

  7. PLSQL Developer12连接远程Oracle xe 11g

    目标: .学习使用docker下载oracle xe 11g .使用PLSQL连上启动运行oracle xe 11g容器服务 1.准备工作 Linux 安装docker 下载PLSQL Develop ...

  8. 【Oracle XE系列之一】Windows10_X64环境 安装Oracle XE11gR2 X64数据库

    一.安装 1.去Oracle官网下载XE版的安装包[下载路径](Oracle Database Express Edition 11g Release 2 for Windows x64),解压. 2 ...

  9. 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)

    SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...

随机推荐

  1. Java 泛型通配符上限和通配符下限

    ①为什么要使用泛型通配符 请参考这篇随笔的下半部分 https://www.cnblogs.com/baxianhua/p/9194369.html   ②通配符上限和通配符下限的简单解释 <? ...

  2. 20145201李子璇 《网络对抗》 Web基础

    1.实验后回答问题 (1)什么是表单 它在网页中主要负责数据采集功能,通过用户提交的一些数据来建立网站管理者与浏览者之间的桥梁. 两个组成部分:①HTML源代码用于描述表单(比如域,标签和浏览者在页面 ...

  3. 20145326 《Java程序设计》第6周学习总结

    20145326 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 一.使用InputStream与OutputStream 1.串流设计的概念 想活用输入/输出API,一定要 ...

  4. Opencv3_Learning

    git地址 采用jupyter notebook进行编程,语言为python. 感谢博主--戳 这类东西真的是不是天天打,就是打过就忘.. 有志者事竟成,破釜沉舟,百二秦关终属楚. 苦心人天不负,卧薪 ...

  5. RJ45接口

    什么是rj45接口? rj45是各种不同接头的一种类型,通常用于数据传输,最常见的应用为网卡接口. 常见的RJ45接口有两类:用于以太网网卡.路由器以太网接口等的DTE类型,还有用于交换机等的DCE类 ...

  6. 第10章 Pry, 强大的pry-rails和相关的几个好用gem

    https://asciinema.org/a/0KtCL9HB1bP08wNHLfIeOMa8K 本章讲了如何定位❌,和排除bug. Pry  (5000

  7. poj3436网络流之最大流拆点

    这题看了半天看不懂题意...还是看的网上题意写的 加一个源点一个汇点,把每个点拆成两个,这两个点的流量是v,其他联通的边都设为无穷大 输入没有1的点就与源点连接,输出只有1的点就与汇点连接 还有这个输 ...

  8. DataReader 绑定DataGridView有两种方式

    第一种:借助于BindingSourcesqlDataReader Sdr=通过查询函数得到的sqlDataReader类型的数据;BindingSource Bs=new BindingSource ...

  9. xtrabackup三种备份和还原(一)

    写这边博客心情不是太美好(博客已经停更2个多月了,实在是没心情学习新东西.2018我的黑暗年,呵呵)好了,不废话了,本文没有任何原理的部分,我也是刚开始接触xtrabackup这个工具.本文应该是一个 ...

  10. 009PHP文件处理——文件处理 file_get_contents file_put_contents fgetc fgets fgetss

    <?php /** * 文件处理 file_get_contents file_put_contents fgetc fgets fgetss */ //fgetc() 传入文件操作句柄.每次获 ...