Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» СУБД Oracle (Оракл - для поиска:)).

Автор: Bluk
Дата сообщения: 31.12.2008 07:19
Друзь попмогите занелся изучение PL\SQL но очень не лехко может кто подскажет что нужно для чайника имено по PL\SQL. подскажите статьи может есть или книги толька просба не завороченные чтобы можно было понять и было написано для начинаюшего а не для уже овладевшего языком.
Спасибо заранее.
Автор: GrHnd
Дата сообщения: 11.01.2009 14:01
Книжки по PL\SQL можно взять здесь:
http://c-books.info/books/load.php?ty=or
Автор: MrZeRo
Дата сообщения: 12.01.2009 15:39
Bluk
Хороший автор Скотт Урман, пишет подробно, с примерами (примеров много!).
Автор: Kmich
Дата сообщения: 21.01.2009 06:36
Есть такой запрос
SELECT x1.*,pr1.* FROM
(select id, name, price from table1
union
select id, name, price from table2) X1,
(select id, kod, price from table3) PR1
where x1.id=pr1.id(+) and x1.price=pr1.price(+)
order by 3,4
этот запрос выполняется за 13 секунд и выбирает около 1200 строк.

подзапрос x1 выполняется за 1.5 сек и подзапрос pr1 за 0,05 сек.

Вопрос: от чего время выполнения всего запроса 13 секунд?
Если не ошибаюсь Oracle делает выборку pr1, затем делает выборку pr1 и в памяти проводит соединение.
Може т кто подскажет чего можно попробывать, мне кажется что что-то с параметрами в базе.




Автор: lYY
Дата сообщения: 21.01.2009 07:00
Kmich

Цитата:
в памяти проводит соединение
- вот на это не индексированное соединение и уходит куча времени.
Смотри план запроса.
Автор: Kmich
Дата сообщения: 21.01.2009 07:29
lYY
так там всего 1200 строк.
у меня подобные запросы с 10000-30000 строками так еще и по 4-5 полям сливает и то быстрее.

а в этом никак не могу добиться чтобы побыстрее работал.
Автор: vshersh
Дата сообщения: 21.01.2009 10:35
Kmich
Ты бы план запроса привел - тогда может кто-нить и посмотрел бы в чем затык...
А вобще такими вещами ребята на склру любят заниматься
Автор: vshersh
Дата сообщения: 21.01.2009 14:06
[more=Вот]
Код: SQL> begin
2 for i in 1 .. 3 loop
3 begin
4 execute immediate ('drop table table' || i);
5 exception
6 when others then
7 null;
8 end;
9 end loop;
10 end;
11 /

PL/SQL procedure successfully completed.

SQL> create table table1(id number, name varchar2(100), price number)
2 /

Table created.

SQL> create table table2(id number, name varchar2(100), price number)
2 /

Table created.

SQL> create table table3(id number, name varchar2(100), kod varchar2(100), price number)
2 /

Table created.

