Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > репликация


Автор: Petro123 27.6.2007, 15:07
Необходимо синхронизировать 2 базы Oracle.
В принципе наверное это можно сделать вручную, однако зачем изобретать велосипед.
Какие средства репликации предлагает Oracle?
Есть ли у кого ссылки на литературу по этой теме?

Автор: Sqlninja 27.6.2007, 15:14
Изобретать велосипед точно незачем. Oracle предлагает Oracle Advanced Replication и Oracle Streams (рекомендую первое). Тема достаточно обширная, поэтому рассказывать основы здесь будет нецелесообразно. Более подробной и полной информации чем в http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96567/toc.htm не встречал. По ней все и делал. Будут конкретные вопросы - welcome.

Автор: Petro123 28.6.2007, 09:30
А на русском чего нибудь нет?

Автор: LSD 28.6.2007, 09:45
Возможно описание репликации есть в переводных книгах по Oracle. Плюс есть переводная документация от RdTex.
Но лучше забыть про русский, и читать английские доки: дешевле, проще, актуальней.

Автор: Petro123 29.6.2007, 12:04
Немного почитал каких то обрывочных сведений.
Поправьте если не прав:
 Существует возможность создавать так называемые материализованные представления, т.е. снимки определенных наборов данных, причем эти снимки будут автоматически обновляться при изменении исходных данных. Таким образом достигается синхронизация между мастер таблицей и снимком.
Не могу понять если есть 2 базы, то получается, что мастер таблица должна быть в одной, а сам снимок в другой, так что ли.
Не пойму алгоритм, с чего начать. Как делать снимок вроде ясно, но как его дальше использовать?


Автор: LSD 29.6.2007, 14:59
Не обязательно, можеть быть синхронизация между несколькими мастер таблицами. Но эти таблицы должны юыть полностью одинаковыми.

Автор: Petro123 7.7.2007, 10:00
Не могу понять если нужно синхронизировать 2 базы, то получается, что мастер таблица должна быть в одной, а сам снимок в другой, так что ли?

Автор: DimW 9.7.2007, 08:32
из базы А в базу Б делается репликация. в базе А есть таблица АХ. 
в базе А есть материализованная втюха(снимок) АХМ который содержет данные из таблицы АХ (select * from AX).

из базы Б нужно обратиться к мат. вьюхи AXM(select * from AXM) которая находится в базе А и перелить(долить) данные в таблицу БХ базы Б.

Автор: LSD 9.7.2007, 13:20
Цитата(Petro123 @  7.7.2007,  11:00 Найти цитируемый пост)
Не могу понять если нужно синхронизировать 2 базы, то получается, что мастер таблица должна быть в одной, а сам снимок в другой, так что ли?

Можно создать две мастер таблицы в разных базах и синхронизировать их между собой.

Автор: Petro123 9.7.2007, 15:21
Цитата

из базы А в базу Б делается репликация. в базе А есть таблица АХ. 
в базе А есть материализованная втюха(снимок) АХМ который содержет данные из таблицы АХ (select * from AX).



А что нельзя, так чтобы Снимок был в базе Б, тогда бы и доливать не надо

Цитата

из базы Б нужно обратиться к мат. вьюхи AXM


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

Цитата

(select * from AXM) которая находится в базе А и перелить(долить) данные в таблицу БХ базы Б.

То есть опять нужно реплицировать снимок в базе А (он ведь идентичен мастер таблице из А ) в таблицу в базе Б, опять тоже самое - не вижу смысла так делать, или я чего-то не догоняю...

Автор: DimW 9.7.2007, 17:21
Цитата(Petro123 @  9.7.2007,  15:21 Найти цитируемый пост)
 опять тоже самое - не вижу смысла так делать, или я чего-то не догоняю... 

да это я туплю, только из отпуска вышел, мысли совсем не о том...
ща приведу в порядок попытаюсь ответить более осмысленно  smile 

Автор: Petro123 10.7.2007, 14:03
Ок, особенно меня интересует как делать запросы к таблицам,кот нах-ся в разных базах

Автор: DimW 10.7.2007, 15:11
Цитата(Petro123 @  10.7.2007,  14:03 Найти цитируемый пост)
Ок, особенно меня интересует как делать запросы к таблицам,кот нах-ся в разных базах


для начала нужно создать db link(более подробную инфу смотри в оракловой доке):

Код

  create public database link db_link_name
  connect to user_name
  using 'db_name';


его создаешь в базе из которой будешь выполнять селекты.

допустем в базе db_name есть таблица table_name.
селект пишешь к ней так:

Код

 select * from table_name@db_link_name;


на основе этого селеста можешь построить материализованное представление которое будет синхранезировано с таблицей table_name.

Автор: Petro123 11.7.2007, 13:45
Связь создал...
Далее пытаюсь из базы 1 обратиться к базе 2, 
сообщение:

TNS: Невозможно разрешить имя службы

Вроде в TNS обе базы прописаны, в чем может быть проблема?

Добавлено через 6 минут и 51 секунду
Вопрос снимается, нашел ошибку, спасибо

Добавлено через 7 минут и 5 секунд
Вопрос снимается, нашел ошибку, спасибо

Добавлено через 11 минут и 54 секунды
Еще вопрос:
Попытался создать снимок
получил сообщение 
Таблица Table не имеет протокола снимка
Что это значит?

Автор: Petro123 11.7.2007, 14:04
Извиняюсь снова забыл в первой базе создать журнал ...

Автор: Petro123 11.7.2007, 15:23
Возник еще вопрос: 
Обновление происходит с какой то периодичностью
Как сделать чтобы обновление снимка происходило в определенное время или по желанию (при запуске какой-нибудь процедуры)

Автор: Petro123 11.7.2007, 15:53
Еще вопросик:
как сделать чтобы снимок обновлялся в определенное время или вообще по желанию пользователя из процедуры?
Да и чем отличается снимок от мат представления и что лучше использовать?

Автор: DimW 11.7.2007, 17:21
Цитата(Petro123 @  11.7.2007,  15:53 Найти цитируемый пост)
Да и чем отличается снимок от мат представления и что лучше использовать?

в более ранних версиях оракла был снимок, кажется с 9-й или последних 8-х вырсии стал мат. представлением.

Цитата(Petro123 @  11.7.2007,  15:53 Найти цитируемый пост)
как сделать чтобы снимок обновлялся в определенное время или вообще по желанию пользователя из процедуры?


из процедуры что то вроди: sbms_snapshort.refrash('mv_name');

в определенное время: выше сказанное пихаешь в джобу.

при изменениях в таблице: устанавливается при создании мат. вьюхи.

если не разберешься топиши, завтра смогу сказать поточнее.

Автор: Petro123 12.7.2007, 15:50
Попробовал
Execute DBMS_Mview.Refresh(View); - 
ошибка 
ORA-01041: внутренняя ошибка. hostdef расширение не существует
Что за ошибка?

Автор: LSD 12.7.2007, 16:16
Судя по тому, что пишет народ - енто баг. Иногда помогает переустановка.

Автор: Petro123 13.7.2007, 06:54
Еще на опцию On Commit ругается, типа отсутствует ключевое слово. Почему?

Автор: DimW 13.7.2007, 09:56
наверное потому что опция пишется так: REFRESH ON COMMIT.

и водще выложи ddl мат. вьюхи. 

Автор: Petro123 17.7.2007, 13:56
CREATE SNAPSHOT smcard
    Build Deferred
    Refresh On Commit    
    as SELECT * FROM supermag.smcard@essen01
ругается типа нельзя установить атрибут регенерации On Commit для мат представления.

И еще как сделать чтобы снимок обновлялся скажем каждый день, например, в 8:00

Автор: Petro123 17.7.2007, 14:12
Когда пытаюсь сделать снимки на таблицы, содержащие большое количество строк Oracle ругается,
что ...невозможно увеличить временный сегмент до в разделе...
Что за ошибка

Автор: LSD 17.7.2007, 14:52
Нехватает места в табличном пространстве, которое используется для временного сегмента. Увелич его, или сделай авторасширяемым.

Автор: DimW 17.7.2007, 15:40
Цитата(Petro123 @  17.7.2007,  13:56 Найти цитируемый пост)
CREATE SNAPSHOT smcard
    Build Deferred
    Refresh On Commit    
    as SELECT * FROM supermag.smcard@essen01
ругается типа нельзя установить атрибут регенерации On Commit для мат представления.


Petro123, саветую тебе найти эту книгу http://forum.ru-board.com/topic.cgi?forum=106&topic=0002&glp
там подробно написано какие настройки нужно сделать для того что бы работали мат. представления.
у меня есть в электронном виде на русском языке, если примешь 10 метров то могу кинуть.


Цитата(Petro123 @  17.7.2007,  13:56 Найти цитируемый пост)
И еще как сделать чтобы снимок обновлялся скажем каждый день, например, в 8:00

тебе нужно юзать пакет dbms_job, в этом форуме не однократно эта тема поднималась, инфы навалом.

