首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【DB巡检深度盘点】Oracle DB春节长假节前深度健康巡检

  • 25-02-18 13:00
  • 2241
  • 13768
blog.csdn.net

引言:

马上春节放假,特进行一次DB全面健康检查,权当2024年DBA年终总结。废话不说了,直接开整。

1. 数据库(实例)基本状况检查

1.1 数据库实例状态检查

  1. SQL命令:select instance_name, host_name, startup_time, status, database_status from v$instance;
    在这里插入图片描述

  2. 说明:“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。

1.2 检查数据库版本和补丁

  1. SQL命令:SELECT * FROM v$version;
    在这里插入图片描述
  2. 说明:可以查询出数据库的版本号、发行版本、版权信息等。

1.3 日志归档模式,读写模式检查

  1. SQL命令:select name,log_mode,open_mode from v$database;
    在这里插入图片描述
  2. 说明:归档模式最好为开启;

1.4 数据库表空间状态检查

  1. SQL命令:select tablespace_name, status from dba_tablespaces;
    在这里插入图片描述
  2. 说明:要特别注意staus为offline的表空间;一般情况下输出结果中“STATUS”应该都为“ONLINE”。

1.5 数据库数据文件检查

  1. SQL命令:select tablespace_name, status from dba_tablespaces; 或 select name, status from v$datafile;
    在这里插入图片描述
  2. 说明:检查结果中“STATUS”应该为“AVAILABLE”或“ONLINE”。
  3. 检查数据文件是否存在损坏
    SELECT file#, block#, corruption_type FROM v$database_block_corruption;
    在这里插入图片描述

1.6 数据库在线日志检查

  1. SQL命令:SELECT group#, status, members, bytes/1024/1024 AS size_mb FROM v$log;
    在这里插入图片描述
  2. 说明:查看在线日志文件的组号、状态、成员数量和大小。
  3. 或者命令:select group#, status, type, member from v$logfile;
    在这里插入图片描述
  4. 说明:输出结果应该有3条或3条以上记录,“STATUS”应该为非“INVALID”、非“DELETED”,状态为空表示正常。
  5. 检查归档日志状态:
    SELECT dest_id, status, destination FROM v$archive_dest;

1.7 数据库回滚段检查

  1. SQL命令:select segment_name, status from dba_rollback_segs;
    在这里插入图片描述
  2. 说明:输出结果中所有回滚段的“STATUS”应该为“ONLINE”。

1.8 归档状态检查

  1. SQL命令:select name, log_mode, open_mode from v$database; 或 archive log list;
    在这里插入图片描述
  2. 说明:“LOG_MODE”表示Oracle当前的归档方式,“ARCHIVELOG”表示数据库运行在归档模式下,“NOARCHIVELOG”表示数据库运行在非归档模式下。
  3. 查看归档日志空间占用情况
SELECT tablespace_name,
       ROUND(SUM(bytes) / (1024 * 1024), 2) AS total_size_mb,
       ROUND(SUM(used_bytes) / (1024 * 1024), 2) AS used_size_mb,
       ROUND(SUM(free_bytes) / (1024 * 1024), 2) AS free_size_mb
FROM v$recovery_file_dest
GROUP BY tablespace_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 查看归档日志备份情况
    SELECT * FROM v$archived_log WHERE backed_up = ‘NO’;

1.9 检查日志切换频率:

  1. SQL命令:
SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24:MI:SS') AS first_time,  sequence#, thread#, dest_id
FROM v$archived_log
ORDER BY first_time DESC;
  • 1
  • 2
  • 3

在这里插入图片描述
2. 说明:Oracle日志切换频率并没有一个固定的标准,因为它依赖于多种因素。然而,从一般经验和最佳实践来看,一个合理的切换频率通常建议在每15到20分钟一次,这是基于平衡数据安全性与系统性能的考虑。在数据量较小或单位时间内变更较少的情况下,可以适当延长至25到30分钟。相反,如果数据写入频繁且数据量大,可能需要更频繁地切换,但至少应保持在10分钟以上,以减少数据丢失风险和加快实例恢复速度。虽然过于频繁的日志切换可能对系统性能产生负面影响,但切换频率过低也可能带来潜在风险。例如,如果日志文件切换不及时,可能会导致日志文件过大,增加恢复时间和数据丢失的风险。此外,过低的切换频率还可能影响数据库的可用性和一致性。

