oracle巡检语句汇总
需积分: 0 40 浏览量
更新于2024-04-02
收藏 41KB DOCX 举报
### Oracle巡检语句汇总详解
#### 一、检查数据库基本状况
在Oracle数据库的日常运维工作中,确保数据库的基本运行状况良好是非常重要的第一步。这部分主要包括以下几个方面:
##### 1.1 检查Oracle实例状态
```sql
select instance_name, host_name, startup_time, status, database_status from v$instance;
```
- **instance_name**: 实例名称。
- **host_name**: 主机名。
- **startup_time**: 实例启动时间。
- **status**: 实例状态,正常情况下应为`OPEN`。
- **database_status**: 数据库状态,正常情况下应为`ACTIVE`。
##### 1.2 检查Oracle在线日志状态
```sql
select group#, status, type, member from v$logfile;
```
- **group#**: 日志组编号。
- **status**: 日志组状态,应为非`INVALID`或非`DELETED`。
- **type**: 日志类型。
- **member**: 日志文件路径。
正常情况下,至少应有3条以上的记录,且“STATUS”为非“INVALID”或非“DELETED”。
##### 1.3 检查Oracle表空间的状态
```sql
select tablespace_name, status from dba_tablespaces;
```
- **tablespace_name**: 表空间名称。
- **status**: 表空间状态,正常情况下应全部为`ONLINE`。
##### 1.4 检查Oracle所有数据文件状态
```sql
select name, status from v$datafile;
```
- **name**: 数据文件路径。
- **status**: 数据文件状态,正常情况下应全部为`ONLINE`。
或者使用以下SQL语句:
```sql
select file_name, status from dba_data_files;
```
这里的`status`字段也应为`AVAILABLE`。
##### 1.5 检查无效对象
```sql
select owner, object_name, object_type from dba_objects where status!='VALID' and owner!='SYS' and owner!='SYSTEM';
```
- **owner**: 对象所属者。
- **object_name**: 对象名称。
- **object_type**: 对象类型。
如果有记录返回,则说明存在无效对象。针对这种情况,可以尝试重新编译这些对象或者使用以下SQL语句进一步排查:
```sql
SELECT owner, object_name, object_type FROM dba_objects WHERE status= 'INVALID';
```
##### 1.6 检查所有回滚段状态
```sql
select segment_name, status from dba_rollback_segs;
```
- **segment_name**: 回滚段名称。
- **status**: 回滚段状态,正常情况下应全部为`ONLINE`。
#### 二、检查Oracle相关资源的使用情况
这一部分涵盖了多个维度的监控,有助于及时发现并解决问题。
##### 2.1 检查Oracle初始化文件中相关参数值
```sql
select resource_name, max_utilization, initial_allocation, limit_value from v$resource_limit;
```
- **resource_name**: 资源名称。
- **max_utilization**: 最大利用率。
- **initial_allocation**: 初始分配。
- **limit_value**: 限制值。
如果`LIMIT_VALUE - MAX_UTILIZATION <= 5`,则可能需要调整与`RESOURCE_NAME`相关的Oracle初始化参数。这通常可以通过编辑Oracle初始化参数文件`$ORACLE_BASE/admin/CKDB/pfile/initORCL.ora`来实现。
##### 2.2 检查数据库连接情况
```sql
select count(*) from v$session;
```
此查询用于查看当前会话连接数,判断是否处于正常范围内。
```sql
select sid, serial#, username, program, machine, status from v$session;
```
- **sid**: 会话ID。
- **serial#**: 会话序列号。
- **username**: 用户名。
- **program**: 使用的工具。
- **machine**: 客户端机器名。
- **status**: 会话状态。
如果发现建立了过多的连接,可能会消耗大量数据库资源,对于“挂死”的连接可能需要手动清理。使用以下命令断开会话(需谨慎操作):
```sql
alter system kill session 'SID,SERIAL#';
```
注意:通常不推荐直接使用这种方式断开连接,因为有时session不会被真正断开,导致死连接。建议通过`SID`查找到操作系统的`SPID`,然后使用操作系统命令`kill -9`来终止连接。
通过对Oracle数据库进行定期巡检,可以有效地监测数据库运行状态,预防潜在问题的发生,并及时采取措施解决问题,确保数据库稳定高效地运行。