【Prometheus-OracleDB Exporter安装配置指南,开机自启】

目录

    • [1. 安装Oracle Instant Client](#1. 安装Oracle Instant Client)
      • [1.1 解压安装包](#1.1 解压安装包)
      • [1.2 创建运行时链接](#1.2 创建运行时链接)
    • [2. 环境配置](#2. 环境配置)
      • [2.1 设置环境变量](#2.1 设置环境变量)
      • [2.2 验证配置](#2.2 验证配置)
    • [3. 安装Oracle DB Exporter](#3. 安装Oracle DB Exporter)
      • [3.1 创建工作目录](#3.1 创建工作目录)
      • [3.2 解压安装包](#3.2 解压安装包)
      • [3.3 添加执行权限](#3.3 添加执行权限)
    • [4. 数据库监控配置](#4. 数据库监控配置)
      • [4.1 创建监控用户(切换到Oracle所属用户)](#4.1 创建监控用户(切换到Oracle所属用户))
    • [5. Exporter配置](#5. Exporter配置)
      • [5.1 配置文件(切回root用户)](#5.1 配置文件(切回root用户))
      • [5.2 运行参数](#5.2 运行参数)
    • [6. 服务管理](#6. 服务管理)
      • [6.1 创建Systemd服务](#6.1 创建Systemd服务)
      • [6.2 服务控制](#6.2 服务控制)
      • [6.3 集成到 Prometheu](#6.3 集成到 Prometheu)
    • [7. 验证部署](#7. 验证部署)
    • [8. 故障排除(STARTUP报错ORA-01102: cannot mount database in EXCLUSIVE mode)](#8. 故障排除(STARTUP报错ORA-01102: cannot mount database in EXCLUSIVE mode))
      • [8.1 强制清理进程](#8.1 强制清理进程)
      • [8.2 清理所有 Oracle 相关的共享内](#8.2 清理所有 Oracle 相关的共享内)
      • [8.3 删除锁文件](#8.3 删除锁文件)
      • [8.4 数据库重启](#8.4 数据库重启)
    • [8. Grafana展现](#8. Grafana展现)

1. 安装Oracle Instant Client

1.1 解压安装包

bash 复制代码
sudo unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.zip -d /usr/local/oracle19c
sudo unzip instantclient-sdk-linux.x64-19.19.0.0.0dbru.zip -d /usr/local/oracle19c

1.2 创建运行时链接

bash 复制代码
ln -s /usr/local/oracle19c/instantclient_19_27/libclntsh.so.19.1 \
       /usr/local/oracle19c/instantclient_19_27/libclntsh.so

2. 环境配置

2.1 设置环境变量

bash 复制代码
echo 'export LD_LIBRARY_PATH=/usr/local/oracle19c/instantclient_19_27:$LD_LIBRARY_PATH' \
  | sudo tee -a /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh

2.2 验证配置

bash 复制代码
echo $LD_LIBRARY_PATH

3. 安装Oracle DB Exporter

3.1 创建工作目录

bash 复制代码
mkdir -p /usr/local/oracledb_exporter

3.2 解压安装包

bash 复制代码
tar -zxvf oracledb_exporter.0.3.0rc1-ora18.5.linux-amd64.tar.gz \
  -C /usr/local/oracledb_exporter --strip-components=1

3.3 添加执行权限

bash 复制代码
chmod +x /usr/local/oracledb_exporter/oracledb_exporter

4. 数据库监控配置

4.1 创建监控用户(切换到Oracle所属用户)

bash 复制代码
su - oracle
sqlplus / as sysdba
sql 复制代码
-- 创建用户
CREATE USER monitor IDENTIFIED BY 123456;

-- 系统权限授予
GRANT CONNECT, CREATE SESSION TO monitor;
GRANT SELECT ANY DICTIONARY TO monitor;
 
-- 对象权限授予
GRANT SELECT ON v_$sysstat TO monitor;
GRANT SELECT ON v_$database TO monitor;
GRANT SELECT ON v_$session TO monitor;
GRANT SELECT ON v_$resource_limit TO monitor;
GRANT SELECT ON v_$waitclassmetric TO monitor;
GRANT SELECT ON v_$process TO monitor;
GRANT SELECT ON dba_tablespaces TO monitor;
GRANT SELECT ON dba_data_files TO monitor;
GRANT SELECT ON v_$asm_diskgroup TO monitor;
 
-- 补充SYS模式下的视图权限
GRANT SELECT ON SYS.V_$INSTANCE TO monitor;
GRANT SELECT ON SYS.V_$TABLESPACE TO monitor;
GRANT SELECT ON SYS.V_$DATAFILE TO monitor;

5. Exporter配置

5.1 配置文件(切回root用户)

bash 复制代码
vi /usr/local/oracledb_exporter/config.yml
yaml 复制代码
default:
  user: monitor
  password: 123456
  service: ORCL
  host: 192.168.15.131
  port: 1521
  disable_connection_pool: false
  max_open_connections: 10
  metric_path: /metrics

5.2 运行参数

bash 复制代码
export DATA_SOURCE_NAME=monitor/123456@//192.168.15.131:1521/ORCL
export DEFAULT_METRICS=/usr/local/oracledb_exporter/default-metrics.toml
export WEB_LISTEN_ADDRESS=:9161

cd /usr/local/oracledb_exporter
# 常规方式启动
./oracledb_exporter --config=config.yml

6. 服务管理

6.1 创建Systemd服务

bash 复制代码
vi /etc/systemd/system/oracledb_exporter.service
ini 复制代码
[Unit]
Description=Oracle DB Exporter
After=network.target

[Service]
User=root
Environment="DATA_SOURCE_NAME=monitor/123456@//192.168.15.131:1521/ORCL"
Environment="LD_LIBRARY_PATH=/usr/local/oracle19c/instantclient_19_27"
WorkingDirectory=/usr/local/oracledb_exporter
ExecStart=/usr/local/oracledb_exporter/oracledb_exporter
Restart=always

[Install]
WantedBy=multi-user.target

6.2 服务控制

bash 复制代码
systemctl daemon-reload
systemctl start oracledb_exporter
systemctl enable oracledb_exporter
systemctl status oracledb_exporter

6.3 集成到 Prometheu

bash 复制代码
vim /usr/local/prometheus/prometheus.yml
python 复制代码
scrape_configs:
  - job_name: 'oracle'
    static_configs:
      - targets: ['192.168.15.131:9161']  # 替换为实际 IP 和端口

7. 验证部署

bash 复制代码
访问http://192.168.15.131:9161/metrics

8. 故障排除(STARTUP报错ORA-01102: cannot mount database in EXCLUSIVE mode)

sql 复制代码
SQL> STARTUP
ORACLE instance started.

Total System Global Area 1191181696 bytes
Fixed Size                  8895872 bytes
Variable Size             335544320 bytes
Database Buffers          838860800 bytes
Redo Buffers                7880704 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode

8.1 强制清理进程

bash 复制代码
ps -ef | grep ora_ | grep -v grep | awk '{print $2}' | xargs kill -9
# 验证是否还有残留进程
ps -ef | grep ora_ | grep -v grep

8.2 清理所有 Oracle 相关的共享内

bash 复制代码
ipcs -m | grep oracle | awk '{print $2}' | xargs -n1 ipcrm -m
rm -f $ORACLE_HOME/dbs/lk*

8.3 删除锁文件

sql 复制代码
# 定位锁文件(通常位于 $ORACLE_HOME/dbs)
ls -l $ORACLE_HOME/dbs/lk*

# 删除锁文件(确保数据库已关闭)
rm -f $ORACLE_HOME/dbs/lk*

8.4 数据库重启

sql 复制代码
SHUTDOWN ABORT;
STARTUP FORCE;

正常输出:

ORACLE instance started.

Total System Global Area 1191181696 bytes

Fixed Size 8895872 bytes

Variable Size 335544320 bytes

Database Buffers 838860800 bytes

Redo Buffers 7880704 bytes

Database mounted.

Database opened.

sql 复制代码
如果仍报错 ORA-01102,尝试以下命令:
SQL> STARTUP FORCE;
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE OPEN;

8. Grafana展现

相关推荐
数据知道39 分钟前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_124987075340 分钟前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha41 分钟前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance1 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋1 小时前
【Redis】主从复制
数据库·redis
马猴烧酒.2 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
天天爱吃肉82182 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
大巨头2 小时前
sql2008 数据库分页语句
数据库
m0_715575342 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python