一、文档说明:

仅针对阿里龙蜥8.6

根据多年经验,理论上centOS/麒麟v10/openeuler同样适用

前置准备(必要条件)

1.必须开启swap,且大于150MB

2.关闭防火墙和selinux

3.本机主机名和IP地址一定要写入hosts文件

4.本环境所需Oracle12c安装包请移步官网下载

https://www.oracle.com/cn/ #资源→客户下载→登录后搜索oracle 12.1.0.2.0

5.本环境所需配置文件请访问https://download.csdn.net/download/qq_59647823/90873702

二、环境准备

1.修改主机名

hostnamectl set-hostname test-oracle01

2.写入hosts文件

echo '本机IP  本机主机名 '>> /etc/hosts

3.环境检查

systemctl status firewalld.service  # 查看防火墙状态
getenforce #确保disabled 状态
free -h #查看swap是否启用 如果没有swap分区请看本节第5小节创建swap分区

4.安装依赖

yum -y install binutils  gcc gcc-c++ \
glibc glibc-devel ksh libgcc libstdc++ libstdc++-devel libaio libaio-devel \
libXext libXtst libX11 libXau libxcb libXi make sysstat unzip  vim smartmontools libnsl

5.创建swap分区(如果已有swap分区请忽略此步)

fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab
free -h

6.创建用户创建组

groupadd oinstall 
groupadd dba
useradd -g oinstall -G dba oracle #创建oracle,添加用户到主组oinstall,附加组dba
echo Cpttzj666 | passwd --stdin oracle

7.调整内核参数 (根据本机内存大小修改kernel.shmall和kernel.shmmax两个参数即可)

cat > /etc/sysctl.conf <<EOF
fs.aio-max-nr = 4194304  
# 异步I/O(AIO)请求的最大数量,用于控制同时发起的异步I/O操作数,提高I/O密集型应用的性能
fs.file-max = 27263000  
# 系统范围内所有进程可打开的文件句柄总数上限,防止文件句柄耗尽导致服务异常(建议根据服务器内存调整,如每GB内存约40万)
kernel.shmall = 16777216  
# 系统可分配的共享内存总量(以页为单位,每页4KB),计算公式:内存大小(GB) * 0.5 / 4KB = 目标值(示例:64GB*0.5=32GB=32*1024*1024KB /4KB=8388608,此处数值可能需根据实际内存调整)
kernel.shmmax = 34359738368  
# 单个共享内存段的最大字节数(建议设为物理内存的50%-75%,示例:64GB*0.5=32GB=32*1024*1024*1024=34359738368)
kernel.shmmni = 4096  
# 系统中允许的共享内存段数量上限,保持默认值通常足够,用于控制共享内存段的创建数量
kernel.sem = 250 32000 100 128  
# 信号量参数(依次为:semmsl/semmns/semmni/semopm)  
# semmsl:每个信号量集合中的最大信号量数  
# semmns:系统中信号量的总数上限  
# semmni:系统中信号量集合的总数上限  
# semopm:单个semop()系统调用中允许的最大操作数  
# 调整后提高数据库并发处理能力,适用于高负载场景
net.ipv4.ip_local_port_range = 1024 65535  
# 本地端口号的可用范围(客户端主动连接时分配的端口),扩大范围可支持更多并发连接
net.core.rmem_default = 524288  
# TCP套接字接收缓冲区(SO_RCVBUF)的默认大小(字节),增加后提升网络数据接收效率(默认212992,此处设为512KB)
net.core.rmem_max = 16777216  
# TCP套接字接收缓冲区的最大大小(字节),允许单个套接字使用更大的缓冲区(此处设为16MB)
net.core.wmem_default = 524288  
# TCP套接字发送缓冲区(SO_SNDBUF)的默认大小(字节),增加后提升网络数据发送效率(默认212992,此处设为512KB)
net.core.wmem_max = 16777216  
# TCP套接字发送缓冲区的最大大小(字节),允许单个套接字使用更大的发送缓冲区(此处设为16MB)
net.core.netdev_max_backlog = 250000  
# 网络设备接收数据包的队列长度,当内核处理速度慢于接收速度时,用于缓存未处理的数据包,防止丢包(高并发网络场景需增大此值)
net.ipv4.tcp_max_syn_backlog = 8192  
# TCP三次握手时SYN请求队列的最大长度,用于应对SYN Flood攻击或高并发连接请求,减少连接超时
net.ipv4.tcp_tw_reuse = 1  
# 允许重用处于TIME-WAIT状态的套接字(需配合net.ipv4.tcp_timestamps=1使用),提高端口复用率,减少端口耗尽问题
net.ipv4.tcp_fin_timeout = 15  
# 套接字从FIN-WAIT-2状态到CLOSED状态的超时时间(秒),缩短超时时间可加速释放无效连接,回收资源
EOF
sysctl -p  # 使内核参数立即生效

8.调整ulimits(别问啥意思,照抄就行。必须要问的话,回家问妈妈去)

echo "oracle soft nofile 65536" >>/etc/security/limits.conf
echo "oracle hard nofile 65536" >>/etc/security/limits.conf
echo "oracle soft nproc 16384" >>/etc/security/limits.conf
echo "oracle hard nproc 16384" >>/etc/security/limits.conf
echo "oracle stack nproc 10240" >>/etc/security/limits.conf
echo "oracle stack nproc 10240" >>/etc/security/limits.conf

9.创建安装目录

mkdir -p /oracle/app/oracle/product/12c/db_1  
mkdir -p /oracle/app/oracle/oradata
mkdir -p /oracle/app/oracle/flash_recovery_area
mkdir -p /oracle/app/oracle/archlog
chown -R oracle:oinstall /oracle


10.调整环境变量

su - oracle 
vi .bash_profile #使用cat>> < eof 变量会出问题,暂时先用vi手动粘贴
COLUMNS=132; export COLUMNS
LINES=47; export LINES
EDITOR=vi; export EDITOR
 
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12c/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
SHLIB_PATH=$LD_LIBRARY_PATH;export SHLIB_PATH
NLS_LANG=American_America.zhs16gbk;export NLS_LANG
ORA_NLS10=$ORACLE_HOME/nls/data;export ORA_NLS10
TNS_ADMIN=$ORACLE_HOME/network/admin;export TNS_ADMIN
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
alias glance=/opt/perf/bin/glance:x
alias gohome='cd /oracle/app/oracle/product/12c'
alias cdb='cd /oracle/app/oracle/admin/orcl/bdump'
alias cdu='cd /oracle/app/oracle/admin/orcl/udump'
ulimit -s unlimited

source .bash_profile

三、正式安装


1.解压安装包

#上传四个文件 
#12.1.0.2.0-db_install.rsp #安装数据库的响应文件
#12.1.0.2.0-dbca.rsp       #创建数据库实例的响应文件
#Oracle Database 12.1.0.2.0 for Linux x86-64_1of2.zip #oracle 12c 安装包1
#Oracle Database 12.1.0.2.0 for Linux x86-64_2of2.zip #oracle 12c 安装包2

#注意文件的属主和数组
unzip Oracle\ Database\ 12.1.0.2.0\ for\ Linux\ x86-64_1of2.zip
unzip Oracle\ Database\ 12.1.0.2.0\ for\ Linux\ x86-64_2of2.zip

2.安装数据库软件

#修改配置文件 /home/oracle/12.1.0.2.0-db_install.rsp,主机名修改成本机主机名第38行
/home/oracle/database/runInstaller  -silent -responseFile /home/oracle/12.1.0.2.0-db_install.rsp

3.root执行配置脚本

#上述成功后根据提示root用户运行下边两个脚本
/oracle/app/oraInventory/orainstRoot.sh
/oracle/app/oracle/product/12c/db_1/root.sh

4.测试数据库是否安装成功

sqlplus / as sysdba #输出以下内容就没问题了
[oracle@hyc01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue May 20 17:26:03 2025

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> ^C

5.创建数据库实例,根据实际情况编辑12.1.0.2.0-dbca.rsp文件,不懂就问AI,改完之后就运行以下命令

dbca -silent -createDatabase  -responseFile  /home/oracle/12.1.0.2.0-dbca.rsp

6.打开监听

netca /silent /responseFile /home/oracle/database/response/netca.rsp

7.验证监听(1521在监听就证明成功了)

lsnrctl status
ss -anput |grep 1521

8.创建用户、角色、表空间(按需,下面仅作示例)

sqlplus / as sysdba

#其他按需创建角色、用户和表空间即可
#角色、用户、和表空间之间的关系简单说明(仅针对单实例)
#角色:是一组权限的集合,用于简化权限管理。
#用户:通过绑定角色来获得权限,无需逐一授予单个权限。
#表空间:是逻辑存储单元,用户创建的对象(如表、索引)实际存储在表空间中。每个用户必须指定一个默认表空间和临时表空间:
#----默认表空间:存储用户创建的永久性对象(如表、视图)。
#----临时表空间:用于排序、哈希连接等临时操作。
#空间配额(Quota):可限制用户对特定表空间的使用上限。例如:
# ALTER USER user1 QUOTA 1G ON tablespace01;
#此时,即使 tablespace01 总容量为 5GB,用户 user1 最多只能使用 1GB。


#创建角色
CREATE ROLE 角色名; -- 角色名按需修改
#给角色授权
-- 授予 EXP_FULL_DATABASE 权限
GRANT EXP_FULL_DATABASE TO 角色名;

-- 授予 IMP_FULL_DATABASE 权限
GRANT IMP_FULL_DATABASE TO 角色名;

-- 授予 CONNECT 角色
GRANT CONNECT TO 角色名;

-- 授予 RESOURCE 角色
GRANT RESOURCE TO 角色名;

#创建表空间
CREATE TABLESPACE 表空间名
DATAFILE '/oracle/app/oracle/oradata/orcl/此处建议改成表空间名.dbf' -- 表空间对应文件
SIZE 1000M -- 表空间初始大小
AUTOEXTEND ON; -- 表空间满了之后自动伸缩

#创建用户 
CREATE USER user1 IDENTIFIED BY 密码 -- 这里输入自定义密码
DEFAULT TABLESPACE 表空间名 -- 替换表空间名,这里表示用户的默认表空间
TEMPORARY TABLESPACE temp -- 默认的临时表空间 
QUOTA UNLIMITED 表空间名; -- 这里意思是user1无限制的使用表空间 

#给用户授权
GRANT 角色 TO 用户; 

更多推荐