DSRUTIL STATUS
Команда DSRUTIL STATUS подходит для написания контролирующих сценариев. Синтаксис команды следующий: dsrutil db-name -C status agentname [-detail]
Параметр status возвращает числовой код, по которому можно определить состояние сервера или агента репликации. Добавление параметра <-detail> позволяет получить код, более детально отображающий, что происходит с сервером или агентом репликации. Параметр agentname - это имя агента репликации, по которому нужно получить информацию. Этот параметр не является обязательным и может не использоваться, т.к. его применение имеет смысл только тогда, когда сервер репликации работает с двумя агентами, и когда команда выполняется на стороне сервера репликации. Если команда выполняется на стороне агента репликации или на стороне сервера репликации, когда он работает только с одним агентом, то использование имени агента не требуется.
Возвращаемый код командой DSRUTIL STATUS без параметра <-detail> состоит из четырех цифр. При этом первая цифра может принимать только три значения, как представлено в таблице:
Первые цифры кода |
Значение |
1ххх |
Сервер репликации (Source-база данных) |
2ххх |
Контрольный (критичный) агент репликации (Target-база данных) |
3ххх |
Обычный агент репликации (Target-база данных) |
Значения оставшихся трех цифр описаны в следующей таблице. Таблица составлена так, чтобы показать соответствие возвращаемых кодов, когда команда DSRUTIL STATUS выполняется без параметра <-detail> и с этим параметром.
Обычный код |
Значение |
Детализированный код |
Значение |
100 |
Connecting |
1001 |
Initial connection. |
100 |
Connecting |
1002 |
Initializing. |
100 |
Connecting |
6001 |
Server Initialization. |
100 |
Connecting |
6002 |
Connecting to Agents. |
100 |
Connecting |
6003 |
Configuring Agent(s). |
101 |
Processing is taking place. |
3048 |
Startup Synchronization. |
101 |
Processing is taking place. |
3049 |
Normal Processing. |
101 |
Processing is taking place. |
3050 |
Recovery Synchronization. |
101 |
Processing is taking place. |
6004 |
Recovery Processing. |
101 |
Processing is taking place. |
6005 |
Startup Synchronization. |
101 |
Processing is taking place. |
6021 |
Normal Processing. |
102 |
Activity is halted |
3051 |
Online backup of the Target Database. |
102 |
Activity is halted |
3052 |
Target Database in Quiet Point. |
102 |
Activity is halted |
3053 |
Target Database is in a BI stall. |
102 |
Activity is halted |
3054 |
Target Database is in an AI stall. |
103 |
Pre-transition state. |
2080 |
Pre-transition. |
103 |
Pre-transition state. |
2081 |
Applying After-image Extent. |
104 |
Agent is listening. |
2083 |
Listening. |
105 |
Transition. |
2082 |
Transitioning. |
199 |
Inactive. |
1032 |
Initial Connection Failed. |
199 |
Inactive. |
1033 |
Recovery Failed. |
199 |
Inactive. |
1034 |
Invalid Target Database Configuration. |
199 |
Inactive. |
1035 |
Agent Failed. |
199 |
Inactive. |
1036 |
Agent is Ignored. |
199 |
Inactive. |
1037 |
Agent is Stopped. |
199 |
Inactive. |
1038 |
Agent is Terminated. |
199 |
Inactive. |
1063 |
Agent is Ended. |
199 |
Inactive. |
6060 |
Server is ended. |
255 |
Unknown. |
0 |
Unknown. |
Пример части кода из скрипта, использующего команду DSRUTIL STATUS для идентификации состояния процесса репликации: RETCODE=`dsrutil $a -C status -detail`
MESS="Replication error!"
STS="High"
case $RETCODE in
0) MESS=" Unknown!" STS="High";;
1001) MESS=" Initial connection." STS="Low";;
1037) MESS=" Agent is Stopped!" STS="High";;
3048) MESS=" Startup Sychronization." STS="Low";;
3049) MESS=" Normal Processing." STS="Normal";;
2080) MESS=" Pre-transition!" STS="High";;
6005) MESS=" Startup Synchronization." STS="Low";;
6060) MESS=" Server is ended!" STS="High";;
esac
Используя этот небольшой пример можно написать простую программу слежения за процессом репликации, которая будет автоматически запускаться через некоторые интервалы времени и сообщать администратору базы данных о состоянии сервера и агентов.
Помимо возвращаемых кодов, относящихся к репликации, команда DSRUTIL STATUS имеет код завершения, значение которого можно получить после выполнения команды с помощью специальной переменной $?. Существует три кода завершения, означающие следующее:
- 0 – команда завершила работу корректно, результат ее работы отправлен в stdout ;
- 2 – произошла ошибка при подключении к базе данных;
- 3 – подключение к базе данных было выполнено, но в этой базе не включен механизм OE Replication.
Следующий пример демонстрирует использование кода завершения ($?) команды DSRUTIL STATUS в скрипте repluptime.sh, который по результатам работы команды DSRUTIL MONITOR определяет отставание target-базы от source-базы данных в секундах и в блоках: $DLC/bin/dsrutil $1 -C status &>/dev/null
case $? in
0)
echo "a" > $HOME/repl_zadan
echo "" >> $HOME/repl_zadan
echo "q" >> $HOME/repl_zadan
echo "q" >> $HOME/repl_zadan
cat $HOME/repl_zadan | $DLC/bin/dsrutil $1 -C monitor /
2>/dev/null 1>$HOME/list2
TEXT=`cat $HOME/list2 | grep second | grep -v seconds`
SB=`cat $HOME/list2 | grep "Source RDBMS" | awk '{print $9}'`
TB=`cat $HOME/list2 | grep "Last Processed" | awk '{print $9}'`
DELTA=`expr $SB - $TB`
echo $TEXT "," $DELTA "blok(s)"
if [ -f $HOME/list2 ]
then
rm -f $HOME/list2
fi
if [ -f $HOME/repl_zadan ]
then
rm -f $HOME/repl_zadan
fi
;;
2) echo "База данных сейчас НЕДОСТУПНА!" ;;
3) echo "В базе данных не включен OE Replication" ;;
esac
Результат работы этого скрипта выглядит следующим образом: Repl Server behind Source DB by: 0 second(s) , 0 blok(s)
В данном случае это сообщение говорит об отсутствии отставания target-базы данных от source-базы как по времени, так и по количеству блоков.
|