1.10 控制文件状态检查

  1. SQL命令:select status, name from v$controlfile;
    在这里插入图片描述
  2. 说明:“STATUS”应该为空,状态为空表示控制文件状态正常,控制文件应该配置多路复用。
  3. 查看控制文件备份情况
    SELECT * FROM v$backup_controlfile;

1.11 检查索引状态

  1. SQL命令:SELECT owner, index_name, status FROM dba_indexes WHERE status <> ‘VALID’;
    在这里插入图片描述
  2. 说明:查看是否有索引处于无效状态,若有,可能会影响查询性能。

1.12 检查视图、存储过程、函数等对象的有效性

  1. SQL命令:
    SELECT owner, object_name, object_type, status FROM dba_objects WHERE object_type IN (‘VIEW’, ‘PROCEDURE’, ‘FUNCTION’) AND status <> ‘VALID’;
    在这里插入图片描述
  2. 说明:确保这些数据库对象能够正常使用,若存在无效对象,可能导致相关业务功能出错。

1.13 监听状态检查

  1. 操作命令:在操作系统linux命令行中使用lsnrctl status命令。
    在这里插入图片描述
  2. 说明:查看监听程序是否正在运行,以及监听的数据库服务等信息。

1.14 RAC集群资源状态检查

  1. 操作系统linux命令:crsctl stat res -t
  2. 说明:故障排查:当集群中的某个资源出现故障时,管理员可以使用该命令快速定位问题资源及其当前状态。资源监控:定期检查集群资源状态,确保所有资源都处于预期状态,以维护集群的健康和稳定性。负载均衡:了解资源分布,有助于进行负载均衡调整,避免某些节点过载。

1.15 数据库连接情况检查

  1. SQL命令:select count(*) from vKaTeX parse error: Expected 'EOF', got '#' at position 30: …ect sid, serial#̲, username, pro…session;
    在这里插入图片描述
  2. 说明:检查当前数据库的连接数以及各个连接的详细信息。如果建立了过多的连接,会消耗数据库的资源,同时,对一些“挂死”的连接可能需要手工进行清理。

1.16 检查当前会话数:

SELECT COUNT(*) AS session_count FROM v$session;
在这里插入图片描述

1.17 检查活动会话:

SELECT sid, serial#, username, status, program FROM v$session WHERE status = ‘ACTIVE’;
在这里插入图片描述

1.18 参数设置检查

show parameter;
在这里插入图片描述

1.19 对象状态:查无效对象

SELECT owner, object_name, object_type FROM dba_objects WHERE status = ‘INVALID’;
在这里插入图片描述

1.20 空间碎片:检查表空间碎片:

SELECT tablespace_name, segment_type, COUNT(*) AS fragment_count
FROM dba_free_space
GROUP BY tablespace_name, segment_type;
或者:

SELECT d.owner, d.table_name,
       ROUND((d.blocks*8)/1024,2) AS "allocated MB",
       ROUND((d.num_rows*d.avg_row_len/1024/1024),2) AS "used MB",
       ROUND((d.blocks*10/100)*8/1024,2) AS "reserved (d.pct_free) MB",
       ROUND((d.blocks*8-(d.num_rows*d.avg_row_len/1024)-d.blocks*8*10/100)/1024,2) AS "waste_MB"
FROM dba_tables d
WHERE d.blocks*8/1024 > 10 -- 可根据需要调整此条件
ORDER BY d.owner, d.table_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

1.21 检查数据库锁:

SELECT blocking_session, sid, serial#, wait_class, event 
FROM v$session 
WHERE blocking_session IS NOT NULL;
  • 1
  • 2
  • 3

在这里插入图片描述

1.22 数据库内存使用:检查SGA和PGA使用情况

SELECT * FROM v s g a ; S E L E C T ∗ F R O M v sga; SELECT * FROM v sga;SELECT∗FROMvpgastat;
在这里插入图片描述

