巡检命令

1
2
top
# 查看cpu的空闲时间以及IO等待完成时间
1
2
free -h
# 查看avaliable的使用情况
1
2
df -h
# 查看磁盘空间占用情况
1
2
3
getenforce
# 使用getenforce命令可以在Linux下查看是否开启了SELinux
# 如果为disable则有风险
1
2
systemctl status firewalld
# 查看防火墙是否开启
1
2
crontab -l
# 查看有没有未知的定时任务

数据库巡检


1
2
select instance_name,host_name,startup_time,status,database_status from v$instance;
-- 查看Oracl实例的状态

1
2
select group#,status,type,member from v$logfile; 
-- 检查Oracle在线日志状态

在Oracle数据库中,v$logfile是一个动态性能视图,它提供了关于在线重做日志文件的信息。这些日志文件是Oracle用于记录所有数据库更改(如插入、更新和删除操作)的物理文件。这些更改随后可用于恢复操作,例如实例恢复或介质恢复。
从v$logfile视图中检索以下列的信息:

  1. group# - 这是重做日志组的编号。在Oracle中,你可以有多个在线重做日志组,每个组可以有一个或多个成员(即物理文件)。
  • group#列表示日志组的编号。
  1. status - 这列显示了重做日志的状态。可能的值包括:
  • CURRENT - 表示该日志文件是当前正在写入的日志文件。

  • ACTIVE - 表示该日志文件包含尚未被归档的更改。

  • INACTIVE - 表示该日志文件不再用于写入,但可能包含尚未被覆盖的更改。

  • UNUSED - 表示该日志文件尚未使用。

  1. type - 这列描述了重做日志文件的类型。对于在线重做日志文件,它通常显示为ONLINE

  2. member - 这列显示了重做日志文件的完整路径和名称。每个日志组可以有多个成员,这意味着该组的日志数据被写入多个物理文件中。这提供了冗余和容错能力,因为如果一个物理文件损坏,其他文件仍然可用。

通过查询v$logfile视图,数据库管理员可以了解当前哪些日志文件正在使用,哪些处于空闲状态,以及这些日志文件的物理位置。这对于诊断问题、规划磁盘空间以及进行恢复操作都非常重要。


1
2
select tablespace_name,status from dba_tablespaces; 
-- 检查Oracle表空间的状态

1
2
select name,status from v$datafile;
-- 检查Oracle所有数据文件状态
  1. name - 这列显示了数据文件的完整路径和名称。它提供了数据文件的物理位置信息。

  2. status - 这列描述了数据文件的状态。可能的状态值包括:

    • AVAILABLE - 数据文件可用,并且可以被访问。
    • RECOVER - 数据文件正在恢复中,可能由于介质故障或其他原因。
    • OFFLINE - 数据文件当前不可用,可能由于管理员手动将其设置为离线状态,或者由于其他原因(如磁盘故障)。
    • INVALID - 数据文件的状态无效或损坏。
    • DELETED - 数据文件已被标记为删除,但其空间可能尚未被释放。

通过查询v$datafile视图,数据库管理员可以了解数据库中所有数据文件的状态和位置。这对于诊断问题、管理磁盘空间、备份和恢复操作以及监控数据库的健康状况都至关重要。例如,如果某个数据文件的状态为OFFLINE,那么可能需要进一步调查为什么它不可用,并考虑将其恢复为AVAILABLE状态。同样,如果数据文件的状态为INVALIDRECOVER,则可能需要进行恢复操作以确保数据的完整性和可用性。

1
2
select segment_name,status from dba_rollback_segs;
-- 检查所有回滚段状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT Upper(F.TABLESPACE_NAME)         "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
|| '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 1

-- 检查表空间使用情况
1
2
3
4
5
6
7
8
SELECT a.VALUE + b.VALUE logical_reads,
c.VALUE phys_reads,
round(100 * (1 - c.value / (a.value + b.value)), 4) hit_ratio
FROM v$sysstat a, v$sysstat b, v$sysstat c
WHERE a.NAME = 'db block gets'
AND b.NAME = 'consistent gets'
AND c.NAME = 'physical reads';
-- 检查缓冲区命中率
1
2
3
4
5
6
   select index_name, table_name, tablespace_name, status
From dba_indexes
Where owner = 'CTAIS2'
And status <> 'VALID';

-- 检查失效的索引
1
2
3
4
5
SELECT owner, constraint_name, table_name, constraint_type, status
FROM dba_constraints
WHERE status = 'DISABLE'
and constraint_type = 'P';
-- 检查不起作用的约束

下面的命令需要在sqlplus上执行

1
2
3
su - oracle
sqlplus /nolog
conn sys/ as sysdba;
1
2
show parameter process;   
-- 查看db_write_process数设定值
1
2
show parameter sessions;  
-- 查看session数设定值
1
2
select count(*) from v$session;
-- 查看session数实际值
1
2
select sum(percent_space_used) from v$flash_recovery_area_usage;
-- 查看归档日志占比

扩展表空间

查看表空间使用百分比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes / 1024 / 1024 || 'M' 字节数,
(
b.bytes - sum(nvl(a.bytes, 0))
) / 1024 / 1024 || 'M' 已使用,
sum(nvl(a.bytes, 0)) / 1024 / 1024 || 'M' 剩余空间,
100 - sum(nvl(a.bytes, 0)) / (b.bytes) * 100 占用百分比
FROM
dba_free_space a,
dba_data_files b
WHERE
a.file_id = b.file_id
GROUP BY
b.tablespace_name,
b.file_id,
b.bytes
ORDER BY
b.file_id;

查看表空间路径

1
2
3
4
5
6
7
8
9
SELECT
tablespace_name,
file_id,
file_name,
round(bytes /(1024 * 1024), 0) total_space
FROM
dba_data_files
ORDER BY
tablespace_name;

扩展表空间

1
ALTER TABLESPACE USERS ADD DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS04.DBF' SIZE 10000M;
1
ALTER DATABASE DATAFILE '+DATA/jhszws/datafile/phistablespace2017.ora' RESIZE 10G;

设置自动扩展

1
alter database datafile '/erp/TEST/db/data/cux_arch_03.dbf' autoextend on next 1000M maxsize 16000M;