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

Oracle手工創建數據庫完整實戰:參數文件、實例啟動、CREATE DATABASE、數據字典構建

     編輯:Oracle 資料庫基礎

繞過DBCA:從零手工構建Oracle數據庫的標準化九步流程

手工創建數據庫是DBA核心技能,也是理解實例架構、參數文件、控制文件、重做日誌、表空間、數據字典依賴關係的最佳途徑。本文提供可直接執行的標準化腳本流程:確定SID/DB_NAME → 認證方式 → 創建PFILE/SPFILE → 啟動NOMOUNT實例 → CREATE DATABASE → 創建附加表空間 → 運行數據字典腳本 → 驗收檢查,含關鍵參數模板與常見報錯對策。

前置條件

  • OS用戶oracle、組oinstall/dba、目錄/u01/app/oracle、/u02/oradata已就緒。
  • 環境變數:ORACLE_BASE、ORACLE_HOME、PATH、LD_LIBRARY_PATH。
  • 內核參數、Shell限制、主機名解析已通過預檢。

九步手工建庫流程

步驟1:確定標識符

export ORACLE_SID=MYNEWDB
export DB_NAME=MYNEWDB

步驟2:選擇認證方式

本例採用操作系統認證 (OS Authentication):
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE (後續創建密碼文件)
OS用戶oracle屬於dba組,可CONNECT / AS SYSDBA。

步驟3:創建初始化參數文件 (PFILE → SPFILE)

$ cat > $ORACLE_HOME/dbs/initMYNEWDB.ora <<'EOF'
*.db_name='MYNEWDB'
*.db_domain=''
*.control_files=('/u02/oradata/MYNEWDB/control01.ctl','/u02/oradata/MYNEWDB/control02.ctl','/u02/oradata/MYNEWDB/control03.ctl')
*.memory_target=1G
*.processes=300
*.sessions=335
*.open_cursors=300
*.pga_aggregate_target=256M
*.sga_target=768M
*.diagnostic_dest='/u01/app/oracle'
*.audit_file_dest='/u01/app/oracle/admin/MYNEWDB/adump'
*.audit_trail='DB'
*.compatible='19.0.0'
*.db_block_size=8192
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
EOF

# 啟動NOMOUNT實例並創建SPFILE
sqlplus / as sysdba <

步驟4:CREATE DATABASE 核心語句

sqlplus / as sysdba <<'EOF'
CREATE DATABASE MYNEWDB
  USER SYS IDENTIFIED BY "SysPassword#2024"
  USER SYSTEM IDENTIFIED BY "SystemPassword#2024"
  LOGFILE GROUP 1 ('/u02/oradata/MYNEWDB/redo01a.log','/u02/oradata/MYNEWDB/redo01b.log') SIZE 200M BLOCKSIZE 512,
          GROUP 2 ('/u02/oradata/MYNEWDB/redo02a.log','/u02/oradata/MYNEWDB/redo02b.log') SIZE 200M BLOCKSIZE 512,
          GROUP 3 ('/u02/oradata/MYNEWDB/redo03a.log','/u02/oradata/MYNEWDB/redo03b.log') SIZE 200M BLOCKSIZE 512
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXLOGHISTORY 1000
  MAXDATAFILES 1024
  MAXINSTANCES 8
  CHARACTER SET AL32UTF8
  NATIONAL CHARACTER SET AL16UTF16
  EXTENT MANAGEMENT LOCAL
  DATAFILE '/u02/oradata/MYNEWDB/system01.dbf' SIZE 700M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  SYSAUX DATAFILE '/u02/oradata/MYNEWDB/sysaux01.dbf' SIZE 550M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  DEFAULT TABLESPACE users
    DATAFILE '/u02/oradata/MYNEWDB/users01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
  DEFAULT TEMPORARY TABLESPACE temp
    TEMPFILE '/u02/oradata/MYNEWDB/temp01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
  UNDO TABLESPACE undotbs1
    DATAFILE '/u02/oradata/MYNEWDB/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
