先泼盆冷水:在阿里云轻应用服务器(Cloud Virtual Server, CVS)上部署 Oracle 数据库,属于“小马拉大车”的典型场景。虽然技术上可行,但生产环境极度不推荐。如果你是为了学习、测试或极轻量级的内部演示,以下是基于真实踩坑经验的实操指南。
核心前提:资源红线
轻应用服务器的配置通常较低(如 1核2G、2核4G)。Oracle 官方最低要求通常是 2GB RAM(建议 4GB+),且对 Swap 分区和内核参数有严格要求。
如果内存小于 4GB,强烈建议不要尝试。 即使能启动,频繁 OOM(内存溢出)会导致服务不可用。以下方案基于 2核4G 及以上配置假设。
一、 系统选型与基础准备
1. 操作系统选择
- 首选:CentOS Stream 8/9 或 Rocky Linux 8/9。
- 理由:Oracle 19c 对这些发行版支持最好,且社区资源丰富。
- 注意:阿里云轻应用服务器默认镜像可能较旧,建议手动创建实例时选择最新 LTS 版本。
- 避坑:不要选 Ubuntu 或 Debian。虽然也能装,但需要大量手动编译依赖库,调试成本极高,不符合“快速部署”初衷。
2. 磁盘规划
- 轻应用服务器默认磁盘较小(通常 20-40GB)。
- 关键操作:在安装 Oracle 前,务必扩容数据盘。Oracle 软件 + 基本数据库文件至少需要 15-20GB 空闲空间。建议在控制台直接挂载一块额外云盘(如 50GB SSD),格式化为 ext4/xfs,挂载到
/u01或/data/oracle。
二、 安装前置条件(最容易卡住的地方)
登录服务器后,按顺序执行以下步骤。所有命令需使用 root 用户。
1. 关闭防火墙和 SELinux
# 停止并禁用 firewalld
systemctl stop firewalld
systemctl disable firewalld
# 临时禁用 SELinux
setenforce 0
# 永久修改 /etc/selinux/config 中的 SELINUX=disabled
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
2. 安装依赖包
Oracle 对 glibc、gcc、libaio 等库版本敏感。
yum install -y gcc gcc-c++ make binutils compat-libcap1 compat-libstdc++-33
glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel
sysstat unixODBC unixODBC-devel ksh elfutils-libelf
注:如果是 CentOS 8/9,可能需要启用 PowerTools/Codeready Builder 仓库才能找到部分包。
3. 创建用户和组
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
useradd -u 501 -g oinstall -G dba,oper oracle
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01
4. 配置内核参数(关键!)
编辑 /etc/sysctl.conf,添加以下内容:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295 # 根据实际内存调整,一般设为物理内存的一半左右
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行 sysctl -p 生效。
5. 配置用户环境变量
切换到 oracle 用户,编辑 ~/.bash_profile:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl # 你的实例名
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64
执行 source ~/.bash_profile。
6. 设置 Swap 分区(针对小内存机器)
Oracle 安装程序会检查 Swap 大小。如果物理内存 < 2GB,Swap 必须 >= 1.5GB。
dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
三、 安装 Oracle 软件
-
下载安装包:
- 去 Oracle 官网下载 Linux x86-64 的 ZIP 包(如
linuxx64_19c_database.zip)。 - 上传到服务器
/tmp目录。
- 去 Oracle 官网下载 Linux x86-64 的 ZIP 包(如
-
解压:
su - oracle cd /tmp unzip linuxx64_19c_database.zip chown -R oracle:oinstall database -
静默安装(Silent Install):
由于轻应用服务器通常没有图形界面(VNC/X11 转发不稳定),推荐使用静默安装。创建一个响应文件
db_install.rsp,重点修改:oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory SELECTED_LANGUAGES=en,zh_CN ORACLE_HOSTNAME=你的服务器公网IP或主机名 ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.RAC.ONE_NODE=true oracle.install.db.CLUSTER_NAMES= oracle.install.db.isCustomInstall=false执行安装:
cd /tmp/database ./runInstaller -silent -responseFile /tmp/db_install.rsp -ignorePrereqFailure注意:加上
-ignorePrereqFailure是因为小内存机器容易因预检失败而中断。安装完成后,按照提示以
root身份执行两个脚本(通常在/u01/app/oraInventory/orainstRoot.sh和/u01/app/oracle/product/19.0.0/dbhome_1/root.sh)。
四、 创建数据库实例
同样使用静默方式创建 DB。
创建响应文件 dbca.rsp:
gdbName=orcl
sid=orcl
templateName=General_Purpose.dbc
sysPassword=YourStrongPassword123!
systemPassword=YourStrongPassword123!
datafileDestination=/u01/app/oracle/oradata
storageType=FS
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
sampleSchema=true
memoryPercentage=30 # 轻应用服务器内存小,调低此项
databaseType=MULTIPURPOSE
automaticMemoryManagement=false
totalMemory=3072 # 单位MB,根据你的实际内存调整
执行 DBCA:
su - oracle
dbca -silent -responseFile /tmp/dbca.rsp
五、 网络与安全配置(阿里云特有)
- 监听端口:
Oracle 默认监听 1521 端口。 - 安全组放行:
登录阿里云控制台 -> 轻应用服务器详情页 -> 安全组 -> 添加入方向规则:- 协议:TCP
- 端口:1521
- 授权对象:仅限你的 IP 地址(切勿设置为 0.0.0.0/0,否则会被暴力破解扫爆)
- 配置 TNS Listener:
确保listener.ora中的HOST不是localhost,而是服务器的公网 IP 或内网 IP。LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 你的公网IP)(PORT = 1521)) ) )重启监听:
lsnrctl restart
六、 实战中的“坑”与建议
-
性能瓶颈:
轻应用服务器是共享 CPU 和带宽的。Oracle 是重 IO 和内存密集型应用。你会发现 SQL 查询非常慢,尤其是在高并发下。- 建议:仅用于单用户或少量并发测试。开启归档日志模式会增加 IO 负担,测试环境可考虑关闭归档(需谨慎)。
-
备份问题:
轻应用服务器重启后,IP 可能会变(取决于你购买的是否为固定 IP)。如果 IP 变了,客户端连接会失效。- 建议:使用域名解析指向服务器,或在应用层配置动态 IP 更新机制。
-
替代方案思考:
如果你只是需要一个 Oracle 兼容的环境来做开发测试,强烈建议改用 Docker。- 拉取官方镜像:
docker run -d -p 1521:1521 -e ORACLE_PWD=yourpassword oracle/database:19.3.0-ee - Docker 隔离性好,资源限制明确,且迁移方便。
- 但在轻应用服务器上跑 Docker 版的 Oracle,依然面临内存不足的问题,建议将容器内存限制在 2G 以内,并预留足够 Swap。
- 拉取官方镜像:
-
合规性提醒:
- 严禁在生产环境使用轻应用服务器承载 Oracle 数据库,违反 Oracle 许可协议且存在巨大安全风险。
- 如需正式生产环境,请升级至 ECS 云服务器,并选用 SSD 云盘,同时购买 Oracle 正版 License 或使用云厂商提供的 RDS for Oracle 托管服务。
总结
在阿里云轻应用服务器上部署 Oracle 是一条充满技术细节的路径,适合“折腾”和学习。但对于任何严肃的应用场景,请选择更合适的云产品。记住:数据库的核心是稳定和数据一致性,硬件资源的缩水往往以牺牲这两者为代价。
云技术博客