Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
20:55, 30 апреля 2009

Выключение процессов, подключенных к базе данных, в IBM DB2.

Как известно, в DB2 выключение какого либо процесса производится командой FORCE APPLICATION (handle_of_our_application). Где хэндл отключаемого приложения можно узнать несколькими методами:

  1. через CLI:

    GET SNAPSHOT FOR APPLICATIONS ON OUR_BASE

    lLIST APPLICATIONS FOR DB OUR_BASE

  2. посредством SQL-запроса:

    SELECT * FROM SYSIBMADM.APPLICATIONS”.

Хэндл выключаемого приложения находится, как правило, в столбце AGENT_ID.

Также есть универсальная команда для выключения всех приложений на инстанции:

FORCE APPLICATION ALL”.

У меня на работе, на одной из инстанций, вертятся 2 базы. Как быть, если я хочу выключить все процессы на одной базе, не трогая их на другой? Команда “FORCE APPLICATION ALL” в данном случае не поможет, а каждый раз вводить “FORCE APPLICATION” для каждого процесса довольно муторно.

Как-то для этих целей я написал шелл-скрипт, которым частенько пользуюсь. Возможно кому-то из подписчиков коммьюнити он пригодится тоже. Удачи!

 

#! /bin/bash

#===================================================================

#

# Name : force_app.sh

# Description: The script turns off all conections to a certain

# database

# Usage : ./force_app.sh name_of_database

# Author : Peter Wilson (for “database administration” blog

# Date/time : DEC-09-2008 6.00 PM

#

#===================================================================

# Checking for the command-line parameter

if [ $# -lt "1" ]

then

echo "!!!!A database name is not pointed!!!!"

exit 0

fi

# Working with our database

db2 "connect to " $1

db2 "select agent_id from sysibmadm.SNAPAPPL"> app.txt

sed '/^$/d' app.txt > app1.txt

sed '/AGENT_ID/d' app1.txt > app.txt

sed '/-----/d' app.txt > app1.txt

sed '/selected/d' app1.txt > app.txt

sed 's/ //g' app.txt > app1.txt

mv app1.txt app.txt

awk '{print "force application (" $1 ");"}' app.txt > 1.sql

db2 "connect reset"

db2 -tvf 1.sql

rm *.{txt,sql}

 

0
741
2