Translate

четверг, 22 марта 2018 г.

Установка драйвера ruby mongodb на RHEL 7.3

Для нужд проекта начал изучать MongoDB. Взял за основу книгу Kyle Banker: MongoDB in Action, книга 2011 года, но написана интересно. Код примеров написан на ruby. Поэтому пришлось на виртуалку поставить драйвер ruby для mongodb. И тут началось :).
Использовал tutorial:
Команда:
# gem update --system
прошла.
На командах ниже появилась ошибка, хотя сам ruby был установлен
# gem install mongo
# gem install bson_ext
.....
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h
.....
Советы в целом стандартные. Но не помогло.
Нашлось решение по ссылке
На команде все сломалось
# rvm requirements run
.....
No package libyaml-devel available
.....
Выяснилось, что в стандартную поставку пакет не входит, при попытке поставить через yum install libyaml-devel все получаем туже ошибку. Предлагались решения через subscription manager, я даже на linux.oracle.com ради этого зарегистрировался. Но все бесполезно. Даже такой вариант не подошел:
[root@localhost mail]# wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages/libyaml-devel-0.1.4-10.el7.x86_64.rpm
--2018-03-22 17:04:14--  ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages/libyaml-devel-0.1.4-10.el7.x86_64.rpm
           => ‘libyaml-devel-0.1.4-10.el7.x86_64.rpm’
Resolving mirror.switch.ch (mirror.switch.ch)... 130.59.113.36, 2001:620:0:1002::20
Connecting to mirror.switch.ch (mirror.switch.ch)|130.59.113.36|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pool/4/mirror/scientificlinux/7rolling/x86_64/os/Packages ... done.
==> SIZE libyaml-devel-0.1.4-10.el7.x86_64.rpm ... done.
==> PASV ... done.    ==> RETR libyaml-devel-0.1.4-10.el7.x86_64.rpm ... 
No such file ‘libyaml-devel-0.1.4-10.el7.x86_64.rpm’.
Нашел, что некоторым помогает сначала установить просто
# yum install libyaml
и ошибка выше уйдет. Поставил, но не помогло. Взял по ссылке версию libyaml-devel, как у libyaml-0.1.4-11.el7_0.x86_64, скачал и выполнил:
[root@localhost Downloads]# rpm -Uvh libyaml-devel-0.1.4-11.el7_0.x86_64.rpm
warning: libyaml-devel-0.1.4-11.el7_0.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:libyaml-devel-0.1.4-11.el7_0     ################################# [100%]
Далее все Ок:
# rvm requirements run
# rvm install 2.5.0
# rvm list
# rvm get stable --auto-dotfiles
# gem update --system
# gem install mongo
# gem install bson_ext
Добавить путь до ruby в PATH. Все.

пятница, 9 февраля 2018 г.

Включение подробных логов PDI

В ходе тестирования работы расписания потребовалось получить подробный лог. Для включения подробных логов необходимо отредактировать настроечный файл pentaho-server/tomcat/webapps/pentaho/WEB-INF/classes/log4j.xml
В заголовке выставить debug="true"

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
В категориях задать уровень лога, например:

<category name="org.quartz">
    <priority value="DEBUG">
</priority></category>

<category name="org.pentaho">
    <priority value="DEBUG">
</priority></category>

<category name="com.pentaho">
    <priority value="DEBUG">
</priority></category>
После изменений перезапустить сервер:
stop-pentaho.sh
start-pentaho.sh

пятница, 26 января 2018 г.

Установка PostgreSQL 10 на VB: Oracle Linux

Использовался VB 5.2 и образ Linux 7.0 Developer Day MV.
Используя root:
Install the repository RPM:
# yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-1.noarch.rpm
Install the client packages:
# yum install postgresql10
Optionally install the server packages:
# yum install postgresql10-server
Optionally initialize the database and enable automatic start:
# /usr/pgsql-10/bin/postgresql-10-setup initdb
# systemctl enable postgresql-10
# systemctl start postgresql-10
Используем роль postgres :
[oracle@localhost ~]$ sudo su - postgres
Полезная ссылка о командах выше.
Запускаем psql и видим список имеющихся БД:
-bash-4.2$ psql
psql (10.1)
Type "help" for help.

