Две базы

Ygor
Дата: 24.03.2011 00:36:39
Как сравнить таблицы в разных базах. Думаю есть возможность, жаба это как то делает.
Подойдет любое рациональное решение (скрипт, процедура...), что бы не ганять дампы.
AmKad
Дата: 24.03.2011 00:43:24
Ygor,

Если не хочется делать сравнение с помощью SQL, то есть PL/SQL: DBMS_COMPARISON
Ygor
Дата: 24.03.2011 00:47:58
AmKad,

ну не то что не хочется, скорее не умеется )))
Ygor
Дата: 24.03.2011 00:49:48
и у меня 10-ка
Ygor
Дата: 24.03.2011 01:11:00
AmKad,

простите, может я что то недопонимаю, а разве можно с помощью простого sql-я
сравнить таблицы в двух разных базах (не схемах)?
Alexander Ryndin
Дата: 24.03.2011 01:14:57
Ygor
AmKad,

простите, может я что то недопонимаю, а разве можно с помощью простого sql-я
сравнить таблицы в двух разных базах (не схемах)?
Можно, но всегда удобно. Есть базы рядышком стоят и не сильно заботитесь о скорости, то dblink и SELECT MINUS. Есть еще специальный инструмент для этих задач - Veridata.
Взлетает и настраивается ну очень легко и гибко.
AmKad
Дата: 24.03.2011 01:20:16
Ygor,

Да, если с одной на другую есть dblink. Жаба, похоже, сравнивает в двух режимах
1) DDL - DBMS_METADATA
2) DML - Для таблиц
+ с такой структурой
 CREATE TABLE "MY_USER"."DATA" 
   (	"ID" NUMBER, 
	"D" VARCHAR2(100), 
	 CONSTRAINT "DATA#PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" 

+ генерит скрипт
Select * from
  (
    select 'MY_USER.DATA' "Row Source", a.* from
    (
select /*+ FULL(Tbl1)  */
       ID, D
from   MY_USER.DATA Tbl1
minus
select /*+ FULL(Tbl2)  */
       ID, D
from   MY_USER.DATA1 Tbl2

     ) A
    union all
    select 'MY_USER.DATA1', b.* from
    (
select /*+ FULL(Tbl2)  */
       ID, D
from   MY_USER.DATA1 Tbl2
minus
select /*+ FULL(Tbl1)  */
       ID, D
from   MY_USER.DATA Tbl1

     ) B
  )
Order by 1

Так что ничего сверхъестественного.
Ygor
Дата: 24.03.2011 01:33:58
AmKad,

ОК!
orawish
Дата: 24.03.2011 01:42:32
вообще, если вопрос в том, чтобы не список отличающихся строк найти, а сам факт совпадения/расхождения данных, то бывает достаточно сравнить хеш