Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » СУБД Oracle (Оракл - для поиска:)).

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

bandyn



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lYY
 
Я понимаю что не выполнился!
 
В чем может быть проблема?

Всего записей: 394 | Зарегистр. 18-11-2004 | Отправлено: 17:54 05-02-2007
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bandyn
Смотри журнал создания базы... (сходу не скажу где он создается) Там должны быть ошибки...
Так же можно посмотреть alert.log - возможно и там будут зацепки...
У тебя сервер на линухе или под виндой?
Я бы пересоздал starter DB - а дальше смотреть по ситуации...

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 18:05 05-02-2007
slaj1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bandyn
vshersh
обычно логи создания базы лежат в :\oracle\admin\mybase\create

Всего записей: 913 | Зарегистр. 23-06-2003 | Отправлено: 18:32 05-02-2007
alexsob

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
royt
В триггере Before в autonomus-процедуре в лог-таблицу можно заносить primary key отслеживаемой таблицы, в триггере After а в процедуре, фиксирующей факт изменений, искать строку с данным primary key и изменять значения с "Попытка..." на "Изменение...".
Возможны нюансы, но, в принципе, должно работать.

Всего записей: 124 | Зарегистр. 28-02-2005 | Отправлено: 06:48 06-02-2007
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexsob
Цитата:
...можно заносить primary key отслеживаемой таблицы
тогда надо будет вписывать еще имя или какой-то другой уникальный id отслеживаемой таблицы (это в случае, если в одной таблице-логе будут отслеживаться разные таблицы - ведь значения их primary key могут пересекаться). Соответственно, при поиске такой записи в логе (во время работы триггера "after") придется использовать уже два поля, что в какой-то степени еще увеличивает время на отработку триггера. Это нюансы, но все же... Хотелось найти способ каким-то образом уникально идентифицировать отслеживаемую запись или глобальную (пользовтаельскую) транзакцию одним значением относительно всей схемы (а не только внутри таблицы). Пдозреваю, что у транзакции должен быть такой id (т.е. который можно узнать внутри как триггера "before", так и "after" - причем в обоих случаях этот id по идее должен быть одним и тем же).
 
А вот идея изменять вместо удалять - полезна, как то не подумал, спасибо за подсказку.

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 14:37 07-02-2007
alexsob

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
royt

Цитата:
в какой-то степени еще увеличивает время на отработку триггера

Так ведь можно и проиндексировать лог-таблицу по двум полям либо использовать одно поле, в котором будет что-то типа ТАБЛИЦА/PRIMARY_KEY. Индекс, разумеется, тоже будет нужен.
А насчет ID транзакции, то, он, конечно есть, но:
1. Зарыт где-то глубоко и добраться до него если и возможно через внутренние представления, то время доступа к ним куда больше, чем время поиска по индексированному столбцу.
2. Этот номер вообще не нужен, т.к. транзакция включает в себя изменение не только одной строки, в вообще все изменения всех строк во всех таблицах до commit.
 

Всего записей: 124 | Зарегистр. 28-02-2005 | Отправлено: 09:50 08-02-2007
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexsob

Цитата:
Так ведь можно и проиндексировать лог-таблицу
ну это само собой... просто хотелось бы иметь минимум индексов по этой таблице, ну т.е. все в целях оптимизации.
 

Цитата:
Зарыт где-то глубоко и добраться до него если и возможно через внутренние представления, то время доступа к ним куда больше, чем время поиска по индексированному столбцу.
Неужели действительно только через представления? Ведь этот ID должен лежать где-то "рядом", в контексте транзакции, постоянно находиться в памяти, и по идее может быть легко доступен по какой-нибудь команде/функции. Если только это не сделано по принципиальным соображениям, но я пока таких не могу придумать.
Слушайте, а может в Oracle вообще есть что-то типа TLS (thread local storage)? Тогда засунул бы сам туда UUID и получил то же самое (что и с transaction-id). В общем, будем еще рыть в этом направлении.
 

