文章目录
- 安装后基线检查清单
-
- 场景:装完不查,出事在半年后
- 检查项一:数据库自启动
- 检查项二:归档模式
- 检查项三:redo 日志组数与大小
- 检查项四:undo 表空间
- 检查项五:临时表空间
- 检查项六:密码 180 天过期(高频翻车点)
- 检查项七:审计
- 检查项八:回收站
- 检查项九:监听自启
- 汇总:一键检查脚本
- 要点小结
安装后基线检查清单
场景:装完不查,出事在半年后
Oracle 默认安装完的状态是"能跑",不是"能上生产"。有几个坑不会立刻爆发,而是等到某个时间点集中兑现:
- 上线 180 天后的某个早晨,应用全线报 ORA-28001: the password has expired
- 磁盘写满那天才发现归档从没开过,或者开了归档没配清理
- 服务器重启一次,数据库和监听都没起来,才发现从来没配自启
这些都在装完当天花半小时查一遍就能排掉。下面按项过,最后汇总成一个脚本。
检查项一:数据库自启动
Oracle 默认不会随操作系统开机自动拉起。重启服务器后要用 sqlplus / as sysdba 手动 startup,忘了就全公司等你。
先看 /etc/oratab,找到自己实例那一行:
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:N
结尾的 N 表示 dbstart 脚本不启动它,改成 Y:
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
然后配置 dbstart 随系统启动。通用做法是写一个 systemd 服务(RHEL 7+):
cat > /etc/systemd/system/oracle.service << 'EOF'
[Unit]
Description=Oracle Database Startup
After=network.target
[Service]
Type=forking
User=oracle
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.0.0/dbhome_1
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.0.0/dbhome_1
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable oracle
验证:systemctl start oracle 后 ps -ef | grep pmon 确认实例起来。
检查项二:归档模式
SQL> archive log list
数据库日志模式 非存档模式
自动存档 已禁用
非归档模式下,redo 轮转覆盖后历史就没了——只能恢复到最近一次备份,备份之后的全部数据丢失。生产库基本都要开归档。
开启步骤(需要重启):
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST;
确认输出变为 数据库日志模式 存档模式、自动存档 已启用。开了归档必须配清理(RMAN 删除策略或定时 delete archivelog all completed before 'sysdate-7'),否则归档目录迟早写满,库会挂起等待归档空间。
检查项三:redo 日志组数与大小
SELECT group#, members, bytes/1024/1024 AS size_mb, status
FROM v$log
ORDER BY group#;
关注两点:
- 组数:默认装出来常是 3 组,勉强够用。业务写入量大时,一组正在归档、一组在写、只剩一组可切换,容易触发 Checkpoint not complete 告警、插入卡顿。建议加到 4~5 组
- 大小:默认常是 50M 或 200M,写入密集时几分钟一切换,归档文件碎而多。OLTP 场景按"每 10~20 分钟切换一次"倒推大小,常见 1G 起步
检查项四:undo 表空间
undo 存放修改前镜像,撑起回滚、一致性读和闪回。查大小:
SELECT d.tablespace_name,
ROUND(d.size_mb, 1) AS size_mb,
ROUND(NVL(u.used_mb, 0), 1) AS used_mb
FROM (SELECT tablespace_name, SUM(bytes)/1024/1024 AS size_mb
FROM dba_data_files GROUP BY tablespace_name) d
LEFT JOIN (SELECT tablespace_name, SUM(bytes)/1024/1024 AS used_mb
FROM dba_undo_extents GROUP BY tablespace_name) u
ON d.tablespace_name = u.tablespace_name
WHERE d.tablespace_name LIKE 'UNDOTBS%';
SELECT tablespace_name, bytes/1024/1024 AS size_mb
FROM dba_data_files WHERE tablespace_name LIKE 'UNDOTBS%';
如果 undo 太小,长事务会报 ORA-30036: 段无法扩展8(在还原表空间中),闪回查询的窗口也短。扩容:
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/undotbs01.dbf'
RESIZE 4096M;
或给它开自动扩展:ALTER DATABASE DATAFILE '…' AUTOEXTEND ON NEXT 512M MAXSIZE 32G;
检查项五:临时表空间
排序、哈希连接、去重在内存(PGA)放不下时落临时表空间,太小会报 ORA-01652: 无法通过128 (在表空间TEMP中) 扩展temp段:
SELECT tablespace_name, bytes/1024/1024 AS size_mb,
autoextensible
FROM dba_temp_files;
不足则扩:
ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/ORCL/temp01.dbf'
RESIZE 4096M;
检查项六:密码 180 天过期(高频翻车点)
11g 起默认 profile 的密码有效期是 180 天:
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'DEFAULT'
AND resource_type = 'PASSWORD'
AND resource_name LIKE 'PASSWORD_LIFE_TIME';
RESOURCE_NAME LIMIT
——————————— ———-
PASSWORD_LIFE_TIME 180
到期后连接报 ORA-28001: the password has expired,还剩宽限期时是 ORA-28002。要么定期改密,要么关闭期限:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
注意:已经进入宽限期的账号,改完 profile 也不会自动恢复,要重设一次密码:
ALTER USER bizapp IDENTIFIED BY "新密码";
顺手查一下失败锁定次数(FAILED_LOGIN_ATTEMPTS 默认 10 次),应用密码写错加上无重试上限时,账号会被锁死报 ORA-28000: the account is locked。
检查项七:审计
SHOW PARAMETER audit_trail
默认 DB(11g 起)会把审计记录写进库,日积月累撑爆 SYSTEM 表空间和 SYSAUX。两种选择:
— 不打算用库内审计:关掉(需重启)
ALTER SYSTEM SET audit_trail=NONE SCOPE=SPFILE;
— 保留审计:定期清理
DELETE FROM aud$ WHERE ntimestamp# < SYSDATE – 90;
检查项八:回收站
drop 表默认进回收站不释放空间:
SHOW PARAMETER recyclebin
SELECT object_name, original_name, type, droptime FROM dba_recyclebin;
空间敏感的系统可以关掉(10gR2+ 支持 scope=spfile 重启生效,11g 起可立即生效):
ALTER SYSTEM SET recyclebin=OFF SCOPE=SPFILE;
留着的话,就定期 PURGE DBA_RECYCLEBIN; 清理。
检查项九:监听自启
监听器同样没有随系统启动的默认机制,需要单独的 systemd 单元:
cat > /etc/systemd/system/oracle-listener.service << 'EOF'
[Unit]
Description=Oracle Listener
After=network.target
[Service]
Type=forking
User=oracle
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable oracle-listener
汇总:一键检查脚本
存成 check_baseline.sh,chmod +x 后以 oracle 用户执行:
#!/bin/bash
# Oracle 安装后基线检查
ORACLE_SID=orcl
export ORACLE_SID
echo "=== 1. oratab 自启标志 ==="
grep -v "^#" /etc/oratab | grep ":$" -v || grep "^$ORACLE_SID" /etc/oratab
echo "=== 2. 实例与监听进程 ==="
ps -ef | grep -E "pmon|tnslsnr" | grep -v grep
echo "=== 3~8. 库内检查 ==="
sqlplus -S / as sysdba << 'EOF'
SET LINESIZE 200 PAGESIZE 100
COL name FORMAT A30
PROMPT — 归档模式 —
ARCHIVE LOG LIST
PROMPT — redo 组与大小 —
SELECT group#, members, bytes/1024/1024 AS size_mb, status FROM v$log ORDER BY group#;
PROMPT — undo / temp 大小 —
SELECT tablespace_name, SUM(bytes)/1024/1024 AS size_mb
FROM dba_data_files WHERE contents = 'UNDO' GROUP BY tablespace_name;
SELECT tablespace_name, SUM(bytes)/1024/1024 AS size_mb
FROM dba_temp_files GROUP BY tablespace_name;
PROMPT — 密码有效期 —
SELECT profile, resource_name, limit FROM dba_profiles
WHERE resource_name = 'PASSWORD_LIFE_TIME';
PROMPT — 审计与回收站参数 —
SHOW PARAMETER audit_trail
SHOW PARAMETER recyclebin
PROMPT — 即将过期的账号 —
SELECT username, expiry_date, account_status
FROM dba_users WHERE expiry_date IS NOT NULL
AND expiry_date < SYSDATE + 30
ORDER BY expiry_date;
EXIT
EOF
echo "=== 9. systemd 单元是否配置 ==="
systemctl is-enabled oracle 2>/dev/null || echo "oracle.service 未配置"
systemctl is-enabled oracle-listener 2>/dev/null || echo "oracle-listener.service 未配置"
每项输出对一遍预期:归档已开、redo 足量、密码期限合理、自启已配,这份基线才算过关。
要点小结
- 自启要改 /etc/oratab 的 Y 并配 systemd,默认什么都不自启
- 生产开归档,开了必须配清理
- 密码 180 天过期是延迟爆发的高频坑,改 profile 后记得给宽限期内的账号重设密码
- undo、temp、审计、回收站都是"不查不知道,满了才要命"的项
- 基线脚本装完当天跑一遍,接手老库也先跑一遍

![[鼎捷 E10] 财务相关单据操作时异常问题解决(一)-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261030154444-6ae4bb6c483bc-220x150.png)
![[鼎捷 E10] 财务相关单据操作时异常问题解决(一)-171主机测评](https://www.171host.com/wp-content/uploads/2026/10/20261030144657-6ae4ade1b03de-220x150.png)