2. 数据库相关资源使用情况检查

2.1 初始化文件中相关参数值检查

  1. SQL命令:select resource_name, max_utilization, initial_allocation, limit_value from v$resource_limit;
    在这里插入图片描述
  2. 说明:若字段值LIMIT_VALUE-MAX_UTILIZATION<=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整。

2.2 表空间使用情况检查

  1. 命令:(推荐)
select f.tablespace_name,
       a.total,
       f.free,
       round((f.free / a.total) * 100) "% Free" 
from (select tablespace_name, sum(bytes / (1024 * 1024)) total 
      from dba_data_files 
      group by tablespace_name) a,
     (select tablespace_name, round(sum(bytes / (1024 * 1024))) free 
      from dba_free_space 
      group by tablespace_name) f 
WHERE a.tablespace_name = f.tablespace_name(+) 
order by "% Free";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述
2. 说明:检查结果中如果空闲率%Free小于10%,则需要注意增加数据文件来扩展表空间,而不是使用数据文件的自动扩展功能。
3. 或者SQL:

SELECT tablespace_name, 
       ROUND(SUM(bytes) / 1024 / 1024, 2) AS total_mb,
       ROUND(SUM(bytes - NVL(free_bytes, 0)) / 1024 / 1024, 2) AS used_mb,
       ROUND((SUM(bytes - NVL(free_bytes, 0)) / SUM(bytes)) * 100, 2) AS used_pct
FROM (SELECT tablespace_name, file_id, SUM(bytes) AS bytes
      FROM dba_data_files
      GROUP BY tablespace_name, file_id)
LEFT JOIN (SELECT tablespace_name, file_id, SUM(bytes) AS free_bytes
           FROM dba_free_space
           GROUP BY tablespace_name, file_id)
USING (tablespace_name, file_id)
GROUP BY tablespace_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

2.3 检查归档日志空间使用情况

  1. 操作命令:首先确定归档日志的存储路径,可通过查询v p a r a m e t e r 视图获取,例如 S E L E C T v a l u e F R O M v parameter视图获取,例如SELECT value FROM v parameter视图获取,例如SELECTvalueFROMvparameter WHERE name = ‘log_archive_dest_1’,然后在操作系统层面使用相应命令检查该路径下的磁盘空间使用情况,如在 Linux 系统中使用df -h命令。
    在这里插入图片描述
    在这里插入图片描述

  2. 说明:了解归档日志占用的空间大小,避免归档日志空间不足导致数据库故障。

2.4 检查数据文件大小和增长情况

  1. SQL操作命令:
    SELECT file_name, tablespace_name, bytes/1024/1024 AS size_mb, autoextensible, increment_by FROM dba_data_files;
    说明:查看数据文件的大小、是否自动扩展以及扩展的增量。

2.5 system表空间内的内容检查

  1. SQL 命令:
select distinct (owner) 
from dba_tables 
where tablespace_name = 'SYSTEM' 
  and owner != 'SYS' 
  and owner != 'SYSTEM' 
union 
select distinct (owner) 
from dba_indexes 
where tablespace_name = 'SYSTEM' 
  and owner != 'SYS' 
  and owner != 'SYSTEM';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
2. 说明:如果记录返回,则表明system表空间内存在一些非system和sys用户的对象。应进一步检查这些对象是否与应用相关,如果相关,请把这些对象移到非System表空间,同时检查这些对象属主的缺省表空间值。

2.6 扩展异常的对象检查

  1. SQL命令:
select Segment_Name, Segment_Type, TableSpace_Name, 
       (Extents / Max_extents) * 100 Percent 
from sys.DBA_Segments 
where Max_Extents != 0 
  and (Extents / Max_extents) * 100 >= 95 
order By Percent;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
说明:如果有记录返回,则这些对象的扩展已经快达到它定义时的最大扩展值,对于这些对象要修改其存储结构参数。

2.7 对象的下一扩展值与表空间的最大扩展值检查

1.SQL命令:

select a.table_name, a.next_extent, a.tablespace_name 
from all_tables a, 
     (select tablespace_name, max(bytes) as big_chunk 
      from dba_free_space 
      group by tablespace_name) f 