postgres=# \list
                                 List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres

Создаем тестовую БД и проверяем подключение:
1)
-bash-4.2$ createdb xendb
-bash-4.2$ psql xendb
version:
xendb=# select version();
Для информации. Чем отличается подключение под супер-пользователем в консоли?
user:
mydb=>
The last line could also be:
mydb=#
That would mean you are a database superuser, which is most likely the case if you installed the PostgreSQL instance yourself. Being a superuser means that you are not subject to access controls.
Далее:
create role:
xendb=# CREATE ROLE xen WITH NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN REPLICATION NOBYPASSRLS PASSWORD 'xen';
List of roles:
xendb=# \du
drop db and create again:
-bash-4.2$ dropdb xendb
-bash-4.2$ createdb xendb --owner=xen
-bash-4.2$ psql
postgres=# \list
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 xendb     | xen      | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
Настройки подключения. Необходим root.
# find / -name pg_hba.conf
/var/lib/pgsql/10/data/pg_hba.conf
#vim pg_hba.conf

Then change:
for "local" change method 'peer' on 'trust'

add line:
host    all             all             0.0.0.0/0               md5

Example:
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
Затем необходимо перестартовать postgres (два варианта)
1)
# systemctl stop postgresql-10
# systemctl start postgresql-10
2)
postgres=# select pg_reload_conf();

check:
-bash-4.2$ psql -U xen xendb
Для первого знакомства с СУБД подойдут готовые скрипты из исходников. Скрипт basic.sql. Я использовал пользователя oracle для этого.
Install git and clone source distribution

$ cd ..src/tutorial
$ sudo yum install postgresql-devel
$ make
$ sudo su - postgres
-bash-4.2$ cd ../src/tutorial/
-bash-4.2$ psql -U xen xendb
xendb=> \i basics.sql
Если вы хотите подключиться к БД на VB c хоста, то необходимо настроить подключение. telnet с хоста по порту 5432 не проходит.
[oracle@localhost ~]$ sudo netstat -tanp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1041/postmaster     
Listen only localhost.

edit:
[oracle@localhost ~]$ sudo netstat -tanp | grep 5432
[root@localhost ~]# cd /var/lib/pgsql/10/data
[root@localhost data]# vim postgresql.conf 

change line:
listen_addresses = 'localhost'          # what IP address(es) to listen on;
to
listen_addresses = '*'          # what IP address(es) to listen on;
И последнее, если не использовать Public схему, то ниже способ как переключиться в нужную схему:
Create schema:
$ create schema xen;
xendb=> show search_path;
   search_path   
-----------------
 "$user", public
xendb=> set search_path to xen;
xendb=> show search_path;
 search_path 
-------------
 xen

пятница, 10 июня 2016 г.

PDI ETL Metadata Injection: real example

Приведу пример реального использования Metadata Injection.
Задача:
Есть набор XML-файлов разной структуры, представляющих собой выгрузку наполнения БД из некой внешней системы. Каждый XML-файл соответствует одной сущности БД. Каждой XML соответствует своя XSD.
Необходимо загрузить эти XML в БД.

1 Шаг.
На основании XSD нужно сгенерить структуру в БД для загрузки в нее данных из XML.
С помощью простой трансформации парсим информацию из XSD:


Информация сохраняется в таблицу БД:

Затем генерится DDL для создания таблиц. Пример скриптов генерации здесь

2 Шаг.
Загрузка данных.
Ниже представлена основная джоба запуска загрузки.
Сначала, файлы разархивируются, удаляется список некорректных символов, включается логирование и т.п.. Нас интересует запуск трансформации Run inj







Эта трансформация выглядит следующим образом:


Get List of B$-tables из таблицы заполненной из XSD получаем следующую информацию:
путь к файлам, имя файлов, имя таблиц для загрузки, loop_xpath для xml Get data from XML

Get list of XML-file получает реальные путь и наименование XMLфайлов, на выходе поле filename
В трансформацию Get list of columns B$-table передаем список параметров:

Вызываемая трансформация имеет вид:

List of columns B$-table получает следующую информацию:
наименование поля из XML, соответствующие ему поля БД, тип данных, маска форматирования.

Get Variables from prev step переопределяет переменные с предыдущего шага.

Полученные значения полей и переменные передаем в шаг ETL Metadata Injection: start parse XML на вкладку Inject Metadata





Трансформация в ETL Metadata Injection: start parse XML имеет следующую структуру:

Парсится XML и информация вставляется в БД.
В этой самой финальной трансформации необходимо отметить две тонкости:
а) Metadata Injection поддерживает не все опции и значения шага Get data from XML.
Поэтому filename, loop xpath и prune path to handle large files необходимо определять через переменные с предыдущего шага.



Плюс, для файлов размером более 300 Мб обязательно нужно заполнять prune path to handle large files. Это позволит читать большие файлы в параллель. Подробности здесь.

б) В XML встречаются длинные текстовые значения, и для одного поля БД VARCHAR2(200 CHAR) текст полученный из XML превышал размерность. И обрезать это поле не получилось, ввиду того что Metadata Injection поддерживает не все виды шагов. Поэтому пришлось сменить тип поля на CLOB.



Ссылка на код здесь.

вторник, 29 марта 2016 г.

Опыты с Oracle VirtualBox: PDI, git и т.п.

Запуская виртуалку, получаем ошибку: Callee RC: REGDB_E_CLASSNOTREG” (0x80040154).
Причина в следах предыдущей установки VM.
Нужно зайти в C:\Users\yourname\.VirtualBox\ и удалить VirtualBox.xml (0 Kb). Затем переименовать VirtualBox.xml-prev (примерно 3 Kb) в VirtualBox.xml

Если была миграция на новую версию VB, то возможен вариант когда все UUID у уже используемых VM могут поплыть. Вариант, менять все ссылки на UUID.
Важно понимать, что файлы с расширением vboх, это xml и их можно редактировать любым редактором, конечно, сохранив оригинал.
$ VBoxManage.exe internalcommands sethduuid "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk1_2.vmdk"
UUID changed to: 5bf8212c-0d44-446c-9ab1-3ec50c71219e
Устанавливаем vmdk и vdi новые UUID. Пример ниже:

Затем эти UUID заменяются в разделах (пример):
<HardDisks>
        <HardDisk uuid="{5bf8212c-0d44-446c-9ab1-3ec50c71219e}" location="ODI 12c Getting Started VM-disk1_2.vmdk" format="VMDK" type="Normal">
          <HardDisk uuid="{1828a2c4-c767-465e-9b15-e5e3516d053e}" location="Snapshots/{07afd67c-70a1-4641-955b-c9a6a3b6cd20}.vmdk" format="VMDK">
          </HardDisk>
        </HardDisk>
        <HardDisk uuid="{892ad03a-2d9b-4ca6-b436-9137d43f57f7}" location="ODI 12c Getting Started VM-disk2_2.vmdk" format="VMDK" type="Normal"/>
      </HardDisks>
Главное, имя snapshot-а не поменять. И в
        <AttachedDevice type="HardDisk" hotpluggable="true" port="0" device="0">
          <Image uuid="{ebedbda3-8599-445f-aa80-37f222dda611}"/>
        </AttachedDevice>
        <AttachedDevice type="HardDisk" hotpluggable="false" port="1" device="0">
          <Image uuid="{3c6461b1-f3ff-4223-8566-4b20b92cc037}"/>
        </AttachedDevice>
