воскресенье, 27 ноября 2011 г.

Восстановление пароля weblogic


Для безопасного хранения паролей в Weblogic server  предусмотрено их шифрование с помощью алгоритмов 3DES  или AES. Шифрованные пароли и логины хранятся в конфигурационных файлах домена (config.xml), конфигурационных файлах источников данных ($DOMAIN_HOME/config/jdbc/Datasource_name.xml ), в файле для запуска серверов без ввода пароля (boot.properties) и т.д. Ключ хранится в файле SerializedSystemIni.dat

Зашифрованные этими ключом данные при наличии доступа к ключу шифрования могут быть расшифрованы.

под катом - маленький класс, позволяющий это сделать.
На вход утилите требуются путь к домену и зашифрованный пароль. На выходе - дешифрованный пароль.
перед запуском необходимо добавить в переменную CLASSPATH директорию, где находится скомпилированный класс и путь к файлу  weblogic.jar

например, вот так:




понедельник, 14 ноября 2011 г.

установка APEX на хост c EM Grid Control 11 Upd 29.11



Установка APEX на хост с EM Grid Control 11g.

Я буду использовать конфигурацию APEX + Oracle HTTP server: Scenario 3

Для этого требуется установить и сконфигурировать 2 инстанса:
1. Oracle DB с компонентом APEX.
2. Oracle HTTP server. (Компонент Oracle Web Tier). 

Установка компонента БД

1. Download дистрибутив с OTN.
2. Копирование в Oracle_home
cp apex_4.1_en.zip $ORACLE_HOME/
3. Распаковка 
unzip apex_4.1_en.zip
cd $ORACLE_HOME/apex
5. Установка
sqlplus / as sysdba
@apexins SYSAUX SYSAUX TEMP /i/
7.Установка пароля администратора
sqlplus / as sysdba
@apxchpwd
8. Включение аккаунта APEX_PUBLIC_USER
sqlplus / as sysdba
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY PASSWORD
Настройка ORACLE_HTTP_SERVER

В этом примере я использую компонент Web Tier, установленный вместе с Oracle Enterprise Manager Grid Control 11g. Инстанс Oracle HTTP Server уже сконфигурирован в директории /opt/oracle/gc_inst/WebTierIH1 и для его работы с APEX необходимо немного изменить конфигурацию.

Для проверки его состояния инстанса можно использовать команды opmnctl
$ export ORACLE_INSTANCE=/opt/oracle/gc_inst/WebTierIH1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl status
В моём случае вывод команды выглядит так:
Processes in Instance: instance1
------------------------+---------------+--------+---------
ias-component              | process-type    |     pid   | status
------------------------+---------------+--------+---------
ohs1                             | OHS                |    1343 | Alive

 Для старта/остановки сервера можно пользоваться командами
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl startproc ias-component=ohs1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl stopproc ias-component=ohs1 

1.  В конфигурации APEX + Oracle HTTP Server  изображения для web-страниц не хранятся в базе данных. Страницы с изображениями пользователю отправляет Apache-сервер, поэтому их нужно скопировать из дистрибутива в то место, где Apache сможет их увидеть. Например в
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs
cp -r $ORACLE_HOME/apex/images /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/
2. Конфигурирование mod_pl
Конфигурационный файл mod_pl располагается в директории 
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/mod_plsql/dads.conf
Он по умолчанию включён в конфигурацию сервера.

Добавляем туда конфиг:
Alias /i/ "/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/images/"
<Location /pls/apex>
      Order                                     deny,allow
      PlsqlDocumentPath                 docs
      AllowOverride                        None
      PlsqlDocumentProcedure        wwv_flow_file_mgr.process_download
      PlsqlDatabaseConnectString   localhost:1521:orcl
      PlsqlNLSLanguage                 AMERICAN_AMERICA.AL32UTF8
      PlsqlAuthenticationMode        Basic
      SetHandler                             pls_handler
      PlsqlDocumentTablename       wwv_flow_file_objects$
      PlsqlDatabaseUsername         APEX_PUBLIC_USER
      PlsqlDefaultPage                     apex
      PlsqlDatabasePassword          PASSWORD
      PlsqlRequestValidationFunction wwv_flow_epg_include_modules.authorize
      Allow from all
</Location>

Пояснения к конфигурации
/opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/images/ - Директория где хранятся рисунки. На конце должен быть слэш.
PlsqlDatabaseConnectString - строка соединения с БД. Она может быть задана в различных форматах. Не все из них одинаково хорошо работают.
PlsqlNLSLanguage - Языковые настройки БД.
PlsqlDatabasePassword - пароль, заданный APEX_PUBLIC_USER на этапе установки APEX.

3. Рестарт HTTP Server-а
$ export ORACLE_INSTANCE=/opt/oracle/gc_inst/WebTierIH1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl stopproc ias-component=ohs1
$ /opt/oracle/middleware/oms11g/opmn/bin/opmnctl startproc ias-component=ohs1 
 4. Можно попытаться получить страницу входа в приложение:
http://Host:Port/pls/apex/apex_admin
Здесь хост - имя хоста
Port  - порт, на котором слушает Apache. Его можно посмотреть в файле 
$ORACLE_INSTANCE/config/OHS/ohs1/httpd.conf
параметр 
Listen
У меня это файл /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/httpd.conf и порт 7788 соответственно.

Troubleshuting

