Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 сравнение двух биллинговых БД  [new]
kuzia
Member

Откуда:
Сообщений: 4
Всем привет!
Подскажите пожалуйста, как можно сравнить две биллинговые БД (oracle)? Базы содержат идеинтичные таблицы (по одной таблице в каждой БД), но в них вожможны расхождения в значениях некоторых строк, мне нужно найти эти расхождения. Обе БД находятся на одном компе.
Заранее спасибо за помощь!
1 июн 06, 12:15    [2729201]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
kuzia
Всем привет!
Подскажите пожалуйста, как можно сравнить две биллинговые БД (oracle)?

Например через dblink и select not exists.
Более быстро может оказаться импорт схемы биллинга из одной базы в другую базу и работа со сравнением объектов схем в рамках одной БД (можно более оптимально распределить ресурсы).
1 июн 06, 12:19    [2729245]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
Грантуешь одну БД на доступ к другой, если они находятся на одном сервере или создаешь DB link между БД, если на разных. Пишешь набор скриптов типа
Select * from a.table1
minus
Select * from b.table1
И получаешь чем a.table1 отличается от b.table1. И наоборот. Генерацию скриптов можно автоматизировать
1 июн 06, 12:21    [2729264]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
kuzia
Member

Откуда:
Сообщений: 4
А где можно почитать про создание линка?
1 июн 06, 12:22    [2729277]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
В документации по серверую В поисковой строке наберите CREATE DATABASE LINK
1 июн 06, 12:25    [2729302]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
Тема называется Oracle® Database SQL Reference
1 июн 06, 12:25    [2729309]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Сопоставление таблиц A и Б по ключу.

select sum(src), count(*), <ключ сопоставления>
from
(
   select 1 src, A.* from A
   union all
   select -1 src, B.* from B
)
group by <ключ сопоставления>
having sum(src) != 0

Если поле sum(src) > 0, то есть лишние строки в таблицу A,
если sum(src) < 0 есть лишние строки в таблице B.
count(*) позволяет оценить количество дублей.
1 июн 06, 12:26    [2729317]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8553
Tolmachov Dmitiry

StarWoofy


ну да, конечно. а смысл ? not exists или minus ? ни первый, ни второй - не дает характер отличий.

dblink - это хорошо, но не очень.

Для сравнения отличий более уместным был бы разворот в параллельной схеме, и сравнение - с использованием FULL OUTER JOIN.

Вернее - серией из двух LEFT OUTER JOIN
1 июн 06, 12:27    [2729328]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
kuzia
Member

Откуда:
Сообщений: 4
Спасибо! Сейчас попробую.
1 июн 06, 12:29    [2729352]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
grexhide
Tolmachov Dmitiry

StarWoofy


ну да, конечно. а смысл ? not exists или minus ? ни первый, ни второй - не дает характер отличий.

dblink - это хорошо, но не очень.

Для сравнения отличий более уместным был бы разворот в параллельной схеме, и сравнение - с использованием FULL OUTER JOIN.

Вернее - серией из двух LEFT OUTER JOIN

угу. (фразу "в значениях некоторых строк" ) я пропустил.
1 июн 06, 12:30    [2729361]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8553
mcureenab


Нет, ну просто нет слов - господа, речь идет о биллинговой системе.

Читай - миллионы (десятки, сотни) строк. Куда вы со такими советами
(minus, union all, group by) ?

TEMP - он не резиновый...
1 июн 06, 12:31    [2729368]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
grexhide
mcureenab


Нет, ну просто нет слов - господа, речь идет о биллинговой системе.

Читай - миллионы (десятки, сотни) строк. Куда вы со такими советами
(minus, union all, group by) ?

TEMP - он не резиновый...


1. Миллиарды строк обычно лежат в 1-2х таблицах. Остальные таблицы вполне подъёмные.
2. Решать нужно сущетвующие проблемы. Но раз на то пошло, никто не мешает сделать вырезки из таблиц и сравнивать их частями, например секциями.
3. Твоё конструктивное предложение "серией из двух LEFT OUTER JOIN" на больших таблицах скорее всего не имеет шансов реализоваться в разумные сроки. Любой JOIN будет выполняться значительно дольше, чем сортировка и не факт, что TEMPа хватит.
4. Там где есть место для двух БД, скорее всего найдётся место ещё для их копии (в смысле для TEMP).
1 июн 06, 12:43    [2729475]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
Эээ. господа-господа.
В зависимости от объемов сравниваемых таблиц возможны различные варианты.
Я бы только все-таки предложил бы автору топика работать с одной базой а не с двумя.
А то при сравнениях - ресурсов будет нужно 2*.
1 июн 06, 12:52    [2729550]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
StarWoofy
Эээ. господа-господа.
В зависимости от объемов сравниваемых таблиц возможны различные варианты.
Я бы только все-таки предложил бы автору топика работать с одной базой а не с двумя.
А то при сравнениях - ресурсов будет нужно 2*.


ХМ. Наверное зависит от метода сравнения - плана запроса. Или ты беспокоишься, что надо два экземпляра Оракл поднять? Так один можно совсем тонким сделать.
1 июн 06, 12:58    [2729599]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
mcureenab
StarWoofy
Эээ. господа-господа.
В зависимости от объемов сравниваемых таблиц возможны различные варианты.
Я бы только все-таки предложил бы автору топика работать с одной базой а не с двумя.
А то при сравнениях - ресурсов будет нужно 2*.


ХМ. Наверное зависит от метода сравнения - плана запроса. Или ты беспокоишься, что надо два экземпляра Оракл поднять? Так один можно совсем тонким сделать.


Ок. Ситуация
имеем: 2*биллинг.
Пусть один толстый=dbbuf,sort_area большая - про нее как то забыли упомянуть например для сортировок,если допустимо выключен archivelog итп,
и есть тонкий биллинг (все по минимуму).
рабочаем через dblink (допустим).

Если размеры базы не позволяют сделать за разумное время imp схемы или вообще разнести их на разные сервера,
тогда да, других вариантов немного.

В противном случае, я сильно сомневаюсь что работа по сравнению будет эффективнее одного сервера с одним dbbuf, shared pool итп. Сомнительно что две одинаковые базы на одном и том же едином оборудовании будут работать эффективнее при операциях сравнения(это конкуренция за ресурсы как минимум), чем одна.

Ваши аргументы? ;-)

(про размер БД конечно ничего не было сказано)
imp>10Гб это уже слегка попахивает извращением.
1 июн 06, 13:08    [2729668]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Tolmachov Dmitiry
Member

Откуда: Москва, Пенза
Сообщений: 1520
kuzia
Обе БД находятся на одном компе.
Судя по этой фразе и постановке задачи вообще, это не какие-то промышленные БД, которые стоят на серверах, а так - студенческий вариант.
1 июн 06, 13:09    [2729678]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
Tolmachov Dmitiry
kuzia
Обе БД находятся на одном компе.
Судя по этой фразе и постановке задачи вообще, это не какие-то промышленные БД, которые стоят на серверах, а так - студенческий вариант.

Либо это маленький биллинг (например локального провайдера интернет-сети).
1 июн 06, 13:12    [2729697]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
RA\/EN
Member

Откуда:
Сообщений: 3659
Зачем IMP?
Заводим на базе, где будет сравнение, табличное пространство с nologging (на случай, если у существующих force logging, да и удалять TS проще), делаем по db-link:
CREATE TABLE BBT_COPY NOLOGGING AS SELECT * FROM BIG_BILLING_TABLE@REMOTE_HOST
И на паримся с exp/imp.

Затем (для случая, когда TEMP жрать нельзя) делаем на BBT_COPY альтернатиынй индекс по ключу сравнения, добавляем поле IS_MATCH и в цикле пережевываем локальную таблицу биллинга, сравнивая row-by-row с BBT_COPY, выкидывая в лог расхождения и проставляя IS_MATCH на копии. С промежуточными коммитами.
Будет медленно, зато не нагрузит базу.
1 июн 06, 13:20    [2729762]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
StarWoofy
Member

Откуда: Moscow
Сообщений: 1005
RA\/EN
Зачем IMP?

Ты предложил еще один из возможных вариантов.
1 июн 06, 13:24    [2729790]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Sharpei
Member

Откуда: дровишки?
Сообщений: 765
RA\/EN
Зачем IMP?
Заводим на базе, где будет сравнение, табличное пространство с nologging (на случай, если у существующих force logging, да и удалять TS проще), делаем по db-link:
CREATE TABLE BBT_COPY NOLOGGING AS SELECT * FROM BIG_BILLING_TABLE@REMOTE_HOST
И на паримся с exp/imp.

