在Ubuntu上实现Oracle自动化运维的完整指南
安装Oracle客户端工具
若Oracle数据库未部署在Ubuntu上,需先安装Oracle Instant Client(轻量级客户端)及依赖包。通过以下命令完成:
sudo apt update
sudo apt install libaio1 unzip wget
wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linux.x64-21.9.0.0.0dbru.zip
unzip instantclient-basiclite-linux.x64-21.9.0.0.0dbru.zip -d /opt/oracle
export ORACLE_HOME=/opt/oracle/instantclient_21_9
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
将上述环境变量添加至~/.bashrc或/etc/profile,执行source ~/.bashrc使配置生效。
配置Oracle监听器(可选)
若需管理Oracle监听器(监听客户端连接),可通过lsnrctl工具操作。为简化管理,可将监听器配置为系统服务:
创建服务文件/etc/systemd/system/oracle-listener.service,内容如下:
[Unit]
Description=Oracle Database Listener
After=network.target
[Service]
Type=forking
ExecStart=/opt/oracle/instantclient_21_9/lsnrctl start
ExecStop=/opt/oracle/instantclient_21_9/lsnrctl stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
执行systemctl daemon-reload、systemctl enable oracle-listener、systemctl start oracle-listener完成配置。
数据库备份自动化
使用expdp(数据泵)工具实现逻辑备份,通过Shell脚本封装备份逻辑,并加入错误检查:
#!/bin/bash
# 设置备份参数
BACKUP_DIR="/opt/oracle/backups"
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/expdp_$DATE.dmp"
LOG_FILE="$BACKUP_DIR/expdp_$DATE.log"
DB_USER="sys"
DB_PASS="your_password"
DB_NAME="orcl"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份
expdp $DB_USER/$DB_PASS@$DB_NAME directory=DATA_PUMP_DIR dumpfile=$BACKUP_FILE logfile=$LOG_FILE full=y
# 检查备份结果
if [ $? -eq 0 ]; then
echo "$(date): Backup succeeded: $BACKUP_FILE" >> /var/log/oracle_backup.log
else
echo "$(date): Backup failed!" >> /var/log/oracle_backup.log
exit 1
fi
赋予脚本执行权限:chmod +x /opt/oracle/scripts/backup_oracle.sh。
监听器状态检查自动化
编写脚本检查监听器是否运行,并将结果写入日志:
#!/bin/bash
STATUS=$(/opt/oracle/instantclient_21_9/lsnrctl status | grep "Listener Status")
echo "$(date): $STATUS" >> /var/log/oracle_listener.log
可结合邮件通知(如mail命令)在监听器异常时发送告警。
使用Ubuntu的cron服务调度脚本定期执行。编辑当前用户的crontab:
crontab -e
添加以下内容,实现每天凌晨2点执行备份、每小时检查监听器状态:
0 2 * * * /opt/oracle/scripts/backup_oracle.sh
0 * * * * /opt/oracle/scripts/check_listener.sh
保存后,cron会自动加载任务。可通过crontab -l查看当前用户的定时任务。
命令行监控(适合技术人员)
通过SQL*Plus执行SQL查询,获取数据库性能指标(如连接数、活跃SQL、表空间使用率):
-- 查看当前连接数
SELECT COUNT(*) FROM v$session;
-- 查看活跃SQL(执行次数>1000的SQL)
SELECT sql_text FROM v$sql WHERE executions > 1000 ORDER BY executions DESC FETCH FIRST 5 ROWS ONLY;
-- 查看表空间使用率
SELECT tablespace_name, ROUND((used_space/total_space)*100, 2) AS usage_rate
FROM dba_tablespace_usage_metrics;
将上述查询封装为脚本,定期采集数据并写入日志。
开源监控工具(推荐)
Oracle Enterprise Manager (OEM)
若企业有Oracle OEM license,可通过OEM实现集中化管理。OEM支持自动采集Oracle数据库的性能指标、生成AWR报告、自动执行备份策略、发送告警通知(邮件/短信)。通过OEM的图形化界面,可快速定位性能瓶颈(如慢SQL、锁等待),并一键执行修复操作。
Ansible自动化配置
使用Ansible编写Playbook,实现Oracle环境的批量配置(如批量安装Oracle Instant Client、批量启动监听器、批量执行SQL脚本)。例如,以下Playbook用于安装Oracle Instant Client:
- name: Install Oracle Instant Client on Ubuntu
hosts: oracle_servers
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install dependencies
apt:
name: ["libaio1", "unzip", "wget"]
state: present
- name: Download Oracle Instant Client
get_url:
url: "https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linux.x64-21.9.0.0.0dbru.zip"
dest: "/tmp/instantclient.zip"
- name: Unzip Oracle Instant Client
unarchive:
src: "/tmp/instantclient.zip"
dest: "/opt/oracle"
remote_src: yes
- name: Set environment variables
lineinfile:
path: "/etc/profile"
line: 'export ORACLE_HOME=/opt/oracle/instantclient_21_9'
state: present
- name: Reload profile
shell: source /etc/profile
通过ansible-playbook命令执行Playbook,可实现多台Ubuntu服务器的Oracle环境自动化配置。
SYSDBA或对应角色的权限)。gpg加密),敏感信息(如数据库密码)需通过环境变量或加密文件存储,避免明文泄露。