【Oracle数据库指南】第20篇:命令行方式创建Oracle数据库——手动建库全流程详解
上一篇【第19篇】使用DBCA创建Oracle数据库——图形化向导完全指南下一篇【第21篇】Oracle表空间管理详解摘要本文详细讲解通过命令行手动创建Oracle数据库的完整流程包括PFILE/SPFILE的配置、CREATE DATABASE语句的语法详解、数据库后配置catalog.sql、catproc.sql和初始化工作并提供一个可直接使用的完整建库脚本。理解手动建库过程是DBA深入理解Oracle架构的必经之路。一、手动建库的步骤总览手动建库完整流程 1. 配置操作系统环境用户、目录、环境变量 2. 创建参数文件PFILE/SPFILE 3. 设置ORACLE_SID环境变量 4. 创建密码文件 5. 启动实例到NOMOUNT状态 6. 执行CREATE DATABASE语句 7. 执行数据字典脚本catalog.sql、catproc.sql 8. 执行可选组件脚本catctx.sql等 9. 重启数据库并验证二、第一步环境准备# 1. 设置环境变量exportORACLE_SIDtestdbexportORACLE_BASE/u01/oracleexportORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1exportPATH$ORACLE_HOME/bin:$PATH# 2. 创建必要的目录结构mkdir-p/u01/oracle/admin/testdb/adumpmkdir-p/u01/oracle/admin/testdb/dpdumpmkdir-p/u01/oradata/testdbmkdir-p/u04/fast_recovery_area/testdbmkdir-p/u03/archive/testdbmkdir-p/u01/redo1mkdir-p/u02/redo2# 3. 设置目录权限chown-Roracle:oinstall /u01/oradata /u04/fast_recovery_area /u03/archivechmod755/u01/oradata /u04/fast_recovery_area三、第二步创建参数文件创建文件$ORACLE_HOME/dbs/inittestdb.ora# 文件inittestdb.ora # 数据库名和实例 db_name TESTDB instance_name testdb # 核心参数 # 数据块大小创建后不可修改 db_block_size 8192 # 字符集通过CREATE DATABASE语句指定参数文件不设置 # 内存管理 memory_target 2147483648 # 2GBAMM自动管理 memory_max_target 2684354560 # 2.5GB # 进程和连接 processes 300 open_cursors 300 session_cached_cursors 50 # 存储和文件 control_files ( /u01/oradata/testdb/control01.ctl, /u02/oradata/testdb/control02.ctl, /u03/oradata/testdb/control03.ctl ) # 恢复相关 db_recovery_file_dest /u04/fast_recovery_area db_recovery_file_dest_size 10G fast_start_mttr_target 60 # OMF自动文件管理可选 # db_create_file_dest /u01/oradata # db_create_online_log_dest_1 /u01/redo1 # db_create_online_log_dest_2 /u02/redo2 # 审计 audit_file_dest /u01/oracle/admin/testdb/adump audit_trail DB # 诊断 diagnostic_dest /u01/oracle # 数据泵 # datapump目录在创建数据库后配置 # 归档日志 log_archive_dest_1 LOCATION/u03/archive/testdb log_archive_format testdb_%t_%s_%r.arc log_archive_max_processes 4 # NLS设置 nls_language SIMPLIFIED CHINESE nls_territory CHINA nls_date_format YYYY-MM-DD # 其他重要参数 remote_login_passwordfile EXCLUSIVE undo_management AUTO undo_tablespace UNDOTBS1四、第三步创建密码文件# 创建密码文件用于sys用户远程连接和特权操作# entries允许的sysdba/sysoper账户数量orapwdfile$ORACLE_HOME/dbs/orapwtestdbpasswordOracle12c!entries10# 验证密码文件创建成功ls-la$ORACLE_HOME/dbs/orapwtestdb五、第四步启动到NOMOUNT并创建数据库-- 以sysdba身份登录使用PFILE启动CONNECT/ASSYSDBA STARTUP NOMOUNT PFILE/u01/oracle/product/11.2.0/dbhome_1/dbs/inittestdb.ora;-- 验证实例已启动NOMOUNT状态SELECTstatusFROMv$instance;-- STATUS STARTEDCREATE DATABASE语句详解-- 完整的CREATE DATABASE语句CREATEDATABASEtestdb-- 数据库名USERSYS IDENTIFIEDBYOracle12c!-- SYS用户密码USERSYSTEM IDENTIFIEDBYOracle12c!-- SYSTEM用户密码-- 日志模式先创建非归档后期可切换NOARCHIVELOG-- 字符集CHARACTERSETAL32UTF8NATIONALCHARACTERSETAL16UTF16-- 数据块大小与参数文件一致DATAFILE/u01/oradata/testdb/system01.dbfSIZE700M REUSE AUTOEXTENDONNEXT100M MAXSIZE2G EXTENT MANAGEMENTLOCAL-- SYSAUX表空间Oracle 10g必须SYSAUX DATAFILE/u01/oradata/testdb/sysaux01.dbfSIZE500M REUSE AUTOEXTENDONNEXT100M MAXSIZE2G-- 默认临时表空间DEFAULTTEMPORARYTABLESPACEtempTEMPFILE/u01/oradata/testdb/temp01.dbfSIZE300M REUSE AUTOEXTENDONNEXT50M MAXSIZE2G-- UNDO表空间UNDOTABLESPACEundotbs1 DATAFILE/u01/oradata/testdb/undotbs01.dbfSIZE500M REUSE AUTOEXTENDONNEXT100M MAXSIZE4G-- 在线重做日志文件组每组2个成员放在不同磁盘LOGFILEGROUP1(/u01/redo1/redo01a.log,/u02/redo2/redo01b.log)SIZE200M REUSE,GROUP2(/u01/redo1/redo02a.log,/u02/redo2/redo02b.log)SIZE200M REUSE,GROUP3(/u01/redo1/redo03a.log,/u02/redo2/redo03b.log)SIZE200M REUSE-- 日志文件大小MAXLOGFILES16MAXLOGMEMBERS5MAXLOGHISTORY1000-- 数据文件和实例限制MAXDATAFILES1024MAXINSTANCES8;-- 如果创建失败检查告警日志-- tail -f $ORACLE_BASE/diag/rdbms/testdb/testdb/trace/alert_testdb.log六、第五步执行数据字典脚本-- 这些脚本必须以sysdba身份执行且必须在打开状态下执行-- 创建数据字典catalog.sql-- 约需5-20分钟?/rdbms/admin/catalog.sql-- 创建PL/SQL内置包catproc.sql-- 约需10-30分钟最耗时的步骤?/rdbms/admin/catproc.sql-- 创建SQL*Plus的相关包pupbld.sql-- 以system用户执行CONNECTsystem/Oracle12c!?/sqlplus/admin/pupbld.sql-- 以sysdba重新连接CONNECT/ASSYSDBA七、第六步开启归档模式生产环境必做-- 关闭数据库因为切换归档模式需要MOUNT状态SHUTDOWNIMMEDIATE;STARTUP MOUNT;-- 切换到归档模式ALTERDATABASEARCHIVELOG;-- 打开数据库ALTERDATABASEOPEN;-- 验证SELECTlog_modeFROMv$database;-- LOG_MODE ARCHIVELOG-- 切换一个日志组测试归档是否工作ALTERSYSTEM SWITCH LOGFILE;ALTERSYSTEM ARCHIVE LOGALL;-- 验证归档日志生成SELECTnameFROMv$archived_logORDERBYfirst_timeDESC;八、第七步将PFILE转为SPFILE-- 从PFILE创建SPFILE后续参数修改使用ALTER SYSTEMCREATESPFILEFROMPFILE/u01/oracle/product/11.2.0/dbhome_1/dbs/inittestdb.ora;-- 验证SPFILE创建成功-- 文件路径$ORACLE_HOME/dbs/spfiletestdb.ora-- 重启使用SPFILESHUTDOWNIMMEDIATE;STARTUP;-- 默认优先使用SPFILE-- 确认使用的是SPFILEvalue不为空SELECTvalueFROMv$parameterWHEREnamespfile;九、第八步后配置与优化-- 1. 创建用户数据表空间CREATETABLESPACEdata_ts DATAFILE/u01/oradata/testdb/data_ts01.dbfSIZE1G AUTOEXTENDONNEXT256M MAXSIZE20G EXTENT MANAGEMENTLOCALSEGMENT SPACE MANAGEMENT AUTO;-- 2. 设置默认表空间ALTERDATABASEDEFAULTTABLESPACEdata_ts;-- 3. 创建HR示例用户可选CREATEUSERhr IDENTIFIEDBYhrDEFAULTTABLESPACEdata_tsTEMPORARYTABLESPACEtempQUOTA UNLIMITEDONdata_ts;GRANTCONNECT,RESOURCETOhr;-- 4. 配置数据泵目录CREATEORREPLACEDIRECTORY datapump_dirAS/u01/oracle/admin/testdb/dpdump;GRANTREAD,WRITEONDIRECTORY datapump_dirTOsystem;-- 5. 启用审计生产环境推荐AUDITSESSION;AUDITSELECTTABLE,INSERTTABLE,UPDATETABLE,DELETETABLE;AUDITEXECUTEPROCEDURE;-- 6. 收集数据字典统计信息提高数据字典查询性能EXECUTEDBMS_STATS.GATHER_DICTIONARY_STATS;-- 7. 创建第一个AWR快照开始性能基线收集BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;END;/十、完整建库脚本将以上步骤整合为可执行的脚本#!/bin/bash# create_database.sh - Oracle 11g手动建库脚本# 环境变量exportORACLE_SIDtestdbexportORACLE_BASE/u01/oracleexportORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1exportPATH$ORACLE_HOME/bin:$PATHecho 第1步创建目录 mkdir-p/u01/oracle/admin/testdb/{adump,dpdump}mkdir-p/u01/oradata/testdbmkdir-p/u04/fast_recovery_areamkdir-p/u03/archive/testdbmkdir-p/u01/redo1 /u02/redo2echo 第2步创建密码文件 orapwdfile$ORACLE_HOME/dbs/orapwtestdbpasswordOracle12c!entries10echo 第3步创建参数文件 cat$ORACLE_HOME/dbs/inittestdb.oraEOF db_name TESTDB instance_name testdb db_block_size 8192 memory_target 2147483648 memory_max_target 2684354560 processes 300 open_cursors 300 control_files (/u01/oradata/testdb/control01.ctl,/u02/oradata/testdb/control02.ctl) db_recovery_file_dest /u04/fast_recovery_area db_recovery_file_dest_size 10737418240 audit_file_dest /u01/oracle/admin/testdb/adump audit_trail DB diagnostic_dest /u01/oracle log_archive_dest_1 LOCATION/u03/archive/testdb remote_login_passwordfile EXCLUSIVE undo_management AUTO undo_tablespace UNDOTBS1 nls_language SIMPLIFIED CHINESE nls_territory CHINA EOFecho 第4步创建数据库 sqlplus / as sysdbaEOF STARTUP NOMOUNT PFILE/u01/oracle/product/11.2.0/dbhome_1/dbs/inittestdb.ora; CREATE DATABASE testdb USER SYS IDENTIFIED BY Oracle12c! USER SYSTEM IDENTIFIED BY Oracle12c! NOARCHIVELOG CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 DATAFILE /u01/oradata/testdb/system01.dbf SIZE 700M AUTOEXTEND ON NEXT 100M MAXSIZE 2G EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE /u01/oradata/testdb/sysaux01.dbf SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 2G DEFAULT TEMPORARY TABLESPACE temp TEMPFILE /u01/oradata/testdb/temp01.dbf SIZE 300M AUTOEXTEND ON NEXT 50M MAXSIZE 2G UNDO TABLESPACE undotbs1 DATAFILE /u01/oradata/testdb/undotbs01.dbf SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 4G LOGFILE GROUP 1 (/u01/redo1/redo01a.log,/u02/redo2/redo01b.log) SIZE 200M REUSE, GROUP 2 (/u01/redo1/redo02a.log,/u02/redo2/redo02b.log) SIZE 200M REUSE, GROUP 3 (/u01/redo1/redo03a.log,/u02/redo2/redo03b.log) SIZE 200M REUSE; ?/rdbms/admin/catalog.sql ?/rdbms/admin/catproc.sql SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; CREATE SPFILE FROM PFILE/u01/oracle/product/11.2.0/dbhome_1/dbs/inittestdb.ora; EXIT; EOFecho 数据库创建完成 十一、总结手动命令行建库的核心步骤环境准备目录结构、环境变量参数文件PFILE中的关键参数配置密码文件支持sys用户远程认证启动NOMOUNT分配SGA启动后台进程CREATE DATABASE创建物理文件初始化数据库数据字典catalog.sql catproc.sql安装Oracle组件开归档模式生产环境必须转SPFILE支持动态参数修改上一篇【第19篇】使用DBCA创建Oracle数据库——图形化向导完全指南下一篇【第21篇】Oracle表空间管理详解参考资料《Oracle 11g数据库管理员指南》— 刘宪军著Oracle官方文档Database Administrator’s Guide - Creating a Database with the CREATE DATABASE Statement