Автор: mysticpowers | 14.11.2011

Impossible EM Console bugs

Если ваша EM Console перестала работать с файловой системой и другими функциями ОС после 1 ноября 2011 года, это скорее всего значит что она прихуела от несоответствия часовых поясов базы и ОС. Лечится так:

D:\oraclegrid\agent11g\bin>emctl stop agent
D:\oraclegrid\agent11g\bin>emctl resettz agent
# login as the em repository user and run the script:
# exec mgmt_target.set_agent_tzrgn(‘MYSERVERNAME.DOMAIN:3872′,’Etc/GMT-4′)

SQL> exec mgmt_target.set_agent_tzrgn(‘MYSERVERNAME.DOMAIN:3872′,’Etc/GMT-4′)
SQL> commit

ну и файлик \sysman\config\emd.properties тоже можно подкрутить на предмет TZ

Автор: mysticpowers | 18.10.2011

ACL для SMTP отправки писем

BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'mail_users.xml',
description => 'users of mail.infobox.ru',
principal => 'BASE',
is_grant => true,
privilege => 'connect');
COMMIT;
END;
begin

DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'mail_users.xml',
host => 'mail.infobox.ru',
lower_port => 25,
upper_port => 25);
COMMIT;
END;

---------------------------------------------------------------------------
-- UPDATE METADATA VIEW --
---------------------------------------------------------------------------
-- Update the USER_SDO_GEOM_METADATA view. This is required
-- before the Spatial index can be created. Do this only once for each
-- layer (that is, table-column combination; here: COLA_MARKETS and SHAPE).

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
COLUMN_NAME,
DIMINFO,
SRID)
VALUES (
'cola_markets',
'shape',
SDO_DIM_ARRAY( -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
),
NULL -- SRID
);

Чтобы все работало, надо сделать так:

# Application pool запускать от имени учетной записи, имеющей доступ на чтение и изменение папки, где лежат xls файлы, а также имеющие доступ к приложению и библиотекам excel (самое простое от администратора);
# В web.config добавить строчку . Даже можно прописать при необходимости;
# ОБЯЗАТЕЛЬНО!!! создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы). Подробнее смотри на http://social.msdn.microsoft.com/Foru…421818ef91

Автор: mysticpowers | 06.07.2010

Oracle APEX 4.0, APEX Listener и XE

Вышел четвертый апекс, я его бегло просмотрел – никаких глобальных изменений. Средней тяжести улучшений админской панели, приятные шаблоны, простой интерфейс для вставки всякого js на итемы.

А еще они выкатили Apex Listener – штука, ставящаяся на сервер-приложений, через которую браузер может стучаться в базу за страничками. Главная фишка – способна работать с бесплатными серверами Tomcat и Glassfish, а не только с Oracle Application Server.

Но работать с Oracle XE она не хочет (а на форумах пишут что не может пруф)

es, its happen on startup up of a new connection.

On other forum threads we have some help:

New next lines in
C:\oracle\sqldeveloper-1557\sqldeveloper\jdev\bin\sqldeveloper.conf

AddVMOption -Duser.language=en
AddVMOption -Duser.region=US

And change in regedit:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_XE\NLS_LANG -
from RUSSIAN_RUSSIA.CL8MSWIN1251
on RUSSIAN_RUSSIA.AL32UTF8

Some help:

http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14225/ch11charsetmig.htm#i1005993

This problem was fixed. Thanks All.

Автор: mysticpowers | 21.05.2009

Host Credentials

Оракловский Database Control (web-интерфейс) при действиях, связанных с важными параметрами базы, требует ввести т.н. Host Credentials – имя и пароль пользователя системы, от имени которого будут вносится изменения.
Соответствующий юзер должен входить в группу Администраторы и у него должны быть права для входа в качестве службы
Выставляем тут: Панель управления – Администрирование – Локальные политики – Назначение прав пользователей – добавить «Вход в качестве службы»

Для полной локализации требуется заменить кнопки Next и Previous в регионе отчета. Они появляются при включении опции Partial Page Refresh – эта штука разбивает полученные запросом данные на несколько страниц и позволяет AJAXовое перемещение между этими страничками.

Ну так вот, лезем в Application>Shared Components>Templates
там выбираем установленный для отчета (Report) шаблон, переходим во вкладку Pagination, и вставляем в поле «Next Page Template» след. код:

<a href="#LINK#" style="margin-left:5px;"><img src="#IMAGE_PREFIX#jtfunexe.gif" alt="" /></a>

Теперь кнопка без всякого текста, один кружочек со стрелочкой.

Автор: mysticpowers | 24.03.2009

Ускоряем Oracle APEX

В дополнение к мерам, приведенным в статье «Оценка производительности» и обязательной оптимизации SQL запросов:

есть в БД Oracle такой параметр SHARED_SERVERS (постоянно поддерживаемое количество сервер-процессов в базе).  А APEX использует для запросов к базе connection pool (набор сессий), причем даже в рамках одной сессии Апекса запросы могут идти к базе по разным сессиям connection pool’а . Не зная остальных тонкостей, предположу, что на одну сессию к базе приходится один сервер-процесс.

Для нас это означает, что первый запрос в рамках сессии апекса, а также запросы после длительного простоя пользователся апекса (определяемого таймаутом сессий)  будут происходить дольше обычного. Сервер процессы еще не запущены/уже остановлены по таймауту.
Смотрим количество процессов:

select * from V$SHARED_SERVER;

Так вот выставляем постоянный уровень готовых сервер-процессов и радуемся приросту скорости Апекса)

ALTER SYSTEM SET SHARED_SERVERS=20 SCOPE=BOTH;

Милисекунды я не замерял, но улучшение есть.


Обсуждение вопроса с производительностью апекса на офиц. форумах

Автор: mysticpowers | 20.03.2009

Репликация в Oracle

Имеем:

  • Oracle DB 11g – 2 штуки (головная «MASTER_DB» и дочерняя «SLAVE11″)
  • Oracle DB 10g R2 – 1 штука (дочерняя «SLAVE10″)

Во всех базах есть пользователь ANALYTICS с таблицей TT2.

Задача: настроить автоматическое обновление данных в головной базе при внесении изменений в дочерние.

Решение:

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

в базе создаются т.н. очереди сообщений (queues)  и процессы записи, передачи и считывания данных из этих очередей (Capture, Propagation и Apply соответственно). Все это взаимодействие называется Oracle Stream. Физически очереди сообщений – это записи в соответствующей таблице очередей.

Процесс Capture следит за обновлениями архивного журнала БД (archive log) и считывает все обновления, относящиеся к указанной таблице/табличному пространству/схеме/всей базе. Таким образом, процесс не мешает обычным транзакциям. Но при этом БД должна работать в режиме ведения журнала ARCHIVELOG.

В Enterprise Manager’е есть визард создания репликации, но мне не удалось заставить его сделать хоть что-нибудь вменяемое, поэтому действуем в основном через консоль

1. Проверяем, находится ли база в режиме ведения журнала через Enterprise Manager

Availability->Recovery Settings

через консоль включаем так:

shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

2. Все потоки будут располагаться в отдельной схеме администратора потоков (Streams Admininstator). Создаем схему и юзера strmadmin во всех базах. Подробный мануал с картинками из документации к 11g
Обязательно даем ему роль DBA и дополнительно под юзером с DBA выполняем следующий код:

BEGIN
  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
    grantee          => 'strmadmin',
    grant_privileges => TRUE);
END;

3. Создаем очередь. Заходим под strmadmin (все дальнейшие действия во всех базах тоже от имени strmadmin) и в каждой базе выполняем:

EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

вкратце – процедура создает таблицу с именем STREAMS_QUEUE_TABLE и очередь STREAMS_QUEUE. В дочерних БД будем записывать изменения в эту очередь, а в головной – считывать из нее.
4. Для передачи данных из одной базы в другую, используется DB Link, причем со стороны дочерней базы.
Создаем ДБлинк к головной базе

CREATE DATABASE LINK MASTER_DB CONNECT TO strmadmin
  IDENTIFIED BY &password USING 'MASTER_DB';

В параметрах лисенера дочерних баз должно быть прописано соединение «MASTER_DB» с головной базой.

5. Под strmadmin’ом в SLAVE11 создаем процесс передачи данных  (propagation) из очереди в дочерней в очередь в головной базе

BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
    table_name              => 'analytics.tt2',
    streams_name            => 'str1_to_str2',
    source_queue_name       => 'strmadmin.streams_queue',
    destination_queue_name  => 'strmadmin.streams_queue@MASTER_DB',
    include_dml             => TRUE,
    include_ddl             => TRUE,
    source_database         => 'SLAVE11',
    inclusion_rule          => TRUE,
    queue_to_queue          => TRUE);
END;

streams_name – произвольное название для потока передачи данных

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

6. Настраиваем процесс сбора изменений в SLAVE11 под strmadmin (capture)

BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name     => 'analytics.tt2',
    streams_type   => 'capture',
    streams_name   => 'capture_simp',
    queue_name     => 'strmadmin.streams_queue',
    include_dml    => TRUE,
    include_ddl    => TRUE,
    inclusion_rule => TRUE);
END;

queue_name – название очереди, в которую записываются изменения

7.  Не очень понятная процедура, которая делает типа слепок с текущего состояния таблиц в обоих базах и устанавливает какие изменения будут реплицироваться, а какие нет. Выполняется в SLAVE11 (дочерней базе)

DECLARE
  iscn  NUMBER;
BEGIN
  iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
  DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@MASTER_DB(
    source_object_name    => 'analytics.tt2',
    source_database_name  => 'SLAVE11',
    instantiation_scn     => iscn);
END;

8. В MASTER_DB, под strmadmin включаем процесс считывания и записи изменений (apply)

BEGIN
  DBMS_STREAMS_ADM.ADD_TABLE_RULES(
    table_name      => 'analytics.tt2',
    streams_type    => 'apply',
    streams_name    => 'apply_simp',
    queue_name      => 'strmadmin.streams_queue',
    include_dml     => TRUE,
    include_ddl     => TRUE,
    source_database => 'SLAVE11',
    inclusion_rule  => TRUE);
END;

9. Запускаем процессы считывания и записи
в базе MASTER_DB

BEGIN
  DBMS_APPLY_ADM.SET_PARAMETER(
    apply_name  => 'apply_simp',
    parameter   => 'disable_on_error',
    value       => 'N');
END;
/

BEGIN
  DBMS_APPLY_ADM.START_APPLY(
    apply_name  => 'apply_simp');
END;
/

в базе SLAVE11

BEGIN
  DBMS_CAPTURE_ADM.START_CAPTURE(
    capture_name  => 'capture_simp');
END;

Такая репликация будет отслеживать DDL и DML изменения таблицы.

Источники:

Simple Single-Source Replication Example
Common Data Replication and Integration Tasks

Рубрики

Follow

Get every new post delivered to your Inbox.