努力
加油

在阿里云轻应用服务器上如何部署Oracle数据库?

先泼盆冷水:在阿里云轻应用服务器(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 软件

  1. 下载安装包:

    • 去 Oracle 官网下载 Linux x86-64 的 ZIP 包(如 linuxx64_19c_database.zip)。
    • 上传到服务器 /tmp 目录。
  2. 解压:

    su - oracle
    cd /tmp
    unzip linuxx64_19c_database.zip
    chown -R oracle:oinstall database
  3. 静默安装(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

五、 网络与安全配置(阿里云特有)

  1. 监听端口:
    Oracle 默认监听 1521 端口。
  2. 安全组放行:
    登录阿里云控制台 -> 轻应用服务器详情页 -> 安全组 -> 添加入方向规则:

    • 协议:TCP
    • 端口:1521
    • 授权对象:仅限你的 IP 地址(切勿设置为 0.0.0.0/0,否则会被暴力破解扫爆)
  3. 配置 TNS Listener:
    确保 listener.ora 中的 HOST 不是 localhost,而是服务器的公网 IP 或内网 IP。

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 你的公网IP)(PORT = 1521))
        )
      )

    重启监听:lsnrctl restart


六、 实战中的“坑”与建议

  1. 性能瓶颈:
    轻应用服务器是共享 CPU 和带宽的。Oracle 是重 IO 和内存密集型应用。你会发现 SQL 查询非常慢,尤其是在高并发下。

    • 建议:仅用于单用户或少量并发测试。开启归档日志模式会增加 IO 负担,测试环境可考虑关闭归档(需谨慎)。
  2. 备份问题:
    轻应用服务器重启后,IP 可能会变(取决于你购买的是否为固定 IP)。如果 IP 变了,客户端连接会失效。

    • 建议:使用域名解析指向服务器,或在应用层配置动态 IP 更新机制。
  3. 替代方案思考:
    如果你只是需要一个 Oracle 兼容的环境来做开发测试,强烈建议改用 Docker。

    • 拉取官方镜像:docker run -d -p 1521:1521 -e ORACLE_PWD=yourpassword oracle/database:19.3.0-ee
    • Docker 隔离性好,资源限制明确,且迁移方便。
    • 但在轻应用服务器上跑 Docker 版的 Oracle,依然面临内存不足的问题,建议将容器内存限制在 2G 以内,并预留足够 Swap。
  4. 合规性提醒:

    • 严禁在生产环境使用轻应用服务器承载 Oracle 数据库,违反 Oracle 许可协议且存在巨大安全风险。
    • 如需正式生产环境,请升级至 ECS 云服务器,并选用 SSD 云盘,同时购买 Oracle 正版 License 或使用云厂商提供的 RDS for Oracle 托管服务。

总结

在阿里云轻应用服务器上部署 Oracle 是一条充满技术细节的路径,适合“折腾”和学习。但对于任何严肃的应用场景,请选择更合适的云产品。记住:数据库的核心是稳定和数据一致性,硬件资源的缩水往往以牺牲这两者为代价。