пятница, 18 марта 2011 г.

rlwrap - комфортная работа с sqlplus

Работа в консоли с такими приложениями как sqlplus мягко говоря не удобна. Нет истории команд, нет возможности редактирования и пр. Поэтому приложение rlwrap это просто находка для админа. Rlwrap исполняет команду при этом перехватывая ввод пользователя для предоставления функций редактирования. В большинстве дистрибутивов rlwrap уже есть, а если он отсутствует, то его можно скачать и собрать самому:

server$ gunzip rlwrap-0.37.tar.gz; tar -xf rlwrap-0.37.tar; cd rlwrap-0.37
server$ ./configure
server$ make
server$ sudo make install

При запуске rlwrap создается файл истории '~/.command_history', где command - название программы которую вы запускаете. Для использования автодополнения необходимо будет создать файл с перечнем команд. Rlwrap этот файл разберет по словам. Мой совет - сделайте этот файл в домашней директории, и назовите его в виде '~/.command_completions'. Тогда этот файл будет подхвачен автоматически, иначе файл дополнений нужно будет указывать через ключ '-f'
Ну что же, теперь можно наслаждаться всеми удобствами:

server$ rlwrap sqlplus user_name

Приведем для данного случая также файлы истории и автодополнения:

server$ ll -a

-rw-r--r--  1 oracle oinstall        23 Mar 18 13:14 .sqlplus_completions
-rw-------  1 oracle oinstall      2222 Mar 18 13:14 .sqlplus_history

Для большего удобства можно прописать алиасы в ~/.bashrc в виде:

server$ cat ~/.bashrc
...
# User specific aliases and functions
alias sqlplus="rlwrap sqlplus"


четверг, 17 марта 2011 г.

Настройка СУБД oracle для аудита событий в Cisco MARS

Поставили передо мной задачу настроить аудит событий в субд oracle. Сообщения аудита должны собираться в базе, откуда же их будет забирать специализированное ПО Cisco MARS. Ну и ладно. Итак, для начала логинимся:

server$ sqlplus sys as sysdba

и создаем представление (view):

SQL> @$ORACLE_HOME/rdbms/admin/cataudit.sql

Теперь необходимо включить аудит, т.е. задать инициализационный параметр базы данных. Параметры инициализации содержатся в PFILE или SPFILE, первый — простой текстовый, а второй файл хранится в бинарном виде. Файлы параметров по умолчанию находятся в $ORACLE_HOME/dbs, и имеют вид:
  1. spfile$ORACLE_SID.ora
  2. spfile.ora
  3. init$ORACLE_SID.ora
Первые два это SPFILE, последний это PFILE. Способ включения аудита зависит от того использует ли субд файл параметров инициализации PFILE или SPFILE. Проверить это можно следующим образом:

SQL> select decode(value, null, 'PFILE', 'SPFILE') from sys.v_$parameter WHERE name = 'spfile';

При использовании PFILE, для включения аудита необходимо прописать параметры в инициализационном файле:

AUDIT_TRAIL=DB
AUDIT_SYS_OPERATIONS=true

Первый параметр включает аудит, а второй включает логирование действий пользователей с привилегиями SYSDBA или SYSOPER.
При использовании SPFILE достаточно в консоли выполнить:

SQL> alter system set audit_trail=db scope=spfile;
SQL> alter system set audit_sys_operations=true scope=spfile;

Для активации системы аудита базу необходимо перегрузить:

SQL> shutdown immediate;
SQL> startup;

Теперь можно включить логирование событий, к примеру: включить логирование изменений параметров системы, логирование сессий.

SQL> audit alter system;
SQL> audit session;

Можно включить логирование действий определенного пользователя:

SQL> audit all by some_user;

Для того что бы забирать данные аудита надо завести пользователя, который будет иметь права на выборку из представления dba_audit_trail и право на создание сессии.

SQL> create user audit_user identified by password default tablespace users;
SQL> grant select on dba_audit_trail to audit_user;
SQL> grant create session to audit_user;

Для проверки работоспособности можно зайти только что созданным пользователем и сделать выборку сообщений аудита:

$ sqlplus audit_user/<password>
SQL> select count(*) from dba_audit_trail;
COUNT(*)
----------
3

Если счетчик отличен от ноля, значит все работает верно.
Перейдем к настройке Cisco MARS, все довольно просто и легко выполняется через web интерфейс. Необходимо указать в настройках подключения имя и пароль нами созданного пользователя и "Oracle Service Name ". Под "Oracle Service Name " подразумевается GLOBAL_DBNAME которое можно посмотреть в файле настроек листенера listener.ora .
Необходимо отметить, что периодически табличное пространство аудита нужно чистить:

SQL> delete from sys.aud$;