Небольшое уточнение - если в табличке нету LONG
1 июн 06, 13:31    [2729837]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
StarWoofy

В противном случае, я сильно сомневаюсь что работа по сравнению будет эффективнее одного сервера с одним dbbuf, shared pool итп. Сомнительно что две одинаковые базы на одном и том же едином оборудовании будут работать эффективнее при операциях сравнения(это конкуренция за ресурсы как минимум), чем одна.

Ваши аргументы? ;-)


Теперь понятно. Спору нет, конечно два экземпляра будут использовать больше RAM, CPU, дисков и т.д., чем один. Но вряд ли непременно в 2 раза больше. Наверняка расход по дискам и CPU будет незначительный, расход RAM можно существенно уменьшить, так что миграция на одну БД станет нецелесообразной.
1 июн 06, 13:34    [2729872]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
RA\/EN
Member

Откуда:
Сообщений: 3659
Sharpei
RA\/EN
Зачем IMP?
Заводим на базе, где будет сравнение, табличное пространство с nologging (на случай, если у существующих force logging, да и удалять TS проще), делаем по db-link:
CREATE TABLE BBT_COPY NOLOGGING AS SELECT * FROM BIG_BILLING_TABLE@REMOTE_HOST
И на паримся с exp/imp.

Небольшое уточнение - если в табличке нету LONG


SQL> drop table kkk_long;

Table dropped

SQL> create table kkk_long(id number,l long);

Table created

SQL> create table kkk_long_clob as select * from kkk_long;

create table kkk_long_clob as select * from kkk_long

ORA-00997: illegal use of LONG datatype

SQL> create table kkk_long_clob as select id,to_lob(l) ll from kkk_long;

Table created

SQL> 

P.S. LONG в таблицах биллинга - это сильно.
Тем более, что какое-либо сравнение делать по LONG...
1 июн 06, 15:39    [2730689]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
Alexey Yatsenko
Member

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

Берем PL/SQL Developer версии не ниже 7.0, идем в меню Tools, пункт Compare Table Data. Он сгенерирует скрипт для insert/update/delete отличающихся строк.
Естественно, для успешного сравнения необходимо наличие primary key в обеих таблицах.
1 июн 06, 18:09    [2731689]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8553
Alexey Yatsenko

Берем PL/SQL Developer версии не ниже 7.0, идем в меню Tools, пункт Compare Table Data. Он сгенерирует скрипт для insert/update/delete отличающихся строк.
Естественно, для успешного сравнения необходимо наличие primary key в обеих таблицах.


Спорту (или сексу ?) мало. Да и сравнение через клиента двух баз (БОЛЬШИХ) даст такой SQL compare text на выходе, что PL/SQL Developer - как всегда - скромно умрет от объемов.
1 июн 06, 20:08    [2732127]     Ответить | Цитировать Сообщить модератору
 Re: сравнение двух биллинговых БД  [new]
grexhide
Member [заблокирован]

Откуда: Страна непреодолимых противоречий
Сообщений: 8553
mcureenab

3. Твоё конструктивное предложение "серией из двух LEFT OUTER JOIN" на больших таблицах скорее всего не имеет шансов реализоваться в разумные сроки. Любой JOIN будет выполняться значительно дольше, чем сортировка и не факт, что TEMPа хватит.

С чего бы это вдруг ? Процесс сортировки двух меганеподьемных таблиц (мощность кортежей - примерно одинакова) - будет более эффективен (да и вообще достижим), чем пресловутый доступ в виде Nested Loop ?

Тоже самое - касается и очень любимой некоторыми типа-DBA схемы HASH JOIN - на каком этапе у нас в данном случае умрет построение хеша в TEMPе?

mcureenab

4. Там где есть место для двух БД, скорее всего найдётся место ещё для их копии (в смысле для TEMP).


Давайте создадим TEMP на сотню гигабайт. И дальше что ?

----

А вот насчет частями (секциями, партициями) - согласен. Едея - вполне и очень даже разумная. Тут - действительно - и HASH JOIN в руки, да и db_link - будет уже совсем не страшен (который, признаться, в случае NL - мягко говоря - не пройдет... даром ?).
1 июн 06, 20:17    [2732136]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Oracle Ответить