命令行创建与删除Oracle数据库:全流程实战指南
在Oracle数据库运维中,创建数据库是核心基础操作。相较于图形界面(DBCA)安装,命令行创建数据库具有更高的可控性,能清晰掌握数据库创建的完整流程,且适用于无图形界面的服务器环境。
一、创建数据库的核心流程
Oracle数据库的安装分为“软件安装”和“数据库创建”两步。在完成Oracle软件安装后,命令行创建数据库需遵循以下10个核心步骤,确保流程规范、配置合理:
- 检查操作系统环境,确认软硬件满足运行要求;
- 规划数据库文件系统,明确数据文件、日志文件等存储方案;
- 创建Oracle日志文件目录,用于存放警告日志、跟踪文件等;
- 创建Oracle密码文件,实现数据库用户认证;
- 配置数据库参数文件,优化内存分配、进程限制等核心参数;
- 执行建库脚本,初始化数据库实例、表空间等核心组件;
- 刷新数据字典并编译无效对象,确保数据库组件可用;
- 配置oratab文件,添加实例条目便于管理;
- 根据业务需求开启归档模式或闪回模式;
- 配置监听静态注册,确保客户端正常连接。
提示:创建数据库前,需优先规划不可更改或影响范围大的设置(如数据库名、字符集、数据块大小),避免后续调整带来的风险。
二、理解Oracle SID:数据库的“身份标识”
Oracle SID(System Identifier)是数据库实例的唯一标识,在单节点环境中默认与INSTANCE_NAME、DB_NAME一致,其核心作用是关联数据库相关的文件与进程。
1. SID的配置与关联文件
创建数据库前需通过环境变量指定ORACLE_SID,不同Shell环境的配置命令如下:
- Bash/Ksh环境:
export ORACLE_SID=zhoul - Csh环境:
setenv ORACLE_SID=zhoul
SID将直接关联以下关键文件和目录,确保数据库正常读写:
- 参数文件:
init$ORACLE_SID.ora或spfile$ORACLE_SID.ora(如initzhoul.ora); - 密码文件:
orapw$ORACLE_SID(如orapworcl); - 日志文件:警告日志
alert_$ORACLE_SID.log、跟踪文件目录(bdump/udump等); - 系统健康检查文件:
hc_$ORACLE_SID.dat。
2. 多实例环境中的SID特性
在同一台主机运行多个Oracle实例时,每个实例的后台进程都会通过SID标记区分。例如,SID为zhoul和capaa的实例,其后台进程显示如下:
oracle 25621 1 0 07:35 ? 00:00:00 ora_pmon_zhoul
oracle 25623 1 0 07:35 ? 00:00:00 ora_mman_capaa
注意:同一ORACLE_HOME环境下,不允许存在相同SID的数据库实例,但可通过特殊配置实现“数据库名相同、实例名不同”的多实例部署。
三、操作系统环境检查:创建数据库的前提
数据库依赖操作系统提供的资源支持,创建前需逐项检查以下12个核心维度,避免因环境不达标导致安装失败或性能异常:
1. 基础环境校验
- 操作系统版本、补丁、JDK版本需符合当前Oracle版本要求(参考MOS文档ID 169706.1);
- 内存与交换空间:小内存(<2GB)建议交换空间为内存的1.5倍,大内存(>8GB)建议交换空间与内存大小一致;
- ORACLE_HOME空间:建议预留30GB以上,Oracle 11g RAC环境需预留50GB以上。
2. 环境变量与资源限制
- 库函数环境变量:Linux系统配置
LD_LIBRARY_PATH,AIX系统配置LIBPATH,HP-UX系统配置SHLIB_PATH,64位系统需注意32位库函数的兼容配置; - 操作系统资源限制:AIX系统关注
maxuproc(默认128,需根据实例进程数调整),HP-UX系统关注NFILES(文件句柄数)和NPROC(进程数); - 共享内存参数:Linux系统需检查
kernel.shmmax,确保其值不小于SGA大小,避免SGA被分割为多个共享内存段。
3. 性能与I/O相关配置
- 文件缓冲内存参数:HP-UX的
DBC_MAXPCT、AIX的MAXPERM%和MAXCLIENT%,建议调整为5~10; - 异步I/O(AIO):AIX系统若未开启AIO,可能导致sqlplus连接时出现ORA-12547错误,需提前启用;
- 操作系统日志:检查Solaris(/var/adm/messages)、Linux(/var/log/messages)等系统日志,排除硬件或内核错误。
4. 存储与权限校验
- 卷组、裸设备的属主需为oracle用户,读写权限设置为640;
- 若使用HA或MC/SG集群软件,需确认集群配置准确,避免资源冲突。
案例警示:某客户将数据库从PC服务器迁移至小型机后,因SGA(7136MB)和PGA(1500MB)配置超过主机物理内存(7744MB),导致系统频繁交换内存、I/O阻塞,业务响应缓慢。后续调整内存参数后,性能显著提升。
四、数据库文件系统规划:稳定运行的基础
Oracle 10g及以上版本支持文件系统、裸设备、ASM三种存储方式,文件系统规划需兼顾性能、可靠性和扩展性,核心要点如下:
1. 存储类型与空间评估
- 文件系统选型:优先选择操作系统原生文件系统(如Linux EXT3、AIX JFS2)或Oracle专用存储(OCFS2、ACFS),避免网络文件系统(NFS)挂载在根目录;
- 空间预留:需满足数据库长期增长需求,不支持在线扩容的文件系统(如HP-UX VXFS)需提前预留30%以上冗余空间。
2. RAID与条带配置
- RAID选择:OLTP系统建议使用RAID10(可靠性更高),数据仓库(OLAP)可使用RAID5(节省存储空间);
- 条带深度:OLTP系统建议1MB(提升并发I/O吞吐量),OLAP系统建议256KB~512KB(均衡序列化I/O负载),避免条带深度与DB_BLOCK_SIZE不一致导致的I/O浪费。
3. 避免热点盘与存储隔离
- 在线日志与UNDO表空间:需与业务数据文件物理隔离,在线日志建议取消MEMBER配置(减少I/O争用),UNDO表空间需独立存储;
- 归档与闪回空间:归档日志需存放在与数据文件不同的存储设备,闪回空间需预留足够容量,且不可用操作系统命令直接删除闪回日志。
4. 遵循OFA规范
文件系统规划需符合Oracle最优灵活架构(OFA),避免将ORACLE_HOME建立在根文件系统,建议目录结构如下:
$ORACLE_BASE/admin/$ORACLE_SID/bdump # 后台进程跟踪文件
$ORACLE_BASE/admin/$ORACLE_SID/udump # 用户进程跟踪文件
/oradata/$ORACLE_SID/ # 数据文件、日志文件
五、日志目录与密码文件创建:初始化准备
1. 日志文件目录创建
Oracle运行过程中会生成警告日志、审计日志、跟踪文件等,需提前创建专用目录并授权,以SID为zhoul为例:
export ORACLE_SID=zhoul
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump
chown -R oracle:dba $ORACLE_BASE/admin/$ORACLE_SID
各目录核心作用:
- bdump:存放警告日志和DBWR、LGWR等后台进程跟踪文件;
- adump:存放审计信息,默认对sysdba连接审计,空间不足会导致ORA-09817错误;
- udump:存放用户进程跟踪文件,需定期清理避免空间溢出;
- cdump:存放核心转储文件(core文件),记录进程异常终止时的内存状态。
2. 密码文件创建
密码文件用于数据库特权用户(如SYS、SYSTEM)的认证,创建命令如下:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y
参数说明:
file:指定密码文件路径,默认存放在$ORACLE_HOME/dbs目录;password:SYS用户的密码;entries:允许连接的最大特权用户数;force=y:覆盖已存在的密码文件。
六、数据库参数文件配置:性能优化的核心
参数文件(init.ora或spfile.ora)定义了数据库的核心配置,直接影响运行性能,需重点关注以下关键参数:
1. 内存相关参数(SGA与PGA)
Oracle内存分为SGA(系统全局区)和PGA(程序全局区),分配比例需结合业务类型调整:
| 业务类型 | SGA设置建议 | PGA设置建议 |
|---|---|---|
| OLTP(高并发短事务) | 不超过物理内存的50% | 1.8GB~3.6GB(避免过大导致进程内存争用) |
| OLAP(低并发长事务) | 不超过物理内存的40% | 6.7GB~9.75GB(支持排序、HASH JOIN操作) |
示例:主机内存32GB的OLTP系统,参数配置如下:
*.sga_target=16384M # SGA总大小16GB
*.pga_aggregate_target=3072M # PGA总大小3GB
注意:需预留5GB左右内存给操作系统进程,避免内存耗尽导致系统HANG。
2. 静态关键参数(需重启生效)
processes:允许连接的最大进程数(含后台进程、用户进程),OLTP系统建议设置为500~1000;db_writer_processes:DBWR进程数,默认取1和cpu_count/8的最大值,I/O繁忙时可适当增大;db_files:数据文件最大数量,默认200,建议调整为500(避免后续扩容受限);db_block_size:数据块大小,默认8KB,一旦设定不可更改,大对象(LOB)存储建议使用16KB或32KB。
3. 动态优化参数
open_cursors:会话最大打开游标数,OLTP系统建议1000~2000,避免ORA-01000错误;session_cached_cursors:缓存的会话游标数,10g默认20,11gR2默认50,可提升SQL解析效率;undo_management:UNDO管理模式,建议设置为AUTO,自动管理回滚段。
4. 典型参数文件示例(OLTP系统,SID=zhoul)
*.user_dump_dest='/oracle/app/admin/zhoul/udump'
*.audit_file_dest='/oracle/app/admin/zhoul/adump'
*.background_dump_dest='/oracle/app/admin/zhoul/bdump'
*.core_dump_dest='/oracle/app/admin/zhoul/cdump'
*.compatible='10.2.0.5.0'
*.control_files='/oradata/zhoul/control01.ctl'
*.db_name='zhoul'
*.processes=500
*.job_queue_processes=10
*.sga_target=16384M
*.db_block_size=8192
*.db_files=500
*.open_cursors=500
*.session_cached_cursors=100
*.undo_management='AUTO'
*.undo_tablespace='undotbs'
七、数据库创建脚本执行:实例初始化
参数文件配置完成后,即可启动实例至NOMOUNT状态,执行建库脚本初始化数据库。根据是否使用OMF(Oracle Managed Files)特性,分为两种创建方式:
1. 常规建库脚本(手动指定文件路径)
CREATE DATABASE zhoul
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE
GROUP 1('/oradata/zhoul/redo01.log') SIZE 100M,
GROUP 2('/oradata/zhoul/redo02.log') SIZE 100M,
GROUP 3('/oradata/zhoul/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/oradata/zhoul/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/oradata/zhoul/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE '/oradata/zhoul/temp01.dbf' SIZE 20M REUSE
DEFAULT TABLESPACE users
DATAFILE '/oradata/zhoul/users01.dbf' SIZE 20M REUSE
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
UNDO TABLESPACE undotbs
DATAFILE '/oradata/zhoul/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
脚本关键配置说明:
- 日志文件:建议创建5组以上,每组大小500MB,I/O紧张时不设置MEMBER;
- 字符集:ZHS16GBK支持全部中文,AL16UTF16为国家字符集;
- 表空间:SYSTEM(系统表空间)、SYSAUX(辅助表空间)、UNDOTBS(回滚表空间)、TEMP(临时表空间)、USERS(默认永久表空间)需独立配置,避免业务数据占用SYSTEM表空间。
2. OMF特性建库(自动管理文件)
Oracle 10g及以上支持OMF特性,无需指定文件路径和名称,数据库自动管理文件生命周期:
-- 先设置OMF参数
ALTER SYSTEM SET DB_CREATE_FILE_DEST='/oradata/zhoul';
ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_1='/oradata/zhoul/logs';
-- 执行建库命令
CREATE DATABASE zhoul
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
UNDO TABLESPACE undotbs
DEFAULT TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE users;
简化版命令(仅创建核心组件,需后续补充表空间):
CREATE DATABASE zhoul;
八、数据字典创建:数据库组件激活
数据库创建完成后,需执行脚本创建数据字典和PL/SQL包,确保数据库功能可用,步骤如下:
- 连接数据库:
sqlplus / as sysdba - 执行数据字典脚本:
@?/rdbms/admin/catalog.sql # 创建核心数据字典视图
@?/rdbms/admin/catproc.sql # 创建PL/SQL相关包和存储过程
@?/rdbms/admin/utlrp.sql # 编译无效对象
conn system/oracle
@?/sqlplus/admin/pupbld.sql # 创建SQL*Plus产品配置表
脚本执行注意事项
- 执行前建议将数据库置于限制模式(
startup upgrade),避免其他会话干扰; - 共享池内存不足可能导致脚本执行失败,可临时增大
shared_pool_size; - 脚本可重复执行,修复数据字典损坏或组件失效问题。
验证组件状态:
SELECT COMP_ID, COMP_NAME, VERSION, STATUS FROM dba_registry;
正常情况下,CATALOG和CATPROC组件状态应为VALID。
九、命令行创建RAC数据库:多节点部署
RAC(Real Application Clusters)数据库的命令行创建流程与单节点类似,但需关注集群参数配置和节点同步,核心步骤如下:
1. 配置RAC全局参数(所有节点生效)
*.db_block_size=8192
*.db_cache_size=52428800
*.background_dump_dest='/oracle/app/admin/racdb/bdump'
*.control_files=("/oradata/racdb/control_01.ctl", "/oradata/racdb/control_02.ctl")
*.db_name=racdb
*.dbfiles=500
*.sga_target=5000M
*.pga_aggregate_target=1024M
*.undo_management=AUTO
*.cluster_database=true # 启用RAC模式
*.cluster_database_instances=2 # 节点数量
*.remote_listener=LISTENERS_RACDB # 远程监听
2. 配置节点专属参数(按节点区分)
-- 节点1(rac1)
rac1.instance_name=racdb1
rac1.instance_number=1
rac1.local_listener=LISTENER_RACDB1
rac1.thread=1
rac1.undo_tablespace=UNDOTBS1
-- 节点2(rac2)
rac2.instance_name=racdb2
rac2.instance_number=2
rac2.local_listener=LISTENER_RACDB2
rac2.thread=2
rac2.undo_tablespace=UNDOTBS2
3. 执行建库与节点同步
- 在节点1执行建库脚本(数据文件存放在共享文件系统);
- 为节点2创建UNDO表空间:
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/oradata/racdb/undotbs02.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
- 为节点2添加在线日志:
ALTER DATABASE ADD LOGFILE THREAD 2
GROUP 4 ('/oradata/racdb/redo2_01.dbf') SIZE 100M,
GROUP 5 ('/oradata/racdb/redo2_02.dbf') SIZE 100M,
GROUP 6 ('/oradata/racdb/redo2_03.dbf') SIZE 100M;
ALTER DATABASE ENABLE PUBLIC THREAD 2;
- 复制参数文件至节点2,启动节点2数据库;
- 注册实例至OCR:
srvctl add database -d racdb -o $ORACLE_HOME
srvctl add instance -d racdb -i racdb1 -n rac1
srvctl add instance -d racdb -i racdb2 -n rac2
srvctl start database -d racdb
十、数据库彻底删除:避免残留配置
Oracle提供drop database命令删除数据库,但仅删除核心数据文件,需手动清理残留配置,确保可重新创建同名实例:
1. 常规删除(物理文件清理)
startup mount # 启动实例至挂载状态
alter system enable restricted session; # 启用限制会话
drop database; # 删除数据库核心文件
该命令会删除数据文件、控制文件、日志文件、闪回文件,但不会删除参数文件、密码文件、日志目录等。
2. 彻底删除的手动步骤
- 关闭实例:
shutdown abort; - 删除残留文件:
- 数据文件、控制文件、日志文件、归档文件、闪回文件(通过
v$datafile、v$controlfile等视图查询路径); - 日志目录:
rm -rf $ORACLE_BASE/admin/$ORACLE_SID; - 数据库软件目录文件:
rm -rf $ORACLE_HOME/dbs/*$ORACLE_SID*;
- 数据文件、控制文件、日志文件、归档文件、闪回文件(通过
- 清理配置文件:
- 删除listener.ora、tnsnames.ora中该实例的注册信息;
- 删除/oratab(/etc/oratab或/var/opt/oracle/oratab)中的实例条目;
- 验证清理:确保无该实例相关的进程、文件或目录残留。
浙公网安备 33010602011771号