【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_SID=testdbexportORACLE_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 # 2GB(AMM自动管理) 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/orapwtestdbpassword=Oracle12c!entries=10# 验证密码文件创建成功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 IDENTIFIEDBY"Oracle12c!"-- SYS用户密码USERSYSTEM IDENTIFIEDBY"Oracle12c!"-- SYSTEM用户密码-- 日志模式(先创建非归档,后期可切换)NOARCHIVELOG-- 字符集CHARACTERSETAL32UTF8NATIONALCHARACTERSETAL16UTF16-- 数据块大小(与参数文件一致)DATAFILE'/u01/oradata/testdb/system01.dbf'SIZE700M REUSE AUTOEXTENDONNEXT100M MAXSIZE2G EXTENT MANAGEMENTLOCAL-- SYSAUX表空间(Oracle 10g+必须)SYSAUX DATAFILE'/u01/oradata/testdb/sysaux01.dbf'SIZE500M REUSE AUTOEXTENDONNEXT100M MAXSIZE2G-- 默认临时表空间DEFAULTTEMPORARYTABLESPACEtempTEMPFILE'/u01/oradata/testdb/temp01.dbf'SIZE300M REUSE AUTOEXTENDONNEXT50M MAXSIZE2G-- UNDO表空间UNDOTABLESPACEundotbs1 DATAFILE'/u01/oradata/testdb/undotbs01.dbf'SIZE500M 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 SYSTEM)CREATESPFILEFROMPFILE='/u01/oracle/product/11.2.0/dbhome_1/dbs/inittestdb.ora';-- 验证SPFILE创建成功-- 文件路径:$ORACLE_HOME/dbs/spfiletestdb.ora-- 重启使用SPFILESHUTDOWNIMMEDIATE;STARTUP;-- 默认优先使用SPFILE-- 确认使用的是SPFILE(value不为空)SELECTvalueFROMv$parameterWHEREname='spfile';九、第八步:后配置与优化
-- 1. 创建用户数据表空间CREATETABLESPACEdata_ts DATAFILE'/u01/oradata/testdb/data_ts01.dbf'SIZE1G 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_SID=testdbexportORACLE_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/orapwtestdbpassword=Oracle12c!entries=10echo"=== 第3步:创建参数文件 ==="cat>$ORACLE_HOME/dbs/inittestdb.ora<<'EOF' 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 sysdba<<'EOF' 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
