четверг, 10 ноября 2016 г.

Расширения функционала Oracle 12R2 (12.2) которые показались мне наиболее интересными.


Добавлена PL/SQL  pragma для пометки устаревших программных единиц.

Не обновленные материализованные представления могут быть  использованы в query rewrite для получения корректного результата используя materialized view logs.

К событиям обновления материализванного представления ON COMMIT и ON DEMAND добавлено событие ON STATEMENT.

Добавлены параметры в аггрегирующей функции LISTAGG для управления переполнением результирующей строки.

Максимальная длина идентификаторов увеличена до 128 байт для большинства идентификаторов, по сравнению с 30 байтами в предыдущих версиях.

Начало поддержки sharding в not managed driver ODP.NET

JDBC полностью поддерживает JDK 8 и стандарт JDBC 4.2

OJVM поддерживает Java SE 8

Вы можете выполнить JavaScript в базе данных, используя движок Nashorn JavaScript, встроенный в Oracle JVM

Начало поддержки операций с CLOB, BLOB и XMLType через database links.
Fast Application Notification (FAN) позволяет уменьшить объём обработки исключений слоя передачи данных в приложении.

Конвертация на лету не партиционированной таблицы в партиционированную.

Split на лету партиций и субпартиций.

Перенос не паритиционированнй таблицы на лету без блокирования DML.

Новая команда DDL позволяет создать таблицу с копированием описания партиций  из существующей таблицы.

Новая архитектура Oracle Database Sharding для оперативной обработки OLTP в которой данные горизонтально распределены между несколькими дискретными базами данных Oracle не имеющими общего аппаратного и программного обеспечения.  Приложение работает с набором баз данных как с одной логической базой.

Поддержка партиционирования внешних таблиц. Поддержка декларативных ограничений целостности для внешних таблиц.

Аналитические представления/

dbms_stat стал работать с внешними таблицами и In-Memory полями таблиц.

Band join связывание является особым типом связывания таблиц при котором ключевые значения в одного набора данных, должны находиться в пределах указанного диапазона другого набора. Одна таблица служит в качестве первого и второго наборов данных.

NFS сервер в базе данных.

Ограничение лимита операций ввода вывода на уровня монтируемой базы.

Монтируемые базы теперь могут иметь различные character set в нутри одной контейнерной базы (CDB).

Поддержка периодического распространения изменений из монтируемой базы источника в базы клоны.

Возможность распараллеливания (указания степени паралелизма) при создании монтируемой базы из seed PDB.

Возможность копирования монтируемой базы данных без перевода базы источника в режим только для чтения, если база источник в режиме archivelog. База источник во время копирования является полностью работоспособной.

Новый механизм proxy монтируемых баз является функционалом для доступа  к одной или нескольким удаленным базам через одну логическую.

Возможность отката состояния монтируемой базы данных с помощью FLASHBACK DATABASE.

Увеличено максимальное количество поддерживаемых монтируемых баз данных в одной контейнерной (CDB) базе до 4098.

Возможность обновления (upgrade) всех монтируемых баз одной операцией.

SQL*Loader, expdp, impdp, exp, и imp теперь являются утилитами instant client.

Поддержка многосимвольных строк в параметрах ENCLOSED_BY, OPTIONALLY_ENCLOSED_BY, и TERMINATED_BY утилиты  SQL*Loader.
Новая утилита командной строки Trace File Analyzer.


четверг, 21 января 2016 г.

Особенности сравнения таблиц из записей %ROWTYPE

Имеем таблицы в двух схемах
create table MESSAGE
(
  message_id        INTEGER not null,
  message_code   VARCHAR2(128) not null,
  message_name  NVARCHAR2(256) not null,
  message_type   VARCHAR2(128) not null,
  message_level   INTEGER not null,
);

И процедуру сравнения содержимого в двух схемах
DECLARE
  TYPE t_m_tbl    IS TABLE OF message%ROWTYPE INDEX BY BINARY_INTEGER;
  v_sql1         CLOB;
  v_sql2         CLOB;
  v_cur1         SYS_REFCURSOR;
  v_cur2         SYS_REFCURSOR;

  v_m_tbl1       t_m_tbl;
  v_m_tbl2       t_m_tbl;
BEGIN
  v_sql1  := 'SELECT t.*
                FROM schema1.message t
              ORDER BY t.message_code';
  v_sql2  := 'SELECT t.*
                FROM schema2.message t
              ORDER BY t.message_code';          
  OPEN v_cur1 FOR v_sql1;
  FETCH v_cur1 BULK COLLECT INTO v_m_tbl1;
 
  OPEN v_cur2 FOR v_sql2;
  FETCH v_cur2 BULK COLLECT INTO v_m_tbl2;

  IF v_m_tbl1.count >0 THEN
    FOR prc_m1 IN v_m_tbl1.first..v_m_tbl1.last LOOP
    .................
    END LOOP;
  END IF;
END;