EOF

步驟5:創建附加表空間

sqlplus / as sysdba <<'EOF'
-- 應用表空間
CREATE TABLESPACE app_data DATAFILE '/u02/oradata/MYNEWDB/app_data01.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE app_index DATAFILE '/u02/oradata/MYNEWDB/app_idx01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE 5G EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
-- 大對象表空間
CREATE TABLESPACE lob_data DATAFILE '/u02/oradata/MYNEWDB/lob01.dbf' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 10G EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
-- 唯讀/歸檔表空間 (可選)
CREATE TABLESPACE archive_data DATAFILE '/u02/oradata/MYNEWDB/archive01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 1G EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
EOF

步驟6:運行數據字典構建腳本

sqlplus / as sysdba <<'EOF'
@$ORACLE_HOME/rdbms/admin/catalog.sql
@$ORACLE_HOME/rdbms/admin/catproc.sql
-- 12c+ 還需
@$ORACLE_HOME/rdbms/admin/catcdb.sql
-- 安裝OWM/APEX/ORDS等組件按需運行相應腳本
EOF

注意:catalog.sql 創建標準視圖、同義詞、PL/SQL包;catproc.sql 創建內建包體;耗時5-30分鐘視硬件而定。

步驟7:創建應用用戶與權限

sqlplus / as sysdba <<'EOF'
CREATE USER app_user IDENTIFIED BY "AppPass#2024"
  DEFAULT TABLESPACE app_data TEMPORARY TABLESPACE temp
  QUOTA UNLIMITED ON app_data QUOTA UNLIMITED ON app_index;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE, CREATE VIEW, CREATE TRIGGER TO app_user;
GRANT SELECT ON v_$session TO app_user;  -- 監控需要
EOF

步驟8:配置監聽器與服務註冊

cat > $ORACLE_HOME/network/admin/listener.ora <<'EOF'
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = $(hostname))(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = MYNEWDB)
      (ORACLE_HOME = $ORACLE_HOME)
      (SID_NAME = MYNEWDB)
    )
  )
EOF

lsnrctl start
sqlplus / as sysdba <<'EOF'
ALTER SYSTEM REGISTER;
EOF

步驟9:驗收檢查清單

檢查項命令/方法預期結果
實例狀態SELECT status FROM v$instance;OPEN
字符集SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';AL32UTF8 / AL16UTF16
控制文件SELECT name FROM v$controlfile;3個文件存在
重做日誌SELECT group#, bytes/1024/1024 MB FROM v$log;3組,各200MB
表空間SELECT tablespace_name, contents FROM dba_tablespaces;SYSTEM, SYSAUX, UNDO, TEMP, USERS, APP_*, LOB_*
數據字典SELECT COUNT(*) FROM dba_objects WHERE owner IN ('SYS','SYSTEM');> 50,000
遠程連接客戶端 tnsping MYNEWDB / sqlplus app_user@MYNEWDB成功
備份模式SELECT log_mode FROM v$database;ARCHIVELOG (需後續啟用)

常見報錯對策

錯誤原因解決
ORA-01078: failure in processing system parametersPFILE參數語法錯/路徑不存在檢查control_files、diagnostic_dest目錄權限
ORA-01501: CREATE DATABASE failed文件已存在/磁盤空間不足/權限確認/u02/oradata/MYNEWDB空目錄、oracle用戶寫權限
ORA-00200: control file could not be created控制文件路徑目錄不存在預先mkdir -p所有目錄
ORA-01119: error in creating database file文件系統不支援AUTOEXTEND/配額檢查文件系統類型、磁盤配額
catalog.sql運行極慢/卡住統計信息收集、並行度、UNDO不足增加UNDO_TABLESPACE大小、設置PARALLEL_MAX_SERVERS

手工建庫雖繁瑣,但每一步都映射到實例核心結構。建議將上述流程封裝為create_db.sh參數化腳本,納入版本控制,實現「基礎設施即代碼」。

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