Цитата:
Этот номер вообще не нужен, т.к. транзакция включает в себя изменение не только одной строки, в вообще все изменения всех строк во всех таблицах до commit
Да, это тоже понятно конечно.
Но на самом деле неплохо было бы иметь id "пользовательской" транзакции в любом случае - тогда легче логически объединить все изменения одной транзакции в одно и показать в логе как единую операцию.
 
Добавлено:
вдогонку, есть оказывается такой
DBMS_TRANSACTION.LOCAL_TRANSACTION_ID
- уникален относительно инстанса, для моей задачи этого пока достаточно

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 08:31 09-02-2007 | Исправлено: royt, 08:59 09-02-2007
bandyn



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vshersh
Сервер у меня IBM System p5-520. ОС - AIX 5.3. ORACLE 9.2
 

Цитата:
Я бы пересоздал starter DB

А как пересоздать? Я в ORACLE новичок.

Всего записей: 394 | Зарегистр. 18-11-2004 | Отправлено: 00:53 11-02-2007 | Исправлено: bandyn, 00:59 11-02-2007
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bandyn
Я не уверен, что у меня достаточно опыта для того чтобы полностью проконсультировать, как это сделать... Тем более я сталкивался с Oracle под серверами с ОС Linux и Windows
Но может быть поможет эта статья...

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 20:03 12-02-2007
bandyn



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lYY
 

Цитата:
1. Оракл стоит, база создана, все работает и ты решил создать еще одну базу на том же сервере.  
- как делаешь?

 
Да оракл стоит и база. Прислали новую базу с инструкцией по установке. Первый же скрип запарывается. см.выше

Всего записей: 394 | Зарегистр. 18-11-2004 | Отправлено: 14:50 13-02-2007
oid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Други мои!
Вопрос для тех, кто может реально помочь.
Имеет быть система, построенная по схеме "звезда" из 8 серверов Ора-10Г. 7 серверов филиалов и один логирующий определённую инфу. Между Ф(илиал) и Ц(ентр) поднят приват ДБлинк (7 штук), который обеспечивает обмен инфой.  
Так вот проблема в том, что даже когда данные не передаются - загрузка канала 100%.
Подскажите, что можно сделать в данной ситуации. Оперативный обмен просто необходим, т.к. хранить копии 7 баз на каждом сервере - извращение.

Всего записей: 106 | Зарегистр. 17-09-2004 | Отправлено: 10:46 22-03-2007
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопрос:
Есть запрос, который возвращает нное кол-во строк, можно ли сделать так, чтобы значение п столбцам просуммироваись и вывелась всего одна строка?

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 15:35 26-03-2007
slaj1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dene14
тебя спасет функция sum

Всего записей: 913 | Зарегистр. 23-06-2003 | Отправлено: 16:34 26-03-2007
kvadm

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Непонятки с ролями. Запросы

Код:
select * from dba_role_privs where grantee = 'ABC' order by 2

и

Код:
select * from USER_ROLE_PRIVS order by 2

выдают один и тот же список ролей у ABC.
 
Однако когда логинюсь с ABC и выдаю

Код:
select * from SESSION_ROLES order by 1

то получаю гораздо больший список с ролями невесть октуда взявшимися. Роли грантнутые на роли проверил - не то. Откуда ж берутся лишние роли в SESSION_ROLES???

Всего записей: 53 | Зарегистр. 09-08-2005 | Отправлено: 18:16 30-03-2007 | Исправлено: kvadm, 18:19 30-03-2007
lYY

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да и нормально это, у меня так же.
Если обычный юзер - результаты запросов совпадают, а если админ, то 3й запрос выдает больше.

Всего записей: 138 | Зарегистр. 22-07-2004 | Отправлено: 08:25 02-04-2007
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите пожалуйста сформировать запрос...
Проблема в следующем:
Есть таблица с колонками Truck, Fuel, Date1, Date2 (Date1 - Date2 это временной отрезок) и есть значение SDate. Так вот нужно чтобы SDate не попадало в отрезок Date2 - Date1 (именно так, имеется ввиду начало следующего отрезка) и строки окончания отрезка...
 