Причину большинства ошибок можно понять, почитав вывод файла
$ORACLE_INSTANCE/diagnostics/logs/OHS/ohs1/ohs1.log
У меня их было две.
1. После попытки получить страницу http://Host:Port/pls/apex/apex_admin в логе появилось сообщение об ошибке:

[2011-11-11T15:25:49.1473+04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [core.c] [host_id: OEM.host.ru] [host_addr: 10.0.0.10] [tid: 1126410560] [user: orcl] [ecid: 004gNF8ScXFFS8G6yzjc6G0007nx00000t] [rid: 0] [VirtualHost: OEM.host.ru:0]  File does not exist: /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/favicon.ico

Apache не смог найти иконку сайта. Просто копируем туда любую.
cp /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/images/favicon.ico /opt/oracle/gc_inst/WebTierIH1/config/OHS/ohs1/htdocs/favicon.ico

2. При следующем запросе я получил ещё одну ошибку.

[2011-11-11T15:25:51.2482+04:00] [OHS] [INCIDENT_ERROR:32] [OHS-9999] [mod_context.c] [OEM.host.ru] [host_addr: 10.0.0.10] [tid: 1126410560] [user: orcl] [ecid: 004gNF8^b5_FS8G6yzjc6G0007nx000019] [rid: 0] [VirtualHost: OEM.host.ru:0]  MODPLSQL-00054: mod_plsql: HTTP-503 ORA-12154 ORA-12154: TNS:could not resolve the connect identifier

Проблема оказалась в строке подключения
в формате TNSFormat.
Заработало в таком виде:

PlsqlDatabaseConnectString localhost:1521:orcl


Ссылки:
APEX на otn.oracle.com.











понедельник, 31 октября 2011 г.

TZ-Update Для Weblogic Portal 10.3

В результате отмены перехода на зимнее время потребоалось ручное вмешательство в скрипты запуска Weblogic-серверов портала. Стартующий сервер не использует локатьные настройки времени на машине и стартует с учётом timezone в JVM (у меня версия 1.6.25). Локальная pointbase  с учётными записями также читает настройки из timezone в JVM.
Решение проблемы:
1. Patch для JVM
2. Ручная установка смещения GMT+4  в параметры запуска JVM
    ключ -Duser.timezone=
    смещению на 4 часа соответствует зона NET
       для серверов можно отредактировать $DOMAIN_HOME/$DOMAIN_NAME/bin/setDomainEnv.sh
JAVA_PROPERTIES="${JAVA_PROPERTIES} -Duser.timezone=NET ${EXTRA_JAVA_PROPERTIES}"

для Pointbase в конце файла
/opt/oracle/middleware/wlserver_10.3/common/bin/startPointBase.sh
нужно отредактировать запись
"${JAVA_HOME}/bin/java" -Duser.timezone=NET  com.pointbase.net.netServer ${CONSOLE} ${SERVERWINDOW} ${LOGFILE} /port:${PORT} /d:${DEBUG} /pointbase.ini="${POINTBASE_INI}"

среда, 12 октября 2011 г.

Запуск VirtualBox на OEL 6 с новым uek-ядром


На новом ядре от Oracle не компилируются модули VirtualBox
rpm -qa | grep kernel
kernel-uek-headers-2.6.32-100.34.1.el6uek.x86_64
kernel-uek-devel-2.6.32-100.34.1.el6uek.x86_64
kernel-uek-firmware-2.6.32-100.34.1.el6uek.noarch
kernel-uek-2.6.32-100.34.1.el6uek.x86_64
Решение - выстаить пременную MAKE c ключём -i
export MAKE='/usr/bin/gmake -i'
./VBoxLinuxAdditions.run
Источник: 

вторник, 27 сентября 2011 г.

Demo-хранилища сертификатов

Для работы с SSL-сертификатами в Weblogic server используются хранилища сертификатов (javakeystore). При установке создаются Demo-хранилища, позволяющие начать использовать SSL соединения с сервером.

DemoTrust.jks - хранилище сертификатов коневых удостоверяющих центров.
DemoIdentity.jks - хранилище дляпользовательских сертификатов и цепочек сертификации.
По умолчанию, оба хранилища имеют пароль.

ХранилищеПутьPassword
Trust store location%ORACLE_HOME%/weblogic/wlserver_10.3/ server/lib/DemoTrust.jksDemoTrustKeyStorePassPhrase
Key store location%ORACLE_HOME%/weblogic/wlserver_10.3/ server/lib/DemoIdentity.jksDemoIdentityPassPhrase



среда, 20 июля 2011 г.

Weblogic Portal

Маленькая особенность установки Weblogic Portal.
Во время конфигурирования домена я создал два управляемых сервера. При попытке их стартовать через NodeManager я получал ошибку:
<Critical> <WebLogicServer> <BEA-000362> <Server failed. Reason:java.net.UnknownHostException: someserver.ru        at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)        at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)...
И сама ошибка
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class weblogic.protocol.ServerIdentityManager$Initializer        at weblogic.protocol.ServerIdentityManager.findServerIdentity(ServerIdentityManager.java:64)        at weblogic.protocol.URLManager.findAdministrationURL(URLManager.java:172)        at weblogic.server.ServerLifeCycleRuntime.getLifeCycleOperationsRemote(ServerLifeCycleRuntime.java:801)        at weblogic.t3.srvr.ServerRuntime.sendStateToAdminServer(ServerRuntime.java:423)        at weblogic.t3.srvr.ServerRuntime.updateRunState(ServerRuntime.java:409)        at weblogic.t3.srvr.T3Srvr.setState(T3Srvr.java:187)        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:458)        at weblogic.Server.main(Server.java:67)Stopping PointBase server...PointBase server stopped.
Оказалось, управляемый сервер потерял параметр
-Dweblogic.management.server=http://AdminServer.ru:7001

пятница, 15 июля 2011 г.

apache mod_wl mod_ssl

В блогах стало появляться много постов об обеспечении безопасности серверов Weblogic. Напишу и я что-нибудь.
Задача - обеспечение шифрование трафика между пользователем находящимся за пределами внутренней сети и приложением. Сервера приложений находятся за балансировщиком нагрузки, реализованном на Apache 2.2. Шифроваться будет только трафик между Apache и конечным пользователем.

Для начала можно организовать вот такую структуру


1. Получение SSL сертификата
Сертификат можно купить или сгенерировать самоподписанный.
Для экспериментов можно сгенерировать с помощью пакета openssl.
openssl req -new -x509 -nodes -out server.crt -keyout server.key

После ответа на несколько вопросов получаем 2 файла.
server.key - ключ для сервера.
server.crt - сертификат, в котором хранится открытый ключ и информация о владельце сертификата. Сертификаты сразу можно разложить в те места, где их сможет найти Apache.
/etc/apache2/ssl.crt/server.crt
/etc/apache2/ssl.key/server.key
2. Настройка Apache
Я использую SUSE Linux 11. Для других дистрибутивов расположение файлов будет отличаться.
  • Необходимо скопировать файл  mod_wl_22.so в директорию с модулями.
/usr/lib64/apache2-prefork
  • Подгружаем mod_wl_22
echo 'LoadModule weblogic_module /usr/lib64/apache2-prefork/mod_wl_22.so' >> /etc/apache2/loadmodule.conf
  • Включаем поддержку SSL в файле /etc/sysconfig/apache2

APACHE_SERVER_FLAGS="SSL"
  • Конфиг для виртуального хоста. Добавляем к файлу /etc/apache2/vhosts.d/vhost.conf
<IfDefine SSL>
<IfDefine !NOSSL>
<VirtualHost *:443>
ServerName LoadBalancer.ru
RewriteEngine On
<Location /myApp>
SetHandler weblogic-handler WebLogicCluster srv1.ru:8001,srv2.ru:8002
</Location>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
</VirtualHost>
</IfDefine>
</IfDefine>
  • Можно рестартовать апач. Готово.
/etc/init.d/apache2 restart

суббота, 9 июля 2011 г.

Fedora 15

Установил Fedora 15.
  • gxneur загрузился из стандартного репозитория. Но блокирует gnome-терминал и некотрые приложения.  Этот баг обещают починить в готовящейся версии, которую можно скачать отсюда:
http://kojipkgs.fedoraproject.org/packages/gxneur/0.13.0/1.fc15/i686/gxneur-0.13.0-1.fc15.i686.rpm

  • remmina не находит плагины для vnc и freeRDP.
  • Чтобы выключит компьютер нужно кликнуть на имени пользователя в правом верхнем углу и нажать Alt. Меню Suspend изменится на Power off. Или
    gnome-shell-extensions-alternative-status-menu
  • bluetooth не стартует. Пришлось просить об этом отдельно.
