Глава 5. Службы баз данных

В этой главе содержатся инструкции по настройке Red Hat Enterprise Linux AS для реализации баз данных с высокой степенью доступности.

ЗамечаниеЗамечание
 

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

Настройка службы Oracle

Служба Oracle предоставляет данные приложению базы данных, обеспечивая при этом высокую степень доступности. Приложение может в свою очередь предоставить сетевой доступ к базе данных клиентским системам, например Web-серверам. В случае отказа службы, приложение обращается к данным общей базы данных, используя другую кластерную систему. Доступной по сети службе базы данных обычно назначается IP адрес, который переносится вместе со службой, таким образом сохраняется прозрачное подключение клиентов к данным.

В этом разделе представлен пример создания кластерной службы для базы данных Oracle. Хотя значения переменных, используемые в сценарии службы, зависят от конкретной конфигурации Oracle, приведенный пример поможет вам настроить в вашем окружении. Обратитесь к разделу Тонкая настройка служб Oracle за информацией об увеличении производительности службы.

В приведенном ниже примере:

В этом примере используются пять сценариев, которые должны быть размещены в каталоге /home/oracle, владельцем файлов должен быть пользователь oracle. Сценарий oracle используется для запуска и остановки службы Oracle. Укажите этот сценарии при добавлении службы. Этот сценарий вызывает остальные сценарии Oracle. Сценарии startdb и stopdb запускают и останавливают базу данных. Сценарии startdbi и stopdbi запускают и останавливают Web-приложение, которое написано с использованием Perl-сценариев и модулей и взаимодействует с базой данных Oracle. При этом приложение может взаимодействовать с базой данных самыми разными способами.

Ниже приведен пример сценария oracle, который запускает и останавливает службу Oracle. Обратите внимание, сценарий работает от имени пользователя oracle, а не root.

#!/bin/sh
#
# Cluster service script to start/stop oracle
#

cd /home/oracle

case $1 in
'start')
    su - oracle -c ./startdbi
    su - oracle -c ./startdb
    ;;
'stop')
    su - oracle -c ./stopdb
    su - oracle -c ./stopdbi
    ;;
esac

Ниже приведен пример сценария startdb, который запускает экземпляр сервера баз данных Oracle:

#!/bin/sh
#

#
# Script to start the Oracle Database Server instance.
#
########################################################################
#
# ORACLE_RELEASE
#
# Specifies the Oracle product release.
#
########################################################################

ORACLE_RELEASE=8.1.6

########################################################################
#
# ORACLE_SID
#
# Specifies the Oracle system identifier or "sid", which is the name of
# the Oracle Server instance.
#
########################################################################

export ORACLE_SID=TESTDB

########################################################################
#
# ORACLE_BASE
#
# Specifies the directory at the top of the Oracle software product and
# administrative file structure.
#
########################################################################

export ORACLE_BASE=/u01/app/oracle

########################################################################
#
# ORACLE_HOME
#
# Specifies the directory containing the software for a given release.
# The Oracle recommended value is $ORACLE_BASE/product/<release>
#
########################################################################

export ORACLE_HOME=/u01/app/oracle/product/${ORACLE_RELEASE}

########################################################################
#
# LD_LIBRARY_PATH
#
# Required when using Oracle products that use shared libraries.
#
########################################################################

export LD_LIBRARY_PATH=/u01/app/oracle/product/${ORACLE_RELEASE}/lib

########################################################################
#
# PATH
#
# Verify that the users search path includes $ORCLE_HOME/bin 
#
########################################################################

export PATH=$PATH:/u01/app/oracle/product/${ORACLE_RELEASE}/bin

########################################################################
#
# This does the actual work.
#
# The oracle server manager is used to start the Oracle Server instance
# based on the initSID.ora initialization parameters file specified.
# 
########################################################################

/u01/app/oracle/product/${ORACLE_RELEASE}/bin/svrmgrl << EOF
spool /home/oracle/startdb.log
connect internal;
startup pfile = /u01/app/oracle/admin/db1/pfile/initTESTDB.ora open;
spool off
EOF

exit 0

Ниже приведен пример сценария stopdb, который останавливает экземпляр сервера базы данных Oracle:

#!/bin/sh
#
#
# Script to STOP the Oracle Database Server instance.
#
######################################################################
#
# ORACLE_RELEASE
#
# Specifies the Oracle product release.
#
######################################################################

ORACLE_RELEASE=8.1.6

######################################################################
#
# ORACLE_SID
#
# Specifies the Oracle system identifier or "sid", which is the name 
# of the Oracle Server instance.
#
######################################################################

export ORACLE_SID=TESTDB

######################################################################
#
# ORACLE_BASE
#
# Specifies the directory at the top of the Oracle software product
# and administrative file structure.
#
######################################################################

export ORACLE_BASE=/u01/app/oracle

######################################################################
#
# ORACLE_HOME
#
# Specifies the directory containing the software for a given release.
# The Oracle recommended value is $ORACLE_BASE/product/<release>
#
######################################################################

export ORACLE_HOME=/u01/app/oracle/product/${ORACLE_RELEASE}

