首页 >
问答 >
云计算 >
Ubuntu Oracle数据库如何进行定期维护
Ubuntu Oracle数据库如何进行定期维护
小樊
38
2025-11-19 04:09:34
Ubuntu上Oracle数据库定期维护实操清单
一 维护目标与节奏
目标:保障数据库高可用 、可恢复 、性能稳定 、安全合规 。
建议节奏:
每日:实例与进程健康检查、告警日志巡检、表空间使用率检查、RMAN/Data Pump备份与清理、慢SQL巡检。
每周:统计信息收集、索引与SQL优化复盘、备份恢复演练、空间与对象清理。
每月/每季度:参数与容量评估、补丁与升级评估、容灾演练(如Data Guard)、审计与权限复核。
二 每日例行检查与备份
实例与进程
登录检查:sqlplus / as sysdba → SELECT status FROM v$instance; 确认为OPEN 。
进程检查:ps -ef | grep ora_ 确认ora_pmon、ora_dbw0、ora_lgwr 等进程存在。
告警与跟踪日志
告警日志:tail -f $ORACLE_BASE//bdump/alert_.log,关注ORA- 、表空间满 、归档切换失败 等。
监听日志:检查 $ORACLE_HOME/diag/tnslsnr/*/trace/listener.log 的连接与错误。
表空间与数据文件
使用率查询(示例):
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,2) AS used_mb,
ROUND(SUM(maxbytes)/1024/1024,2) AS max_mb,
ROUND(SUM(bytes)/SUM(maxbytes)*100,2) AS pct_used
FROM dba_data_files GROUP BY tablespace_name;
扩容示例:ALTER TABLESPACE ADD DATAFILE ‘/path/newfile.dbf’ SIZE 1G;
数据文件状态:SELECT file_name, status FROM dba_data_files; 如OFFLINE 则执行:ALTER DATABASE DATAFILE ‘’ ONLINE;
备份策略与执行
RMAN热备(需归档模式):
rman target /
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
DELETE NOPROMPT OBSOLETE;
Data Pump逻辑备份(示例):
expdp system/@orcl directory=DATA_PUMP_DIR dumpfile=expdp_$(date +%F).dmp logfile=expdp_$(date +%F).log
备份验证与清理:
RMAN> CROSSCHECK BACKUP; DELETE EXPIRED BACKUP;
定期在测试环境演练:RESTORE DATABASE; RECOVER DATABASE;
慢SQL与阻塞
监控长事务与TOP SQL,结合AWR/ASH或v$session、v$sql分析并优化。
三 每周与每月维护任务
统计信息与优化器
收集Schema统计信息:EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>‘’, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>‘FOR ALL COLUMNS SIZE AUTO’, cascade=>TRUE);
生成AWR/ADDM报告定位瓶颈:@?/rdbms/admin/awrrpt.sql、@?/rdbms/admin/addmrpt.sql。
索引与SQL
按需重建/重组碎片化索引:ALTER INDEX REBUILD;
使用EXPLAIN PLAN、SQL Tuning Advisor优化慢SQL,避免SELECT *,使用绑定变量 。
空间与对象治理
清理回收站:PURGE RECYCLEBIN;
归档/清理历史分区、失效对象编译、无主/过期作业清理。
安全与合规
权限复核:SELECT * FROM dba_sys_privs WHERE grantee=‘’; 回收过度授权。
审计日志归档与审查,确保关键操作可追溯。
补丁与升级
评估并应用季度补丁 ;升级前完整备份与回退方案,必要时使用DBUA 或手工升级流程。
四 自动化脚本与定时调度
备份脚本示例(RMAN)
示例(/opt/oracle/scripts/rman_backup.sh):
#!/bin/bash
. /home/oracle/.bash_profile
BACKUP_DIR=“/u01/oracle/backup/$(date +%F)”
mkdir -p “$BACKUP_DIR”
rman target / <<‘EOF’
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT ‘${BACKUP_DIR}/db_%U.bkp’;
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG DELETE INPUT;
BACKUP CURRENT CONTROLFILE;
DELETE NOPROMPT OBSOLETE;
}
CROSSCHECK BACKUP;
DELETE EXPIRED BACKUP;
EOF
赋权:chmod +x /opt/oracle/scripts/rman_backup.sh
备份脚本示例(Data Pump)
示例(/opt/oracle/scripts/expdp_backup.sh):
#!/bin/bash
. /home/oracle/.bash_profile
BACKUP_DIR=“/u01/oracle/dpump/$(date +%F)”
mkdir -p “$BACKUP_DIR”
expdp system/@orcl directory=DATA_PUMP_DIR
dumpfile=expdp_$(date +%F).dmp logfile=expdp_$(date +%F).log
parallel=2 job_name=expdp_daily
调度示例(cron)
每日2点RMAN全备:0 2 * * * /opt/oracle/scripts/rman_backup.sh >> /var/log/oracle/rman_backup.log 2>&1
每日3点Data Pump:0 3 * * * /opt/oracle/scripts/expdp_backup.sh >> /var/log/oracle/expdp_backup.log 2>&1
每周日4点统计信息:0 4 * * 0 /opt/oracle/scripts/gather_stats.sh
监控告警脚本(慢SQL示例)
示例(/opt/oracle/scripts/monitor_slow_sql.sh):
#!/bin/bash
. /home/oracle/.bash_profile
sqlplus -s /nolog <<‘EOF’
CONNECT system/@orcl
SET HEADING OFF FEEDBACK OFF
SELECT 'ALERT: Long SQL>1s: '||sql_text
FROM v$sql
WHERE elapsed_time > 1e9 AND status=‘EXECUTING’;
EXIT
EOF
如有输出则邮件/企业微信/钉钉告警
脚本要点
统一在oracle用户下运行,显式加载环境变量(ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH)。
日志落盘、按日分目录、保留策略与清理脚本配套。
五 关键注意事项与恢复演练
归档与保留
生产库建议开启归档模式 ,RMAN配置合理保留策略 (如恢复窗口),定期CROSSCHECK/DELETE EXPIRED。
备份验证与演练
定期在测试环境执行RESTORE/RECOVER 演练,验证备份可用性与恢复RPO/RTO。
容量与性能
监控表空间、UNDO、TEMP使用;结合AWR/ASH与OS工具(top、vmstat、iostat)定位瓶颈。
合理设置SGA_TARGET/PGA_AGGREGATE_TARGET 或启用自动内存管理,优化SQL与索引,必要时分区与并行。
高可用与容灾
关键业务建议配置Data Guard 或等效高可用方案,定期切换演练。
安全加固
最小权限、口令策略、审计开启与定期审查,限制高危操作与远程登录来源。