# systemctl enable bluetooth.service
# systemctl start bluetooth.service
    • Weblogic работает.
    • Oracle Database 11g PS2 (11.2.0.2) тоже.

    четверг, 23 июня 2011 г.

    Active Data Guard 11g Upd 26.10.2011

    Step-by-step руководство по созанию Standby сервера БД.


    Для удобства администрирования Primary и Standby базы будут иметь один и тот же SID, DB_NAME, одинаковыми будут пути расположения файлов и журналов. Различаться инстансы будут по service_names и db_unique_name.

    Primary Stanby
    SID oracle oracle
    Service_names oracle_prdoracle_stb
    DB_name oracle oracle
    Host oraclem oracles

    Primary DB создана.
    ORACLE_HOME установлена в  /opt/oracle/ora11g/11.2.0.2/oradb
    Grid Control Agents установлены.

    Настройка Net services


    1. Правим /etc/hosts

    127.0.0.1       localhost
    10.0.0.1      oraclem
    10.0.0.2     oracles
    2. Настройка listener для статической регистрации сервисов на Primary-хосте:
    cat $ORACLE_HOME/network/admin/listener.ora 
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = oracle_prd)
          (ORACLE_HOME = /opt/oracle/ora11g/11.2.0.2/oradb)
          (SID_NAME = oracle)
        )
     )

    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    и на Standby-хосте

    SID_LIST_LISTENER =
         (SID_LIST =
            (SID_DESC =
               (GLOBAL_DBNAME = oracle_stb)
               (ORACLE_HOME = /opt/oracle/ora11g/11.2.0.2/oradb)
               (SID_NAME = oracle)
            )
         )
    LISTENER =
        (DESCRIPTION_LIST =
             (DESCRIPTION = 

                 (ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
                 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
             )
        )

     3. Настройка TNSnames  на обоих серверах.
    cat $ORACLE_HOME/network/admin/tnsnames.ora
    oracle_stb =
     (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = oracle_stb)
     )
     )
    oracle_prd =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
    )
        (CONNECT_DATA =
          (SERVICE_NAME = oracle_prd)
        )
    )
    oracle_prd_DGB =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = oracle_prd )
        )
     )
    oracle_stb_DGB =
    (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = oracle_stb )
        )
    )
    После настройки служб можно протестировать доступность Primary-сервера.

    Предварительная настройка Primary DB


    4. Если это ещё не сделано, нужно перевести Primary базу в archivelog mode, указав место, где будут храниться архивные логи.
    alter system set oracle.log_archive_format='%t_%s_%r.arc';
    alter system set log_archive_dest_1='location=/bachup/archive/oracle';
    alter system set log_archive_max_processes = 5;
    alter database archivelog;
    alter database open
    shutdown immediate
    startup mount
    5. Настройка необходимых для standby параметров на Primary-сервере.

    • Необходимо включить принудительное логирование всех операций с БД. 
    alter database force logging;
    • Для использования возможности  Active Standby необходимо выставить на обеих базах параметр compatible не ниже 11.2.0.2 и audit_trail в 'NONE'.
    alter system set audit_trail='NONE';
    alter system set compatible='11.2.0.2';
    • Для автоматического создания файлов на Standby-сервере при создании их на Primary нужно выставить
    alter system set standby_file_management=AUTO;
    •  Для обеспечения уникальности имён.
     alter system set db_unique_name='oracle_prd';       на Primary 

    6. Создание STANDBY LOGFILS
    Размер лога должен быть не меньше, чем размер redologs.
    Количество групп не меньше (лучше на одну больше), чем количество redolog groups.
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 11 '/media/redo/oracle/redo01.stb' SIZE 50M REUSE;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 12 '/media/redo/
    oracle/redo02.stb' SIZE 50M REUSE;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 13 '/media/redo/oracle/redo03.stb' SIZE 50M REUSE;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 14 '/media/redo/oracle/redo04.stb' SIZE 50M REUSE;
    Создание Standby instance.

    Для создание нового instance с новым именем можно снять холодный или горячий backup Развернуть его на standby-сервере и, в общем случае, для переименования instance воспользоваться утилитой nid. Этот способ описан в документации.
    Я воспользуюсь командой rman duplicate. Если посмотреть на лог её выполнения, то можно заметить что она делает то же самое (переименовывать instance не нужно)

    7. Подготовка конфигурационных файлов для Standby instance.
    На primary host необходимо стоздать pfile.
    create pfile from spfile;
    в получившемся файле отредактировать параметр
    db_unique_name='oracle_stb'
    8. Копирование на на standby-host файлы orarwd и pfile:

    scp /opt/oracle/ora11g/11.2.0.2/oradb/dbs/orapworacle oracle@10.0.0.2:/opt/oracle/ora11g/11.2.0.2/oradb/dbs/orapworacle
    9. На Standby-сервере, так же как на Primary, должны быть созданы все директории для хранения datafiles, archive/redo-logs, controlfiles.

    10. Запускаем instance в nomount на Standby-host.
    sqlplus / as sysdba
    startup nomount
    Так как в конфигурационном файле listener.ora используется статическая регистрация, этот instance будет доступен с Primary хоста. На Primmary хосте можно проверить соединение с удалённой БД командой
    tnsping oracle_stb
    если пинг не прошёл, можно поискать ошибки в настройках listener или параметрах service_names и db_name.


    Копирование БД. 


    11. Если ping прошёл успешно, соединяемся с удалённой бд, запустив на primary-сервере
    rman target / auxiliary sys/Password@oracle_stb
    Для случая, когда расположение файлов журналов исходной базы и файлов базы-назначения совпадают, необходимо явно указать одинаковые пути "конвертации" логфайлов. При совпадении путей расположения файлов данных необходимо добавить  NOFILENAMECHECK в выражение duplicate target database
    duplicate target database for standby from active database NOFILENAMECHECK
    spfile
    set db_unique_name='oracle_stb'
    set control_files='/media/data/oracle/control01.ctl','/media/data/oracle/control02.ctl' set audit_file_dest='/opt/oracle/ora11g/admin/oracle/adump'
    set LOG_FILE_NAME_CONVERT='/media/redo/oracle','/media/redo/oracle';
    Если этого не сделать, восстановление закончится с шибкой
    ORA-19527: physical standby redo log must be renamed или
    RMAN-05001: auxiliary file name undotbs01.dbf conflicts with a file used by the target database
    Если восстановление завершилось неудачно, перед новой попыткой необходимо удалить со  standby сервера spfile, controlfiles и datafiles, если они были созданы.

    Настройка Standby


    12. Для Standby database.
    alter system set log_archive_config='dg_config=(oracle_prd,oracle_stb)';
    alter system set fal_server='oracle_prd';
    alter system set log_archive_dest_1='location=/backup/archivelog/oracle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oracle_stb';
    alter system set log_archive_dest_2='service=oracle_prd db_unique_name=oracle_prd VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLE)';

    13. На Primary database.

    alter system set  log_archive_config='dg_config=(oracle_prd,oracle_stb)';
    alter system set  fal_server='oracle_stb';
    alter system set log_archive_dest_1='LOCATION=/backup/archivelog/oracle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oracle_prd'
    alter system set log_archive_dest_2='service=oracle_stb db_unique_name=oracle_stb valid_for=(all_logfiles,primary_role)'

    Подробнее про log_archive_dest_n здесь.

    14. Установка режима работы.
    Alter database set standby database to maximize performance;
    Alter database set standby database to maximize protection;
    Alter database set standby database to maximize availability;
    Про режимы работы можно почитать в документации. Это лучше сделать до того, как вслед за отключившимся primary автоматически сложится standby.
    15. Запускаем standby

    •  В режиме наката архивных логов

    Alter database recover managed standby database disconnect from session;

    • в режиме realtime apply

    Alter database recover managed standby database disconnect from session USING CURRENT LOGFILE

    •  в режиме Active standby
    alter database open read only;
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  THROUGH ALL SWITCHOVER DISCONNECT  USING CURRENT LOGFILE;
    Stabdby готов.

    Настройка брокера
    Брокер можно настроить вручную или через Grid Control.
    для Grid Control версии 10.2.0.5 конфигурирование завершится c ошибкой
    ORA-16538 When Adding Existent 11gR2 Standby Database to Grid Control 10.2.0.5 [ID 1145294.1]
    Этот bug лечится установкой  Patch 8267406. Или ручным конфигурированием Dataguard broker.


    16. Ручная настройка брокера. (workaround)
    По умолчанию брокер хранит конфигурационые файлы в $ORACLE_HOME/dbs
    можно указать место хранения явно. На обеих базах.
    alter system set dg_broker_start=TRUE
    alter system set Dg_broker_config_file1='/opt/oracle/ora11g/11.2.0.2/oradb/dbs/Dg_broker.cfig';
    17. Создаём конфигурацию брокера. Добавляем обе базы.
    dgmgrl
    connect sys/Password
    create configuration dgb_oracle as primary database is oracle_prd connect identifier is oracle_prd;
    add database oracle_stb as connect identifier is oracle_stb maintained as physical;
    Если всё сделано правильно, можно посмотреть конфигурацию.
    enable configuration;
    show configuration;
    Можно идти в Gridcontrol, настраивать оба instance и жать swichower.

    Upd: Для запуска брокера лучше использовать запуск утилиты dgmgrl без параметров логин/пароль и авторизовываться командой connect уже из консоли брокера. Если этого не делать, в некоторых случаях команды брокеру не будут выполняться.

    Tnsnames для пользователей.

    oracle=
      (DESCRIPTION_LIST=
        (FAILOVER=true)
        (LOAD_BALANCE=no)
        (DESCRIPTION=
          (ADDRESS = (PROTOCOL=TCP) (HOST= oraclem) (PORT=1521))
          (CONNECT_DATA=
            (SERVER=dedicated)
            (SERVICE_NAME=oracle_prd)
          )
        )
        (DESCRIPTION=
          (ADDRESS=
            (PROTOCOL=TCP) (HOST=oracles) (PORT=1521))
          (CONNECT_DATA=
            (SERVER=dedicated)
            (SERVICE_NAME=oracle_stb)
          )
        )
      )

    или вот так:
    oracle=
    (DESCRIPTION =
            (FAILOVER=on)
            (CONNECT_TIMEOUT=5)
            (ADDRESS_LIST=
                    (ADDRESS = (PROTOCOL=TCP) (HOST= oraclem) (PORT=1521)
                    (ADDRESS = (PROTOCOL=TCP) (HOST= oracles) (PORT=1521)
             )
            (CONNECT_DATA=
                    (SERVER=dedicated)
                    (SERVICE_NAME=oracle_prd)
            )
     )
    Ссылки.

    Достаточно старое руководство от Волкова:
    Документация:

    четверг, 16 июня 2011 г.

    rlwrap и kline для WLST Upd 11.07.2011

    Как и все тулзы oracle, консоль WLST не умеет повторять последнюю введённую команду или дополнять команду по нажатию горячей клавиши. Способ решить проблему (или создать себе другую) на linux-платформах есть:

    Качаем пакет rlwrap, например, отсюда или отсюда.
    Устанавливаем:
    rpm -ihv rlwrap-0.28-1.guru.suse102.x86_64.rpm
    Создаём файл $HOME/.rlwrap/WLST и вписываем туда ключевые слова (под катом есть готовый набор)
    Запускаем
    rlwrap -f $HOME/.rlwrap/WLST --multi-line java weblogic.WLST
    После этого начинает работать дополнение и повтор команд, но запущенный из этой консоли NodeManager будет в качестве родительского процесса считать процесс  weblogic.WLST. То есть при выходе из консоли процесс weblogic.Nodemanager Завершится как дочерний. Имеет смысл завести в .bash_profile отдельный alias для работы, и не пользоваться для запуска NM.
    alias "WLST"='/usr/bin/rlwrap -if $HOME/.rlwrap/wlst --multi-line java weblogic.WLST'
    Решение для HP-UX.
    Я долго пробовал скомпилировать из исходников readline и rlwrap, но победить компилятор не получилось.
    Your system and compiler (hpux11.31-cc) are not supported by the
    ../support/shobj-conf script.
    Пока буду пользоваться решением c установкой gcc отсюда:
    http://hpux.ch/index.php/HPUX::Ports

    Альтернативный метод для Windows и Linux - JLine.


    1. Свежая версия.
    2. Распаковываем в какую-нибудь директорию.
    3. Добавляем директорию в CLASSPATH.
    4. Запускаем 
    java jline.ConsoleRunner weblogic.WLST
    После этого должны заработать редактирование комнд и история.

    вторник, 7 июня 2011 г.

    Порядок применения параметров запуска weblogic-сервера.

    Несколько способов запустить сервер с нужными параметрами.
    1. Непосредственно из командной строки, написав конструкцию вида:
    java [JVM options] [Weblogic Options] weblogic.Server
    Собственно, компонованием этой строки и занимается startWeblogic.sh, лежащий в $MW_HOME/bin. Этот скрипт рекомендован Oracle для запуска и остановки серверов. Его можно немного подредактировать под свои нужды или передать ему пару параметров прямо из командной строки
    nohup sh $DOMAIN_HOME/bin/startWebLogic.sh -Dweblogic.management.username=weblogic -Dweblogic.management.password=password > wls_start.log &
    2. Запуск Admin-сервера командой startServer из консоли WLST. Пример такой команды можно посмотреть, набрав
    help('startServer') 
    3. Запуск серверов из консоли WLST с помощью NodeManager командой
    nmStart('ServerName')
    В первом случае все параметры запуска задаются в тексте команды. Во втором параметры запуска jvmArgs передаются как аргумент метода startServer(). В третьем случае параметры берутся из конфиг-файлов и скрипта запуска. Параметры, хранящиеся в файле config.xml в этом случае не применяются. Они там просто хранятся.

    Есть свои правила применения параметров при запуске сервера через Nodemanager:
    1. В первую очередь применяются параметры, указанные явно в консоли WLST. В этом случае мы переопределяем всё, что  было задано другими методами.
    arg="Arguments=\" -Dweblogic.management.server=localhost:7001\""
    prps=makePropertiesObject(arg)
    nmStart('serverName',props=prps)
    2. Параметры, заданные в файле startup.properties.

    После запуска блока из предыдущего пункта в директории {DOMAIN_HOME}/servers/serverName/data/nodemanager/
    появится файл startup.properties примерно такого содержания
    #Server startup properties
    #Fri Jun 03 16:59:19 MSD 2011
    Arguments=\ -Dweblogic.management.server\=localhost\:7001
    Именно этот файл, а не  config.xml читает Nodemanager перед запуском сервера. Полный список возможных параметров можно посмотреть тут.

    3.  Параметры запуска можно указать через web-консоль. Вообще говоря, этот способ - практически полное повторение пункта 2, но со своей логикой работы. При запуске/остановке серверов через web-консоль AdminServer обращается к NodeManager-у, который управляет ManagedServer-ом. Nodemanager в свою очередь выполняет метод nmStart('serverName')

    На страничке Server Start вводим всё, что интересует


    После сохранения и применения изменений  значения пишутся в файл config.xml и, если сервер уже запущен, генерируется файл startup.properties.Если сервер не запущен, файл не создаётся. Такое поведение похоже на вызов функции
    nmGenBootStartupProps('serverName')
    из консоли WLST, которая генерирует startup.properties-файл на основе config.xml и которая также требует подключения к работающему серверу.
    Если сервер до этого ни разу не запускался, то необходимого для запуска файла startup.properties всё ещё нет. За его создание почему-то отвечает кнопка "Start" на странице управления серверами.
    Такая логика работы web-консоли позволяет избежать ошибки (а может именно она её и вызывает), с которой сталкиваются новички, пытаясь стартовать свежесконфигурированный сервер из консоли WLST командой nmStart('serverName') до того, как будут заданы все необходимые параметры запуска.
    4. Ещё один способ запустить сервер с нужными параметрами - использовать одновременно и скрипт startWeblogic, и файл startup.properties.
    Если почитать документацию, можно найти вот такой текст:
    You can use a start script to specify required startup properties and perform any other work you need performed at start up.
    Для этого надо отредактировать конфиг NodeManager-а
    ${MW_HOME}/wlserver_10.3/common/nodemanager/nodemanager.properties
     StartScriptEnabled=true
    и перезапустить его и сервер. После рестарта получаем процесс примерно такого вида:
    ps -ef | grep weblogic.Server
    /opt/oracle/java/latest/bin/java
    -server
    -Xms256m
    -Xmx512m
    -XX:MaxPermSize=256m

    -Dweblogic.Name=serverName
    -Djava.security.policy=/opt/oracle/middleware/wlserver_10.3/server/lib/weblogic.policy
    -Dweblogic.ProductionModeEnabled=true
    -Dweblogic.system.BootIdentityFile=/.../data/nodemanager/boot.properties
    -Dweblogic.nodemanager.ServiceEnabled=true
    -Dweblogic.security.SSL.ignoreHostnameVerification=true
    -Dweblogic.ReverseDNSAllowed=false
    -server
    -Xms256m
    -Xmx256m
    -XX:MaxPermSize=128m

    -Dplatform.home=/opt/oracle/middleware/wlserver_10.3
    -Dwls.home=/opt/oracle/middleware/wlserver_10.3/server
    -Dweblogic.home=/opt/oracle/middleware/wlserver_10.3/server
    -Dweblogic.management.discover=false
    -Dweblogic.management.server=http://...:7001
    Первая выделенная группа - параметры JVM, заданные в скрипте startWeblogic.sh.
    Вторая - параметры JVM, заданные в файле startup.properties. Параметры из этого файла всегда будут добавляться в конец строки запуска. Действующими параметрами будут только последние. Способ стоит пользоваться осторожно, так как для некоторых параметров JVM важен порядок следования, также важен порядок перечисления путей в переменной CLASSPATH .

    четверг, 28 апреля 2011 г.

    Параметры JVM для weblogic

    Общие рассуждения о работе JVM.
    Выделением памяти в Java занимается виртуальная машина. Машина выделяет память под объекты, удаляет объекты и освобождает память. В соответствии с Generation Model, объект за время своего существования перемещается между областями памяти, которые называются Young и Tenured. Но скорее всего, до Tenured объект не доживёт, ибо по статистике объекты умирают молодыми. Удалением объектов занимается сборщик мусора, который запускается по мере заполнения памяти.

    среда, 20 апреля 2011 г.

    Балансировка нагрузки с помощью mod_wl


    Балансировка нагрузки возможна не только между серверами, объединёнными в кластер. С некоторыми ограничениями, можно сделать это с помощью любого балансировщика нагрузки, в том числе и с помощью apache + mod_wl просто перенаправляя запросы на разные сервера, на которые задеплоено одно приложение. Естественно, фича session failover при этом не доступна.

    В моём случае необходимо было реализовать возможность перезагрузки экземпляров weblogic (по очереди) без потери доступности сервиса. При этом потеря сессии и её состояния не считается критичной.
    Будем реализовывать вот такую схему:



    Если почитать документацию, можно найти нужный параметр
    WebLogicCluster
    под которым подразумевается
    List of WebLogic Servers that can be used for load balancing
    Это список  серверов, доступных для перенаправления на них запросов. Список динамически обновляется, учитывая failed и recvered в данный момент сервера.
    При этом не стоит переопределять параметр
    DynamicServerList
    он по имелчанию равен ON. При установке его в Off возможно перенаправление запроса на неработающий в данный момент сервер.

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

    LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so"

    <IfModule mod_weblogic.c>
           WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
         MatchExpression *.jsp №перенаправлять только jsp-страницы
    </IfModule>
    Или, например, так

    <Location /myApp>
        SetHandler weblogic-handler
        PathTrim /myApp    WebLogicCluster server1:8001,server1:8002,server2:8001,server2:8002
    </Location>
    Парвый вариант перенапрвляет запрс на основе MIME-типа. Второй по явному указанию пути (path) или его части

    вторник, 19 апреля 2011 г.

    Запуск и остановка серверов c помощью NodeManager Update 03.06.2011

    В качестве best practices управления weblogic-доменами предлагается использовать NodeManager.
    NodeManager запускается один на хост и может обслуживать несколько managed-серверов, принадлежащих одному или нескольким доменам.
    Benefits от использования:
    1. Возможность управления  managed-серверами через админскую консоль.
    2. Возможность автоматического выключения\рестарта серверов в случае ошибки.
    3. Автоматический запуск управляемых серверов.
    4. Возможность восстановления состояния серверов до состояния, предшествующего "неожиданному выключению" (это значит, что если ваш сервер перед сбоем находился в состоянии standby, он запустится в standby, а не running)
    5. Удобная настройка новых серверов на удалённых машинах.
    6. Миграция серверов.

    суббота, 9 апреля 2011 г.

    Запуск weblogic на 80 порту upd 16.01.12

    В Unix-like системах запуск приложений, слушаюших на портах меньших 1024 возможен только от пользователя root.  Соответственно, запуск weblogic на 80 порту от  имени другого пользователя невозможен.  Пара способов обойти это ограничние.
    1.       Запуск процесса от имени root с последующим переключением его на непривилигированнойго пользователя. Настройка Weblogic-сервера производится через admin-консоль на вкладке
         Environment - > Machines -> [Mashine name]
    Post-Bind UID: – UID  группы, на пользователя которой мы переключаемся.
    Post-Bind GID: – GID пользователя, на которого переключаемся
    2.       Второй способ – запуск прокси-сервера на 80 порту и перенаправление на weblogic всех запросов, адресованных приложению.
    В качестве прокси будем использовать apache 2.2 с модулем mod_wl
    Для SuSE linux и утановленного из репозиториев apache это будет выглядеть так
    1.       Установка web-сервера
    rpm –ihv apache2*
    2.       Создаём папку /etc/apache2/modules и копируем  в неё mod_wl_22.so
    3.       В папке  /etc/apache2/conf.d создаём конфиг примерно такого содержания:
    LoadModule weblogic_module "/etc/apache2/modules/mod_wl_22.so" 
    <Location /console>
        SetHandler weblogic-handler
        WebLogicHost server
        WeblogicPort 7001
    </Location>
               KeepAliveEnabled ON           KeepAliveSecs      30
                     
    запросы к приложению console на 80 порту теперь перенаправляются на 7001 порт



    4. Перезапускаем apache
                                   rcapache2 reload
                    Проверяем работоспособность

    Третий способ.
    Завернуть трафик с порта управляемого сервера на порт 80.
    iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 

    iptables -t nat -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080

    понедельник, 28 марта 2011 г.

    Установка Oracle DB 11g на Fedora 14

    Возникла необходимость установить Oracle 11g на домашнюю машину под управлением Fedora 14. Процесс установки описывать целиком смысла не вижу.
    Особенности для неподдерживаемой платформы:
    1. Предлагаем системе притвориться пятым редхатом echo "redhat release 5" > /etc/redhat-release
    2. Проблемы с "несовместимостью gcc" есть теперь и для Oracle !
    При установке получаем ошибку:
    Error in invoking target 'agent nmhs' of makefile'/app/oracle/product/11.2.0/sysman/lib/ins_emagent.mk'




    Почитав интернет, можно найти два решения:
    в процессе установки подкорректировать файл 
    $ORACLE_HOME/sysman/lib/ins_emagent.mk
    Заменив в нём $(MK_EMAGENT_NMECTL) на $(MK_EMAGENT_NMECTL) -lnnz11



    Второй вариант - найти вот такой архив в дистрибутиве
    ../stage/Components/oracle.sysman.agent/<версия>/1/DataFiles/filegroup40.jar
    в нём редактируем файл env_emagent.mk так же, как и в первом случае.
    Должно помочь.

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

    Пример конфигурирования домена Weblogic

    Примеров конфтгурирования доменов Weblogic в сети достаточо много. К ним у меня есть только одно существенное дополнение. В сколько-нибудь production-среде weblogic сервера ассоциируются с машинами. AdminServer - тоже сервер, и его тоже неплохо бы расположить на машине. Лучше отдельной.
    Для порядка, чтобы "всё было" выложу тут пару скриншотов. Поупражняюсь во вставке картинок в блог, заодно.

    понедельник, 21 марта 2011 г.

    Перенос конфигурации домена

    Немного теории о том какакие существуют утилиты для создания, модификации и переноса доменов weblogic.

    1. Утилита config.sh - в процессе настройки домена не генерирует его с чистого листа. Она предоставляет интерфейс для редактирования шаблонов из папки
    $DOMAIN_HOME/wlserver_10.3/common/templates/domains
    и интерфейс добавления к существующему домену изменений на основе всё тех же шаблонов, сгенерированных, например, утилитой config_builder.sh
    2. Утилита config_builder.sh генерирует шаблон домена целиком с возможностью добавлять собственные конфигурационные скрипты или генерирует шаблон изменений. Утилита может генерировать шаблон на основе существующего и работающего домена. Полученные с её помощью jar-архивы можно скормить config.sh или отредактировать с помощью консоли WLST.
    3. C помощью weblogic.WLST можно сделать практически всё. В частности, можно отредактировать шаблон с доменом, используя те же самые команды конфигурирования, что и для развёрнутого домена.
    Открываем шаблон:
    wls:/offline/ > readTemplate('template.jar')
    Редактируем
    wls:/offline/base_domain > create('...')
    Сохраняем
    wls:/offline/base_domain >writeTemplate('newTemplate.jar')
     4. С помощью weblogic.WLST можно запускать jyton-скрипты. Этот способ переноса домена не использует шаблоны и не позволяет перносить дополнительные файлы и директории. Из основных его плюсов стоит отметить простоту использования. Вот пример команды, генерирующей скрипт:

    $ configToScript('/path/to/domain','script.py')

    и команды разворачивающей на его основе домен:
    $ weblogic.WLST script.py
    Стоит отметить, что скрипт перенесёт не только конфигурационные файлы, но и файлы с паролями, например boot.properties, если такой файл был создан.

    5. Утилита pack позволяет создать архив для переноса домена целиком или для переноса отдельного его сервера. Генерируя архив для перноса управляемого сервера, утилита не включает в него некоторые файлы, например  SerializedSystemIni.dat. Об этом надо просто помнить и следовать инструкциям Oracle по поднятию Managed серверов.

    6. В поставку weblogic включён так же скрипт clone.sh
    Утилита клонирует файлы из каталога с доменом. Что именно копировать, можно указать в лежащем рядом конфигурационном файле clone.xml.
    Важная особенность: можно воспользоваться этим способом только если совпадают директории установки приложений на development  и production средах. Я не очень углублялся в возможности этой утилиты. На первый взгляд она очень напоминает копирование.

    7. При должном понимании того, что делаешь, можно перенсти сервер простым копированием файлов.

    Oracle предлагает несколько способов разворачивания production-среды, видимо, намекая на то, что не нужно конфигурировать production домен от самого Simple Domain Template

    Установка

    Установка Weblogic достаточно проста, но есть несколько особенностей.
    1. Надо не забыть, что в системе может быть установлена собственная опенсорсная или любая другая Java-машина и заранее определить путь к той, которую мы хотим использовать.
    export JAVA_HOME=/opt/oracle/java/latest/bin/java
    export PATH=$JAVA_HOME/bin:$PATH 

    2.  для 64 битных систем указываем ключик  -d64. У меня это JAVA64=-d64
    3. Я использовал файл ответов, отчего нашёл ещё одну "особенность" установки.
    В файле ответов, предлагаемом Oracle, присутствуют линшние символы переноса строки.
    Если копироваь файл со странички, и подсовывать в качестве файла ответов, получим ошибку
    The local BEA product registry is corrupted

    лечится очень просто. Удаляем все лишние пробелы в разделе "COMPONENT_PATHS" В итоге получаем что-то вроде

    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
       <bea-installer>
         <input-fields>
           <data-value name=\"BEAHOME\" value=\"${BEA_HOME}\" />
           <data-value name=\"WLS_INSTALL_DIR\" value=\"${WL_HOME}\" />
           <data-value name=\"COMPONENT_PATHS\"
            value=\"WebLogic Server/Core Application Server|WebLogic Server/Administration Console|WebLogic Server/Configuration Wizard and Upgrade Framework|WebLogic Server/Web 2.0 HTTP Pub-Sub Server|WebLogic Server/WebLogic JDBC Drivers|WebLogic Server/Third Party JDBC Drivers|WebLogic Server/WebLogic Server Clients|WebLogic Server/WebLogic Web Server Plugins|WebLogic Server/UDDI and Xquery Support|WebLogic Server/Server Examples\"/>
           <data-value name=\"INSTALL_SHORTCUT_IN_ALL_USERS_FOLDER\" value=\"no\"/>
           <data-value name=\"LOCAL_JVMS\" value=\"${JAVA_HOME}\"/>
         </input-fields>
    </bea-installer>" > /tmp/silent$$.xml

    Запускаем
    java ${JAVA64} -jar ${WL_DISTRIB} -mode=silent -silent_xml=/tmp/silent$$.xml
    Готово.