✨ 1. Oracle数据库常见检查项
-
检查数据库版本及补丁
SELECT * FROM v$version; -
检查数据库运行状态
SELECT STATUS, DATABASE_STATUS, INSTANCE_NAME, HOST_NAME FROM v$instance;==STATUS:====实例当前的状态。==
==OPEN====:实例已打开数据库,可正常访问。==
==MOUNTED====:实例已启动并装载了控制文件,但数据库未打开。==
==STARTED====:实例已启动,但未装载控制文件(NOMOUNT)。==
==DATABASE_STATUS:====数据库状态(是否处于活动状态)。==
==ACTIVE====:数据库正常运行,可执行事务。==
==SUSPENDED====:数据库被挂起(如通过ALTER SYSTEM SUSPEND)==
==INSTANCE_NAME:====实例名称,与ORACLE_SID环境变量一致。==
==HOST_NAME:====数据库服务器的主机名,服务器的主机名或 IP 地址。== -
数据库归档状态
archive log list==检查数据库是否处于归档模式(Archive Mode);
自动归档是否开启,归档日志的目标位置:
当前在线日志的序列号及下一个需要归档的日志序列。== -
系统空间使用率
# df -Th -
重做日志检查
SELECT group#, sequence#, ROUND(bytes / 1048576, 2) AS size_mb, members, status, archived, TO_CHAR(first_time, 'YYYY-MM-DD HH24:MI:SS') AS first_time, CASE WHEN status = 'CURRENT' THEN 'ACTIVE' ELSE '' END AS is_current FROM v$log ORDER BY group#;group# :日志组编号;
sequence# :当前日志序列号(递增);
size_mb:日志文件大小(MB);
members:该组包含的日志成员数;
status:(CURRENT: 当前正在写入的日志组;
ACTIVE:日志组包含的事务尚未完成检查点,实例恢复需要;
INACTIVE:日志组已归档且检查点已完成,可被复用;
UNUSED:新创建的日志组尚未使用;)
archived:YES 表示已归档,NO 表示未归档;
first_time:日志组首次被写入的时间;- 组数与大小
可用以下 SQL 查看当前组数:
SELECT COUNT(*) groups FROM v$log; 组数:至少 3 组(LGWR 建议 3~6 组)。 大小:根据切换频率调整,目标每 15~30 分钟切换一次。若切换过于频繁(如 <5 分钟),需增加日志文件大小或组数。- 冗余配置
SELECT group#, member, status FROM v$logfile ORDER BY group#; 每个日志组至少 2 个成员,并分别存放于不同物理磁盘,避免单点故障。 -
表空间使用率检查 - ==不准确==
SELECT df.tablespace_name, ROUND((df.total_bytes - NVL(fs.free_bytes, 0)) / df.total_bytes * 100, 2) AS used_pct, ROUND(df.total_bytes / 1048576, 2) AS size_mb, ROUND((df.total_bytes - NVL(fs.free_bytes, 0)) / 1048576, 2) AS used_mb, ROUND(NVL(fs.free_bytes, 0) / 1048576, 2) AS free_mb FROM (SELECT tablespace_name, SUM(bytes) total_bytes FROM dba_data_files GROUP BY tablespace_name) df, (SELECT tablespace_name, SUM(bytes) free_bytes FROM dba_free_space GROUP BY tablespace_name) fs WHERE df.tablespace_name = fs.tablespace_name(+) ORDER BY used_pct DESC;==注意事项==
- 不包括临时表空间:
DBA_FREE_SPACE 不包含临时表空间的空间信息,临时表空间应查询DBA_TEMP_FILES 和V$TEMP_SPACE_HEADER。 - 不包含大文件表空间 (Bigfile) 的扩展潜力:仅统计当前数据文件分配的大小,未考虑
AUTOEXTEND的剩余上限。 - 空闲空间可能包含可回收的碎片:
DBA_FREE_SPACE统计的是完全空闲的 extent,但表空间内部可能因碎片而无法分配大 extent(查询未反映该问题)。
tablespace_name:表空间名;
used_pct:已使用百分比(建议 < 90%);
size_mb:当前总容量(MB);
used_mb:已用空间;
free_mb:剩余空间;注意:该视图仅统计已分配空间,不包含自动扩展的潜在空间。 - 不包括临时表空间:
-
是否开启了表空间自动扩容
--查看所有表 SELECT tablespace_name, file_name, autoextensible, bytes/1048576 AS current_size_mb, maxbytes/1048576 AS max_size_mb FROM dba_data_files ORDER BY tablespace_name, file_name; SELECT tablespace_name, file_name, autoextensible, bytes/1048576 AS current_size_mb, maxbytes/1048576 AS max_size_mb FROM dba_data_files ORDER BY tablespace_name, file_name; --查看SYSTEM表 SELECT tablespace_name, file_name, autoextensible FROM dba_data_files WHERE tablespace_name = 'SYSTEM'; -
系统表空间用户检查
SELECT username, default_tablespace, temporary_tablespace, account_status created FROM dba_users ORDER BY default_tablespace, username;- default_tablespace:用户创建对象时默认使用的表空间。temporary_tablespace:用户执行排序等操作时使用的临时表空间。
- 若default_tablespace为 SYSTEM 或 USERS,需评估是否为生产库的最佳实践(通常建议为业务表空间)。
- 检查是否存在ACCOUNT_STATUS为 OPEN 但长期未使用的用户,考虑锁定或删除。
-
alert日志检查
SHOW PARAMETER diagnostic_dest; grep -i "ORA-00600" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "ORA-07455" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "ORA-01555" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "ORA-01688" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "ORA-00257" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "Deadlock detected" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "cannot allocate new log" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "Checkpoint not complete" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "Archiver process died" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "Instance terminated" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -20 grep -i "ORA-" /u01/app/oracle/diag/rdbms/lxopc/lxopc/trace/alert_lxopc.log | tail -50 --Linux grep -iE "ORA-00600|ORA-07455|ORA-01555|ORA-01688|ORA-00257|Deadlock detected|Checkpoint not complete|Archiver process died|Instance terminated" /u01/app/oracle/diag/rdbms/lxedw/LXEDW/trace/alert_LXEDW.log --Windows findstr "ORA-00600|ORA-07455|ORA-01555|ORA-01688|ORA-00257|Deadlock detected|Checkpoint not complete|Archiver process died|Instance terminated" d:\app\Administrator\diag\rdbms\dms\dms\trace\alert_dms.log错误/事件 含义 处理建议 ORA-00600 / ORA-07445 内部错误,可能为 Bug 查 MOS,应用补丁 ORA-01555 快照过旧 增加 undo 表空间,优化 SQL ORA-01688 表空间无法扩展 添加数据文件或开启自动扩展 ORA-00257 归档空间满 清理归档,扩大 FRA Deadlock detected 死锁 分析应用,优化事务 Thread X cannot allocate new log 日志切换慢 增加日志组大小或数量 Checkpoint not complete 检查点未完成 调优检查点参数,增加日志组 Archiver process died 归档进程异常 检查归档目标,必要时重启 Instance terminated 实例异常终止 分析原因(OOM、手动 kill)