暂无图片
暂无图片
35
暂无图片
暂无图片
暂无图片

⭐️ Oracle数据库巡检,需要关注哪些点?⭐️(一些个人见解)

原创 Lucifer三思而后行 2021-08-08
11590

大家好,这里是 Lucifer三思而后行,专注于提升数据库运维效率。

目录

🌲 前言 🌲

如果给你一个全新的Oracle单机数据库环境,作为DBA,您需要关注哪些点?本文仅讨论 Linux 主机~

📢 首先申明本文所述并非标准答案,只是个人的一些见解,欢迎👏🏻大家补充完善~

首先,当然是确认是单机还是集群模式的数据库!本文主要讲解单机数据库。

一、⭐️ 主机层面 ⭐️

1、📚 主机版本和Oracle版本

主机版本:

cat /etc/system-release cat /etc/redhat-release

在这里插入图片描述
Oracle版本和补丁版本:

sqlplus -version opatch lspatches

在这里插入图片描述

2、💻 主机硬件资源

包括CPU负载,物理内存和磁盘使用。

CPU负载和内存:

top free -m

在这里插入图片描述
在这里插入图片描述
⚠️ 需要注意主机的CPU负载和物理内存使用是否异常,Swap是否被过多使用。

磁盘使用情况:

lsblk fdisk -l df -Th

在这里插入图片描述
⚠️ 显而易见,需要关注磁盘使用情况,是否存在使用率过高。

3、📒 计划任务 crontab

一般计划任务会布置一些备份策略或者归档删除的策略,我们可以通过crontab来查看:

crontab -l

在这里插入图片描述

4、🌿 检查 Hosts 文件和网络配置

cat /etc/hosts ip addr nmcli connection show

在这里插入图片描述
在这里插入图片描述

5、🍄 检查系统参数文件

cat /etc/sysctl.conf

在这里插入图片描述
⚠️ 需注意是否有设置非常规参数。

6、🌻 检查 rc.local 文件

rc.local文件用于配置开机自启动脚本,一般会设置关闭透明大页或者Oracle数据库开机自启。

cat /etc/rc.local

在这里插入图片描述

7、🍁 环境变量配置

查看环境变量配置,进一步熟悉环境。

cat ~/.bash_profile cat /home/oracle/.bash_profile

在这里插入图片描述
在这里插入图片描述

8、🌵 检查系统服务

systemctl status firewalld.service getenforce cat /proc/cmdline cat /etc/sysconfig/network

在这里插入图片描述

二、💫 数据库层面 💫

1、🍔 查看数据库实例和监听

ps -ef|grep smon su - oracle lsnrctl status

在这里插入图片描述
在这里插入图片描述

2、🍖 数据库表空间使用

sqlplus / as sysdba col TABLESPACE_NAME for a20 select tbs_used_info.tablespace_name, tbs_used_info.alloc_mb, tbs_used_info.used_mb, tbs_used_info.max_mb, tbs_used_info.free_of_max_mb, tbs_used_info.used_of_max || '%' used_of_max_pct from (select a.tablespace_name, round(a.bytes_alloc / 1024 / 1024) alloc_mb, round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) used_mb, round((a.bytes_alloc - nvl(b.bytes_free, 0)) * 100 / a.maxbytes) used_of_max, round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 0)) / 1048576) free_of_max_mb, round(a.maxbytes / 1048576) max_mb from (select f.tablespace_name, sum(f.bytes) bytes_alloc, sum(decode(f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes from dba_data_files f group by tablespace_name) a, (select f.tablespace_name, sum(f.bytes) bytes_free from dba_free_space f group by tablespace_name) b where a.tablespace_name = b.tablespace_name(+)) tbs_used_info order by tbs_used_info.used_of_max desc;

在这里插入图片描述

3、🍢 检查RMAN备份情况

rman target / list backup; sqlplus / as sysdba col status for a10 col input_type for a20 col INPUT_BYTES_DISPLAY for a10 col OUTPUT_BYTES_DISPLAY for a10 col TIME_TAKEN_DISPLAY for a10 select input_type, status, to_char(start_time, 'yyyy-mm-dd hh24:mi:ss'), to_char(end_time, 'yyyy-mm-dd hh24:mi:ss'), input_bytes_display, output_bytes_display, time_taken_display, COMPRESSION_RATIO from v$rman_backup_job_details where start_time > date '2021-07-01' order by 3 desc;

在这里插入图片描述

4、🍡 检查控制文件冗余

查看控制文件数量和位置,是否处于多份冗余状态。

sqlplus / as sysdba show parameter control_files select name from v$controlfile;

在这里插入图片描述
在这里插入图片描述

5、🍭 检查参数文件

查看数据库参数文件,检查参数使用是否正常。

sqlplus / as sysdba show parameter spfile create pfile='/home/oracle/pfile.ora' from spfile; strings /home/oracle/pfile.ora

在这里插入图片描述
在这里插入图片描述

6、🍬 归档和闪回是否开启

sqlplus / as sysdba archive log list select open_mode,log_mode,flashback_on,force_logging from v$database;

在这里插入图片描述

7、🍗 检查在线日志和切换频率

查看在线日志大小:

set line222 col member for a100 select f.group#,f.member,l.sequence#,l.bytes/1024/1024,l.archived,l.status,l.first_time from v$logfile f,v$log l where f.group# = l.group# order by f.group#,f.member;

在这里插入图片描述
查看在线日志切换频率:

col day for a30 SELECT SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DAY, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22, SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23, COUNT(*) TOTAL FROM v$log_history a where SYSDATE - first_time < 35 GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) order by 1;