Основное, VB сам подскажет, какие UUID у него не стыкуются. Читаешь и исправляешь.
Со снапшотами сложней, у них ссылка внутри файлов зашиты, поэтому для них выполняем команду установить и проверить как установился PARENTUUID
$ VBoxManage.exe internalcommands sethdparentuuid "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\Snapshots\{07afd67c-70a1-4641-955b-c9a6a3b6cd20}.vmdk" 5bf8212c-0d44-446c-9ab1-3ec50c71219e
UUID changed to: 5bf8212c-0d44-446c-9ab1-3ec50c71219e
$ VBoxManage.exe internalcommands dumphdinfo "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\Snapshots\{07afd67c-70a1-4641-955b-c9a6a3b6cd20}.vmdk"
--- Dumping VD Disk, Images=1
Dumping VD image "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\Snapshots\{07afd67c-70a1-4641-955b-c9a6a3b6cd20}.vmdk" (Backend=VMDK)
Header: Geometry PCHS=16383/16/63 LCHS=1024/255/63 cbSector=85962176
Header: uuidCreation={1828a2c4-c767-465e-9b15-e5e3516d053e}
Header: uuidModification={283b44da-c12b-4721-af9f-d849466714b0}
Header: uuidParent={5bf8212c-0d44-446c-9ab1-3ec50c71219e}
Header: uuidParentModification={873141d2-cabf-4581-88cd-9a2c34b0c18d}
Возможно виртуальная машина  не будет доступна с осносной машины по 22-му порту. Для устранения проблемы в разделе Сеть -> Адаптер 1 (NAT) -> Проброс портов завести запись с указанием 22 порта для хоста и гостя.

Как подключится к БД запущенной на VM с локальной машины.
- Заглушаем машину.
- В настройках машины выбрать Сеть-Адаптер 2 (или более)-Включить сетевой адаптер.
- Выбрать тип подключения - Сетевой мост.
- Запустить виртуальную машину.
- На виртуальной машине выполнить команду
[oracle@ODIGettingStarted ~]$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 01:01:11:11:1A:1A  
          inet addr:11.1.1.11  Bcast:.......................

eth1      Link encap:Ethernet  HWaddr 01:01:11:12:11:1D  
          inet addr:111.17.11.11  Bcast:....................
