Конференция "Базы" » разный результат запросов напрямую к Ora и через линк [D7, MySQL]
 
  • OW © (25.05.11 17:38) [0]
    Пишу запрос к БД MSSQL

     SELECT*
     FROM openquery (SDMRD, '  --SDMRD - линк на oracle-сервер
    select *
    from SDMRD.OMS_EXPORT_LOG EL
    where EL.EXPORT_END_DATE IS NOT NULL
     ');
    1274 rows

    пишу к Oracle
    select *
    from SDMRD.OMS_EXPORT_LOG EL
    where EL.EXPORT_END_DATE IS NOT NULL
    1311 записей выбрано

    и так по нескольку раз - оба результата со временем меняются (+ одна две записи в минуту, это нормально, т.к. работа идет,
    НО!
    через линк их стабильно меньше на 50 примерно.
    )

    какая-то известная вещь/трабла?
  • OW © (25.05.11 17:38) [1]
    MySQL - случайно выбрал
  • OW © (25.05.11 17:40) [2]
    EL.EXPORT_END_DATE - тип столбца в oracle DATE, nullable
  • Кщд (26.05.11 07:35) [3]
    1. Убедиться, что db_link и linked server настроены на одну и ту же базу/схему;
    2. Заменить * на count(1), результаты сравнить;
    3. Привести ddl создания таблицы;
    4. create table tmp_OMS_EXPORT_LOG as select * from OMS_EXPORT_LOG. Повторить (2) для новой таблицы.
  • OW © (26.05.11 08:52) [4]
    1) да
    2) также
    3) forward
    4) одинаково

    3)
    CREATE TABLE "OMS1"."OMS_EXPORT_LOG"
      ( "ID" NUMBER NOT NULL ENABLE,
    "REQUEST_ID" NUMBER NOT NULL ENABLE,
    "ROLE_ID" NUMBER NOT NULL ENABLE,
    "EXT_SYSTEM_ID" NUMBER NOT NULL ENABLE,
    "EXPORT_START_DATE" DATE NOT NULL ENABLE,
    "EXPORT_END_DATE" DATE,
    "IMPORT_START_DATE" DATE,
    "IMPORT_END_DATE" DATE,
    "WORKING_ID" NUMBER,
     CONSTRAINT "EXPORT_LOG_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)
     TABLESPACE "USERS"  ENABLE,
     SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,
     SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS,
     SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS
      ) 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)
     TABLESPACE "USERS" ;

     CREATE UNIQUE INDEX "OMS1"."EXPORT_LOG_PK" ON "OMS1"."OMS_EXPORT_LOG" ("ID")
     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)
     TABLESPACE "USERS" ;

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" ADD CONSTRAINT "EXPORT_LOG_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)
     TABLESPACE "USERS"  ENABLE;

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" MODIFY ("ID" NOT NULL ENABLE);

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" MODIFY ("REQUEST_ID" NOT NULL ENABLE);

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" MODIFY ("ROLE_ID" NOT NULL ENABLE);

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" MODIFY ("EXT_SYSTEM_ID" NOT NULL ENABLE);

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" MODIFY ("EXPORT_START_DATE" NOT NULL ENABLE);

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;

     ALTER TABLE "OMS1"."OMS_EXPORT_LOG" ADD SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS;
  • OW © (26.05.11 08:56) [5]

    > 1. Убедиться, что db_link и linked server настроены на одну
    > и ту же базу/схему;

    хотя, нет
    для линка есть специальный пользователь SDMRD, у него нет своих таблиц

    у него есть
     GRANT DELETE ON "OMS1"."OMS_EXPORT_LOG" TO "SDMRD";

     GRANT INSERT ON "OMS1"."OMS_EXPORT_LOG" TO "SDMRD";

     GRANT SELECT ON "OMS1"."OMS_EXPORT_LOG" TO "SDMRD";

     GRANT UPDATE ON "OMS1"."OMS_EXPORT_LOG" TO "SDMRD";
  • Кщд (26.05.11 09:09) [6]
    >OW ©   (26.05.11 08:56) [5]
    как согласуется:
    >для линка есть специальный пользователь SDMRD, у него нет своих таблиц

    с:

    select *
    from SDMRD.OMS_EXPORT_LOG EL
    where EL.EXPORT_END_DATE IS NOT NULL



    ?
  • Кщд (26.05.11 09:11) [7]
    >OW ©   (26.05.11 08:52) [4]

    >2) также
    также - результаты равны?

    >4) одинаково
    одинаково - результаты равны?
  • OW © (26.05.11 09:38) [8]

    > как согласуется:
    > >для линка есть специальный пользователь SDMRD, у него нет
    > своих таблиц
    > с
    > select *
    > from SDMRD.OMS_EXPORT_LOG EL
    > where EL.EXPORT_END_DATE IS NOT NULL
    > ?


    у него есть гранты на эти таблицы. И данные видны.
    Но не все, получается


    > Кщд   (26.05.11 09:11) [7]

    да
    да
  • OW © (26.05.11 10:01) [9]
    похоже, опять из-за интерпретации NULL все..

    к MSSQL
     SELECT*
     FROM openquery (SDMRD, '
    select *
         from OMS_EXPORT_LOG EL
    where (EL.EXPORT_END_DATE IS NULL or EL.EXPORT_END_DATE = '''')
    ');
    21 запись

    к ORA
    select *
         from OMS_EXPORT_LOG EL
    where (EL.EXPORT_END_DATE IS NULL or EL.EXPORT_END_DATE = '')
    27 записей
  • OW © (26.05.11 10:10) [10]

    > or EL.EXPORT_END_DATE = ''

    не, это вообще ни к чему,
    просто is null - те же результаты
  • OW © (26.05.11 10:22) [11]
    MSSQL
     SELECT *  FROM openquery (SDMRD, ' select *   from OMS_EXPORT_LOG ');
     1304 записи
     EXEC ('select *  from OMS_EXPORT_LOG ') AT SDMRD;
     1304 записи

    ORACLE
     select * from OMS_EXPORT_LOG
     1346 записей

    пора админов грузить, это маразм какой то
  • Кщд (26.05.11 10:54) [12]
    >OW ©   (26.05.11 10:22) [11]
    темните
    в условиях: для линка есть специальный пользователь SDMRD, у него нет своих таблиц

    запрос:

    select *
    from SDMRD.OMS_EXPORT_LOG EL
    where EL.EXPORT_END_DATE IS NOT NULL

    не будет выполняться.

    Покажите реальные запросы и озвучьте инструмент(ы), из которого(ых) эти запросы выполняете.
  • Кщд (26.05.11 10:57) [13]
    >OW ©   (26.05.11 10:22) [11]
    ещё раз
    запрос

    select *   from OMS_EXPORT_LOG


    выполненный под ползователем Oracle SDMRD, вернет данные из таблицы, расположенной в схеме SDMRD, а не OMS1.

    каковы результаты на

    select *
    from OMS1.OMS_EXPORT_LOG EL
    where EL.EXPORT_END_DATE IS NOT NULL


    ?
  • OW © (26.05.11 12:33) [14]

    > Кщд   (26.05.11 10:54) [12]
    >
    > >OW ©   (26.05.11 10:22) [11]
    > темните

    нет. Все исходные данные привел правильные.
    http://zalil.ru/31124452
    За исключением тех, о которых не знал, а именно:

    Разобрался с вопросом, на самом деле.
    Там был на логон именно этого юзера повешен админами БД триггер, который менял одну переменную, которая участвует в полайсах запроса.
    т.е. некоторые записи для этого юзера были не видны.
  • OW © (26.05.11 12:40) [15]

    > одну переменную, которая участвует в полайсах запроса.

    ну не так, разумеется, а в полайсах на таблицу, но суть не меняется, именно ему,SDMRD, "секретные" записи, определенные неким полем в таблице, не доступны
  • Кщд (26.05.11 12:45) [16]
    либо на logon для пользователя SDMRD меняется текущая схема(на OMS1), либо на схеме SDMRD создан синоним для OMS_EXPORT_LOG.

    без вариантов.
  • OW © (26.05.11 12:47) [17]

    >  либо на схеме SDMRD создан синоним для OMS_EXPORT_LOG

    есть такое дело
 
Конференция "Базы" » разный результат запросов напрямую к Ora и через линк [D7, MySQL]
Есть новые Нет новых   [134431   +13][b:0][p:0.001]