8、🍕 查看数据库字符集

select * from nls_database_parameters;

在这里插入图片描述

9、🍯 检查无效对象

SELECT owner,object_name,object_type,status FROM dba_objects WHERE status <> 'VALID' ORDER BY owner,object_name;

在这里插入图片描述

10、🍋 检查分区表对象

set line222 col high_value for a100 select t2.TABLE_OWNER,t1.table_name, t1.max_partition_name, t2.high_value from (select table_name, max(partition_name) as max_partition_name from dba_tab_partitions group by table_name) t1, (select TABLE_OWNER,table_name, partition_name, high_value from dba_tab_partitions where tablespace_name not in ('SYSAUX', 'SYSTEM')) t2 where t1.table_name = t2.table_name and t1.max_partition_name = t2.partition_name order by 1,2;

在这里插入图片描述
需要注意分区的最大扩展分区,是否需要扩展,建议提前进行扩展,避免拆分。

三、❄️ 报告层面 ❄️

通过 Oracle 自带的 awr、ash、awrsqrpt等等报告可以清晰了解当前数据库的情况。

🍉 1、awr 报告

AWR 包含了数据库运行情况的详细信息收集,常用于分析收集性能问题。

sqlplus / as sysdba @?/rdbms/admin/awrrpt.sql

通过以上命令可以生成 AWR 报告,过程中需要填写 生成报告类型,抓取时间段,具体如何使用请自行查询,也可关注我公众号免费获取 awr 鹰眼调优视频教程。
在这里插入图片描述

🍊 2、ash 报告

ash 能抓取到比 AWR 报告更细节的信息,可以精确到分钟,也较为常用。

sqlplus / as sysdba @?/rdbms/admin/ashrpt.sql

如上为生成方式,可选时间段,默认为获取当前时间到15分钟前的报告。

🍒 3、awrsqrpt 报告

用于分析单条 SQL 出现性能问题时的报告,需要知道 SQL_ID。

sqlplus / as sysdba @?/rdbms/admin/awrsqrpt.sql

需要填写时间段和sql_id来获取相关sql的报告。

🍑 4、sqltrpt 报告

通常与 awrsqrpt 报告一起使用,可获取 Oracle 提供的关于 SQL 的优化建议,一般来说推荐创建索引和profile较多,适合新手来优化sql使用。

sqlplus / as sysdba @?/rdbms/admin/sqltrpt.sql

只需要 SQL_ID 即可。

🍍 5、addmrpt 报告

addmrpt 是 oracle 通过对 awr 报告进行自动诊断生成的报告。

sqlplus / as sysdba @?/rdbms/admin/addmrpt.sql

仅作参考作用,真实帮助的意义并不大。过程需要输入时间段。

🌽 6、健康检查报告

此类健康检查报告,一般为个人编写脚本执行产生的报告,检查结果根据个人自行定义,通常会包含以上所需信息。当然 Oracle 官方也提供了完整数据库的报告生成方式,这里不做过多介绍,需要的朋友可以联系我获取。

⚡️ 写在最后 ⚡️

通过以上这些检查,相信对你新接触的这个数据库系统已经有了一个大概的了解,接来下,只需要再慢慢的深入分析,然后制订出一套符合实际情况的运维规范来。

ヾ(◍°∇°◍)ノ゙


往期精彩文章

Oracle 一键巡检自动生成 Word 报告
Oracle 一键安装合集
Oracle一键安装脚本的 21 个疑问与解答
Oracle一键巡检脚本的 21 个疑问与解答
全网首发:Oracle 23ai 一键安装脚本(非 RPM)
Oracle 19C 最新 RU 补丁 19.24 ,一键安装!
Oracle Linux 7.9 一键安装 Oracle 19C
RedHat 9.4(aarch64) 一键安装 Oracle 19C
openEuler 22.03 LTS SP4 一键安装 Oracle 19C RAC
RHEL 7.9 一键安装 Oracle 19C 19.23 RAC
Oracle DataGuard GAP 修复手册
优化 Oracle:最佳实践与开发规范
DBA 必备:Linux 软件源配置全攻略
Linux 一键配置时钟同步全攻略


感谢您的阅读,这里是 Lucifer三思而后行,欢迎点赞+关注,我会持续分享数据库知识、运维技巧。

最后修改时间:2024-08-09 10:55:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
3人已赞赏
Q
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论