######################################################################
#
# LD_LIBRARY_PATH
#
# Required when using Oracle products that use shared libraries.
#
######################################################################

export LD_LIBRARY_PATH=/u01/app/oracle/product/${ORACLE_RELEASE}/lib

######################################################################
#
# PATH
#
# Verify that the users search path includes $ORCLE_HOME/bin 
#
######################################################################

export PATH=$PATH:/u01/app/oracle/product/${ORACLE_RELEASE}/bin

######################################################################
#
# This does the actual work.
#
# The oracle server manager is used to STOP the Oracle Server instance
# in a tidy fashion.
# 
######################################################################

/u01/app/oracle/product/${ORACLE_RELEASE}/bin/svrmgrl << EOF
spool /home/oracle/stopdb.log
connect internal;
shutdown abort;
spool off
EOF

exit 0

Ниже приведен пример сценария startdbi, который запускает демон прокси DBI:

#!/bin/sh
#
#
#####################################################################
#
# This script allows are Web Server application (perl scripts) to
# work in a distributed environment. The technology we use is
# base upon the DBD::Oracle/DBI CPAN perl modules.
#
# This script STARTS the networking DBI Proxy daemon.
#
#####################################################################

export ORACLE_RELEASE=8.1.6
export ORACLE_SID=TESTDB
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/${ORACLE_RELEASE}
export LD_LIBRARY_PATH=/u01/app/oracle/product/${ORACLE_RELEASE}/lib
export PATH=$PATH:/u01/app/oracle/product/${ORACLE_RELEASE}/bin

#
# This line does the real work.
#

/usr/bin/dbiproxy --logfile /home/oracle/dbiproxy.log --localport 1100 &

exit 0

Ниже приведен пример сценария stopdbi, который останавливает демон сетевого прокси DBI:

#!/bin/sh
#
#
###################################################################
#
# Our Web Server application (perl scripts) work in a distributed 
# environment. The technology we use is base upon the 
# DBD::Oracle/DBI CPAN perl modules.
#
# This script STOPS the required networking DBI Proxy daemon.
#
###################################################################


PIDS=$(ps ax | grep /usr/bin/dbiproxy | awk '{print $1}')

for pid in $PIDS
do
        kill -9 $pid
done

exit 0

В следующем примере показано как с помощью cluadmin добавить службу Oracle.

cluadmin> service add oracle

  The user interface will prompt you for information about the service.
  Not all information is required for all services.

  Enter a question mark (?) at a prompt to obtain help.

  Enter a colon (:) and a single-character command at a prompt to do
  one of the following:

  c - Cancel and return to the top-level cluadmin command
  r - Restart to the initial prompt while keeping previous responses
  p - Proceed with the next prompt
                                       
Preferred member [None]: ministor0
Relocate when the preferred member joins the cluster (yes/no/?) \
	[no]: yes
User script (e.g., /usr/foo/script or None) \
	[None]: /home/oracle/oracle

Do you want to add an IP address to the service (yes/no/?): yes

        IP Address Information

IP address: 10.1.16.132
Netmask (e.g. 255.255.255.0 or None) [None]: 255.255.255.0
Broadcast (e.g. X.Y.Z.255 or None) [None]: 10.1.16.255

Do you want to (a)dd, (m)odify, (d)elete or (s)how an IP address,
 or are you (f)inished adding IP addresses: f

Do you want to add a disk device to the service (yes/no/?): yes

        Disk Device Information

Device special file (e.g., /dev/sda1): /dev/sda1
Filesystem type (e.g., ext2, reiserfs, ext3 or None): ext2
Mount point (e.g., /usr/mnt/service1 or None) [None]: /u01
Mount options (e.g., rw, nosuid): [Return]
Forced unmount support (yes/no/?) [no]: yes

Do you want to (a)dd, (m)odify, (d)elete or (s)how devices, 
  or are you (f)inished adding device information: a

Device special file (e.g., /dev/sda1): /dev/sda2
Filesystem type (e.g., ext2, reiserfs, ext3 or None): ext2
Mount point (e.g., /usr/mnt/service1 or None) [None]: /u02
Mount options (e.g., rw, nosuid): [Return]
Forced unmount support (yes/no/?) [no]: yes


Do you want to (a)dd, (m)odify, (d)elete or (s)how devices, 
  or are you (f)inished adding devices: f

Disable service (yes/no/?) [no]: no

name: oracle
disabled: no
preferred node: ministor0
relocate: yes
user script: /home/oracle/oracle
IP address 0: 10.1.16.132
  netmask 0: 255.255.255.0
  broadcast 0: 10.1.16.255
device 0: /dev/sda1
  mount point, device 0: /u01
  mount fstype, device 0: ext2
  force unmount, device 0: yes
device 1: /dev/sda2
  mount point, device 1: /u02
  mount fstype, device 1: ext2
  force unmount, device 1: yes

Add oracle service as shown? (yes/no/?) y
notice: Starting service oracle ...
info: Starting IP address 10.1.16.132
info: Sending Gratuitous arp for 10.1.16.132 (00:90:27:EB:56:B8)
notice: Running user script '/home/oracle/oracle start'
notice, Server starting
Added oracle.
cluadmin>