SQL> declare
2 num_rows integer := 5000;
3 begin
4 dbms_random.seed(TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS'));
5 insert into table1
6 (id, name, price)
7 select ROWNUM,
8 'name1_value_' || ROWNUM,
9 trunc(dbms_random.value(1, 1000))
10 from all_objects
11 where rownum < num_rows;
12
13 insert into table2
14 (id, name, price)
15 select ROWNUM,
16 'name2_value_' || ROWNUM,
17 trunc(dbms_random.value(1, 1000))
18 from all_objects
19 where rownum < num_rows;
20
21 insert into table3
22 (id, name, kod, price)
23 select ROWNUM,
24 'name3_value_' || ROWNUM,
25 'kod3_value_' || ROWNUM,
26 trunc(dbms_random.value(1, 1000))
27
28 from all_objects
29 where rownum < num_rows;
30 end;
31 /

PL/SQL procedure successfully completed.

SQL> commit
2 /

Commit complete.

SQL>
SQL> set autotrace traceonly explain statistics
SQL> set timing on
SQL>
SQL> SELECT x1.*, pr1.*
2 FROM (select id, name, price
3 from table1
4 union
5 select id, name, price from table2) X1,
6 (select id, kod, price from table3) PR1
7 where x1.id = pr1.id(+)
8 and x1.price = pr1.price(+)
9 order by 3, 4
10 /

9998 rows selected.

Elapsed: 00:00:00.05

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=21315 Card=609512 Bytes=95083872)
1 0 SORT (ORDER BY) (Cost=21315 Card=609512 Bytes=95083872)
2 1 HASH JOIN (RIGHT OUTER) (Cost=226 Card=609512 Bytes=95083872)
3 2 TABLE ACCESS (FULL) OF 'TABLE3' (TABLE) (Cost=9 Card=4999 Bytes=389922)
4 2 VIEW (Cost=206 Card=9998 Bytes=779844)
5 4 SORT (UNIQUE) (Cost=206 Card=9998 Bytes=779844)
6 5 UNION-ALL
7 6 TABLE ACCESS (FULL) OF 'TABLE1' (TABLE) (Cost=8 Card=4999 Bytes=389922)
8 6 TABLE ACCESS (FULL) OF 'TABLE2' (TABLE) (Cost=8 Card=4999 Bytes=389922)




Statistics
----------------------------------------------------------
13 recursive calls
0 db block gets
203 consistent gets
0 physical reads
0 redo size
342778 bytes sent via SQL*Net to client
7830 bytes received via SQL*Net from client
668 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
9998 rows processed
Автор: Kmich
Дата сообщения: 22.01.2009 07:05
Временно сделал таблицу (все равно там данные меняются раза 3-4 в год) из подзапроса PR1 теперь выполняется за 2.1 сек (тетки радуются ).

Получается что oracle каждый раз выполняет подзапрос pr1 при слиянии?
Автор: Dukat
Дата сообщения: 26.01.2009 09:56
Ситуация: в таблице с данными сотрудников есть столбец "Телефоны" varchar2, который Check'ом надо ограничить следующим образом: вводить можно только цифры, до трех телефонов, телефоны разделяются символом ';'.
Подскажите пожалуйста, как можно по-людски написать такое ограничение?
Автор: vshersh
Дата сообщения: 26.01.2009 10:55
Dukat
Если по людски - то пиши не чек а stored procedure в котоой реализовуй необходимую логику. И все модификации только через эту процедуру.
Второй вариант - в триггере.
Если все-таки край - и надо только чеком - то посмотри в сторону рег. выражений (версия 10+)
Но я бы всерьез рассмотрел возможность варианта с процедурой
Автор: Dukat
Дата сообщения: 26.01.2009 21:47
vshersh
Будь моя воля, я бы выбрал триггер, но я пока всего лишь студент, выполняю лабораторное задание. Надо использовать именно check. Версия 9i.
Автор: Bluk
Дата сообщения: 28.01.2009 08:25

Цитата:
Книжки по PL\SQL можно взять здесь:
http://c-books.info/books/load.php?ty=or

Спсибо огромное.
Автор: GrHnd
Дата сообщения: 30.01.2009 10:03
omm
Ранее были прекрасние ответы по лицензорованию СУБД Oracle!

А нельзя ли также подробно рассказать про лицензирование Oracle Application Server?
Автор: rkhodjaev
Дата сообщения: 04.02.2009 12:03
Ребята,кто-нибудь пользуется с ORACLE Express Edition для 10g? У меня кое-какие то траблы возникли,не знаю как решать. Или есть у кого-нибудь книжка для Express Edtion? Буду очень рад.
Автор: vavavol
Дата сообщения: 05.02.2009 11:10
rkhodjaev

Цитата:
Ребята,кто-нибудь пользуется с ORACLE Express Edition для 10g? У меня кое-какие то траблы возникли,не знаю как решать. Или есть у кого-нибудь книжка для Express Edtion? Буду очень рад.


Что именно интересует?
Автор: omm
Дата сообщения: 05.02.2009 21:29
GrHnd

