Category Archives: Oracle DB programming

Parallel operations in Oracle

http://www.akadia.com/services/ora_parallel_processing.html Parallel Features The full list of Oracle parallel execution features currently includes the following Parallel Query Parallel DML Parallel DDL Parallel Data Loading Parallel Recovery Parallel Replication How Parallel Execution Works Operations That Can Be Parallelized Oracle can parallelize operations that involve processing an entire table or an entire partition. These operations include: SQL […]

Read more

Полномочия Java внутри БД

Чтобы хранимый модуль на Java, выполняемый внутри БД, мог обращаться к локальной файловой системе, нужно дать права специальным образом. Чтобы посмотреть текущие права: select * from DBA_JAVA_POLICY where grantee = ‘OWNER’ Предоставить права делать что угодно внутри отдельной директории /u01/dir. Нужно обратить внимание: 1. Просто имени ‘/u01/dir/-‘ (то есть прав на все вложенные директории и […]

Read more

Анализ SGA на предмет неправильного использования bind переменных

Можно использовать такой запрос select sql_text,address, hash_value, executions, loads, version_count, invalidations, parse_calls from v$sqlarea where version_count > 100; Но лучше следующий Ищем курсоры с несколькими версиями child_address: select address, count(child_address) from v$sql group by address having count(child_address) > 10 Берем оттуда sql и адрес Смотрим, почему разные child’ы: select * from V$SQL_BIND_METADATA where address in […]

Read more

Кодировка SqlPlus в Windows

Чтобы пользоваться SqlPlus из-под Windows: set NLS_LANG=RUSSIAN_CIS.CL8MSWIN1251 chcp 1251 sqlplus В командном окне (Far) нужно поменять шрифт на Lucida Console NLS_LANG обычно приходится ставить, чтобы в скриптах нормально обрабатывались русские символы, а chcp позволяет понимать сообщения на русском, которые Oracle начинает выдавать после установки NLS_LANG.

Read more

Oracle: обновление базы с использованием редакций

Основной смысл заключается в том, чтобы пока все пользователи работают с текущей редакцией, создать новую редакцию на основе текущей, внести в нее необходимые изменения (пользователи этого не заметят), протестировать новую редакцию с изменениями и сделать ее текущей. Чтобы пользователи начали работать с новой редакцией они должны закрыть свои старые сессии и открыть новые, т.е. для […]

Read more

XSLT преобразование в PLSQL

А) Если делать все внутри PLSQL, то есть если есть l_xsl := XMLType(xsl); l_xml := XMLType(xml); для преобразования внутри PLSQL можно использовать 1.  select xmltransform(l_xml, l_xsl).GetClobVal() into l_result from dual; или 2.  l_result := l_xml.transform(l_xsl).GetClobVal(); на небольших размерах xml и xsl 2-й вариант работает раз в 10 быстрее. Б) XMLType можно хранить в таблице: CREATE […]

Read more

Как вытащить массив простого типа из XML в PLSQL

Основная особенность: высокоуровневые конструкции, которые возвращали бы последовательность элементов по XPath или XQuery можно использовать только SQL-запросе. Они не работають в “чистом” PL/SQL. Если стоит задача парсить XML, не используя select’ы вообще, то для извлечения скалярных значений можно пользоваться extract(xmltype(‘xml text’), ‘some XPath’). Но чтобы получить однородный массив, придется использовать XMLDOM API, как во 2-м […]

Read more

Настройка репликации с Oracle на PostgreSQL

Особенности: репликация между базами данных Oracle и Не-Oracle через Heterogenous Services поддерживается только для шлюзов “Transparent Gateway”, к которым не относится Gateway for ODBC. Проблема возникает при попытке применить захваченные процессом Streams Capture данные к таблице Postgres через Gateway из-за того, что Gateway for ODBC не поддерживает двухфазный commit. Чтобы обойти проблему можно извлекать захваченные […]

Read more

Tools for storing Oracle DDL under version control

http://stackoverflow.com/questions/11953316/oracle-put-existing-db-to-version-control Source Control for Oracle can link your existing schemas to Subversion (Windows only): http://www.red-gate.com/source-control-for-oracle/ Command line tool can be useful when you need to deliver changes from Subversion repository to Oracle database. Please give it a try: www.dbapply.com. oracle-ddl2svn – Set of tools for automatization storing of oracle DDL schema in SVN.

Read more

Natural vrs surrogate primary key

Tom Kyte: “If you have a natural key, by all means – use it. The natural key should be immutable and sensible – they are sometimes “rare”, but if I had a document table, document version table – I would definitely use the document_id (might be a surrogate) as the primary key of one and […]

Read more

NVL and COALESCE

http://stackoverflow.com/questions/950084/oracle-differences-between-nvl-and-coalesce NVL and COALESCE are used to achieve the same functionality of providing a default value in case the column returns a NULL. The differences are: NVL accepts only 2 arguments whereas COALESCE can take multiple arguments NVL evaluates both the arguments and COALESCE stops at first occurrence of a non-Null value. NVL does a […]

Read more

Plan management

Look for sql_id based on a fragment of sql text: select s.CHILD_NUMBER, s.PLAN_HASH_VALUE, s.IS_BIND_SENSITIVE, s.IS_BIND_AWARE, s.* from v$sql s where sql_text like ‘%O.ORDER_NO%’   Explain plan for sql_id: SELECT * FROM table ( DBMS_XPLAN.DISPLAY_CURSOR(sql_id => ‘gd92hchnmrbwc’, cursor_child_no => 0)); select * from TABLE(dbms_xplan.display_awr(‘5q5x7zcnt3c5d’)); Purge bad plan from SGA: select ADDRESS, HASH_VALUE from V$SQLAREA where SQL_ID […]

Read more

Multi table inserts

Unconditional multi table insert: INSERT ALL INTO table1 (col1, col2, col3) values (source_table.col1, source_table.col2, source_table.col3) INTO table2 (col1, col2, col4) values (source_table.col1, source_table.col2, source_table.col4) INTO table3(col1, col5, col6) values (source_table.col1, source_table.col5, source_table.col6) SELECT * FROM source_table;   Conditional multi table insert: INSERT ALL WHEN (sal >= 3000) THEN INTO top_earners (emp_id, emp_name, emp_sal) VALUES (empno, […]

Read more

PL/SQL standard named exceptions

Oracle has a standard set of exceptions already named as follows: Oracle Exception Name Oracle Error Explanation DUP_VAL_ON_INDEX ORA-00001 You tried to execute an INSERT or UPDATE statement that has created a duplicate value in a field restricted by a unique index. TIMEOUT_ON_RESOURCE ORA-00051 You were waiting for a resource and you timed out. TRANSACTION_BACKED_OUT […]

Read more

ASH masters

ASH Masters is the brain child of  John Beresniewicz,  Graham Wood and Kyle Hailey. We wanted to provide a web site where people could learn and exchange new ideas, experiences and tools to harness the power of ASH.   see http://ashmasters.com for information on Oracle Active Session History (ASH) also see Tanel Poder’s ash scripts at http://blog.tanelpoder.com/files/scripts/ash/ […]

Read more

A trick with rownum

Advisor failure troubleshooting When we have a query with subqueries like this: select t1.a from (select a from table1 where b between 1 and 10) t1, (select a from table2 where b between 1 and 10)  t2 where t1.a = t2.a and a is indexed, oracle with high probability will perform nested loops for the […]

Read more