и полученный ip (в примере, это eth1 и 111.17.11.11) прописать на локальной машине в tnsnames.ora
Настройка git на VB. Необходимо установить git, я использовал ссылку для Oracle Linux 7 Git 2.x Installation on Linux. Что бы git запускать из любой директории, нужно выполнить следующие команды под root:
В конец файла /etc/bashrc добавить:
export MY_DIR=/opt/my_dir
export PATH=${PATH}:$MY_DIR
и перелогиниться. Для доступа в удаленный репозиторий используем уже имеющейся на основной машине ключ id_rsa.
Необходимо сгенерить ключ:
[oracle@ODIGettingStarted git]$ ssh-keygen -t rsa -b 4096 -C "frog@test.tst"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa): 
/home/oracle/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
99:99:99:99:9c:9c:aa:ff:ff:99:99:99:99:cc:77:dd frog@test.tst
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
......
+-----------------+
[oracle@ODIGettingStarted git]$ eval "$(ssh-agent -s)"
Agent pid 8397
Заменяем сгенеренные id_rsa и id_rsa.pub уже имеющимися. После этого попытка добавить ключ или скачать репозиторий заканчивается ошибками:
[oracle@ODIGettingStarted git]$ ssh-add ~/.ssh/id_rsa
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0666 for '/home/oracle/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
[oracle@ODIGettingStarted git]$ git clone ssh://git@199.99.999.99:7999/frog/frogdb.git
Initialized empty Git repository in /home/oracle/git/frogdb/.git/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0666 for '/home/oracle/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/oracle/.ssh/id_rsa
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
[oracle@ODIGettingStarted git]$ chmod 400 ~/.ssh/id_rsa
[oracle@ODIGettingStarted git]$ git clone ssh://git@199.99.999.99:7999/frog/frogdb.git
Initialized empty Git repository in /home/oracle/git/frogdb/.git/
remote: Counting objects: 5218, done.
Нужно выдать права на id_rsa и проблема исчезнет.
[oracle@ODIGettingStarted git]$ chmod 400 ~/.ssh/id_rsa
[oracle@ODIGettingStarted git]$ git clone ssh://git@199.99.999.99:7999/frog/frogdb.git
Initialized empty Git repository in /home/oracle/git/frogdb/.git/
remote: Counting objects: 5218, done.
remote: Compressing objects: 100% (2744/2744), done.
remote: Total 5218 (delta 2600), reused 3198 (delta 1600)
Receiving objects: 100% (5218/5218), 59.74 MiB | 1.03 MiB/s, done.
Resolving deltas: 100% (2600/2600), done.
У готовой VM ODIGettingstarted раздел под /u01 выделен на 15G и даже в новой VM каталог $ORACLE_HOME был фактически заполнен на 100%. Поэтому возникла проблема с установкой патчей с помощью OPatch.
[root@ODIGettingStarted ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_odigettingstarted-lv_root
                       37G   11G   24G  32% /
tmpfs                 3.0G  348M  2.6G  12% /dev/shm
/dev/sda1             485M   55M  405M  12% /boot
/dev/sdb               15G   14G  168M  99% /u01
Необходимо расширить раздел /dev/sdb. В настройках VB данная VM использовала два диска:
D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk1.vmdk
D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk2.vmdk - это /dev/sdb
Формат vmdk невозможно изменить, поэтому конвертируем нужный нам диск в формат vdi и увеличиваем размер до 20G.
VBoxManage.exe clonehd "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk2.vmdk" "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk2.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: 899e12d9-5185-411e-bff4-a74827d037de
VBoxManage.exe modifyhd disk "D:\Oracle\VM\Run_vm\ODI 12c Getting Started VM\ODI 12c Getting Started VM-disk2.vdi" --resize 20000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Затем в настройках VB выбираем вместо диска формата vmdk диск vdi.
Затем необходимо запустить VM и выполнить команды:
[oracle@ODIGettingStarted ~]$ su -
Password: 
[root@ODIGettingStarted ~]# resize2fs /dev/sdb
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/sdb is mounted on /u01; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/sdb to 5120000 (4k) blocks.
The filesystem on /dev/sdb is now 5120000 blocks long.
[root@ODIGettingStarted ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_odigettingstarted-lv_root
                       37G   14G   22G  39% /
tmpfs                 3.0G   92M  2.9G   4% /dev/shm
/dev/sda1             485M   55M  405M  12% /boot
/dev/sdb               20G   14G  4.6G  75% /u01
Место добавилось.

PDI был скачан по данной ссылке: PDI Download . Достаточно разархивировать.
В каталог установки /u01/pentaho/Pentaho/design-tools/data-integration/lib/ положить ojdbc7-12.1.0.2.jar. При коннекте к pluggable DB в SID сначала поставить \ (find out more...) \

Еще возможны проблемы с конфигурацией сети eth1, которая появляется при создании соединения типа "моста" в свойствах сети виртуальной машины. Чтобы постоянно не прописывать IP, от перезагрузки до перезагрузки, можно сделать его для eth1 статичным.
Первое, что нужно сделать (согласно ссылке) отключить динамическое получение IP. Зайти в настройки  virtualbox и в свойствах сети, на вкладке "DHCP сервер" убрать галочку с надписи "Включить сервер".


Затем согласно ссылке можно настроить командами, но можно и используя графический интерфейс.
The "Network Connections" dialog is available from the menu (System > Preferences > Network Connections) at the console.


Highlighting the device and clicking the "Edit" button allows you to view or alter the configuration of a device.

Затем выполнить команду.
# service network restartТеперь eth1 все время будет статичным.

Возможны проблемы, когда при удаленном подключении к VM через putty нет возможно запустить sqlplus. Что бы все работало нужно в VM указать все переменные связанные с Oracle. В формате export бла-бла. Для этого берем их из файла .bashrc в файл .bash_profile.

Так же при использовании Oracle SQL Developer во многих версиях Linux наблюдается следующая бага. При запуске команд или блоков через F5 или F9, пропадает текстовый курсор и фактически невозможно работать. Но если уменьшить размер окна и затем например сделать опять большим, то курсор появится. Это конечно не вариант, и даже в последней на этот момент версии этот не решено. Есть решение: Tools -> Preferences -> Code Editor - > Caret behavior -> Caret Color и выставить значение (127;127;127). Курсор более тусклый, но работать можно.

вторник, 1 марта 2016 г.

GoldenGate: как создать GG VIP и GG Agent

Для отказоустойчивости работы GG, особенно в кластерной среде, рекомендуется использовать GoldenGate Agent. В данной статье я покажу, как его создать и настроить.
Описание параметров команд приведено в GoldenGate: List of parameters.
Под grid необходимо определить список сетей:
$ <GRID_HOME>/bin/crsctl stat res -p |grep -ie .network -ie subnet |grep -ie name -ie subnet
Пример вывода:
NAME=ora.net1.network
USR_ORA_SUBNET=X.X.X.0
NAME=ora.net2.network
USR_ORA_SUBNET=X.X.X.0
Т.к. может быть несколько сетей, то администратор должен выбрать правильную сеть для интерфейсов GG VIP и GG Agent. В документации сказано: There may be multiple networks defined in the cluster and it is at the discretion of the Oracle Clusterware Administrator and the Oracle GoldenGate Administrator to choose the correct network based on the required interface and subnet.
Под root создается GG VIP
|# <GRID_HOME>/bin/appvipcfg create -network=<NETWORK_NUMBER> \
 -ip=<VIP_IP> \
 -vipname=<GGATEVIP> \
 -user=oracle
<NETWORK_NUMBER> - определен на основании предыдущей команды.
Проверить, что GG VIP появился в разделе Cluster Resources
|# <GRID_HOME>/bin/crsctl status resource -t | more
Пример вывода:
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ggatevip      1        OFFLINE OFFLINE
Выдать права для запуска под oracle и настроить автозапуск
|#<GRID_HOME>/bin/crsctl setperm resource <GGATEVIP> -u user:oracle:r-x
|#<GRID_HOME>/bin/crsctl modify resource <GGATEVIP> -attr "AUTO_START=always"
Под пользователем oracle запустить GG VIP
$<GRID_HOME>/bin/crsctl start resource <GGATEVIP>
И проверить, что статус online
$<GRID_HOME>/bin/crsctl status resource <GGATEVIP>
Пример вывода:
NAME=ggatevip
TYPE=app.appvip_net1.type
TARGET=ONLINE
STATE=ONLINE on xen-devgg-src2
Создание GG Agent необходимо производить под пользователем oracle.
$<XAG_HOME>/bin/agctl add goldengate <GGATE_XAG_XO> \
--gg_home <GG_HOME> \
--instance_type source \
--nodes <NODE_LIST> \
--vip_name <GGATEVIP> \
--filesystems ora.asm \
--databases ora.<SRC_DB_UNIQUE_NAME>.db \
--oracle_home <ORACLE_HOME> \
--monitor_extracts <XO>
Более подробно описание параметров создания GG Agent приведено в разделе GoldenGate Agent AGCTL Syntax  документации http://www.oracle.com/technetwork/products/clusterware/overview/ogiba-reference-guide-v1-1844341.html .
Проверку статуса GG Agent производится командой:
$ <XAG_HOME>/bin/agctl status goldengate <GGATE_XAG_XO>
Под grid нужно настроить автозапуск GG Agent
$ <GRID_HOME>/bin/crsctl modify resource xag.<GGATE_XAG_XO>.goldengate -attr "AUTO_START=always"
Агент готов к работе.