Эти материалы являются объектом авторского права и защищены законами РФ и международными
соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия
лицензионного договора на использование этих
материалов, или же вы не имеете права использовать настоящие материалы
Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда
продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только
лишь истории о прошлом
Установка движка СУБД
В настоящей редакции статьи описана установка относительно недавно вышедшей версии 11.2 СУБД от Oracle на Enterprise Linux 5 от компании Red Hat. СУБД
сертифицирована на использование только с несколькими дистрибутивами Linux из существующего множества. Наиболее интересным, на взгляд автора, является
использование лидера - дистрибутива RHEL, получить который можно на сайте комнании - производителя. Итак, после установки операционной системы,
копирования и развёртывания на неё дистрибутива RDBMS (СУБД) необходимо установить программное обеспечение (ПО) движка, а потом создавать одну или
несколько баз, которые этот движок будет обслуживать. Перед установкой движка необходимо выполнить подготовительные действия:
- для установки пакетов необходимо настроить источник, которым может быть сетевой репозитарий или инсталляционный DVD. Для использования DVD можно создать в каталоге
/etc/yum.repos.d файл с именем cdrom.repo
[rh_srv_media]
name=Rhel-$releasever - Media
# ниже полный путь к смонитрованному носителю
baseurl=file:///media/RHEL_5.5_i386_DVD/Server
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
prioritet = 1
- установитьтребуемые пакеты
yum install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc \
glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make \
numactl-devel sysstat unixODBC unixODBC-devel
- обеспечить не меньше 1Gb оперативной памяти и соответствующее количество свопа (для 1G памяти 1.5G свопа, причём для движка БД можно и уменьшить, а вот для RAC это уже
не канает)
- создать пользователя и группы
groupadd oinstall
groupadd dba
useradd oracle -g oinstall -G dba
- зайти пользователем oracle и добавить в профиль строчку
umask 022
- выставить параметры ядра в файле /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
#kernel.shmall = 2097152
#kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
- перегрузить узел или применить изменения командой
sysctl -p
- выставить лимиты пользователю oracle в файле /etc/security/limits.conf:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle hard stack 10240
Далее можно запускать инсталляцию софта движка. Сам дистрибутив качается с сайта производителя, а также уделяем внимание лицензированию - имеете ли право. Дистрибутив Oracle
Database 11.2 состоит из 2 архивов zip, которые необходимо распаковать в одно и то же место. Для запуска установщика необходимо выполнить описанные выше действия, перейти в
каталог дистрибутива под пользователем oracle и запустить расположенный в корне runInstaller. Каталоги для установки можно создать заранее, они должны принадлежать пользователю
oracle. Для начала эти каталоги могут быть произвольными. Возможные ошибки размера свопа для начала также вполне можно игнорировать, но в последующем придётся более внимательно
прочитать документацию и обеспечить размер свопа, вычисленный по формуле, приведённой в документации
Важным при установке ПО движка является выбор дополнительных опций, т.к. отдельные опции являются платными и требуют лицензионных отчислений. По окончании инсталляции сразу
рекомендую сделать архив инвентори, являющейся XML базой установленных продуктов корпорации и востребованной для последующих откатов, установок и обновлений. В каталоге
инвентори (обычно oraInventory) можно также найти журналы каждой установки и обновления. Архив можно сделать, заархивировав стандарнтым для UNIX архиватором tar каталог для
инфентори, который вы указали при установке движка СУБД
Обновление и патчевание движка СУБД
Корпорация Oracle выпускает версии своих продуктов и выкладывает их на своём сайте без какой либо программной или аппаратной защиты - защитой являются заКоны о защите
интеллектуальной собственности. Однако это касается только релизов. Все патчи, исправляющие ошибки и закрывающие "дыры", а также обновления доступны исключительно на
специализированном сайте технической поддержки https://metalink.oracle.com, доступ на который возможен при оплате поддержки. Однако при использовании полного потенциала
продуктов корпорации, что нужно далеко не всегда, установка таких патчей и обновлений может быть оправдана, а то и обязательна
Патчи и обновления накладываются по мере выхода либо сразу за установкой базовой версии. Обычно они содержат детальнейшие инструкции по подготовке и последующей установке,
которые зависят от патча, поэтому здесь необходимо знакомиться непосредственно с руководством по установке каждого патча и обновления. Для просмотра информации о патчах можно
использовать команду "$ORACLE_HOME/OPatch/opatch lsinventory"
Важно, что при обновлении до нового базового релиза и/или установке обновлений может потребоваться пройтись специально подготовленными скриптами из состава обновления и
по базам с данными, обслуживаемыми этим движком. Важно также помнить первую заповедь администратора - лучшее, враг хорошего, и не создавать лишнюю загрузку там, где она не
нужна. Как обновления релизов, так и общие патчи безопастности и целевые (закрыавающие конкретный баг) должны ставиться только при существовании обоснованной необходимости и
с предварительным тестированием всего технического решения, включающего СУБД
Создание непосредственно БД
Вариантов создания БД несколько. Наиболее универсальным является использование утилиты dbca для генерации скриптов с их последующей фиксацией и прогоном. Почему нельзя
создать БД простой командой CREATE DATABASE ? Потому что это только начальная фаза. Как минимум дальше должны быть созданы объекты так называемого словаря, то есть структуры
в базе, используемые движком СУБД для управления и полноценной работы базы. Объекты словаря создаются скриптами, входящими в состав ПО движка. Кроме того, для получения
дополнительного системного (административного) и прикладного (опции базы) функционала в базе должны быть созданы соответствующие объекты, которые также создаются скриптами,
входящими в состав ПО движка
Таким образом готовится инфраструктура каталогов (для начала можно использовать произвольный каталог как стартовый для всей БД), далее из под пользователя oracle запускается
утилита dbca, в режиме интерактивного диалога собирающая все нужные сведения для создания БД, формирующая по ним скрипты создания БД и отрабатывающая их
Настройка листенера
В зависимости от конфигурации решения с большой вероятностью потребуется отдавать базу клиентам в сети. База сама по себе не столь интересна и ценна, как законченное
решение. частью которого она является. Клиенты могут обращаться к базе через различные протоколы, однако наиболее распространённым вариантом являетcя IPC для локальных
клиентов (внутренний протокол Oracle) и SQLNet, предоставляющий доступ по TCP/IP. За подключание клиентов отвечает процесс листенера. Возможны две схемы работы - выделеный
сервер, использующийся наиболее часто и разделяемый сервер, использующийся для массового обслуживания большого количества клиентов. Рассматривать здесь будем конфигурацию
"выделенный сервер", при которой каждый обратившийся к листенеру клиент подключается к специально для него инициированному листенером дочернему серверному процессу
В общем случае конфигурируется и запускается один листенер, но листенеров на одном узле может быть и несколько, отличающихся настройками и слушающих, например, разные порты.
Экземпляры Oracle (фактически запущенные базы) могут самостоятельно зарегистрироваться на листенере и обслуживаться им, но нагляднее вручную прописать в настройках листенера
обслуживаемые им базы. В общем случае настройки хранятся в файле listener.ora, расположенном в каталоге $ORACLE_HOME/network/admin/ (для SUN Solaris сначала проверяется
каталог /var/opt/oracle). Каталог можно переопределить выставлением переменной среды TNS_ADMIN, что позволяет подготовить несколько конфигураций при использовании нескольких
листенеров. Ниже приведён пример файла конфигурации с прослушиванием двух сетевых интерфейсов и принудительной регистрацией базы TEST1
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = TEST1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
SID_LIST_LISTENER = (SID_LIST= (SID_DESC= (SID_NAME=TEST1)(ORACLE_HOME=/oracle/soft/11.2.0)))
Также необходимо заполнить аналог файла /etc/hosts, состоящий из пар "имя_соединения_с_БД = расшифровка", расположенный $ORACLE_HOME/network/admin/tnsnames.ora. Пример этого
файла для одной строки соединения с БД TEST1 через два разных интерфейса:
TEST1_LOC=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=TEST1)))
TEST1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.11)(PORT=1521)))(CONNECT_DATA=(SID=TEST1)))
Строк соединения может быть много, по потребности. После окончания конфигурирования листенера можно рестартовать его, запустив оболочку управления "lsnrctl" и вызвав команду
"start". Потушить листенер можно командой "stop", а посмотреть текущий статус командой "status". Кстати при редактировании конфигурационного файла приходилось наблюдать, что
команда "reload" не подхватывает новую конфигурацию, и наиболее надёжным способом применения изменений является последовательность команд "stop" и "start"
Ещё одним аспектом является возможность включить трассировку листенера и задать уровень детализации, что делается добавлением соответствующих конфигурационных опций в файле
конфигурации листенера (не путать с конфигурацией и трассировкой БД), и может быть востребовано при отладке решения
Доступ к БД
Как уже указывалось во вводной статье, основным интерфейсом администрирования является расширенный диалект SQL и утилиты клиентского доступа, например sqlplus, запускаемый
в командной строке операционной системы. После установки движка и создания базы желательно прописать в профиль пользователя операционной системы oracle несколько переменных
окружения - ORACLE_HOME (как указывалось при установке), ORACLE_SID (имя базы), а также добавить в переменную PATH путь $ORACLE_HOME/bin. Альтернативой указания первых двух
переменных является запуск команды ". oratab", устанавливаемой на последнем этапе установки движка, обычно в /usr/local/bin. На задаваемый этой утилитой вопрос необходимо
ввести корректное имя базы
Если всё выполнено корректно, то можно запустить из под пользователя oracle команду 'sqlplus "/ as sysdba"', предоставляющую пользователю клиентскую оболочку для доступа к
текущей базе в режиме администратора из под пользователя SYS. Имя базы определяется переменной окружения ORACLE_SID. Вот пример нескольких команд:
- startup -- запуск экземпляра и базы
- shutdown immediate -- остановка базы и экземпляра
- select * from dba_users ; -- вывод зарегистрированных в системе пользователей и их атрибутов
Дальше дорога ведёт к изучению системных таблиц и представлений, а также типовых команд, приёмов и методов работы администратора. Ради интереса можно попробовать создавать
таблицы (CREATE TABLE ...) в текущей схеме (от имени текущего пользователя), которым при описанном методе подключения будет SYS. Или же создать отдельного пользователя (CREATE
USER vasya IDENTIFIED BY qwe), и играться под ним (CREATE TABLE vasya.tablitsa ...), что рекомендуется
Подключиться к базе на самом сервере пользователем Вася можно так 'sqlplus vasya/qwe', а вот для подключения с другой машины потребуется установить на неё отдельно доступный
на сайте Oracle клиент, и настроить его tnsnames.ora так же, как это описано выше в разделе настройка листенера, после чего подключиться можно будет командой
'sqlplus vasya/qwe@алиас_соединения'. При этом листенер на сервере должен быть запущен и сконфигурирован
Важно также помнить, что перед остановкой операционной системы и выключением компьютера необходимо корректно потушить базу (SHUTDOWN IMMEDIATE) вручную, или автоматизировав
процесс скриптом
Установка DB Console
Если изначально устанавливался только софт движка, настройка листенера не проводилась и при создании базы у вас не получилось разрешить сконфигурировать облегченную версию
Entreprise Manager, называемую DB Console. Однако после конфигурирования и старта листенера можно повторно запустить утилиту dbca, и, выбрав режим модификации опций базы,
сконфигурировать DB Console. Нюансом здесь является необходимость смены пароля пользователю SYSMAN, создаваемому при этом в базе средствами базы
Важным аспектом для корректной работы является организации сетевой инфраструктуры, в частности сервиса DNS в локальной сети, и корректного указания имён узлов. В случае
некорректного разрешения имён попытка запуска DB Console может привести к страшным тормозам. Другим важным аспектом является установка Adobe Flush плагина для браузера, через
который будетосуществляться доступ к DB Console
Также важно помнить, что каждый экземпляр баз и DB Console должны быть корректно потушены перез остановкой узла и запущены после старта узла. В частности для DB Console
используется команда "emctl stop dbconsole" в сконфигурированном (как минимум экспортированы переменные окружения ORACLE_HOME и ORACLE_SID) окружении
Для того, чтобы удалить репозитарий DB Console можно воспользоваться следующими командами
Exec DBMS_AQADM.DROP_QUEUE_TABLE(queue_table=>'SYSMAN.MGMT_NOTIFY_QTABLE',force=>TRUE);
EXEC sysman.emd_maintenance.remove_em_dbms_jobs;
EXEC sysman.setEMUserContext('',5);
REVOKE dba FROM sysman ;
DECLARE
CURSOR c1 IS
SELECT owner, synonym_name name FROM dba_synonyms WHERE table_owner = 'SYSMAN' ;
BEGIN
FOR r1 IN c1 LOOP
IF r1.owner = 'PUBLIC' THEN
EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM '||r1.name ;
ELSE
EXECUTE IMMEDIATE 'DROP SYNONYM '||r1.owner||'.'||r1.name ;
END IF ;
END LOOP ;
END ;
/
DROP USER mgmt_view CASCADE;
DROP ROLE mgmt_user;
DROP USER sysman CASCADE;
Белонин С.С. (С), май 2007 года (даты последующих модификаций не фиксируются)
|