where f.tablespace_name = a.tablespace_name 
  and a.next_extent > f.big_chunk 
union 
select a.index_name, a.next_extent, a.tablespace_name 
from all_indexes a, 
     (select tablespace_name, max(bytes) as big_chunk 
      from dba_free_space 
      group by tablespace_name) f 
where f.tablespace_name = a.tablespace_name 
  and a.next_extent > f.big_chunk;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述
2. 说明:如果有记录返回,则表明这些对象的下一个扩展大于该对象所属表空间的最大扩展值,需调整相应表空间的存储参数。

2.8 检查表空间配额限制

  1. SQL命令:SELECT username, tablespace_name, bytes/1024/1024 AS quota_mb, max_bytes/1024/1024 AS max_quota_mb FROM dba_ts_quotas;
    在这里插入图片描述
  2. 说明:查看每个用户在各个表空间中的配额使用情况和最大配额限制,防止用户因超出表空间配额而导致数据插入或更新失败。

2.9 检查数据库会话数限制

  1. SQL命令:SELECT resource_name, current_utilization, max_utilization, limit_value FROM v$resource_limit WHERE resource_name LIKE ‘%SESSIONS%’;
    在这里插入图片描述
  2. 说明:查看当前数据库会话的使用情况以及会话数的限制值,了解是否接近或超过会话数限制,避免因会话数过多导致系统性能下降或无法建立新的连接。

2.10 检查进程数限制

  1. SQL命令:SELECT resource_name, current_utilization, max_utilization, limit_value FROM v$resource_limit WHERE resource_name LIKE ‘%PROCESSES%’;
    在这里插入图片描述
  2. 说明:类似地,检查数据库进程的使用情况和进程数限制,确保数据库服务器有足够的进程资源来处理请求。

2.11 检查资源限制:

SELECT resource_name, current_utilization, max_utilization, limit_value FROM v$resource_limit;
在这里插入图片描述

3. 数据库性能检查

3.1 检查数据库负载

  1. SQL命令:SELECT * FROM v$load_statistics;
  2. 说明:可以获取数据库的负载信息,包括每秒的事务数、每秒的查询数等。

3.2 检查数据库等待事件

  1. SQL命令:SELECT event, total_waits, time_waited FROM v$system_event ORDER BY time_waited DESC;
    在这里插入图片描述
  2. 说明:查看数据库中等待事件的发生次数和等待时间,找出可能存在的性能瓶颈。

3.3 检查SQL执行情况

SELECT sql_id, executions, elapsed_time/1000000 AS elapsed_seconds 
FROM v$sqlarea 
ORDER BY elapsed_time DESC;
  • 1
  • 2
  • 3

在这里插入图片描述

3.4 数据库性能统计

SELECT * FROM v$sysstat WHERE name IN (‘user commits’, ‘user rollbacks’, ‘physical reads’, ‘physical writes’);
在这里插入图片描述

3.5 检查DB统计信息收集情况:

SELECT table_name, last_analyzed FROM dba_tables WHERE last_analyzed IS NULL;
在这里插入图片描述

3.6 检查高负载SQL:

SELECT sql_id, executions, elapsed_time/1000000 AS elapsed_seconds
FROM v$sqlarea
ORDER BY elapsed_time DESC;
在这里插入图片描述

3.7 检查索引使用情况:

SELECT index_name, table_name, used FROM v$object_usage WHERE used = ‘NO’;
在这里插入图片描述

3.8 检查索引状态

  1. SQL命令:SELECT owner, index_name, status FROM dba_indexes WHERE status <> ‘VALID’;
    在这里插入图片描述
  2. 说明:查看是否有索引处于无效状态,若有,可能会影响查询性能。

3.9 检查视图、存储过程、函数等对象的有效性

  1. SQL命令:SELECT owner, object_name, object_type, status FROM dba_objects WHERE object_type IN (‘VIEW’, ‘PROCEDURE’, ‘FUNCTION’) AND status <> ‘VALID’;
    在这里插入图片描述

  2. 说明:确保这些数据库对象能够正常使用,若存在无效对象,可能导致相关业务功能出错。

3.10 检查I/O性能:

SELECT file_name, phyrds, phywrts, readtim, writetim
FROM v f i l e s t a t J O I N d b a d a t a f i l e s O N v filestat JOIN dba_data_files ON v filestatJOINdbad​ataf​ilesONvfilestat.file# = dba_data_files.file_id;
在这里插入图片描述

3.11 DB性能优化

这部分涉及更复杂的查询和监控工具,如Oracle的AWR(Automatic Workload Repository)报告、ASH(Active Session History)报告等,以及操作系统层面的性能监控工具(如vmstat、iostat等),需要根据具体的性能指标和阈值进行判断。后续文章会进行专题讨论。

4. 数据库备份检查

4.1 检查备份状态

SELECT session_key, input_type, status, start_time, end_time 
FROM v$rman_backup_job_details 
ORDER BY start_time DESC;
  • 1
  • 2
  • 3

在这里插入图片描述

4.2 检查备份策略

SELECT * FROM dba_backup_sets;

4.3 查看备份集信息

SELECT bs.key,
       bs.backup_set_id,
       bs.owner,
       bs.backup_type,
       bs.start_time,
       bs.completion_time,
       bs.incremental_level,
       bs.num_files,
       bs.bytes
FROM v$backup_set bs;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.4 查看最近一次备份时间

SELECT MAX(completion_time) AS last_backup_time
FROM v$backup_set;

5. 数据库用户和权限检查及安全性检查

5.1 检查用户状态和权限

1.SQL命令:

SELECT username, account_status, default_tablespace, temporary_tablespace FROM dba_users;
SELECT grantee, privilege FROM dba_sys_privs UNION ALL SELECT grantee, privilege FROM dba_tab_privs;

  1. 说明:第一个命令查看用户的状态、默认表空间和临时表空间;第二个命令查看用户所拥有的系统权限和对象权限。
  2. 查看锁定的用户
    SELECT username FROM dba_users WHERE account_status LIKE ‘%LOCKED%’;

5.2 检查近期创建或修改的用户

  1. SQL命令:SELECT username, created, last_ddl_time FROM dba_users WHERE created > SYSDATE - 7 OR last_ddl_time > SYSDATE - 7;
  2. 说明:查看最近 7 天内创建或修改的用户,检查是否有异常的用户操作。

5.3 检查用户密码强度和过期时间

  1. SQL命令:SELECT username, password_versions, expiry_date FROM dba_users;
  2. 说明:查看用户的密码版本(可间接反映密码强度)和密码过期时间,确保用户密码具有足够的强度且未过期,防止因弱密码或过期密码导致的安全风险。

5.4 检查数据库审计设置

  1. SQL命令:SELECT audit_option, enabled FROM dba_stmt_audit_opts; 和 SELECT object_name, audit_option, enabled FROM dba_obj_audit_opts;
  2. 说明:第一个命令检查语句级别的审计设置,第二个命令检查对象级别的审计设置。通过查看这些设置,确保数据库的审计功能能够满足安全需求,记录重要的数据库操作,以便在出现安全问题时进行追溯和分析。

5.5 检查网络访问控制

1.SQL命令:如果使用了 Oracle Net Services 的访问控制列表(ACL),可查询DBA_NETWORK_ACLS视图来检查网络访问控制设置,例如:

SELECT acl, principal, privilege, is_grant, start_date, end_date
FROM dba_network_acls
WHERE lower(acl) LIKE '%your_acl_name%'; -- 替换为实际的ACL名称
  • 1
  • 2
  • 3
  1. 说明:查看哪些用户或主机被授予了访问数据库的权限,以及权限的范围和有效时间,防止未经授权的网络访问,保障数据库的网络安全。

5.6 检查审计日志:

SELECT * FROM dba_audit_trail;

5.7 检查数据库审计设置

  1. SQL命令:SELECT audit_option, enabled FROM dba_stmt_audit_opts;
    SELECT object_name, audit_option, enabled FROM dba_obj_audit_opts;
  2. 说明:第一个命令检查语句级别的审计设置,第二个命令检查对象级别的审计设置。通过查看这些设置,确保数据库的审计功能能够满足安全需求,记录重要的数据库操作,以便在出现安全问题时进行追溯和分析。

6. 数据库错误日志检查

6.1 检查数据库告警日志:

  1. SELECT * FROM v$diag_info WHERE name = ‘Diag Trace’;
  2. 检查内容:查看数据库的告警日志和错误日志,查找是否存在异常错误信息。
    操作命令:通常需要查看数据库服务器上的日志文件,具体路径根据 Oracle 安装和配置而定。在 Linux 系统中,告警日志文件通常位于$ORACLE_BASE/diag/rdbms///trace目录下,可以使用命令tail -f alert_.log查看最新的告警日志信息。具体日志查看技巧可以参考我之前的博文。

7.其他更高阶的巡检

除了日常巡检项目外,对 Oracle 数据库进行深度健康检查可以更全面、深入地了解数据库的运行状况,及时发现潜在的问题和风险。

7.1 数据库性能优化相关检查

7.1.1 检查 SQL 执行计划稳定性
  1. 操作命令:SELECT plan_hash_value, sql_id, COUNT() FROM v$sql GROUP BY plan_hash_value, sql_id HAVING COUNT() > 1;
  2. 说明:通过查询v$sql视图,找出具有多个执行计划的 SQL 语句,这些语句可能存在执行计划不稳定的情况,影响性能。
7.1.2 检查 PGA 内存使用情况

操作命令:SELECT name, value FROM v$pgastat WHERE name LIKE ‘%used for%’;
说明:查看程序全局区(PGA)内存的使用情况,了解各种操作使用的 PGA 内存量,判断是否存在 PGA 内存不足或过度使用的问题。

7.1.3 检查缓冲区缓存命中率
  1. 操作命令:SELECT 1 - (physical_reads / (db_block_gets + consistent_gets)) AS buffer_cache_hit_ratio FROM v$sysstat;
  2. 说明:计算缓冲区缓存命中率,命中率越高说明数据库从内存中读取数据的效率越高。如果命中率过低,可能需要调整缓冲区大小或优化 SQL 查询。

7.2 数据完整性和一致性检查

7.2.1 检查表数据完整性
  1. 操作命令:对于有外键约束的表,可使用以下命令检查外键关联的完整性。以检查EMPLOYEES表和DEPARTMENTS表的外键关联为例:
SELECT COUNT(*) FROM EMPLOYEES E
WHERE NOT EXISTS (SELECT 1 FROM DEPARTMENTS D WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID);
  • 1
  • 2
  1. 说明:该命令会统计EMPLOYEES表中存在但在DEPARTMENTS表中没有对应部门的记录数。如果结果不为 0,说明外键关联存在问题,数据完整性受到影响。
7.2.2 检查数据文件和控制文件的一致性
  1. 操作命令:SELECT file#, status FROM v d a t a f i l e W H E R E s t a t u s < > ′ O N L I N E ′ ; 和 S E L E C T s t a t u s F R O M v datafile WHERE status <> 'ONLINE'; 和 SELECT status FROM v datafileWHEREstatus<>′ONLINE′;和SELECTstatusFROMvcontrolfile WHERE status <> ‘VALID’;
  2. 说明:第一个命令检查数据文件的状态,若有数据文件状态不是ONLINE,可能存在数据文件损坏或不一致的情况。第二个命令检查控制文件的状态,若控制文件状态不是VALID,则可能影响数据库对整个系统的控制和管理,导致数据不一致的风险。
7.2.3 运行 DBMS_REPAIR 包检查和修复表损坏
  1. 操作命令:首先,使用DBMS_REPAIR.ADMIN_TABLE_CHECK过程检查表的损坏情况,例如:
DECLARE
  num_corrupt_blocks NUMBER;
BEGIN
  DBMS_REPAIR.ADMIN_TABLE_CHECK(
    OWNER_NAME => 'SCHEMA_NAME', -- 替换为实际的模式名
    TABLE_NAME => 'TABLE_NAME', -- 替换为实际的表名
    CHECK_TYPE => DBMS_REPAIR.ROW_CORRUPTION_CHECK,
    CORRUPT_COUNT => num_corrupt_blocks
  );
  DBMS_OUTPUT.PUT_LINE('Number of corrupt blocks: ' || num_corrupt_blocks);
