Oracle数据库巡检,需要关注哪些点?

认识 Oracle 数据库 

🌲 前言 🌲

如果给你一个全新的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、健康检查报告

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值