powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Репликация таблиц
11 сообщений из 11, страница 1 из 1
Репликация таблиц
    #33417695
IGOLNI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Не подскажите, как правильно реализовать задачу. Есть два различных сервера Oracle 9. В табличном пространстве каждого есть несколько таблиц полностью идентичных по структуре и содержанию. Необходимо их синхронизировать, чтобы обновления в одной - отражались в этой же таблице на другом сервере (допустимо в одностороннем направлении).
...
Рейтинг: 0 / 0
Репликация таблиц
    #33417808
Terrorist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариантов несколько:
1. Триггером. Недостатки - необходимо как-то обрабатывать изменения в мастер таблице(та на которой триггер висит) во время недоступности подчиненной таблицы.
2. Сделать джоб на удаленной базе который будет делать примерно следующее
Код: plaintext
1.
2.
3.
       DELETE FROM lalala;
       INSERT INTO lalala (SELECT * FROM lalala@mastersite);
       COMMIT;
   

3. Смотреть доку доку на предмет SNAPSHOTS так же они называются Materialized Views
...
Рейтинг: 0 / 0
Репликация таблиц
    #33417812
news
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Организовать репликацию между БД, если одна для отчетов, а другая боевая то еще настроить триггеры на insert, delete
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Репликация таблиц
    #39702319
topov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если через JOB то можно так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
create or replace TYPE "ARRAYOFSTRINGS" AS TABLE OF VARCHAR2(4000);

create or replace PROCEDURE P_RECONS_ZOMBI (ARG_TABLE VARCHAR2, ARG_ZOMBI VARCHAR2, ARG_UNIC_COLUMN_NAME VARCHAR2 DEFAULT NULL)
AS
  v_sql varchar2(4000);
  v_columns_list varchar2(4000);
  v_columns_concat varchar2(4000);
  v_table varchar2(30);
  v_zombi varchar2(30);
  v_unic_column_name varchar2(30);
  v_unic_column_type varchar2(100);
  TYPE t_array_rowid IS TABLE OF ROWID INDEX BY PLS_INTEGER; 
  v_array_rowid t_array_rowid;
  v_arrayofstrings ARRAYOFSTRINGS;
BEGIN

  v_table := upper(trim(arg_table));
  v_zombi := upper(trim(arg_zombi));
  v_unic_column_name := upper(trim(arg_unic_column_name));

  select 
    LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (order by COLUMN_ID) as columns_list,
    LISTAGG(COLUMN_NAME, ' || ') WITHIN GROUP (order by COLUMN_ID) as columns_concal
  into v_columns_list, v_columns_concat
  from user_tab_columns
  where table_name = v_zombi;
  
-- delete rows from zombi table
  if v_unic_column_name is not null
  then
    select 
      decode(DATA_TYPE,'NUMBER','to_number(t.column_value)','t.column_value')
    into v_unic_column_type
    from user_tab_columns
    where table_name = v_zombi
      and COLUMN_NAME = v_unic_column_name;
    EXECUTE IMMEDIATE '
    select to_char(' || v_unic_column_name || ') from (
    select ' || v_columns_list || ' from ' || v_zombi || '
    minus
    select ' || v_columns_list || ' from ' || v_table || '
    )' BULK COLLECT INTO v_arrayofstrings;
    v_sql := 'declare 
      v_arrayofstrings ARRAYOFSTRINGS; 
      begin 
        select /*+ cardinality(t 1) */
          rowidtochar(z.rowid)
        bulk collect into v_arrayofstrings 
        from ' || v_zombi || ' z,
        table(cast(:1 as arrayofstrings)) t
        where ' || v_unic_column_type || ' = z.' || v_unic_column_name || ';
        :1 := v_arrayofstrings;
      end;';
    EXECUTE IMMEDIATE v_sql USING IN OUT v_arrayofstrings;
    FORALL i IN v_arrayofstrings.FIRST..v_arrayofstrings.LAST
    EXECUTE IMMEDIATE 'DELETE FROM ' || v_zombi || ' WHERE rowid = chartorowid(:1)' USING v_arrayofstrings(i);
  else
    EXECUTE IMMEDIATE 'select z.row_id from 
    (select rowid as row_id, sys.dbms_obfuscation_toolkit.MD5(input_string => ' || v_columns_concat || ') as zombi_hash from ' || v_zombi || ') z
    left join (select sys.dbms_obfuscation_toolkit.MD5(input_string => ' || v_columns_concat || ') as zombi_hash from ' || v_table || ') t
    on z.zombi_hash = t.zombi_hash
    where t.zombi_hash is null'
    BULK COLLECT INTO v_array_rowid;
    FORALL i IN v_array_rowid.FIRST..v_array_rowid.LAST
    EXECUTE IMMEDIATE 'DELETE FROM ' || v_zombi || ' WHERE rowid = :1' USING v_array_rowid(i);
  end if;

-- insert rows to zombi table
    EXECUTE IMMEDIATE '
    insert into ' || v_zombi || ' (' || v_columns_list || ')
    select ' || v_columns_list || ' from (
    select ' || v_columns_list || ' from ' || v_table || '
    minus
    select ' || v_columns_list || ' from ' || v_zombi || '
    )';
  
  commit;
  
END P_RECONS_ZOMBI;



запуск:
Код: plsql
1.
2.
3.
4.
5.
-- example 1
exec P_RECONS_ZOMBI('from_table','to_table','column_with_pk');

-- example 2
exec P_RECONS_ZOMBI('from_table','to_table');



Первый пример работает быстрее т.к. использует уникальное поле. Второй основывается на hash (md5 - 128)
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702322
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
topov,

13 лет спустя, несомненно, автор топика будет рад получить от Вас ценный совет...
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702345
mibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702346
mibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Аннаtopov,

13 лет спустя, несомненно, автор топика будет рад получить от Вас ценный совет...


Зато другим может помочь.
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702381
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mibinЗато другим может помочь."Я Вас умоляю"(с)

Вы первый день на форуме?
Поверьте, никто тут из новичков не пользует поиск , не читает F.A.Q. и темы в ТОПах , не говоря уже о просмотре хотя бы первых 2-3-х страниц тем на форуме.
Каждый сразу задает вопрос, находясь в полнейшей уверенности, что он уникален и только у него возникла такая проблема...
Им невдомек, что эти вопросы уже по 100500 раз перетерты на просторах форума...

Это я вам говорю, как "читатель" форума с 2004 года (а с 2006 - зарегистрированный участник и, иногда, "писатель").
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702385
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
topovможно такГробокопатель, твоё "решение" не удовлетворяет начальным условиям:
IGOLNIOracle 9
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702387
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно никаким не удовлетворяет при использовании LOB и/или пользовательских типов
...
Рейтинг: 0 / 0
Репликация таблиц
    #39702466
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
topov,

Одноколоночный ключ или коллизии и ограничение по ширине строки с потерей точности. Не все типы. Поломается при изменении таблицы в другой транзакции. Ограничение по количеству строк. Ограничение по идентификаторам. dbms_obfuscation_toolkit депрекейтед.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Репликация таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]