Oracle 10g XE(Express Edition)安裝極快,背後其實是透過 RMAN 從種子備份集(SEED DB)還原 而非傳統 CREATE DATABASE 腳本逐步建立。本文解析 XE 安裝目錄下的關鍵腳本與還原流程。
Windows:D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\
Linux:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/config/scripts/
XE.bat / XE.sh:主流程,建立 OS 使用者、目錄、環境變數、呼叫 oradim 建立服務、執行 XE.sql。XE.sql:建立密碼檔、呼叫 CloneRmanRestore.sql。CloneRmanRestore.sql → rmanRestoreDatafiles.sql:核心還原邏輯。cloneDBCreation.sql:建立控制檔、重置 DBID、OPEN RESETLOGS、建立暫存表空間。postDBCreation.sql:設定 XDB HTTP/FTP 埠(預設 8080/0)。postScripts.sql:補丁腳本。rmanRestoreDatafiles.sql 使用內部套件 DBMS_BACKUP_RESTORE 直接從種子備份 EXPRESS.dfb 還原四個核心資料檔:
variable devicename varchar2(255);
declare
omfname varchar2(512) := NULL;
done boolean;
begin
dbms_output.put_line('Allocating device....');
:devicename := dbms_backup_restore.deviceAllocate;
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.dbf', 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;
/
EXPRESS.dfb 內含 SYSTEM、UNDO、SYSAUX、USERS 四表空間,體現 XE 4GB/11GB 空間限制的來源。CREATE CONTROLFILE + DBMS_BACKUP_RESTORE.ZERODBID(0) 產生新 DBID → ALTER DATABASE OPEN RESETLOGS → 建立 TEMP 表空間。腳本邏輯相同,僅 XE.bat 改為 Shell、oradim 改為 oradim(Linux 版)或直接啟動實例,路徑調整為 /u01/app/oracle/...。
XE 的「秒級安裝」本質是 預建種子庫 + 內部套件還原 + 控制檔重建。理解此機制有助於排查 XE 安裝失敗、手動建立類 XE 輕量實例、或評估是否能突破空間限制(需修改種子庫結構,風險極高)。