Просторы интернета
19 Февраль 2015
Earlier
Вт, Июл 31, 2012
On our production servers we have simple function with result_cache, like this:
create or replace function f_rc(p_id number) return number result_cache
is
ret number;
begin
select t.val into ret from rc_table t where t.id=p_id;
return ret;
exception
when no_data_found then
[...]
Source: www.xt-r.comcreate or replace function f_rc(p_id number) return number result_cache
is
ret number;
begin
select t.val into ret from rc_table t where t.id=p_id;
return ret;
exception
when no_data_found then
[...]
Сб, Июл 21, 2012
Тестовая таблица:
create table tclob(c clob);
Что будет выведено кодом из нижеследующих блоков с rollback и без:
declare
cl1 clob;
cl2 clob;
cl3 clob;
cl4 clob;
begin
cl1:='1';
insert into tclob values(cl1) returning c into cl2;
[...]
Source: www.xt-r.comcreate table tclob(c clob);
Что будет выведено кодом из нижеследующих блоков с rollback и без:
declare
cl1 clob;
cl2 clob;
cl3 clob;
cl4 clob;
begin
cl1:='1';
insert into tclob values(cl1) returning c into cl2;
[...]
Сб, Июл 14, 2012
Теперь у нас полная семья - и доча и сын :)
Уррррррррраааааа! :) [...]
Source: www.xt-r.comУррррррррраааааа! :) [...]
Сб, Июн 30, 2012
Проблема эта в общем-то старая, но только сейчас благодаря книге "Oracle Core" Джонатана Льюиса удалось узнать в чем собственно проблема и справиться с ней.
Цитата из главы "Latches for lock":
If the enqueue resource is in place already, then pick a row from the relevant enqueue structure (x$ksqeq, [...]
Source: www.xt-r.comЦитата из главы "Latches for lock":
If the enqueue resource is in place already, then pick a row from the relevant enqueue structure (x$ksqeq, [...]
Ср, Июн 27, 2012
Увидев новые пару строк на 11.2.0.3 в списке хинтов(V$SQL_HINT), решил свести их описания в одну удобную заметку, попутно попытавшись разобраться в них.
Описание до конца еще не закончено, постараюсь сделать это на днях.
Cписок хинтов добавленных в 11g
NAMEINVERSEVERSIONFULL_OUTER_JOIN_TO_OUTERNO_FULL_OUTER_JOIN_TO_OUTER11.2.0.3 OUTER_JOIN_TO_ANTINO_OUTER_JOIN_TO_ANTI11.2.0.3TABLE_LOOKUP_BY_NLNO_TABLE_LOOKUP_BY_NL11.2.0.2USE_HASH_GBY_FOR_PUSHDOWNNO_USE_HASH_GBY_FOR_PUSHDOWN11.2.0.2XDB_FASTPATH_INSERTNO_XDB_FASTPATH_INSERT11.2.0.2APPEND_VALUESNOAPPEND11.2.0.1COALESCE_SQNO_COALESCE_SQ11.2.0.1CONNECT_BY_ELIM_DUPSNO_CONNECT_BY_ELIM_DUPS11.2.0.1[...]
Source: www.xt-r.comОписание до конца еще не закончено, постараюсь сделать это на днях.
Cписок хинтов добавленных в 11g
NAMEINVERSEVERSIONFULL_OUTER_JOIN_TO_OUTERNO_FULL_OUTER_JOIN_TO_OUTER11.2.0.3 OUTER_JOIN_TO_ANTINO_OUTER_JOIN_TO_ANTI11.2.0.3TABLE_LOOKUP_BY_NLNO_TABLE_LOOKUP_BY_NL11.2.0.2USE_HASH_GBY_FOR_PUSHDOWNNO_USE_HASH_GBY_FOR_PUSHDOWN11.2.0.2XDB_FASTPATH_INSERTNO_XDB_FASTPATH_INSERT11.2.0.2APPEND_VALUESNOAPPEND11.2.0.1COALESCE_SQNO_COALESCE_SQ11.2.0.1CONNECT_BY_ELIM_DUPSNO_CONNECT_BY_ELIM_DUPS11.2.0.1[...]
Пн, Июн 18, 2012Source: www.xt-r.com
Ср, Июн 13, 2012
В документации к dbms_random сказано: It will automatically initialize with the date, user ID, and process ID if no explicit initialization is performed.Из данной фразы не очевидно, какой "process id" будет использоваться для инициализации в случае параллельного выполнения, поэтому приведу наглядный пример, показывающий независимость генератора dbms_random от "process id" [...]
Source: www.xt-r.comПт, Май 18, 2012
Эта заметка посвящена известному факту о низкой производительности обработки исключений.
Да, действительно, обработка исключений достаточно медленна, однако, не стоит сразу же пытаться избегать их везде, где только можно, да еще и любыми способами. Например, часто вижу как их пытаются избегать даже в случаях поиска по первичному ключу c минимальной [...]
Source: www.xt-r.comДа, действительно, обработка исключений достаточно медленна, однако, не стоит сразу же пытаться избегать их везде, где только можно, да еще и любыми способами. Например, часто вижу как их пытаются избегать даже в случаях поиска по первичному ключу c минимальной [...]
Сб, Апр 28, 2012
Многие знают о том, что oracle при необходимости сам создает доменные типы, например, когда используют тип объявленный в пакете(до 11g их можно было увидеть в dba_objects с именем like 'PLSQL%').
Факт 1
Точно так же он поступает и при вызове агрегатной функции collect.
-- Сначала проверим есть ли [...]
Source: www.xt-r.comФакт 1
Точно так же он поступает и при вызове агрегатной функции collect.
-- Сначала проверим есть ли [...]
Сб, Апр 21, 2012
Начиная с 11.2.0.1 появилась новая строка "buffer sort" в планах с for update.
Пример:
DB11G/XTENDER> explain plan for
2 select *
3 from t_for_update
4 where
5 id=1
6 and dt [...]
Source: www.xt-r.comПример:
DB11G/XTENDER> explain plan for
2 select *
3 from t_for_update
4 where
5 id=1
6 and dt [...]
Сб, Апр 21, 2012
Давно хотел написать о минусах использования "a member of b" перед обычными старыми вариантами вроде a in (select column_value from table(b)).
Резюме: "member of" в sql не умеет хорошо работать с индексами и использовать его желательно только в pl/sql - в этом случае по производительности практически одинаков с собственной [...]Source: www.xt-r.com
Давно хотел написать о минусах использования "a member of b" перед обычными старыми вариантами вроде a in (select column_value from table(b)).
Резюме: "member of" в sql не умеет хорошо работать с индексами и использовать его желательно только в pl/sql - в этом случае по производительности практически одинаков с собственной [...]
Ср, Апр 18, 2012
Очередная задачка показалась мне интересной: Oracle очень плохо работает с временными таблицами(gtt - global temporary tables) в параллели.
Вообще у gtt в параллели в 11g куча ограничений, а до этого вообще запрещены:
10.2: Restrictions on Temporary Tables:
Parallel DML and parallel queries are not supported for [...]Source: www.xt-r.com
Очередная задачка показалась мне интересной: Oracle очень плохо работает с временными таблицами(gtt - global temporary tables) в параллели.
Вообще у gtt в параллели в 11g куча ограничений, а до этого вообще запрещены:
10.2: Restrictions on Temporary Tables:
Parallel DML and parallel queries are not supported for [...]
Вс, Апр 08, 2012
Используйте PL/Scope для анализа вашего PL/SQL кода
С момента первого релиза PL/SQL, Oracle предоставляет набор представлений позволяющих разработчику получать информацию о PL/SQL объектах. Эти представления помогают нам понимать и анализировать наш код. Oracle Database 11g предоставляет еще более мощный аналитический инструмент - PL/Scope, собирающий информацию обо всех идентификаторах в [...]
Source: www.xt-r.comС момента первого релиза PL/SQL, Oracle предоставляет набор представлений позволяющих разработчику получать информацию о PL/SQL объектах. Эти представления помогают нам понимать и анализировать наш код. Oracle Database 11g предоставляет еще более мощный аналитический инструмент - PL/Scope, собирающий информацию обо всех идентификаторах в [...]
Пн, Апр 02, 2012
Анализ сжатия производился на двух таблицах с количеством 12314345 и 9759284 записей и обьемом данных до сжатия 220 и 1080 мегабайт соответственно. Измерение производительности производилось командой select count(1) from table. Сервер базы данных версии 11.1.0.7 на операционной системе AIX.
До сжатия среднее время выполнения запросов составляло 17.69 и 13.9 [...]
Source: atyshenko.blogspot.comДо сжатия среднее время выполнения запросов составляло 17.69 и 13.9 [...]
Пн, Мар 26, 2012
Various techniques for querying and manipulating long columns. July 2010 (updated March 2012) [...]
Source: www.oracle-developer.netЧт, Мар 22, 2012
Сегодня очень удивился заметив, что вызов "username:=user;" и "select user into username from dual;" одинаковы по времени выполнения, в отличие от десятикратной разницы dt:=sysdate и select sysdate into dt from dual;. Оказалось все просто, стоило лишь поглядеть трассировку или поглядеть код пакета sys.standard: PL/SQL-ный USER содержит внутри рекурсивный запрос c [...]
Source: www.xt-r.comВт, Мар 13, 2012
Каким же сложным может оказаться для многих решение простейшей задачи: определение наличия подстроки в строке, но в немного нестандартной ситуации.
Задача: выбрать из таблицы строки, в которых поле попадает в список значений, перечисленных в строке в виде набора значений через запятую.
Пример:
SQL> create table [...]
Source: oraclemaniacs.blogspot.ruЗадача: выбрать из таблицы строки, в которых поле попадает в список значений, перечисленных в строке в виде набора значений через запятую.
Пример:
SQL> create table [...]
Вт, Мар 13, 2012
Каким же сложным может оказаться для многих решение простейшей задачи: определение наличия подстроки в строке, но в немного нестандартной ситуации.
Задача: выбрать из таблицы строки, в которых поле попадает в список значений, перечисленных в строке в виде набора значений через запятую.
Пример:
SQL> create table comparison (serialnum varchar2(10),
[...]
Source: oraclemaniacs.blogspot.ruЗадача: выбрать из таблицы строки, в которых поле попадает в список значений, перечисленных в строке в виде набора значений через запятую.
Пример:
SQL> create table comparison (serialnum varchar2(10),
[...]
Пн, Мар 12, 2012
На днях, в поисках способа оптимизировать долгоиграющую процедуру расчета одной модели наткнулся в очередной раз на сравнение COALESCE против NVL.
Для тех, кто не в курсе, у Oracle есть следующие SQL-функции для обработки значений NULL:
NVL(expr1, expr2) – в случае, если expr1 IS NOT NULL, выводится expr1, в противном случае [...]
Source: oraclemaniacs.blogspot.ruДля тех, кто не в курсе, у Oracle есть следующие SQL-функции для обработки значений NULL:
NVL(expr1, expr2) – в случае, если expr1 IS NOT NULL, выводится expr1, в противном случае [...]
Пн, Мар 12, 2012
На днях, в поисках способа оптимизировать долгоиграющую процедуру расчета одной модели наткнулся в очередной раз на сравнение COALESCE против NVL.
Для тех, кто не в курсе, у Oracle есть следующие SQL-функции для обработки значений NULL:
NVL(expr1, expr2) – в случае, если expr1 IS NOT NULL, выводится expr1, в противном случае – expr2 [...]
Source: oraclemaniacs.blogspot.ruДля тех, кто не в курсе, у Oracle есть следующие SQL-функции для обработки значений NULL:
NVL(expr1, expr2) – в случае, если expr1 IS NOT NULL, выводится expr1, в противном случае – expr2 [...]
Вс, Мар 11, 2012
Невероятно, но, проскочила информация о том, что Oracle в версии СУБД 12c введет конструкцию для ограничения выдачи, являющуюся аналогом TOP в MS SQL Server или LIMIT в MySQL:
In Database 12c, to limit the number of rows in a query can be simplified by ANSI fetch first/offset keyword via [...]
Source: oraclemaniacs.blogspot.ruIn Database 12c, to limit the number of rows in a query can be simplified by ANSI fetch first/offset keyword via [...]
Вс, Мар 11, 2012
Невероятно, но, проскочила информация о том, что Oracle в версии СУБД 12c введет конструкцию для ограничения выдачи, являющуюся аналогом TOP в MS SQL Server или LIMIT в MySQL:
In Database 12c, to limit the number of rows in a query can be simplified by ANSI fetch first/offset keyword via Oracle [...]
Source: oraclemaniacs.blogspot.ruIn Database 12c, to limit the number of rows in a query can be simplified by ANSI fetch first/offset keyword via Oracle [...]
Ср, Ноя 09, 2011
Generate and read TKProf and OraSRP reports in a single SQL*Plus window (or other IDE of choice) using preprocessor external tables. November 2011 [...]
Source: www.oracle-developer.netСр, Ноя 02, 2011
Начиная с 10-ой версии СУБД Oracle содержит такой инструмент восстановления случайно удаленных таблиц как корзина (recycle bin), хорошо известный пользователям Windows, MacOS и других операционных систем. При удалении таблицы и их индексы не стираются с диска физически, а специальным образом переименовываются Ораклом, т.е. перемещаются в корзину.
Посмотреть содержимое корзины [...]
Source: OracleForBeginnersПосмотреть содержимое корзины [...]
Ср, Ноя 02, 2011
Начиная с 10-ой версии СУБД Oracle содержит такой инструмент восстановления случайно удаленных таблиц как корзина (recycle bin), хорошо известный пользователям Windows, MacOS и других операционных систем. При удалении таблицы и их индексы не стираются с диска физически, а специальным образом переименовываются Ораклом, т.е. перемещаются в корзину.
Посмотреть содержимое корзины можено через [...]
Source: OracleForBeginnersПосмотреть содержимое корзины можено через [...]
Пт, Окт 28, 2011
Предыстория
Мигрировали базу на новый сервер одновременно с обновлением версии Oracle (10.2 -> 11.2). Было решено использовать дамп для переноса, т.к. так уж сложилось, что на исходной базе размер блока был нестандартный (6К) и клонирование было невозможно. Кроме того, клонирование, даже если бы оно работало, занимало лишь на [...]
Source: oraclemaniacs.blogspot.ruМигрировали базу на новый сервер одновременно с обновлением версии Oracle (10.2 -> 11.2). Было решено использовать дамп для переноса, т.к. так уж сложилось, что на исходной базе размер блока был нестандартный (6К) и клонирование было невозможно. Кроме того, клонирование, даже если бы оно работало, занимало лишь на [...]
Пт, Окт 28, 2011
Предыстория
Мигрировали базу на новый сервер одновременно с обновлением версии Oracle (10.2 -> 11.2). Было решено использовать дамп для переноса, т.к. так уж сложилось, что на исходной базе размер блока был нестандартный (6К) и клонирование было невозможно. Кроме того, клонирование, даже если бы оно работало, занимало лишь на 15 [...]
Source: oraclemaniacs.blogspot.ruМигрировали базу на новый сервер одновременно с обновлением версии Oracle (10.2 -> 11.2). Было решено использовать дамп для переноса, т.к. так уж сложилось, что на исходной базе размер блока был нестандартный (6К) и клонирование было невозможно. Кроме того, клонирование, даже если бы оно работало, занимало лишь на 15 [...]
Сб, Окт 22, 2011
A variation on Tom Kyte's invaluable RUNSTATS utility that compares the resource consumption of two alternative units of work. Designed to work under constrained developer environments and builds on the original with enhancements such as "pause and resume" functionality, time model statistics and the option to report on specific statistics. [...]
Source: www.oracle-developer.netСб, Окт 22, 2011
A utility to add parent ID and execution order information to plans reported by DBMS_XPLAN. XPlan includes DISPLAY, DISPLAY_CURSOR and DISPLAY_AWR functionality for use in exactly the same way as the DBMS_XPLAN equivalents. Supports versions from 10g onwards. ***Update*** Now available in two formats: 1) as a PL/SQL package and [...]
Source: www.oracle-developer.net