📄 orainfo.c
字号:
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "orainfo.h"
#include "common.h"
#include "utils.h"
#include "performance.h"
#include "netinfo.h"
#include "platinfo.h"
#include "dirinfo.h"
#ifdef WIN32
#include "procinfo.h"
#endif
#ifdef WIN32
int GetOraCpuUsage(const char *sid, float *percent, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
return GetProcCpuUsage(pid, percent, errbuf);
}
else
{
*percent = 0.00;
return 0;
}
return -1;
}
#else
int GetOraCpuUsage(const char *sid, float *percent, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char buffer[MIN_BUF_LEN];
int ret;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
memset(buffer,0,sizeof(buffer));
#if defined(SOLARIS)
sprintf(szCmd,
"ps -eo \"user pid pcpu pmem rss args\" |awk 'BEGIN{pcpu=0;}$6~/^ora.*%s$/{pcpu+=$3;}END{printf \"%%.02f\",pcpu;}'",
sid);
#else
sprintf(szCmd,"ps auwwx |awk 'BEGIN{pcpu=0;}$NF~/^ora.*%s$/{pcpu+=$3;}END{printf \"%%.02f\",pcpu;}'",
sid);
#endif
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
if (strlen(buffer)>0)
{
*percent = atof(buffer);
}
else
{
*percent = 0.00;
}
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get cpu load error");
return -1;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraMemUsage(const char *sid, float *percent, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
return GetProcMemUsage(pid, percent, errbuf);
}
else
{
*percent = 0.00;
return 0;
}
return -1;
}
#else
int GetOraSGASize(const char *sid, unsigned long *sgasize)
{
char szCmd[MIN_BUF_LEN];
char szTmp[MIN_BUF_LEN];
int ret;
if (sid == NULL)
{
return -1;
}
#if defined(SOLARIS)
sprintf(szCmd,
"ps -eo \"user pid pcpu pmem rss args\" |awk '$6~/^ora.*%s$/{printf \"%%s\",$1;exit 0}'",
sid);
#else
sprintf(szCmd,
"ps auwwx |awk '$NF~/^ora.*%s$/{printf \"%%s\",$1;exit 0}'",
sid);
#endif
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
if (ret != 0)
{
return -1;
}
trim_strLR(szTmp, szTmp);
if (strlen(szTmp) == 0)
{
*sgasize = 0;
return 0;
}
else
{
#if defined(LINUX)
sprintf(szCmd,
"ipcs -m|awk 'BEGIN{size=0;}$3==\"%s\"{size+=$5;}END{printf \"%%d\",size/1024;}'",
szTmp);
#else
sprintf(szCmd,
"ipcs -mb|awk 'BEGIN{size=0;}$5==\"%s\"{size+=$7;}END{printf \"%%d\",size/1024;}'",
szTmp);
#endif
}
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
if (ret != 0)
{
return -1;
}
trim_strLR(szTmp, szTmp);
if (strlen(szTmp) == 0)
{
*sgasize = 0;
}
else
{
*sgasize = strtoul(szTmp, NULL, 10);
}
return 0;
}
int GetOraMemUsage(const char *sid, float *percent, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szTmp[MIN_BUF_LEN];
unsigned long sgasize;
unsigned long usesize;
unsigned long memsize;
int ret;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
ret = GetOraSGASize(sid, &sgasize);
if (ret != 0)
{
strcpy(errbuf, "2:GetOraSGASize() error");
return -1;
}
#if defined(SOLARIS)
sprintf(szCmd,
"ps -eo \"user pid pcpu pmem rss args\" |awk 'BEGIN{rss=0;}$6~/^ora.*%s$/{rss+=($5-%d);}END{printf \"%%d\",(rss+%d);}'",
sid, sgasize, sgasize);
#elif defined(AIX)
sprintf(szCmd,
"ps auwwx |awk 'BEGIN{rss=0;}$NF~/^ora.*%s$/{rss+=$6;}END{printf \"%%d\", (rss+%d);}'",
sid, sgasize);
#else
sprintf(szCmd,
"ps auwwx |awk 'BEGIN{rss=0;}$NF~/^ora.*%s$/{rss+=($6-%d);}END{printf \"%%d\", (rss+%d);}'",
sid, sgasize, sgasize);
#endif
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szTmp, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
if(strlen(szTmp)>0)
{
usesize = strtoul(szTmp, NULL, 10);
}
else
{
*percent = 0.00;
return 0;
}
ret = GetSysMemSize(&memsize, errbuf);
if (ret != 0)
{
return -1;
}
*percent = 100*(float)usesize/(float)memsize;
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get memory load error");
return -1;
}
return 0;
}
#endif
int GetOraSysCpuUsage(float *percent, char *errbuf)
{
return GetSysCpuUsage(percent, errbuf);
}
int GetOraSysMemUsage(float *percent, char *errbuf)
{
return GetSysMemUsage(percent, errbuf);
}
int GetOraSysMemSize(unsigned long *memsize, char *errbuf)
{
return GetSysMemSize(memsize, errbuf);
}
int GetOraSysIP(char *ipbuf, unsigned long len, char *errbuf)
{
return GetSysIP(ipbuf, len, errbuf);
}
int GetOraOSVer(char *buf, unsigned long len, char *errbuf)
{
return GetOSVer(buf, len, errbuf);
}
#ifdef WIN32
int GetOraLsnrStat(int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MAX_BUF_LEN];
strcpy(szCmd, "lsnrctl status");
memset(szBuf, 0, MAX_BUF_LEN);
my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MAX_BUF_LEN);
if (strlen(szBuf) < MIN_BUF_LEN || strstr(szBuf, "Error"))
{
*stat = 0;
}
else
{
*stat = 1;
}
return 0;
}
#else
int GetOraLsnrStat(int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
strcpy(szCmd, "ps -ef|grep ora|grep 'tnslsnr LISTENER -inherit'|grep -v grep");
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "tnslsnr LISTENER -inherit"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraDbwrStat(const char *sid, int *stat, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#else
int GetOraDbwrStat(const char *sid, int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
sprintf(szCmd, "ps -ef|grep -w 'ora_dbw._%s'|grep -v grep", sid);
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "ora_dbw"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraLgwrStat(const char *sid, int *stat, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#else
int GetOraLgwrStat(const char *sid, int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
sprintf(szCmd, "ps -ef|grep -w ora_lgwr_%s|grep -v grep", sid);
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "ora_lgwr"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraCkptStat(const char *sid, int *stat, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#else
int GetOraCkptStat(const char *sid, int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
sprintf(szCmd, "ps -ef|grep -w ora_ckpt_%s|grep -v grep", sid);
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "ora_ckpt"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraSmonStat(const char *sid, int *stat, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#else
int GetOraSmonStat(const char *sid, int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
sprintf(szCmd, "ps -ef|grep -w ora_smon_%s|grep -v grep", sid);
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "ora_smon"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
#ifdef WIN32
int GetOraPmonStat(const char *sid, int *stat, char *errbuf)
{
char szBuff[MIN_BUF_LEN];
int pid;
if (sid == NULL)
{
strcpy(errbuf, "2:sid is NULL");
return -1;
}
sprintf(szBuff, "OracleService%s", sid);
pid = GetServicePid(szBuff);
if (pid > 0)
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#else
int GetOraPmonStat(const char *sid, int *stat, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
sprintf(szCmd, "ps -ef|grep -w ora_pmon_%s|grep -v grep", sid);
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
*stat = 0;
return 0;
}
if (strstr(szBuf, "ora_pmon"))
{
*stat = 1;
}
else
{
*stat = 0;
}
return 0;
}
#endif
int GetOraAllBgProcName(char *buf, unsigned long len)
{
memset(buf, 0, len);
strcpy(buf, "DBWR,LGWR,CKPT,SMON,PMON");
return 0;
}
int GetOraBgProcName(const char *bgname, char *buf, unsigned long len)
{
memset(buf, 0, len);
strcpy(buf, bgname);
return 0;
}
int GetOraDirDiskUsage(const char *dirname, float *percent, char *errbuf)
{
return GetDirDiskUsage(dirname, percent, errbuf);
}
int GetOraDirDiskSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
return GetDirDiskSize(dirname, buf, len, errbuf);
}
int GetOraDirDiskUsedSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
return GetDirDiskUsedSize(dirname, buf, len, errbuf);
}
int GetOraDirSize(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
return GetDirSize(dirname, buf, len, errbuf);
}
int GetOraFileSysName(const char *dirname, char *buf, unsigned long len, char *errbuf)
{
return GetFileSysName(dirname, buf, len, errbuf);
}
int GetOraSysHostName(char *buf, unsigned long len, char *errbuf)
{
return GetSysHostName(buf, len, errbuf);
}
int GetOraHostMac(char *buf, unsigned long len, char *errbuf)
{
return GetHostMac(buf, len, errbuf);
}
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -