搜索结果

×

搜索结果将在这里显示。

✨ 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;

    ==注意事项==

    1. 不包括临时表空间​:DBA_FREE_SPACE​ 不包含临时表空间的空间信息,临时表空间应查询 DBA_TEMP_FILES​ 和 V$TEMP_SPACE_HEADER
    2. 不包含大文件表空间 (Bigfile) 的扩展潜力​:仅统计当前数据文件分配的大小,未考虑 AUTOEXTEND 的剩余上限。
    3. 空闲空间可能包含可回收的碎片​: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 但长期未使用的用户,考虑锁定或删除。
  1. 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)

阅读:137
发布时间: