至周五维护工作上周周一至周五Oracle系统维护之旅(oracle上一周周一)
上周一至周五,我和我的同事们进行了一次Oracle系统维护之旅。在这个过程中,我们检查了数据库运行情况,处理了各种错误,优化了性能,并做出了一些重大决策,以确保系统的稳定性和可靠性。
我们进行了一次全面的数据库健康检查。我们使用了Oracle提供的各种监控工具,如Enterprise Manager、AWR、ADDM等,以评估数据库的整体性能和健康状况。我们发现一些潜在的问题,如空间不足、性能瓶颈和慢查询等,并采取一系列措施予以解决。
我们处理了一些错误和故障。我们的日志文件中记录了一些错误,如ORA-00600和ORA-07445等,需要进行详细的分析和诊断。我们使用了Oracle提供的工具和技术,如bdump和trcsess,来捕获和分析诊断信息,以确定问题的根本原因,并采取措施进行修复和预防。
然后,我们优化了数据库的性能。我们识别了一些瓶颈,如高CPU使用率、慢IO和大量等待事件等,并采取了优化策略。通过使用AWR报告、SQL追踪和索引优化等工具和技术,我们显着提高了数据库的性能和响应能力,缩短了查询时间和响应时间。
我们做出了一些重大决策,以确保数据库的稳定性和可靠性。我们决定采用Oracle 12c,并升级了我们的数据库版本。这个决定需要考虑到许多因素,如功能增强、性能改进、安全增加等,以满足业务需求和未来发展需求。
在通过一周的维护工作,我们成功地检查了数据库运行情况,处理了各种错误,优化了性能,并做出了重大决策,以确保系统的稳定性和可靠性。我们相信,在我们不断学习和改进的过程中,我们将继续提高我们的数据库管理和维护技能,为我们的业务提供更好、更快、更可靠的服务。以下是我们在维护过程中使用的一些代码示例:
检查数据库空间:
SELECT tablespace_name, file_id, bytes / 1024 / 1024 total_mb,
(bytes – nvl(free_space, 0)) / 1024 / 1024 used_mb,
nvl(free_space, 0) / 1024 / 1024 free_mb,
round((bytes – nvl(free_space, 0)) * 100 / bytes) used_pct
FROM (SELECT f.tablespace_name, f.file_id,
SUM(f.bytes) bytes,
SUM(s.bytes) free_space
FROM dba_data_files f, dba_free_space s
WHERE f.file_id = s.file_id(+)
GROUP BY f.tablespace_name, f.file_id, s.bytes)
ORDER BY tablespace_name, file_id;
查找慢查询:
SELECT sql_id, child_number, executions,
round(elapsed_time / 1000000, 2) elapsed_secs,
round(cpu_time / 1000000, 2) cpu_secs,
round(buffer_gets / decode(executions, 0, 1, executions), 2) buffer_gets_per_exec,
round(buffer_gets / decode(elapsed_time, 0, 1, elapsed_time) * 1000000, 2) buffer_gets_per_sec,
round(disk_reads / decode(elapsed_time, 0, 1, elapsed_time) * 1000000, 2) disk_reads_per_sec,
round(rows_processed / decode(executions, 0, 1, executions)) rows_per_exec,
sql_text
FROM v$sql
WHERE elapsed_time > 1000000
ORDER BY elapsed_time DESC;
索引优化:
SELECT t.tablespace_name, t.table_name, t.index_name,
t.num_rows, t.clustering_factor,
round((t.num_rows / t.clustering_factor) * 100) pct_clustering_factor,
(SELECT count(*)
FROM dba_segments
WHERE segment_name = t.index_name
AND segment_type = ‘INDEX’) num_instances
FROM dba_tables t
WHERE t.owner = ‘SCOTT’
AND t.table_name NOT LIKE ‘BIN$%’
AND EXISTS (SELECT 1
FROM dba_indexes i
WHERE i.owner = t.owner
AND i.table_name = t.table_name
AND i.uniqueness = ‘NONUNIQUE’)
ORDER BY pct_clustering_factor DESC;