Добавлено через 2 минуты и 2 секунды
вот: http://forum.vingrad.ru/forum/topic-142949/kw-matview-refresh/hl/dbms_job/index.html

Добавлено через 3 минуты и 10 секунд
http://forum.vingrad.ru/forum/topic-120867/hl/dbms_job/index.html

Добавлено через 4 минуты и 13 секунд
http://forum.vingrad.ru/forum/topic-116234/hl/dbms_job/index.html

Автор: Petro123 18.7.2007, 06:59
Спасибо за ссылки
Двухтомник Тома Кайта у меня есть, спасибо

Добавлено через 1 минуту и 32 секунды
Цитата

Увелич его, или сделай авторасширяемым. 

Как?

Табл пространство делал так
create tablespace my_tablespace datafile 'D:\...\Sasha.DAT'
size 10000M REUSE AUTOEXTEND ON NEXT 2M MAXSIZE UNLIMITED
Что нужно добавить?

Автор: Petro123 18.7.2007, 12:31
MAXSIZE UNLIMITED разве не то

Автор: DimW 18.7.2007, 13:19
Цитата(Petro123 @  18.7.2007,  06:59 Найти цитируемый пост)
Табл пространство делал так
create tablespace my_tablespace datafile 'D:\...\Sasha.DAT'


ты уверен что именно это пространство является временным?

Автор: LSD 18.7.2007, 14:22
http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/undo_temp.htm#18628

Автор: Petro123 18.7.2007, 15:19
Цитата

ты уверен что именно это пространство является временным?

Простите, не совсем понял, поясните пожалуйста поподробнее

Автор: Petro123 18.7.2007, 16:08
Как увеличить максимальное число экстентов во временном сегменте раздела?????

Автор: DimW 18.7.2007, 17:38
Цитата(Petro123 @  18.7.2007,  15:19 Найти цитируемый пост)
Цитата

ты уверен что именно это пространство является временным?


Простите, не совсем понял, поясните пожалуйста поподробнее 



у оракла есть ряд тайбелспайсов которые он использует по умолчанию:
system, users, index, temp и т.д.

так вот он и просит увеличить пространство во временном TS - temp, если конечно ты или кто то не переопределил его на другой.

Добавлено через 7 минут и 41 секунду
список своих TS можешь посмотреть так:
Код

select * from v$tablespace

Автор: DimW 19.7.2007, 08:07
и почитай это: http://www.firststeps.ru/sql/oracle/r.php?119
и следуйщие шаги.

Автор: Petro123 19.7.2007, 08:56
Короче я сделал следующее, 
Создал табл пространство

create tablespace my_tablespace datafile 'D:\...\Sasha.DAT'
size 10000M REUSE AUTOEXTEND ON NEXT 2M MAXSIZE UNLIMITED

Затем создал польз и выделил ему квоту в созданном табл пространстве

ALTER USER DUMMY IDENTIFIED BY DUMB 
DEFAULT TABLESPACE my_tablespace QUOTA 10000M ON my_tablespace

Затем попытался под DUMMY создать мат представление в my_tablespace

 CREATE materialized view smcash2
    PctFree 0 Tablespace My_tablespace 
    Storage (initial 64k next 64k pctincrease 0)
    Build Immediate
    Refresh Force    
    as SELECT * FROM table@baze

В результате ошибка:  -... максимальное число экстентов во временном сегменте раздела ...- 
Не могу понять при чем тут TEMP, разве мат представление создается не в my_tablespace.
Да и шаг 121(как создавать табл пространство) перечитывал несколько раз, но если честно конструкции не совсем понял.
На каком шаге я допустил ошибку и что нужно исправить?




Автор: DimW 19.7.2007, 09:52
Цитата(Petro123 @  19.7.2007,  08:56 Найти цитируемый пост)
В результате ошибка:  -... максимальное число экстентов во временном сегменте раздела ...- 


номер ошибки?

Автор: Petro123 19.7.2007, 12:09
ошибка в строке 6:
ORA-01630: max # экстентов исчерпано во временном сегменте раздела
ORA-02063: предшествующий line из baze

Автор: Petro123 20.7.2007, 15:15
Нет вариантов?

Автор: DimW 23.7.2007, 07:24
вот: http://www.sql.ru/forum/actualthread.aspx?tid=36472&hl=ora+01630
http://www.sql.ru/forum/actualthread.aspx?tid=126869&hl=ora+01630
http://www.sql.ru/forum/actualthread.aspx?tid=175060&hl=ora+01630

пока все что нашел по этой ошибке. мнение DBA нужно, есть такие?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)