END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后,根据检查结果,使用DBMS_REPAIR.FIX_CORRUPT_BLOCKS过程尝试修复损坏的块(需要谨慎操作)。
2. 说明:DBMS_REPAIR包提供了一系列用于检查和修复数据库对象损坏的工具。通过这些操作,可以发现并尝试修复表中可能存在的物理损坏,确保数据的完整性。

7.3 资源使用和限制检查

7.3.1 检查数据库会话数限制
  1. 操作命令:
SELECT resource_name, current_utilization, max_utilization, limit_value FROM v$resource_limit WHERE resource_name LIKE '%SESSIONS%';
  • 1
  1. 说明:查看当前数据库会话的使用情况以及会话数的限制值,了解是否接近或超过会话数限制,避免因会话数过多导致系统性能下降或无法建立新的连接。
7.3.2 检查进程数限制
  1. 操作命令:
    SELECT resource_name, current_utilization, max_utilization, limit_value FROM v$resource_limit WHERE resource_name LIKE ‘%PROCESSES%’;
  2. 说明:类似地,检查数据库进程的使用情况和进程数限制,确保数据库服务器有足够的进程资源来处理请求。
7.3.3 检查表空间配额限制
  1. 操作命令:SELECT username, tablespace_name, bytes/1024/1024 AS quota_mb, max_bytes/1024/1024 AS max_quota_mb FROM dba_ts_quotas;
  2. 说明:查看每个用户在各个表空间中的配额使用情况和最大配额限制,防止用户因超出表空间配额而导致数据插入或更新失败。

7.4 高可用性和备份恢复检查

7.4.1 检查数据库复制环境(如果有)
  1. 操作命令:对于流复制,可查询V S T R E A M S C A P T U R E 和 V STREAMS_CAPTURE和V STREAMSC​APTURE和VSTREAMS_APPLY_PROCESS视图来检查捕获进程和应用进程的状态,例如:
SELECT capture_name, status FROM V$STREAMS_CAPTURE;
SELECT apply_name, status FROM V$STREAMS_APPLY_PROCESS;
  • 1
  • 2

对于 Data Guard 环境,可使用DGMGRL命令行工具连接到 Data Guard 管理对象,执行SHOW CONFIGURATION命令查看 Data Guard 配置状态。
2. 说明:通过检查复制相关的进程和配置状态,确保数据库复制功能正常运行,主库和备库之间的数据同步没有问题,以保证高可用性和数据冗余。

7.4.2 检查备份策略和备份集有效性
  1. 操作命令:使用 RMAN 命令检查备份策略,例如SHOW ALL;命令可以显示当前的 RMAN 配置参数,包括备份保留策略等。检查备份集的有效性可使用LIST BACKUP SUMMARY;命令查看备份集的信息,包括备份时间、大小、状态等。
  2. 说明:确保备份策略符合业务需求,并且备份集能够正常使用,以便在需要时能够成功进行恢复操作,保障数据的安全性和可恢复性。
7.4.3 模拟恢复测试
  1. 操作命令:在测试环境中,使用 RMAN 命令进行模拟恢复测试,例如:
RUN {
  SET NEWNAME FOR DATAFILE 1 TO '/new/path/datafile1.dbf'; -- 根据实际情况修改路径和文件名
  RESTORE DATABASE;
  RECOVER DATABASE;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 说明:通过模拟恢复操作,验证备份数据的可用性和恢复过程的正确性,及时发现备份和恢复过程中可能存在的问题,如备份集损坏、恢复脚本错误等。

8. 总结

Oracle数据库的日常巡检是一个复杂而细致的过程,需要数据库管理员具备丰富的专业知识和实践经验。通过定期执行上述巡检项目和对应的操作命令,可以及时发现并解决潜在的问题,确保数据库的稳定性和安全性。

注:本文转载自blog.csdn.net的小小不董的文章"https://blog.csdn.net/qq_45732829/article/details/145345468"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top