Цитата:
лицензирование Oracle Application Server?

Для AS много общего с DB.

Также есть метрики - по "пользователям" или по "процессорам".

Методика расчёта количества "процессоров" такая же как для БД, т.е. для многоядерных процессоров считается количество ядер и умножается на понижающий коэффициент: для процессоров Intel и AMD он равен 0.5, для Sun T1 - 0.25, для остальных - 0.75. Для одноядерных процессоров коэффициенты не применяются.
Количество лицензий = количество посчитанных вот таким вот специальным образом процессоров.

"Пользователь" - human или non-human operated device, использующее программы, установленные на один или несколько серверов, вне зависимости от того, использует ли human или non-human operated device эти программы в конкретный момент. Т.е., если у Вас 20 раб. мест, трёхсменный режим работы сотрудников по 8 часов, по 20 в каждой смене (60 всего), и при этом какие-нибдь 20 штук "разливающих датчиков" используют софт от Oracle, то Named Users Plus лицензий Вам нужно 80 штук. При этом можно использовать N сервров, но нужно помнить, что есть т.н. "процессорные минимумы", это когда на один "процессор" нужно иметь не меньше определенного количества NUP-лицензий.

С метриками вроде бы разобрались, теперь к AS..

Сейчас Oracle продает то, что продавал раньше - Internet Application Server, а также "новое" - WebLogic Server

Начнём со старенького.
iAS Standard Edition One - может быть лицензирован на серверы с количеством сокетов (пустых или полных ) не больше двух. При этом, если покупаются Named Users Plus (NUP), то минимум - 5 штук, но если используемая программа - одна, используется на однопроцессорной машине и всего одним пользователем, то этот минимум (5) можно не соблюдать.
iAS Standard Edition - ограничений по сокетам нет, но тот самый "процессорный минимум" уже 10 штук (в отличие от 5 для SE1), но уже не "вообще", а на один "процессор". Также, как и для SE1, если используемая программа - одна, используется на однопроцессорной машине и всего одним пользователем, то этот процессорный минимум (10) можно не соблюдать.
iAS Enterprise Edition - ограничений по сокетам нет, "процессорный минимум" 10 штук на "процессор". Также, как и для SE1/SE, если используемая программа - одна, используется на однопроцессорной машине и всего одним пользователем, то этот процессорный минимум (10) можно не соблюдать.

Теперь новенькое.
WebLogic Server Standard Edition и WebLogic Server Enterprise Edition -ограничений по сокетам нет, "процессорный минимум" 10 штук на "процессор" и соблюдается всегда, даже когда используемая программа - одна, используется на однопроцессорной машине и всего одним пользователем. При этом для Standard не доступен Clustering.
Автор: Ashi
Дата сообщения: 06.02.2009 11:33
Если у тебя оракл < 11g то не советую так делать. Индекса по этим строчкам не построешь. И потом если у тебя будет несколько тысяч записей в таблице, то телефон конкретный ты будешь искать минут 20. Лучше создать отдельный справочник.

А проверку лучше реализовывать через процедурку. и подсовывай через триггер. Потому как чек не даст такого колличества возможностей

Добавлено:

Цитата:
Прошу совета: Oracle 9 под AIX - для него работающее приложение. Есть вся документация по описанию таблиц баз. До этого база велась в FoxPro 2.5
Как из одной таблицы - dbf - FoxPro взять нужную информацию в базу Oracle под AIX. (есть конверторы баз, ODBC - driver, но это все, если я не ошибаюсь работает только под Windows), а тут что делать? Установить базу в Oracle под Windows сразу так быстро не получится, т.к нужно с нуля создавать скелет оригинальной базы для Windows, что требует работы ручками, а я начал работать с Oracle только несколько дней, а вот конвертировать инфу в базу под AIX - нужно срочно иначе меня повесят...-)))


Сюда



Автор: rkhodjaev
Дата сообщения: 09.02.2009 08:15
vavavol

Цитата:
Что именно интересует?