Если таблицы в разных схемах будут иметь одинаковую структуру но разную последовательность полей то получим ошибку не совместимости типов в строке
  FETCH v_cur1 BULK COLLECT INTO v_m_tbl1;
или
  FETCH v_cur2 BULK COLLECT INTO v_m_tbl2;

проблема решается явным перечислением полей в запросе
вместо t.* указать
t.message_id,
t.message_code,
t.message_name,
t.message_type,
t.message_level



пятница, 24 апреля 2015 г.

ошибка ORA-00604: error occurred at recursive SQL level 1 возникающая при создании PLUGGABLE DATABASE

При создании PLUGGABLE DATABASE командой

CREATE PLUGGABLE DATABASE PDBTest
  ADMIN USER user1 IDENTIFIED BY user1
  ROLES = (connect,dba)
  DEFAULT TABLESPACE users
  file_name_convert = ('+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/system.271.876592207', 'C:\ORACLE\ORADATA\MYSERVER\PDBTest\system.271'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/sysaux.270.876592197','C:\ORACLE\ORADATA\MYSERVER\PDBTest\sysaux.270'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/DATAFILE/users.269.876592195','C:\ORACLE\ORADATA\MYSERVER\PDBTest\users.269'
                      ,'+DATA/MYSERVER/A587A94B8C72405CB40663EF8F521E9E/TEMPFILE/temp.286.876595197','C:\ORACLE\ORADATA\MYSERVER\PDBTest\temp.286')
  STORAGE (MAXSIZE 100G MAX_SHARED_TEMP_SIZE 100M)
  TEMPFILE REUSE
  PATH_PREFIX = '+DATA';  

при наличии табличного пространства users  в шаблоне pluggable database pdb$seed
возникает ошибка ORA-00604: error occurred at recursive SQL level 1

решением в данной ситуации является создание  контейнерной базы с пользователем без назначения ему табличного пространства по умолчанию
без параметров   DEFAULT TABLESPACE users

и установке табличного пространства по умолчанию позже командами

ALTER PLUGGABLE DATABASE PDBTest OPEN;
alter session set container=PDBTest;
ALTER USER user1 DEFAULT TABLESPACE users;



вторник, 17 сентября 2013 г.

Краткий интерактивный обзор Oracle Database 12C

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/poster/OUTPUT_poster/poster.html#tab_1

пятница, 13 сентября 2013 г.

Уязвимость в системе безопасности при выдаче привилегии GRANT SELECT на таблицу

При выдаче привилегии GRANT SELECT на таблицу пользователь другой схемы данных поличивший привилегию кроме возможности чтения данных получает неявно возможность заблокировать данные командой select for update.

четверг, 12 сентября 2013 г.

Некоторые новые возможности в базе 12C

1.Наконец появился синтаксис для страничной выборки данных.
Синтаксис таков.
o53asktom-f1

 Пример выборки пяти первых записей.

SQL> create table t
  2  as
  3  select * from all_objects;
Table created.

SQL> create index t_idx 
on t(owner,object_name);
Index created.

SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   FETCH FIRST 5 ROWS ONLY;
…
——————————————————————————————————————————————————————————————————————————————
| Id |Operation                     | Name|Rows  |Bytes |Cost (%CPU)|Time    |
——————————————————————————————————————————————————————————————————————————————
|   0|SELECT STATEMENT              |     |    5 | 1450 |    7   (0)|00:00:01|
|*  1| VIEW                         |     |    5 | 1450 |    7   (0)|00:00:01|
|*  2|  WINDOW NOSORT STOPKEY       |     |    5 |  180 |    7   (0)|00:00:01|
|   3|   TABLE ACCESS BY INDEX ROWID|T    |87310 | 3069K|    7   (0)|00:00:01|
|   4|    INDEX FULL SCAN           |T_IDX|    5 |      |    3   (0)|00:00:01|
——————————————————————————————————————————————————————————————————————————————

Predicate Information (identified by operation id):
—————————————————————————————————————————————————————————————————

1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"<=5)
2 - filter(ROW_NUMBER() OVER ( ORDER BY "OWNER","OBJECT_NAME")<=5)

Пример выборки пяти записей начиная с пятой.


SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;


2. Поля SQL VARCHAR2, NVARCHAR2 теперь могут хранить до 32Кб значений.
3. В сотни раз по сравнению с 11G увеличена производительность команды добавления колонки со значением по умолчанию.

SQL> alter table t 
add (data char(2000) default 'DEFAULT VALUE');

4. Добавлено ключевое слово DEFAULT для вставки значения по умолчанию в командах INSERT/UPDATE 

SQL> create table test_table
  2  ( id int
  3      generated by default
  4          as identity
  5          ( start with 33
  6            increment by 10 )
  7          primary key,
  8    val varchar2(100)
  9  )
 10  /
Table created. 
SQL>  insert into test_table (id, … ) 
   values ( DEFAULT, … );
Вставляет значение по умолчанию 33 из последовательности.
SQL>  insert into test_table (id, … ) 
   values ( 10, … );

вставляет значение 10.