一、适用范围
本 SOP 适用于 Linux/Unix 类操作系统上的 Oracle 数据库服务器巡检。
说明:
-
本文示例以 Linux 系统为准;
-
Windows 环境不适用
oscheck.sh,应使用对应的 Windows/PowerShell 版本脚本; -
本脚本适用于 Oracle CDB/PDB 架构和非 CDB 架构数据库巡检。
二、脚本组成与关系
本次巡检使用 3 个脚本:
| 脚本名称 | 作用 |
|---|---|
oscheck.sh |
巡检入口脚本,负责采集主机 OS、Oracle 环境、监听、补丁、RAC/GI 信息,并自动调用数据库巡检 SQL |
dbcheck_cdb.sql |
Oracle CDB/PDB 架构数据库巡检 SQL |
dbcheck_noncdb.sql |
Oracle 非 CDB 架构数据库巡检 SQL |
三个脚本之间不是内容包含关系 ,而是调用关系。
oscheck.sh
├── 采集主机 OS、Oracle 环境、监听、补丁、RAC/GI 信息
└── 自动调用对应的 dbcheck 脚本
├── CDB/PDB 架构:调用 dbcheck_cdb.sql
└── 非 CDB 架构:调用 dbcheck_noncdb.sql
注意:
-
oscheck.sh是总入口; -
dbcheck_cdb.sql、dbcheck_noncdb.sql是被调用脚本; -
oscheck.sh不包含两个dbcheck脚本的完整内容; -
三个脚本必须放在同一目录下。
三、ODA 多 CDB 执行原则
在 ODA 环境中,可能存在一套 ODA 上部署多个 CDB 的情况,例如:
一套 ODA
├── CDB1
│ ├── PDB1
│ └── PDB2
└── CDB2
├── PDB1
└── PDB2
该场景下,巡检按 CDB 维度 执行:
-
一个 CDB 执行一次巡检;
-
CDB 下的 PDB 信息由
dbcheck_cdb.sql自动采集; -
不需要对每个 PDB 单独执行;
-
如果一套 ODA 上有 2 个 CDB,则需要分别执行 2 次巡检。
-o 参数后面填写的是当前节点本地 Oracle 实例名,即 ORACLE_SID。
不要填写:
-
PDB 名;
-
业务系统名称;
-
数据库资源名。
ODA 多 CDB 示例
先在当前节点确认本机正在运行的 Oracle 实例:
ps -ef | grep "[p]mon"
示例输出:
ora_pmon_ERPCDB1
ora_pmon_MESDB1
说明:
ora_pmon_ 后面的内容就是当前节点本地实例名,也就是需要设置的 ORACLE_SID。
根据上面示例,当前节点有两个 CDB 实例:
| CDB/数据库 | 当前节点本地实例名 | 巡检方式 |
|---|---|---|
| ERPCDB | ERPCDB1 | 设置 ORACLE_SID=ERPCDB1 后执行 |
| MESDB | MESDB1 | 设置 ORACLE_SID=MESDB1 后执行 |
第一次巡检 ERPCDB:
export ORACLE_SID=ERPCDB1
bash oscheck.sh -o $ORACLE_SID
第二次巡检 MESDB:
export ORACLE_SID=MESDB1
bash oscheck.sh -o $ORACLE_SID
如果在另一个节点执行,也要先确认当前节点本地实例名。例如另一个节点可能显示:
ora_pmon_ERPCDB2
ora_pmon_MESDB2
则对应执行:
export ORACLE_SID=ERPCDB2
bash oscheck.sh -o $ORACLE_SID
export ORACLE_SID=MESDB2
bash oscheck.sh -o $ORACLE_SID
四、脚本部署
脚本目录可根据现场实际情况选择,/data/check 只是示例路径。
例如可以使用:
/data/check
/u01/check
/home/oracle/check
本文以 /data/check 为例。
使用 root 用户创建目录:
mkdir -p /data/check
将以下 3 个脚本上传到同一目录:
oscheck.sh
dbcheck_cdb.sql
dbcheck_noncdb.sql
检查脚本:
cd /data/check
ll
正常应看到:
oscheck.sh
dbcheck_cdb.sql
dbcheck_noncdb.sql
五、脚本授权
使用 root 用户执行:
cd /data/check
chown -R oracle:oinstall /data/check
chmod 750 /data/check
chmod 750 oscheck.sh
chmod 640 dbcheck_cdb.sql dbcheck_noncdb.sql
如果现场 Oracle 用户组不是 oinstall,以实际查询结果为准:
id oracle
授权后权限示例:
-rwxr-x--- 1 oracle oinstall oscheck.sh
-rw-r----- 1 oracle oinstall dbcheck_cdb.sql
-rw-r----- 1 oracle oinstall dbcheck_noncdb.sql
六、执行前检查
切换到 oracle 用户:
su - oracle
cd /data/check
确认 Oracle 环境:
echo $ORACLE_SID
echo $ORACLE_HOME
ps -ef | grep "[p]mon"
确认要求:
-
ORACLE_HOME正确; -
ORACLE_SID为当前节点本地实例名; -
ORACLE_SID应与ora_pmon_后面的实例名一致。
如果当前 ORACLE_SID 不正确,先手动指定:
export ORACLE_SID=当前节点本地实例名
七、执行巡检
执行命令:
bash oscheck.sh -o $ORACLE_SID
也可以明确指定实例名:
bash oscheck.sh -o yjcs
说明:
-
-o后面填写 Oracle 实例名; -
RAC/ODA 环境填写当前节点本地实例名;
-
CDB/PDB 架构下只需要对 CDB 实例执行;
-
PDB 不需要单独执行巡检。
执行过程中,如检测到 CDB 架构,会显示:
检测到 CDB 架构,使用 dbcheck_cdb.sql
八、查看结果
执行完成后,在脚本目录查看结果:
ls -lh /data/check
正常会生成:
dbcheck_主机名_日期/
dbcheck_主机名_日期.tar.gz
其中 .tar.gz 文件就是最终巡检结果包。
ODA 多 CDB 场景下,如果同一天在同一目录连续巡检多个 CDB,结果包名称可能相同。建议每个 CDB 使用独立目录,或执行完成后按 CDB 名称单独保存结果包,例如:
dbcheck_ERPCDB1_主机名_日期.tar.gz
dbcheck_MESDB1_主机名_日期.tar.gz
九、注意事项
-
本脚本主要适用于 Linux/Unix 类 Oracle 数据库服务器;
-
不建议使用
root用户直接执行oscheck.sh; -
三个脚本必须放在同一目录;
-
/data/check只是示例路径,实际可按现场目录调整; -
ODA 多 CDB 场景下,按 CDB 维度执行巡检;
-
-o后填写当前节点本地实例名,即ORACLE_SID; -
PDB 不需要单独执行巡检;
-
建议在业务低峰期执行;
-
巡检结果包含主机、数据库、用户、权限、表空间、补丁等敏感信息,应妥善保存;
-
本脚本属于巡检采集类脚本,不属于数据库变更脚本。
十、标准执行流程汇总
1. root 用户准备
mkdir -p /data/check
cd /data/check
chown -R oracle:oinstall /data/check
chmod 750 /data/check
chmod 750 oscheck.sh
chmod 640 dbcheck_cdb.sql dbcheck_noncdb.sql
2. oracle 用户执行
su - oracle
cd /data/check
echo $ORACLE_HOME
ps -ef | grep "[p]mon"
export ORACLE_SID=当前节点本地实例名
bash oscheck.sh -o $ORACLE_SID
3. 查看结果
ls -lh /data/check
十一、附录:涉及的脚本源码
说明:以下源码仅用于留档和版本核对。日常执行时按前文 SOP 操作即可,不建议把源码插入到操作步骤中。
附录 A:oscheck.sh
此处粘贴 oscheck.sh 脚本全文。
请私信本人获取
附录 B:dbcheck_cdb.sql
此处粘贴 dbcheck_cdb.sql 脚本全文。
请私信本人获取
附录 C:dbcheck_noncdb.sql
此处粘贴 dbcheck_noncdb.sql 脚本全文。
请私信本人获取