Хотел с готовыми таблицами поработать через Applications.Создал Application и коннектился на таблицу Employee. Все нормально, но вот не возможно добавить новые row....

Автор: rkhodjaev
Дата сообщения: 07.04.2009 09:19
vavavol
Спасибо тебе за помощь.

Подходящую тему нашел и решил спросит здесь, так как изучаю/работаю с ORACLE 10g.
А кто-нибудь пользуется, каким-нибудь продуктом для проектирования информационных систем и для создания логической модели данных?
Например:
CA ERwin Data Modeler
Rational Rose
Enterprise Architect
Oracle JDeveloper
Oracle Designer
Sybase PowerDesigner
DeZign от Datanamic
Embarcadero ER/Studio

Который из них более подходящий и стоит ли ими пользоваться, или же продолжить создание модели на голове/бумаге?
Автор: GrHnd
Дата сообщения: 16.04.2009 16:35
rkhodjaev
Использовал Rational Rose для создания логической модели данных, но думаю это в другой топик!
Автор: Dukat
Дата сообщения: 21.04.2009 18:36
Изучаю администрирование девятки. SYS'ом создал verify_function (на основе стандартной), поставил на профиль пользователя. И вот когда начал ее тестить, оказалось, что DBA пароль юзеру меняет, функция срабатывает как надо. Но если сам пользователь пытается сменить свой пароль, то вылетает что-то вроде "missing or invalid password(s)". В чем может быть дело?
Автор: rkhodjaev
Дата сообщения: 22.04.2009 15:01
GrHnd
Вы имеете виду это ? Или это другое.
Автор: MrRamen
Дата сообщения: 28.04.2009 07:46
Oracle Database 10g Express Edition
Объясните пожалуйста, как использует эта версия многоядерные процессоры. Распознает ли она AMD Opteron 280 "одним процессором" и будет ли использовать оба ядра?
Организация планирует использовать программу, в качестве основы которой используется OracleXE и у меня появился вопрос, на каком процессоре строить сервер БД.
Имеются 2 платформы, одна на двухядерном AMD Opteron 280 (2х2,4Ghz), вторая на одноядерном Pentium 4 3.0E (который стабильно работает и с разгоном до 3,4Ghz).
И если Oracle XE использует лишь одно ядро, то не окажется ли так, что производительность второй платформы будет выше производительности первой...
Заранее благодарю за ответ.
Автор: eldo
Дата сообщения: 29.04.2009 21:22
Подскажите, пытаюсь сделать экспорт/импорт БД со стандарта на экспресс.
Опыта ноль в оракле, так что наверное делаю не то что надо.
на исходной базе запустил
exp system/pass file=my.dmp full=y
потом в экспресе запустил
imp system/pass file=c:\my.dmp full=y ignore=y

но во-первых в процессе были ошибки, во-вторых у меня создалось впечатление что база туда не легла, хотя вроде бы фалы посоздавала. может надо создать базу предварительно в оракле или еще что-то.
заранее спасибо
Автор: slaj1
Дата сообщения: 30.04.2009 10:40
eldo
я бы посоветовал делать импорт не full а только тех схем, которые вам необходимы
Автор: Ashi
Дата сообщения: 12.05.2009 16:39

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


Версии исходного и целевого релизов оракла какие? Потом, присоединиюсь к мнению slaj1 переносить лучше посхемно. И лог с ошибками привидите пожалуйста
Автор: well2
Дата сообщения: 03.06.2009 12:05
У меня вопрос по установке сервера БД Oracle 10g
Что нужно сделать, чтобы на сервере устанавливался Enterprise Manager? При типичной установке он не устанавливается.
Автор: Kmich
Дата сообщения: 05.06.2009 08:31
well2
если не ошибаюсь то перед созданием новой базы данных надо установить и запустить listener.
Автор: well2
Дата сообщения: 05.06.2009 09:34
Listener создаётся в процессе установки или NET менеджером, но по-моему на установку Enterprise Manager он не влияет.

Страницы: 1234567891011121314151617181920212223

Предыдущая тема: JET и Excel


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.