运维管理14 分钟阅读
⭐️ Oracle数据库巡检,需要关注哪些点?⭐️(一些个人见解)
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 <font color='green'如果给你一个全新的Oracle单机数据库环境,作为DBA,您需要关注哪些点?本文仅讨论 <f
2021年8月8日阅读—点赞—收藏—
oraclerac
在知识库中专注阅读,并随时返回相关工具与课程
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。 @TOC目录 <font color='green'如果给你一个全新的Oracle单机数据库环境,作为DBA,您需要关注哪些点?本文仅讨论 <f
大家好,这里是公众号 DBA学习之路,分享一些学习数据库路上的知识和经验。

本章目标:掌握本章核心知识点 前置要求:完成前序章节学习 预计时长:60 分钟
如果给你一个全新的Oracle单机数据库环境,作为DBA,您需要关注哪些点?本文仅讨论 Linux 主机~
📢 首先申明本文所述并非标准答案,只是个人的一些见解,欢迎👏🏻大家补充完善~
首先,当然是确认是单机还是集群模式的数据库!本文主要讲解单机数据库。
主机版本:
1cat /etc/system-release2cat /etc/redhat-release
在这里插入图片描述
Oracle版本和补丁版本:
1sqlplus -version2opatch lspatches
在这里插入图片描述
包括CPU负载,物理内存和磁盘使用。
CPU负载和内存:
1top2free -m
在这里插入图片描述
在这里插入图片描述
⚠️ 需要注意主机的CPU负载和物理内存使用是否异常,Swap是否被过多使用。
磁盘使用情况:
1lsblk2fdisk -l3df -Th
在这里插入图片描述
⚠️ 显而易见,需要关注磁盘使用情况,是否存在使用率过高。
一般计划任务会布置一些备份策略或者归档删除的策略,我们可以通过crontab来查看:
1crontab -l
在这里插入图片描述
1cat /etc/hosts2ip addr3nmcli connection show
在这里插入图片描述
在这里插入图片描述
1cat /etc/sysctl.conf
在这里插入图片描述
⚠️ 需注意是否有设置非常规参数。
rc.local文件用于配置开机自启动脚本,一般会设置关闭透明大页或者Oracle数据库开机自启。
1cat /etc/rc.local
在这里插入图片描述
查看环境变量配置,进一步熟悉环境。
1cat ~/.bash_profile2cat /home/oracle/.bash_profile
在这里插入图片描述
在这里插入图片描述
1systemctl status firewalld.service2getenforce3cat /proc/cmdline4cat /etc/sysconfig/network
在这里插入图片描述
1ps -ef|grep smon2su - oracle3lsnrctl status
在这里插入图片描述
在这里插入图片描述
1sqlplus / as sysdba2col TABLESPACE_NAME for a203select tbs_used_info.tablespace_name,4 tbs_used_info.alloc_mb,5 tbs_used_info.used_mb,6 tbs_used_info.max_mb,7 tbs_used_info.free_of_max_mb,8 tbs_used_info.used_of_max || '%' used_of_max_pct9 from (select a.tablespace_name,10 round(a.bytes_alloc / 1024 / 1024) alloc_mb,11 round((a.bytes_alloc - nvl(b.bytes_free,12 0)) / 1024 / 1024) used_mb,13 round((a.bytes_alloc - nvl(b.bytes_free,14 0)) * 100 / a.maxbytes) used_of_max,15 round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free,16 0)) / 1048576) free_of_max_mb,17 round(a.maxbytes / 1048576) max_mb18 from (select f.tablespace_name,19 sum(f.bytes) bytes_alloc,20 sum(decode(f.autoextensible,21 'YES',22 f.maxbytes,23 'NO',24 f.bytes)) maxbytes25 from dba_data_files f26 group by tablespace_name) a,27 (select f.tablespace_name,28 sum(f.bytes) bytes_free29 from dba_free_space f30 group by tablespace_name) b31 where a.tablespace_name = b.tablespace_name(+)) tbs_used_info32 order by tbs_used_info.used_of_max desc;
在这里插入图片描述
1rman target /2list backup;34sqlplus / as sysdba5col status for a106col input_type for a207col INPUT_BYTES_DISPLAY for a108col OUTPUT_BYTES_DISPLAY for a109col TIME_TAKEN_DISPLAY for a101011select input_type,12 status,13 to_char(start_time,14 'yyyy-mm-dd hh24:mi:ss'),15 to_char(end_time,16 'yyyy-mm-dd hh24:mi:ss'),17 input_bytes_display,18 output_bytes_display,19 time_taken_display,20 COMPRESSION_RATIO21 from v$rman_backup_job_details22 where start_time > date '2021-07-01'23 order by 3 desc;
在这里插入图片描述
查看控制文件数量和位置,是否处于多份冗余状态。
1sqlplus / as sysdba2show parameter control_files3select name from v$controlfile;
在这里插入图片描述
在这里插入图片描述
查看数据库参数文件,检查参数使用是否正常。
1sqlplus / as sysdba2show parameter spfile3create pfile='/home/oracle/pfile.ora' from spfile;45strings /home/oracle/pfile.ora
在这里插入图片描述
在这里插入图片描述
1sqlplus / as sysdba2archive log list3select open_mode,log_mode,flashback_on,force_logging from v$database;
在这里插入图片描述
查看在线日志大小:
1set line2222col member for a1003select f.group#,f.member,l.sequence#,l.bytes/1024/1024,l.archived,l.status,l.first_time 4from v$logfile f,v$log l 5where f.group# = l.group# 6order by f.group#,f.member;
在这里插入图片描述
查看在线日志切换频率:
1col day for a302SELECT3 SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) DAY,4 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'00',1,0)) H00,5 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'01',1,0)) H01,6 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'02',1,0)) H02,7 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'03',1,0)) H03,8 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'04',1,0)) H04,9 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'05',1,0)) H05,10 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'06',1,0)) H06,11 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'07',1,0)) H07,12 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'08',1,0)) H08,13 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'09',1,0)) H09,14 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'10',1,0)) H10,15 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'11',1,0)) H11,16 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'12',1,0)) H12,17 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'13',1,0)) H13,18 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'14',1,0)) H14,19 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'15',1,0)) H15,20 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'16',1,0)) H16,21 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'17',1,0)) H17,22 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'18',1,0)) H18,23 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'19',1,0)) H19,24 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'20',1,0)) H20,25 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'21',1,0)) H21,26 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'22',1,0)) H22,27 SUM(DECODE(SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH24:MI:SS'),10,2),'23',1,0)) H23,28 COUNT(*) TOTAL29FROM30 v$log_history a where SYSDATE - first_time < 3531GROUP BY SUBSTR(TO_CHAR(first_time, 'MM/DD/RR HH:MI:SS'),1,5) order by 1;1select * from nls_database_parameters;
在这里插入图片描述
1SELECT owner,object_name,object_type,status2FROM dba_objects3WHERE status <> 'VALID'4ORDER BY owner,object_name;
在这里插入图片描述
1set line2222col high_value for a1003select t2.TABLE_OWNER,t1.table_name, t1.max_partition_name, t2.high_value4 from (select table_name, max(partition_name) as max_partition_name5 from dba_tab_partitions6 group by table_name) t1,7 (select TABLE_OWNER,table_name, partition_name, high_value8 from dba_tab_partitions9 where tablespace_name not in ('SYSAUX', 'SYSTEM')) t210 where t1.table_name = t2.table_name11 and t1.max_partition_name = t2.partition_name12 order by 1,2;
在这里插入图片描述
需要注意分区的最大扩展分区,是否需要扩展,建议提前进行扩展,避免拆分。
通过 Oracle 自带的 awr、ash、awrsqrpt等等报告可以清晰了解当前数据库的情况。
AWR 包含了数据库运行情况的详细信息收集,常用于分析收集性能问题。
1sqlplus / as sysdba @?/rdbms/admin/awrrpt.sql通过以上命令可以生成 AWR 报告,过程中需要填写 生成报告类型,抓取时间段,具体如何使用请自行查询,也可关注我公众号免费获取 awr 鹰眼调优视频教程。
在这里插入图片描述
ash 能抓取到比 AWR 报告更细节的信息,可以精确到分钟,也较为常用。
1sqlplus / as sysdba @?/rdbms/admin/ashrpt.sql如上为生成方式,可选时间段,默认为获取当前时间到15分钟前的报告。
用于分析单条 SQL 出现性能问题时的报告,需要知道 SQL_ID。
1sqlplus / as sysdba @?/rdbms/admin/awrsqrpt.sql需要填写时间段和sql_id来获取相关sql的报告。
通常与 awrsqrpt 报告一起使用,可获取 Oracle 提供的关于 SQL 的优化建议,一般来说推荐创建索引和profile较多,适合新手来优化sql使用。
1sqlplus / as sysdba @?/rdbms/admin/sqltrpt.sql只需要 SQL_ID 即可。
addmrpt 是 oracle 通过对 awr 报告进行自动诊断生成的报告。
1sqlplus / as sysdba @?/rdbms/admin/addmrpt.sql仅作参考作用,真实帮助的意义并不大。过程需要输入时间段。
此类健康检查报告,一般为个人编写脚本执行产生的报告,检查结果根据个人自行定义,通常会包含以上所需信息。当然 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 一键配置时钟同步全攻略
