首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 手動建立資料庫完整 SOP:從參數檔到資料字典的 8 步驟標準流程

     編輯:Oracle 資料庫基礎

適用場景

  • DBA 核心技能考核與實戰演練
  • 自動化部署腳本開發 (無 DBCA 環境)
  • 特殊配置需求 (非標準區塊大小、字符集、目錄結構)
  • 教學/實驗環境深度理解資料庫啟動機制

8 步驟標準流程

  1. 確定資料庫名稱與實例名稱 (DB_NAME, SID)
  2. 確定管理員認證方式 (OS 驗證 / 密碼檔)
  3. 建立初始化參數檔 (PFILE/SPFILE)
  4. 建立實例 (Windows: ORADIM; Linux/Unix: 環境變數 + 啟動)
  5. 連接並啟動實例至 NOMOUNT
  6. 執行 CREATE DATABASE 建立資料庫
  7. 建立附加表空間 (UNDO, TEMP, USERS, 索引表空間...)
  8. 執行腳本建立資料字典視圖 (CATALOG, CATPROC)

實戰案例:建立 MYNEWDB (Windows 環境)

步驟 1-2:確定名稱與認證

DB_NAME = MYNEWDB
SID = MYNEWDB
-- 採用作業系統認證 (OS Authentication)

步驟 3:建立參數檔 (initMYNEWDB.ora)

基於 $ORACLE_HOME/admin/sample/pfile/init.ora 修改,存放於 D:\Oracle\ora92\database\initMYNEWDB.ora

# 共享伺服器 (MTS)
dispatchers = "(PROTOCOL=TCP)(SERVICE=MYNEWDBXDB)"

# 實例名稱
instance_name = MYNEWDB

# 安全與審計
remote_login_passwordfile = EXCLUSIVE

# 排序區
pga_aggregate_target = 25165824
sort_area_size = 524288

# 全域資料庫名
db_domain = ""
db_name = MYNEWDB

# 控制檔 (多路鏡像)
control_files = (
  "D:\Oracle\oradata\MYNEWDB\CONTROL01.CTL",
  "D:\Oracle\oradata\MYNEWDB\CONTROL02.CTL",
  "D:\Oracle\oradata\MYNEWDB\CONTROL03.CTL"
)

# SGA 記憶體配置
java_pool_size = 33554432
large_pool_size = 8388608
shared_pool_size = 50331648

# 相容參數
compatible = 9.2.0

# 診斷與追蹤
background_dump_dest = D:\Oracle\admin\MYNEWDB\bdump
core_dump_dest = D:\Oracle\admin\MYNEWDB\cdump
user_dump_dest = D:\Oracle\admin\MYNEWDB\udump

# 其它
processes = 150
sessions = 170
transactions = 187
open_cursors = 300
db_block_size = 8192
db_files = 200

步驟 4-5:建立實例並啟動 NOMOUNT

-- Windows: 建立服務
ORADIM -NEW -SID MYNEWDB -INTPWD password -STARTMODE MANUAL -PFILE D:\Oracle\ora92\database\initMYNEWDB.ora

-- 設定環境變數
SET ORACLE_SID=MYNEWDB

-- 啟動至 NOMOUNT
SQLPLUS /NOLOG
CONNECT / AS SYSDBA
STARTUP NOMOUNT PFILE=D:\Oracle\ora92\database\initMYNEWDB.ora

步驟 6:CREATE DATABASE 核心語句

CREATE DATABASE MYNEWDB
  USER SYS IDENTIFIED BY sys_password
  USER SYSTEM IDENTIFIED BY system_password
  LOGFILE GROUP 1 ('D:\Oracle\oradata\MYNEWDB\REDO01.LOG') SIZE 50M,
          GROUP 2 ('D:\Oracle\oradata\MYNEWDB\REDO02.LOG') SIZE 50M,
          GROUP 3 ('D:\Oracle\oradata\MYNEWDB\REDO03.LOG') SIZE 50M
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXLOGHISTORY 1000
  MAXDATAFILES 200
  MAXINSTANCES 1
  CHARACTER SET AL32UTF8
  NATIONAL CHARACTER SET AL16UTF16
  DATAFILE 'D:\Oracle\oradata\MYNEWDB\SYSTEM01.DBF' SIZE 300M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  EXTENT MANAGEMENT LOCAL
  SYSAUX DATAFILE 'D:\Oracle\oradata\MYNEWDB\SYSAUX01.DBF' SIZE 200M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  DEFAULT TABLESPACE users
    DATAFILE 'D:\Oracle\oradata\MYNEWDB\USERS01.DBF' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  DEFAULT TEMPORARY TABLESPACE temp
    TEMPFILE 'D:\Oracle\oradata\MYNEWDB\TEMP01.DBF' SIZE 50M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  UNDO TABLESPACE undotbs1
    DATAFILE 'D:\Oracle\oradata\MYNEWDB\UNDOTBS01.DBF' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

