|
![]()
Вся книга: Практика работы с Oracle: генерация, администрирование, репликация. И.К.Гаршин.
ISBN 5-901314-02-6 (рус.). УДК 004.42Oracle. ББК 32.973.26-018.2. Г21. В 1999-2000 г. программисты «Нефтегазсистемы» разработали и внедрили в большинство ОАО МН «Транснефти Информационную систему паспортизации магистральных нефтепроводов «СКУТОР». Сначала он был создан на базе MS Access, затем переведен на Oracle 8 с поддкржкой асинхронной репликации с помощью программы Oracle Multimaster. В книге подробно описан авторский опыт перевода и внедрения этой базы данных. |
Автор признателен руководителям и сотрудникам ЗАО «Нефтегазсистемы», начальникам и персоналу вычислительных центров региональных управлений ОАО «Транснефть», c чьей помощью был разработан и внедрен данный Oracle-проект.
Здесь дано описание синтаксиса (взятое из [8]), в основном, тех модулей и процедур, которые участвуют в примерах и скриптах. Для некоторых из них приведены также примеры. Значение параметров не описывается, поскольку ясно из их названия.
Процедуры модуля DBMS_DEFER_SYS предназначены для регистрации пропагатора (Часть 2, Глава 1: Корректируемые (updatable) снимки, Мультимастер), управления транзакциями (Часть 2, Глава 3: Наблюдение за транзакциями, Разбор ошибочных транзакций) Полный их состав и подробное описание см. в [8] в пункте Replication Management API Reference главы Oracle8 Replication, Release 8.0 раздела Oracle8 Database.
1. Удаление ошибки выполнения транзакции:
DBMS_DEFER_SYS.DELETE_ERROR(
deferred_tran_id in varchar2,
destination in varchar2)
2. Перезапуск неудачной транзакции:
DBMS_DEFER_SYS.EXECUTE_ERROR(
deferred_tran_id in varchar2,
destination in varchar2)
3. Удаление транзакции из очереди:
DBMS_DEFER_SYS.DELETE_TRAN(
deferred_tran_id in varchar2,
destination in varchar2)
4. Регистрация REPADMIN как Распространителя транзакций (пропагатора):
DBMS_DEFER_SYS.REGISTER_PROPAGATOR(username in varchar2)
5. Настройка PURGE (периодический процесс очистки системного журнала от выполненных задач):
DBMS_DEFER_SYS.SCHEDULE_PURGE(
interval in varchar2,
next_date in date,
reset in boolean := NULL,
purge_method in binary_integer := NULL,
rollback_segment in varchar2 := NULL,
startup_seconds in binary_integer := NULL,
execution_seconds in binary_integer := NULL,
delay_seconds in binary_integer := NULL,
transaction_count in binary_integer := NULL,
write_trace in boolean := NULL)
6. Настройка PUSH (периодический процесс возобновления связи и проталкивания транзакций):
DBMS_DEFER_SYS.SCHEDULE_PUSH(
destination in varchar2,
interval in varchar2,
next_date in date,
reset in boolean := FALSE,
parallelism in binary_integer := NULL,
heap_size in binary_integer := NULL,
stop_on_error in boolean := NULL,
write_trace in boolean := NULL,
startup_seconds in binary_integer := NULL,
execution_seconds in binary_integer := NULL,
delay_seconds in binary_integer := NULL,
transaction_count in binary_integer := NULL)
Процедуры модуля DBMS_REPCAT предназначены для работы с мастер-группами. Полный их состав и подробное описание см. в [8] в пункте Replication Management API Reference главы Oracle8 Replication, Release 8.0 раздела Oracle8 Database. Применение данных процедур - см.: Часть 2, Глава 1; Глава 3.
1. Указание группы полей для метода разрешения конфликтов для таблицы:
DBMS_REPCAT.ADD_GROUPED_COLUMN(
sname in varchar2,
oname in varchar2,
column_group in varchar2,
list_of_column_names in varchar2 | DBMS_REPCAT.VARCHAR2S)
Пример:
DBMS_REPCAT.ADD_GROUPED_COLUMN(
sname => '"PLIPEKN"',
oname => '"BRANCH"',
column_group => '"DL"',
list_of_column_names =>
'NAME,ID,CSCHEM,CORDATE,USERNAME');
2. Указание для мастер-группы нового сайта:
DBMS_REPCAT.ADD_MASTER_DATABASE(
gname in varchar2,
master in varchar2,
use_existing_objects in boolean := TRUE,
copy_rows in boolean := TRUE,
comment in varchar2 := '',
propagation_mode in varchar2 := 'ASYNCHRONOUS')
3. Указание метода разрешения конфликтов на изменение для таблицы:
DBMS_REPCAT.ADD_UPDATE_RESOLUTION(
sname in varchar2,
oname in varchar2,
column_group in varchar2,
sequence_no in number,
method in varchar2,
parameter_column_name in varchar2 | DBMS_REPCAT.VARCHAR2S,
priority_group in varchar2 := NULL,
function_name in varchar2 := NULL,
comment in varchar2 := NULL)
Пример:
DBMS_REPCAT.ADD_UPDATE_RESOLUTION(
sname => '"PLIPEKN"',
oname =>'"BRANCH"',
column_group => '"DL"',
sequence_no => 0 + 1,
method => 'Latest Timestamp',
parameter_column_name => '"CORDATE"');
4. Изменение свойств объекта, включенного в мастер-группу:
DBMS_REPCAT.ALTER_MASTER_REPOBJECT(
sname in varchar2,
oname in varchar2,
type in varchar2,
ddl_text in varchar2,
comment in varchar2 := '',
retry in boolean := FALSE)
5. Создание мастер-группы:
DBMS_REPCAT.CREATE_MASTER_REPGROUP(
gname in varchar2,
group_comment in varchar2 := '',
master_comment in varchar2 := ''),
qualifier in varchar2 := '')
6. Добавление объекта (таблицы) в мастер-группу:
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
sname in varchar2,
oname in varchar2,
type in varchar2,
use_existing_object in boolean := TRUE,
ddl_text in varchar2 := NULL,
comment in varchar2 := '',
retry in boolean := FALSE
copy_rows in boolean := TRUE,
gname in varchar2 := '')
7. Наименование группы полей для метода разрешения конфликтов:
DBMS_REPCAT.DEFINE_COLUMN_GROUP(
sname in varchar2,
oname in varchar2,
column_group in varchar2,
comment in varchar2 := NULL)
8. Проталкивание всех админ-запросов по мастер-группе:
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN(
gname in varchar2,
all_sites in boolean := FALSE)
9. Удаление группы полей для метода разрешения конфликтов:
DBMS_REPCAT.DROP_COLUMN_GROUP(
sname in varchar2,
oname in varchar2,
column_group in varchar2)
10. Удаление мастер-группы:
DBMS_REPCAT.DROP_MASTER_REPGROUP(
gname in varchar2,
drop_contents in boolean := FALSE,
all_sites in boolean := FALSE)
11. Удаление объекта из мастер-группы:
DBMS_REPCAT.DROP_MASTER_REPOBJECT(
sname in varchar2,
oname in varchar2,
type in varchar2,
drop_objects in boolean := FALSE)
12. Формирование метода разрешения конфликтов:
DBMS_REPCAT.DROP_UPDATE_RESOLUTION(
sname in varchar2,
oname in varchar2,
column_group in varchar2,
sequence_no in number)
13. Запуск DDL-операции для объекта, включенного в мастер-группу:
DBMS_REPCAT.EXECUTE_DDL(
gname in varchar2,
{ master_list in varchar2 := NULL,
| master_table in DBMS_UTILITY.DBLINK_ARRAY,}
ddl_text in varchar2)
14. Генерация репликационной поддержки для объекта в мастер-группе:
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
sname in varchar2,
oname in varchar2,
type in varchar2,
package_prefix in varchar2 := NULL,
procedure_prefix in varchar2 := NULL,
distributed in boolean := TRUE,
gen_objs_owner in varchar2 := NULL,
min_communication in boolean := TRUE )
15. Очистка всех админ-запросов по мастер-группе:
DBMS_REPCAT.PURGE_MASTER_LOG(
id in natural,
source in varchar2,
gname in varchar2)
16. Удаление сайта из мастер-группы:
DBMS_REPCAT.REMOVE_MASTER_DATABASES(
gname in varchar2,
master_list in varchar2 |
master_table in DBMS_UTILITY.DBLINK_ARRAY)
17. Восстановление активности мастер-группы:
DBMS_REPCAT.RESUME_MASTER_ACTIVITY(
gname in varchar2,
override in boolean := FALSE)
18. Приостановление активности мастер-группы:
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY(gname in varchar2)
Пример:
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY(gname => '"PLIPEKN0"');
Процедуры модуля DBMS_REPCAT_ADMIN предназначены для предоставления либо изъятия прав у администратора репликаций (REPADMIN). Полный их состав и подробное описание см. в [8] в пункте Replication Management API Reference главы Oracle8 Replication, Release 8.0 раздела Oracle8 Database. Применение данных процедур - см.: Часть 2, Глава 1: Корректируемые (updatable) снимки, Мультимастер.
1. Предоставление административных прав для пользователя REPADMIN:
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA(username in varchar2)
Пример:
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA(username => 'REPADMIN');
Процедуры модуля DBMS_JOB предназначены для управлениями задачами. Полный их состав и подробное описание см. в [8] в главе Oracle8 Administrator's Guide, Release 8.0 раздела Oracle8 Database. Применение данных процедур - см.: Часть 2, Глава 3: Администрирование задач.
1. Прерывание задачи:
DBMS_JOB.BROKEN(
job in binary_integer,
broken in boolean,
next_date in date default SYSDATE)
Пример:
DBMS_JOB.BROKEN(
job => 204,
broken => TRUE);
2. Изменение свойств задачи:
DBMS_JOB.CHANGE( job in binary_integer,
what in varchar2,
next_date in date,
interval IN VARCHAR2)
Пример:
DBMS_JOB.CHANGE(
job => 204,
next_date => NULL,
interval => '/*10:Hours*/ SYSDATE + 10/24',
what => NULL);
3. Запуск задачи:
DBMS_JOB.RUN( job in binary_integer)
Пример:
DBMS_JOB.RUN(job => 204);
|