1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

Oracle XE自带数据库创建的过程

2022-11-19 | 数据库 | 1818ip | 528°c
A+ A-

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 目录下有如下文件:

2010-01-2420:471,783cloneDBCreation.sql 
2010-01-2420:47321CloneRmanRestore.sql 
2010-01-2420:482,410init.ora 
2010-01-2420:482,177initXETemp.ora 
2010-01-2420:47929postDBCreation.sql 
2010-01-2420:47780postScripts.sql 
2010-01-2420:471,334rmanRestoreDatafiles.sql 
2010-01-2420:471,424XE.bat 
2010-01-2420:47716XE.sql

XE.bat 批处理文件完成如下事情:添加需要的操作系统用户; 创建相关目录存放 Oracle 数据文件;设定 Oracle 环境变量主要是 SID 名字;调用 Oradim 命令创建XE 的实例; 然后调用 XE.sql 脚本.

XE.sql 脚本首先定义XE 实例的用户需要用到的密码,然后用 orapwd.exe 创建密码文件, 这些步骤都和普通的 Oracle 创建实例的脚本非常相似.接下里就有意思了:XE.sql 调用 CloneRmanRestore.sql , CloneRmanRestore.sql 调用rmanRestoreDatafiles.sql.

variabledevicenamevarchar2(255); 
declare 
omfnamevarchar2(512):=NULL; 
doneboolean; 
begin 
dbms_output.put_line(''); 
dbms_output.put_line('Allocatingdevice....'); 
dbms_output.put_line('Specifyingdatafiles...'); 
:devicename:=dbms_backup_restore.deviceAllocate; 
dbms_output.put_line('Specifingdatafiles...'); 
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); 
ifdonethen 
dbms_output.put_line('Restoredone.'); 
else 
dbms_output.put_line('ORA-XXXX:Restorefailed'); 
endif; 
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 操作的接口.由恢复管理器直接调用。 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, 通过如下过程定义端口:

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

本文来源:1818IP

本文地址:https://www.1818ip.com/post/10173.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。