Сам пытаюсь решить через допу... и всё равно безуспешно...
 
SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)
 
SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1)
 
но не знаю как объединить эти два селекта, чтобы выбирались только те TRUCK1 которые получает второй селект... Подскажите как довести хотя бы такое решение, но т.к. оно не идеальное и у кого-то назреет более правильное решение поставленной проблемы - буду весьма признателен...

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 19:48 05-04-2007
lYY

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dene14
 
Я, например, ничего не понял.
Может так:
(SDATE < Date1 or SDATE > Date2)
- выберет все строки, кроме диапазона Date1 - Date2  
?
 
А твои запросы:
1. Выбирает строки, где Date2 попадает в диапазон (SDste-5) - SDate
2. Выбирает строки, где Date1 больше (SDste-1)
- нарисуй на бумаге шкалу дат и посмотри, что получается.
 
 
 
  D1                             SD-5                   D2                  SD
---x---------------------o------------------x--------o-----o----
                                                                        SD-1

Всего записей: 138 | Зарегистр. 22-07-2004 | Отправлено: 08:42 06-04-2007 | Исправлено: lYY, 08:51 06-04-2007
dene14



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Date1              :SDate - 5                    Date2      :SDate
--x--------------------x------------------------x-----------x--
                                                         :SDate
                                                                Date1              :SDate - 5                     Date2      :SDate
                                                                 --x--------------------x------------------------x-----------x-----------x--
 
 
Это два подряд идущих временных отрезка для одного Truck. Так вот интересует выборка данных из первой строки, если значение Date1 второй строки равно или больше чем SDate или Date2 .
 
Или помогите сделать запрос из 2х моих:
SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)
 
SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1)  
 
нужно чтобы первый селект имел ещё фильтр по тем TRUCK1, которые возвращает второй селект и всё это выполнялось в одном запросе... помогите плиз...

Всего записей: 287 | Зарегистр. 06-04-2005 | Отправлено: 11:20 06-04-2007 | Исправлено: dene14, 14:11 06-04-2007
tavz



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dene14
 
я не совсем разобрался в необходимом результате но разве нельзя оба условия поставить в одно выражение:
 
SELECT * FROM ROUTEPAPER RP WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)  AND (RP.DATE1 > :SDATE - 1)
 
ну или же если это дает неверный результат то просто в тупую объеденить эти два селекта:
 
SELECT *  
   FROM ROUTEPAPER RP  
 WHERE (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE)  
     AND RP.TRUCK? IN (SELECT RP2.TRUCK1  
                                      FROM ROUTEPAPER RP2
                                    WHERE (RP2.DATE1 > :SDATE - 1) )

Всего записей: 8 | Зарегистр. 02-02-2006 | Отправлено: 14:49 06-04-2007
lYY

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dene14
 

Код:
 
SELECT * FROM ROUTEPAPER RP  
WHERE  
 (RP.DATE2 BETWEEN (:SDATE - 5) AND :SDATE) and
  RP.TRUCK in (SELECT RP.TRUCK1 FROM ROUTEPAPER RP WHERE (RP.DATE1 > :SDATE - 1)  )  
 

 
(меня опередили )
или еще вариант
 

Код:
 
SELECT * FROM ROUTEPAPER RP1,  ROUTEPAPER RP2
where
 :SDATE BETWEEN RP1.DATE2 AND RP2.DATE1 and
 RP1.TRUCK = RP2.TRUCK and
 RP2.DATE1 > RP1.DATE2
 

 
что-то типа такого, только не очень универсально,
а для усовершенствования запроса  - Quest Optimizer

Всего записей: 138 | Зарегистр. 22-07-2004 | Отправлено: 14:50 06-04-2007 | Исправлено: lYY, 14:51 06-04-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » СУБД Oracle (Оракл - для поиска:)).


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru