...
Table of Contents |
---|
После запуска Перед запуском
ais_name |
---|
ais_name |
---|
Контроль должен отслеживать следующие группы параметров:
...
Чтобы настроить контроль выполнения заданий
ais_name |
---|
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/sh . /etc/profile rval=0 ORA_USER="AIS_NET" ORA_PASS="mypass" SQLPLUS_PATH="$ORACLE_HOME/bin/sqlplus" if [ -n "$3" ]; then ORA_SID="$3" export ORACLE_SID=$ORA_SID fi sql="" case $1 in 'job_state') if [ -n "$2" ]; then echo " SELECT to_char(N_JOB_STATE_ID, 'FM99999999999999990') FROM SS_V_JOBS WHERE N_JOB_ID=$2; " | ${SQLPLUS_PATH} -s ${ORA_USER}/${ORA_PASS}@${ORACLE_SID} | awk '{ if ($1 == 2034) print "Running" else if($1 == 1034) print "Waiting" else if($1 == 3034) print "StartingTo Start" else if($1 == 4034) print "Locked" else if($1 == 5034) print "Deleted" else if($1 == 6034) print "Error" else if($1 == 7034) print "Cant Start" }' else rval=1 echo "No JOB_ID" >&2 fi ;; 'job_last_start') if [ -n "$2" ]; then sql=" SELECT to_char((sysdate - D_LAST_START) * (86400), 'FM99999999999999990') FROM SS_V_JOBS WHERE N_JOB_ID=$2; " else rval=1 echo "No JOB_ID" >&2 fi ;; *) echo "Hydra monitoring tool" echo "usage:" echo " $0 job_state <JOB_ID> [SID] -- Check job status." echo " $0 job_last_start <JOB_ID> [SID] -- Check job last start date/time." rval=1 exit $rval ;; esac if [ -n "$sql" ]; then echo "$sql" | ${SQLPLUS_PATH} -s ${ORA_USER}/${ORA_PASS}@${ORACLE_SID} fi rval=$? exit $rval |
Различаются В версиях до 6.0 включительно различаются 7 состояний:
Код | Состояние | Норма |
---|---|---|
1034 | В ожидании | Д |
2034 | Выполняется | Д |
3034 | К запуску | Д |
4034 | Блокировано | Н |
5034 | Удалено | Н |
6034 | Ошибка запуска | Н |
7034 | Не запущено | Д |
Не нормальными являются состояния, помеченные буквой Н. Исключение: задание, заблокированное принудительно.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/bin/sh
. /etc/profile
rval=0
ORA_USER="AIS_NET"
ORA_PASS="mypass"
SQLPLUS_PATH="$ORACLE_HOME/bin/sqlplus"
if [ -n "$3" ]; then
ORA_SID="$3"
export ORACLE_SID=$ORA_SID
fi
sql=""
case $1 in
'job_state')
if [ -n "$2" ]; then
echo "
SELECT to_char(N_JOB_STATE_ID, 'FM99999999999999990') FROM SS_V_JOBS WHERE N_JOB_ID=$2;
" | ${SQLPLUS_PATH} -s ${ORA_USER}/${ORA_PASS}@${ORACLE_SID} |
awk '{ if ($1 == 2034) print "Running"
else if($1 == 1034) print "Waiting"
else if($1 == 3034) print "Pending"
else if($1 == 4034) print "Disabled Manually"
else if($1 == 5034) print "Deleted"
else if($1 == 6034) print "Error"
else if($1 == 7034) print "Failed To Start"
else if($1 == 8034) print "Broken"
}'
else
rval=1
echo "No JOB_ID" >&2
fi
;;
'job_last_start')
if [ -n "$2" ]; then
sql="
SELECT to_char((sysdate - D_LAST_START) * (86400), 'FM99999999999999990') FROM SS_V_JOBS WHERE N_JOB_ID=$2;
"
else
rval=1
echo "No JOB_ID" >&2
fi
;;
*)
echo "Hydra monitoring tool"
echo "usage:"
echo " $0 job_state <JOB_ID> [SID] -- Check job status."
echo " $0 job_last_start <JOB_ID> [SID] -- Check job last start date/time."
rval=1
exit $rval
;;
esac
if [ -n "$sql" ]; then
echo "$sql" | ${SQLPLUS_PATH} -s ${ORA_USER}/${ORA_PASS}@${ORACLE_SID}
fi
rval=$?
exit $rval
|
В версиях 6.2 и новее различаются 8 состояний:
Код | Состояние | Тип |
---|---|---|
1034 | В ожидании | Норма, |
2034 | Выполняется | Норма |
3034 | Готово к запуску | Норма |
4034 | Отключено вручную | Норма |
5034 | Удалено | Норма |
6034 | Выполнено с ошибкой | Предупреждение |
7034 | Не удалось запустить | Предупреждение |
8034 | Заблокировано автоматически | Проблема |
Перечень заданий и их идентификаторы следует брать со страницы АСР Администрирование -> Задания - Назначенные задания.
Контроль рекомендуется вести по всем заданиям системы.
...
Различаются 5 результатов выполнения (N_JOB_STATUS
в SQL-запросе выше):
Код | Состояние | Норма |
---|---|---|
-2 | Прервано | Н |
-1 | Выполняется | Д |
0 | Успех | Д |
1 | Предупреждение | Н |
2 | Ошибка | Н |
Не нормальными являются состояния, помеченные буквой Н.
...
Перечень заданий и их идентификаторы следует брать со страницы АСР Администрирование -> Задания - Назначенные задания.
Контроль рекомендуется вести по всем заданиям системы.
Для мониторинга создания новых сеансов выполнения заданий, можно использовать следующий запрос:
Code Block |
---|
SELECT COUNT(*)
FROM ss_v_job_seances
WHERE d_start > SYSDATE - 15/24/60
AND c_reason = 'A' |
Данный запрос проверяет наличие новых сеансов за последние 15 минут.
Если сеансы отсутствуют, значит системные задания не выполняются и запрос будет возвращать "0".
Контроль табличных пространств
...
В результате запроса получится таблица приблизительно следующего вида:
# | TABLESPACE | Used MB | Free MB | Total MB | Total Max MB | Free Max MB | Pct. Free |
---|---|---|---|---|---|---|---|
1 | HYDRA | 22903 | 27555 | 50458 | 61492 | 38589 | 63 |
2 | HYDRA_INDEX | 40621 | 6781 | 47402 | 94292 | 53671 | 57 |
3 | SYSAUX | 1829 | 321 | 2150 | 32768 | 30939 | 94 |
4 | SYSTEM | 14413 | 67 | 14480 | 32768 | 18355 | 56 |
5 | TOOLS | 1 | 31 | 32 | 32 | 31 | 97 |
6 | UNDOTBS1 | 8445 | 29078 | 37523 | 65536 | 57091 | 87 |
7 | USERS | 1 | 4 | 5 | 32768 | 32767 | 100 |
Значения полей:
- TABLESPACE — название табличного пространства
- Used MB — объем несвободных блоков в занятом объеме на диске
- Free MB — объем свободных блоков в занятом объеме на диске
- Total MB — занятый объем на диске
- Total Max MB — максимально возможный объем на диске, который разрешено захватить СУБД с ростом данных. Может быть больше объема доступного дискового пространства.
- Free Max MB — максимально возможный объем, на который может разрешено увеличиться с ростом данных. Может быть больше объема доступного дискового пространства.
- Pct. Free — процент свободного объема. Расчитывается как отношение Free Max MB к Total Max MB.
...
Приведенный ниже запрос возвращает количество нетарифицированных телефонных звонков за последний час:
Code Block | ||||
---|---|---|---|---|
| ||||
-- Не были тарифицированы или были тарифицированы неуспешно SELECT COUNT(*) FROM ( EX_V_CDR WHERE SELECT EC.N_CDR_ID FROM EX_CDR EC WHERE NOT EXISTS ( SELECT 1 FROM SS_CDR_DETAILS SCD WHERE SCD.N_CDR_ID = EC.N_CDR_TYPE_ID AND SCD.C_ACTIVE = 'Y') AND EC.D_END >= SYSDATE - 1/24 AND EC.N_CDR_STATE_ID = SYS_CONTEXT('CONST', 'CDR_TYPEStatus_PhoneCallFinished') AND EC.N_DURATION_SEC != 0 AND EC.C_ACTIVE = 'Y' UNION ALL SELECT EC.N_CDR_ID FROM EX_CDR EC INNER JOIN SS_CDR_DETAILS SCD ON SCD.N_CDR_ID = EC.N_CDR_ID AND SCD.N_RATING_STATE_ID = SYS_CONTEXT('CONST', 'CDR_StatusRATING_FinishedSTATE_Fail') AND WHERE EC.D_END >= SYSDATE - 1/24 AND AND (EC.N_SUMCDR_ASTATE_ID IS= NULL AND N_SUM_B IS NULL) AND SYS_CONTEXT('CONST', 'CDR_Status_Finished') AND EC.N_DURATION_SEC != 0 AND EC.C_ACTIVE = 'Y' ); |
Нормой считается 0, т.е. полное отсутствие нетарифицированных звонков.
...
Code Block | ||
---|---|---|
| ||
SELECT DECODE(MAX(D_LOG_CREATE), NULL, 'Never', TO_CHAR(MAX(D_LOG_CREATE), 'DD.MM.YYYY HH24:MI:SS')) VC_LAST_LOAD_DATE FROM EX_V_CDR WHERE N_CDR_TYPE_ID = SYS_CONTEXT('CONST', 'CDR_TYPE_PhoneCall')_TEL; |
В результате выполнения запроса может быть либо точная дата в следующем виде:
...
Code Block | ||
---|---|---|
| ||
SELECT DECODE(MAX(D_LOG_CREATE), NULL, -1, TO_CHAR((SYSDATE-MAX(D_LOG_CREATE))*(60*60*24), 'FM99999999999999990')) N_LAST_LOAD_SEC FROM EX_V_CDR WHERE N_CDR_TYPE_ID = SYS_CONTEXT('CONST', 'CDR_TYPE_PhoneCall')_TEL; |
Триггер для мониторинга следует настраивать в зависимости от интервала загрузки CDR или RADIUS-аккаунтинга.
...
Code Block | ||
---|---|---|
| ||
SELECT DECODE(MAX(D_ENDFINISH), NULL, 'Never', TO_CHAR(MAX(D_ENDFINISH), 'DD.MM.YYYY HH24:MI:SS')) VC_LAST_UPDATE FROM EXEP_V_CDR WHERE N_CDR_TYPE_ID IN (SYS_CONTEXT('CONST', 'CDR_TYPE_PPP_WithCharging'), SYS_CONTEXT('CONST', 'CDR_TYPE_PPP_WOCharging'))SESSIONS; |
В результате выполнения запроса может быть либо точная дата в следующем виде:
...
Code Block | ||
---|---|---|
| ||
SELECT DECODE(MAX(D_ENDFINISH), NULL, -1, TO_CHAR((SYSDATE-MAX(D_ENDFINISH))*(60*60*24), 'FM99999999999999990')) N_LAST_UPDATE_SEC FROM EXEP_V_CDR WHERE N_CDR_TYPE_ID IN (SYS_CONTEXT('CONST', 'CDR_TYPE_PPP_WithCharging'), SYS_CONTEXT('CONST', 'CDR_TYPE_PPP_WOCharging'))SESSIONS; |
Триггер для мониторинга следует настраивать в зависимости от интервала загрузки RADIUS-аккаунтига.
...
Приведенный ниже запрос возвращает количество ошибок и предупреждений в очереди событий за текущий последний час:
Code Block | ||||
---|---|---|---|---|
| ||||
SELECT COUNT(*) FROM SS_V_EVENTS_QUEUE WHERE N_EVENT_STATE_ID IN (SYS_CONTEXT('CONST', 'EVENT_QUE_STATE_Warning'), SYS_CONTEXT('CONST', 'EVENT_QUE_STATE_Error')) AND D_ACK >= TRUNC(SYSDATE, 'HH') - 1/24; |
Нормой считается 0, т.е. полное отсутствие ошибок и предупреждений.
...
Code Block |
---|
#!/bin/bash . /etc/profile . /etc/environment export ORAENV_ASK=NO . oraenv > /dev/null sql="select max(sequence#) from v\$log_historySELECT SEQUENCE# FROM V\$LOG_HISTORY WHERE RECID = (SELECT MAX(RECID) FROM V\$LOG_HISTORY);" echo -e $sql | sqlplus -s / as sysdba |
...
Таблица пороговых значений
Таблица | Назначение | Порог |
---|---|---|
EX_CALL_DATA_REC | CDR и PPP-сессии | 15 миллионов |
EX_DATA_COLLECT | Трафик по PPP-сессиям | среднее количество завершенных PPP-сессий в месяц, умноженное на количество классов трафика. Например, для 500 тыс. сессий в месяц и 4-х классов трафика, участвующих в сборе статистики (локальный трафик вх. и исх., интернет-трафик вх. и исх.), порог будет равен: |
EX_TRAFFIC_COLLECT_C | Неучтенный трафик | 2 миллиона |
SD_GOOD_MOVES | Состав инвойсов и счетов | 15 миллионов |
SS_SESSION_LOGS | Сессии по работе с системой | 5 миллионов |
Для определения количества завершенных РРР-сессий и звонков в месяц можно использовать следующий запросследующие запросы:
Code Block |
---|
-- Для PPP-сессий (есть маппинг состояний сессий в состояния CDR) SELECT COUNT(*) FROM EXEP_V_CDRSESSIONS WHERE D_FINISH N_SERVICE_ID = 40223001 -- Идентификатор службы AND BETWEEN TO_DATE('01.05.2024 00:00:00', 'DD.MM.YYYY HH24:MI:SS') AND TO_DATE('31.05.2024 23:59:59', 'DD.MM.YYYY HH24:MI:SS') -- Задаём период AND N_CDR_STATE_ID IN (SYS_CONTEXT('CONST', 'CDR_Status_Finished'), SYS_CONTEXT('CONST', 'CDR_Status_FinForced')); -- Для звонков SELECT COUNT(*) FROM EX_V_CDR_TEL WHERE D_END BETWEEN TO_DATE('01.05.20132024 00:00:00', 'DD.MM.YYYY HH24:MI:SS') AND TO_DATE('31.05.20132024 23:59:59', 'DD.MM.YYYY HH24:MI:SS') -- Задаём период AND N_CDR_STATE_ID IN (SYS_CONTEXT('CONST', 'CDR_Status_Finished'), SYS_CONTEXT('CONST', 'CDR_Status_FinForced')); |
...
Определить, с помощью следующего скрипта, данных какого типа большинство
Code Block SQL> SELECT SI_REF_PKG_S.GET_NAME_BY_ID(N_CDR_TYPE_ID) VC_CDR_NAME, COUNT(*) FROM EX_CALL_DATA_REC GROUP BY N_CDR_TYPE_ID; VC_CDR_NAME COUNT(*) ------------------------------------------------------------------------ Телефонный звонок 107552 PPP-сессия (без тарификации) 3774012
- В случае большого количества CDR (телефонный звонок) обратиться в техподдержку для выгрузки CDR в файл.
- В случае большого количества PPP-сессий необходимо уменьшить значение параметра Таймаут удаления старых CDR на форме редактирования сетевых служб, по которым создаются PPP-сессии.
SS_SESSION_LOGS
В данной таблице содержатся данные о сессиях по работе с системой, которые создаются с помощью процедуры MAIN.INIT
SS_AUTHENTICATION_PKG.LOGIN
. При превышении порогового значения, необходимо обратиться в техподдержку для очистки старых записей о сессиях.
Контроль работы приложений системы
Веб-приложения
HOPER
При запуске процесса создается PID-файл.
- Для версии 3.3 и выше его расположение указывается в конфигурационном файле, обычно это /var/run/hydra/hoper/unicorn.pid.
- Для версии ниже 3.3 его расположение нельзя изменить. Он находится в shared/unicorn.pid от корня установки приложения.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hoper/unicorn.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
HUPO
При запуске процесса создается PID-файл.
- Для версии 3.3 его расположение указывается в конфигурационном файле, обычно это /var/run/hydra/hupo/unicorn.pid .
- Для версии ниже 3.3 его расположение нельзя изменить. Он находится в shared/pids/unicorn.pid от корня установки приложения.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hupo/unicorn.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
HDD
При запуске создается процесс hdd_default и PID-файла.
- Для версии 3.3 расположение указывается в конфигурационном файле, обычно это /var/run/hydra/hdd/hdd_default.pid .
- Для версий ниже 3.3 расположение нельзя изменить. Они находятся в tmp/ от корня установки приложения.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса hdd_default не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hdd/hdd_default.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Агенты
hamd
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (/etc/hamd/hamd.conf). Как правило PID-файл располагается по пути /var/run/hydra/hamd.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@server:~# PIDFILE="/var/run/hydra/hamd.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту. Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@server:~# PORT=8889; lsof -i :$PORT -n > /dev/null ; echo $? |
hard
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (/etc/hard/hard.conf). Как правило PID-файл располагается по пути /var/run/hydra/hard.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hard.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту. Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@sever:~# PORT=11080; lsof -i :$PORT -n > /dev/null ; echo $? |
hcd
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (/etc/hcd/hcd.conf). Как правило PID-файл располагается по пути /var/run/hydra/hcd.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hcd.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту. Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@sever:~# PORT=8888; lsof -i :$PORT -n > /dev/null ; echo $? |
hid
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (/etc/hid/hid.conf). Как правило PID-файл располагается по пути /var/run/hydra/hid.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hid.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту. Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@sever:~# PORT=10080; lsof -i :$PORT -n > /dev/null ; echo $? |
hpd
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (/etc/hpd/hpd.conf). Как правило PID-файл располагается по пути /var/run/hydra/hpd.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/hydra/hpd.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту. Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@sever:~# PORT=9080; lsof -i :$PORT -n > /dev/null ; echo $? |
FreeRADIUS
При запуске процесса создается PID-файл, расположение которого задается в конфигурационном файле (как правило, /etc/freeradius/radiusd.conf). Обычно PID-файл располагается по пути /var/run/radiusd/radiusd.pid.
Следующий код возвращает 0, если процесс существует, и 1, если не существует или если PID-файл процесса не найден (под пользователем root):
Code Block |
---|
root@sever:~# PIDFILE="/var/run/radiusd/radiusd.pid" ; if [ -f $PIDFILE ] ; then kill -0 `cat $PIDFILE` > /dev/null 2>&1 ; echo $? ; else echo "1" ; fi |
Также рекомендуется проверять наличие процесса на порту (для авторизации чаще всего используется UDP-порт 1812). Следующий код возвращает 0, если процесс слушает необходимый порт, и 1, если нет:
Code Block |
---|
root@sever:~# PORT=1812; lsof -i :$PORT -n > /dev/null ; echo $? |
Приложение: скрипт для создания пользователя БД с необходимыми правами
...
Code Block | ||||
---|---|---|---|---|
| ||||
CREATE USER &&username PROFILE DEFAULT IDENTIFIED BY &&password DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK; / GRANT SELECT ON V_$LOG_HISTORY TO &&username; GRANT SELECT ON V_$PARAMETER TO &&username; GRANT CONNECT TO &&username; GRANT RESOURCE TO &&username; GRANT SELECT ON SS_V_JOBS TO &&username; GRANT SELECT ON SI_V_USERS TO &&username; GRANT SELECT ON SS_V_JOB_SEANCES TO &&username; GRANT SELECT ON SS_V_MANAGER_JOBS TO &&username; GRANT EXECUTE ON SI_SUBJECTS_PKG_S TO &&username; GRANT EXECUTE ON SI_OBJECTS_PKG_S TO &&username; GRANT EXECUTE ON SI_REF_PKG_S TO &&username; -- count.q* GRANT SELECT ON SS_V_EVENTS_QUEUE to &&username; -- count.dbc GRANT SELECT ON V_$DATABASE_BLOCK_CORRUPTION TO &&username; -- count.uretenop GRANT SELECT ON V_$UNDOSTAT TO &&username; -- count.cdr; count.lastcdr GRANT SELECT ON EX_V_CDR TO &&username; -- count.gm GRANT SELECT ON SD_GOOD_MOVES TO &&username; -- count.ecrd GRANT SELECT ON EX_CALL_DATA_REC TO &&username; -- count.edc GRANT SELECT ON EX_DATA_COLLECT TO &&username; -- count.etcc GRANT SELECT ON EX_TRAFFIC_COLLECT_C TO &&username; -- count.active GRANT SELECT ON SI_SUBJ_GOODS TO &&username; -- tblspace.discovery GRANT SELECT ON DBA_SEGMENTS TO &&username; -- tblspace.pcf GRANT SELECT ON DBA_DATA_FILES TO &&username; GRANT SELECT ON DBA_FREE_SPACE TO &&username; GRANT SELECT ON DBA_TEMP_FILES TO &&username; GRANT SELECT ON DBA_TEMP_FREE_SPACE TO &&username; GRANT SELECT ON V_$TEMP_EXTENT_POOL TO &&username; GRANT SELECT ON DBA_UNDO_EXTENTS TO &&username; -- checkactive GRANT SELECT ON V_$INSTANCE TO &&username; -- rcachehit GRANT SELECT ON V_$SYSSTAT TO &&username; -- activeusercount GRANT SELECT ON V_$SESSION TO &&username; -- dbsize GRANT SELECT ON DBA_FREE_SPACE TO &&username; GRANT SELECT ON DBA_TABLESPACES TO &&username; -- lastarclog GRANT SELECT ON V_$LOG TO &&username; -- freebufwaits GRANT SELECT ON V_$SYSTEM_EVENT TO &&username; GRANT SELECT ON V_$EVENT_NAME TO &&username; GRANT SELECT ON EX_V_PAYMENTS TO &&username; GRANT SELECT ON SS_SESSION_LOGS TO &&username; -- dpiStmt_execute GRANT SELECT ON V_$TEMP_EXTENT_POOL TO &&username; GRANT SELECT ON DBA_UNDO_EXTENTS TO &&username; / QUIT; |