2013-07-29

ORA-27086: skgfglk: unable to lock file - already in use

  1. remove */dbs/lkORACLE_SID file
  2. You will get an error like this
  3. ORA-00202: controlfile: '/oebs200/u01/oracle/PROD/testdata/cntrl01.dbf' ORA-27086: skgfglk: unable to lock file - already in use IBM AIX RISC System/6000 Error: 13: Permission denied on controlfiles and datafiles
  4. Copy (not move) controlfile and datafiles to new path
  5. Remove old files
  6. Restore old files from copied on step 3.

2013-07-18

Разное о Cognos

Чем Slicer от Detail Filter

Detail Filter может убирать строки из отчета, Slicer не убирает, а лишь изменяет данные в существующих ячейках

Параметры и фильтры

Тут показано, как делать параметры с автозапросом с multy и single выбором. На примере с выражением для slicer
[Great Outdoor Sales].[Sales Region].[Sales Region].[Country] -> ?c? -- параметр с Single выбором
set([Great Outdoor Sales].[Sales Region].[Sales Region].[Country] -> ?c?) -- параметр с Multy-выбором

Постраничный отчет в Cognos

Задача

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

Как не получилось

Не получилось сделать Page Layers. На него получилось поместить только статичный объект, а как спрятать не выбранные пользователем страницы я так и не допер.

Как получилось сделать

Возможно, часть сделанных шагов избыточна

1. Создадим запрос и поместим на него DataItem, который будет содержать выбранные подразделения. Выражение для DataItem set([Пользовательский].[ЦПО].[ЦПО].[ЦПО] -> ?p_cpo?). Обзываем его, например, selected cpo

2. Добавляем List. Для него указываем свойства
  • Query - selected cpo
  • Rows per page - 1
  • Column Titles - Hide
3.  Создаем связь MasterDetail между Crosstab и запросом selected cpo. Выбираем объект Crosstab и кликаем по свойству Master Detail Relationships

4. Для того, что бы в заголовке отчета можно было добавить название подразделения указываем в свойстве Page запрос selected cpo и добавляем название подразделения.

5. Помещаем Crosstab внутрь List. Проверяем

Пока не удается избавиться от серой рамки вокруг crosstab (попробовал рисовать ее белым цветом, убирать, ставить Box Type в None.

2013-07-12

Cognos, конкатенация строк

В Cognos при конкатенации NULL операторами || и + получается пустая строка. Нормально конкатенирует только функция concat или ее аналогами

2013-07-10

Нововведения в 12с

1. Можно индексировать набор колонок, который уже проиндексирован. Судя по всему сделали для 24х7 при перестройки индексов, например с уникальных на неуникальные.

2. Появились колонки с автоинкрементом (Identity Columns). Можно указывать, когда вставлять значения:
GENERATED ALWAYS AS IDENTITY -- колонку вообще нельзя указывать в списке полей для INSERT
GENERATED BY DEFAULT AS IDENTITY -- колонку можно использовать в списке INSERT, вставится указанное значение, если оно не NULL (в этом случае будет сообщение об ошибке) GENERATED BY DEFAULT ON NULL AS IDENTITY -- колонку можно использовать в списке INSERT. Если указан NULL, то будет выбран следующий номер Identity Columns имеют ограничение NOT NULL. Работает быстрее триггеров. Подробнее

3. Возможность задавать в таблице значения по-умолчанию из sequence.nextval и sequence.currval (для вставки master-detail). Значения по умолчанию могут вставляться в случае, если в insert просто не указана колонка (DEFAULT) и в случае NULL значения (DEFAULT ON NULL). Подробнее

Вообще появилась возможность делать значения по-умолчанию в случае, если мы явно вставляем NULL в колонку.
Старое поведение, вставили NULL - получили NULL:
DROP TABLE def; CREATE TABLE def(a VARCHAR2(50), b VARCHAR2(10) DEFAULT 'x'); insert into def(a) values('a only'); insert into def(a, b) values('a, null', NULL); SELECT * FROM def; A B -------------------------------------------------- ---------- a only x a, null
Новая возможность -- NULL вставляется и при явном указании в INSERT NULL DROP TABLE def; CREATE TABLE def(a VARCHAR2(50), b VARCHAR2(10) DEFAULT ON NULL 'x'); insert into def(a) values('a only'); insert into def(a, b) values('a, null', NULL); SELECT * FROM def; A B -------------------------------------------------- ---------- a only x a, null x


4. invisible columns. Пока применения найти не удается http://tkyte.blogspot.com/2013/07/12c-silly-little-trick-with-invisibility.html

5. Возможность посмотреть полный текст SQL запроса при помощи dbms_utility.expand_sql_text с раскрытыми представлениями, правилами VPD. Можно использовать при запросах к V$ вьюхам http://tkyte.blogspot.com/2013/07/12c-sql-text-expansion.html

6. UTL_CALL_STACK -- новое формирование стека вызова. Подробнее


7. В Oracle 11 при добавлении колонки NOT NULL с указаным значением по умолчанию DEFAULT не вызывал изменения блоков таблицы, изменяя только метаданные. В Oracle 12 при добавлении любой (т.е. и NULL колонки) с указанным DEFAULT не вызывают изменения данных и поэтому стоят очень дешево. Подробнее в разделе Metadata-Only DEFAULT Values

8. Админская штучка: в один поток ОС можно засунуть несколько сессий Oracle. Полезно, если на сервере поднята куча инстансов. Подробнее

9. В With можно писать функции и процедуры на PL/SQL. Подробнее Так же функции можно создавать с PRAGMA UDF, такие функции нельзя использовать из pl/sql, но они быстро работают в sql

10. Появилась возможность постраничной выборки в SQL, например OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY. Подробнее

11. После CTAS и INSERT ... SELECT в пустую таблицу статистика собирается автоматически

12. Для табличных партиций и сабпартиций теперь можно указывать, создавать ли local индексы. Подробнее
Для глобальных индексов в партиционированных таблицах возможно удаление партиции без удаления индекса (об этом много написано у Richard Foot).

13. В SQL из PL/SQL можно использовать новые типы данных. Подробнее

14. Теперь можно грантовать пакеты, процедуры и функции другим пакетам. Такие пакеты невозможно будет вызвать из-вне. Пример
Так же можно делать GRANT TO program_unit. Сделано для того, что бы пользователю, вызывающему пакет с invoker rights не давать лишних привелегий. Подробнее
Вообще в этой версии с привелегиями достаточно много новых штук сделали.

15. Если поставить MAX_STRING_SIZE = extended, то SQL сможет использовать VARCHAR2 размером 32767.


16. Можно использовать конструкцию LATERAL, которая позволяет использовать в последующих подзапросах FROM результаты предыдущих подзапросов
SELECT a.object_name, b.object_type FROM (SELECT * FROM All_Objects WHERE ROWNUM <= 10) a, lateral(SELECT o.object_type FROM all_objects o WHERE o.object_id = a.object_id) b I_OBJ1 INDEX CLU$ TABLE I_COL3 INDEX I_UNDO1 INDEX I_CDEF4 INDEX BOOTSTRAP$ TABLE FILE$ TABLE I_CCOL2 INDEX I_FILE#_BLOCK# INDEX C_USER# CLUSTER 

То же самое можно сделать при помощи CROSS APPLY
SELECT a.object_name, b.object_type FROM (SELECT * FROM All_Objects WHERE ROWNUM <= 10) a CROSS APPLY (SELECT o.object_type FROM all_objects o WHERE o.object_id = a.object_id) b I_OBJ1 INDEX CLU$ TABLE I_COL3 INDEX I_UNDO1 INDEX I_CDEF4 INDEX BOOTSTRAP$ TABLE FILE$ TABLE I_CCOL2 INDEX I_FILE#_BLOCK# INDEX C_USER# CLUSTER

Конструкция OUTER APPLY помогает сделать похожий OUTER JOIN
SELECT a.object_name, a.object_type, b.tablespace_name FROM (SELECT * FROM All_Objects WHERE ROWNUM <= 10) a OUTER APPLY (SELECT o.tablespace_name FROM all_tables o WHERE o.table_name = a.object_name) b CLU$ TABLE SYSTEM FILE$ TABLE SYSTEM BOOTSTRAP$ TABLE SYSTEM I_OBJ1 INDEX C_USER# CLUSTER I_UNDO1 INDEX I_FILE#_BLOCK# INDEX I_COL3 INDEX I_CDEF4 INDEX I_CCOL2 INDEX
17. Можно перемещать файлы данных не выводя их в offline

18. Не смотрел подробнее: новый вид обновления материализованных представлений synchronous refresh

19. Новый способ проверить, есть ли у пользователя роль -- sys_context SYS_SESSION_ROLES:
SELECT sys_context('SYS_SESSION_ROLES', 'DBA') FROM dual; TRUE SELECT sys_context('SYS_SESSION_ROLES', 'DBA2') FROM dual; FALSE

20. Теперь планы могут меняться во время выполнения запроса. Сравнивая статистику. используемую при построени плана с реальным выполнением оптимизатор может на лету поменять, например, NESTED LOOPS на HASH JOIN.

21. Новые виды гистограмм для колонок с более чем 254 значениями.
Top frequency histograms -- если большинство значений (99%) в колонке приходятся на несколько значений. Гистограмма строится только по этим популярным значениям, непопулярные отбрасываются
Hybrid histogram -- height-based histogram в которых популярные значения попадают в табличку и одно и тоже значение не попадает более чем 1 раз

22. Статистика для GTT своя в каждой сессии.

23. Статистика, собранная dynamic sampling и adaptive cursor plan сохраняется в словаре (в предыдущих версиях хранилась в cursor cache)

24. Клонировать RMAN можно с базы-копии.

25. В RMAN можно просто без указания конструкции SQL выполнять SQL команды и даже запросы.

26. RMAN умеет восстанавливать отдельную таблицу или группу таблиц.

27. Temporal Validity. Документация. Кайт. Штука, которая позволяет в таблице указывать колонки, в которых хранятся сроки начала и окончания действия записи. Для получения актуальной на дату записи пользоваться в запросом с конструкцией AS OF PERIOD FOR или пакетом DBMS_FLASHBACK_ARCHIVE.
Хотел протестировать эту штуку, да она не заработала. Потом нашел у Кайта  this feature currently is not supported/working with the pluggable database infrastructure. This is a temporary limitation