步驟 7:建立附加表空間

-- 索引表空間
CREATE TABLESPACE indx
  DATAFILE 'D:\Oracle\oradata\MYNEWDB\INDX01.DBF' SIZE 100M AUTOEXTEND ON;

-- 應用專用表空間
CREATE TABLESPACE app_data
  DATAFILE 'D:\Oracle\oradata\MYNEWDB\APP_DATA01.DBF' SIZE 500M AUTOEXTEND ON;

CREATE TABLESPACE app_index
  DATAFILE 'D:\Oracle\oradata\MYNEWDB\APP_IDX01.DBF' SIZE 200M AUTOEXTEND ON;

步驟 8:執行資料字典建立腳本

@?/rdbms/admin/catalog.sql   -- 核心視圖、同義詞、公共同義詞
@?/rdbms/admin/catproc.sql   -- PL/SQL 套件、系統套件
@?/rdbms/admin/utlrp.sql     -- 重新編譯無效物件

-- 10g/11g 額外腳本
@?/rdbms/admin/catjava.sql   -- Java 虛擬機相關 (若安裝 JVM)
@?/sqlplus/admin/pupbld.sql  -- SQL*Plus PRODUCT_USER_PROFILE

Linux/Unix 環境差異點

  • 無 ORADIM,直接設定 ORACLE_SID、ORACLE_HOME 環境變數
  • 參數檔預設位置 $ORACLE_HOME/dbs/init${ORACLE_SID}.ora
  • 建立密碼檔:orapwd file=$ORACLE_HOME/dbs/orapw${ORACLE_SID} password=sys_password entries=10
  • 目錄結構遵循 OFA (Optimal Flexible Architecture):/u01/app/oracle/admin/${ORACLE_SID}

建立後驗證清單

  1. SELECT name, open_mode FROM v$database; → OPEN READ WRITE
  2. SELECT tablespace_name, status FROM dba_tablespaces; → SYSTEM/SYSAUX/UNDO/TEMP/USERS 皆 ONLINE
  3. SELECT count(*) FROM dba_objects WHERE status = 'INVALID'; → 0 (或極少)
  4. SELECT * FROM v$version; → 版本資訊正確
  5. 測試應用連線、建立測試表、插入查詢刪除

常見失敗原因與對策

失敗點典型錯誤對策
參數檔路徑/語法ORA-01078, LRM-00109逐行核對、使用 SPFILE 轉換驗證
控制檔目錄不存在ORA-00210, ORA-00202預先建立目錄、檢查權限
字符集不支援ORA-01034, ORA-12714確認 CHARACTER SET 拼寫、資料庫版本支援
資料字典腳本失敗ORA-00600, ORA-04031增加 SHARED_POOL_SIZE、分步執行
Windows 服務未啟動ORA-12560, TNS-12541services.msc 啟動 OracleServiceSID

自動化腳本化建議

  • 將參數檔模板化 (Jinja2/Shell 變數替換)
  • CREATE DATABASE 語句參數化 (資料檔路徑、大小、字符集)
  • 資料字典腳本封裝為主腳本依序呼叫
  • 整合至 CI/CD 流程:建立 → 驗證 → 註冊監控 → 交付

手動建立資料庫是 DBA 理解 Oracle 架構的「解剖實驗」。從參數檔到資料字典,每一步都映射到實例啟動、儲存分配、元資料初始化的核心機制。掌握此 SOP,不懼無 DBCA 環境,亦能從容交付生產級資料庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved