liuziyi

liuziyi

命令行创建与删除Oracle数据库:全流程实战指南

在Oracle数据库运维中,创建数据库是核心基础操作。相较于图形界面(DBCA)安装,命令行创建数据库具有更高的可控性,能清晰掌握数据库创建的完整流程,且适用于无图形界面的服务器环境。

一、创建数据库的核心流程

Oracle数据库的安装分为“软件安装”和“数据库创建”两步。在完成Oracle软件安装后,命令行创建数据库需遵循以下10个核心步骤,确保流程规范、配置合理:

  1. 检查操作系统环境,确认软硬件满足运行要求;
  2. 规划数据库文件系统,明确数据文件、日志文件等存储方案;
  3. 创建Oracle日志文件目录,用于存放警告日志、跟踪文件等;
  4. 创建Oracle密码文件,实现数据库用户认证;
  5. 配置数据库参数文件,优化内存分配、进程限制等核心参数;
  6. 执行建库脚本,初始化数据库实例、表空间等核心组件;
  7. 刷新数据字典并编译无效对象,确保数据库组件可用;
  8. 配置oratab文件,添加实例条目便于管理;
  9. 根据业务需求开启归档模式或闪回模式;
  10. 配置监听静态注册,确保客户端正常连接。

提示:创建数据库前,需优先规划不可更改或影响范围大的设置(如数据库名、字符集、数据块大小),避免后续调整带来的风险。

二、理解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.oraspfile$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包,确保数据库功能可用,步骤如下:

  1. 连接数据库:sqlplus / as sysdba
  2. 执行数据字典脚本:
@?/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. 在节点1执行建库脚本(数据文件存放在共享文件系统);
  2. 为节点2创建UNDO表空间:
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/oradata/racdb/undotbs02.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
  1. 为节点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;
  1. 复制参数文件至节点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. 彻底删除的手动步骤

  1. 关闭实例:shutdown abort
  2. 删除残留文件:
    • 数据文件、控制文件、日志文件、归档文件、闪回文件(通过v$datafilev$controlfile等视图查询路径);
    • 日志目录:rm -rf $ORACLE_BASE/admin/$ORACLE_SID
    • 数据库软件目录文件:rm -rf $ORACLE_HOME/dbs/*$ORACLE_SID*
  3. 清理配置文件:
    • 删除listener.ora、tnsnames.ora中该实例的注册信息;
    • 删除/oratab(/etc/oratab或/var/opt/oracle/oratab)中的实例条目;
  4. 验证清理:确保无该实例相关的进程、文件或目录残留。

posted on 2025-12-01 16:12  刘子毅  阅读(0)  评论(0)    收藏  举报

导航