zoukankan      html  css  js  c++  java
  • Oracle XE自带数据库创建的过程

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

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

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

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

    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:oraclexeoradataXEsystem.dbf', 0, 'SYSTEM');  
    13. dbms_backup_restore.restoreDataFileTo(2, 'D:oraclexeoradataXEundo.dbf', 0, 'UNDOTBS1');  
    14. dbms_backup_restore.restoreDataFileTo(3, 'D:oraclexe\oradataXEsysaux.dbf', 0, 'SYSAUX');  
    15. dbms_backup_restore.restoreDataFileTo(4, 'D:oraclexeoradataXEusers.dbf', 0, 'USERS');  
    16. dbms_output.put_line(' Restoring ... ');  
    17. dbms_backup_restore.restoreBackupPiece  

    18.('D:oraclexeapporacleproduct10.2.0serverconfigseeddbEXPRESS.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:oraclexeapporacleproduct10.2.0serverconfig seeddbEXPRESS.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

  • 相关阅读:
    hbase深入了解
    Android SDK安装与环境变量配置以及开发第一个Android程序
    Android平台架构及特性
    android Notification定义与应用
    Windows Phone 7 开发 31 日谈——第1日:项目模板
    MVC HtmlHelper类的方法总结(转)
    INotifyPropertyChanged的使用
    浅谈计算机软件的破解与保护(时间:20111224作者:李富云 来源:中国论文库)
    托管代码&非托管代码
    .net也疯狂:生成zip文件(转)
  • 原文地址:https://www.cnblogs.com/mq0036/p/3677990.html
Copyright © 2011-2022 走看看