Category Archives: Oracle

Таблицы x$ в Oracle

Есть такие «магические» (по выражению Тома Кайта) таблицы. Все они содержат определенную информацию о буферном кеше. X$BH – содержит информацию о заголовках буферов (всех размеров) в кэш-буфере. X$KCBWBPD – информация о пулах ( V$BUFFER_POOL) X$KCBWDS – информация о WS (Working Sets) Можно построить цепочку: блок объекта (obj$) находится в буфере (X$BH) – буфер находится в […]

Read more

Получение значений метрик из AWR

select os.value, hss.begin_interval_time from DBA_HIST_OSSTAT os, dba_hist_snapshot hss where os.snap_id = hss.snap_id and os.stat_name = ‘LOAD’ — AVG_BUSY_TIME, AVG_USER_TIME, AVG_SYS_TIME, AVG_IOWAIT_TIME order by begin_interval_time select begin_time, value from DBA_HIST_SYSMETRIC_HISTORY where metric_name = ‘User Transaction Per Sec’ order by begin_time — User Transaction Per Sec — Physical Reads Per Sec — Physical Writes Per Sec — […]

Read more

Top N текущих сессий

Этот запрос взят отсюда: http://gorodovets.blogspot.com/2009/07/oracle-top-sql.html select sql_text, username, disk_reads_per_exec, buffer_gets_per_exec, buffer_gets, disk_reads, parse_calls, sorts, executions, loads, rows_processed, hit_ratio, first_load_time, sharable_mem, persistent_mem, runtime_mem, cpu_time_secs, cpu_time_secs_per_execute, elapsed_time_secs, elapsed_time_secs_per_execute, address, hash_value from (select sql_text, b.username, round ((a.disk_reads/decode(a.executions,0,1,a.executions)),2) disk_reads_per_exec, a.disk_reads, a.buffer_gets, round ((a.buffer_gets/decode(a.executions,0,1,a.executions)),2) buffer_gets_per_exec, a.parse_calls, a.sorts, a.executions, a.loads, a.rows_processed, 100 – round(100* a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio, a.first_load_time, sharable_mem, persistent_mem, runtime_mem, round(cpu_time […]

Read more

Создание клона базы из физической копии

Скопировать файлы данных (со стэндбая, например) чтобы остановить применение архивлогов: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL чтобы заново запустить применение архивлогов: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION 1. Определить новое окружение – ORACLE_SID (если нужно, еще ORACLE_BASE, ORACLE_HOME, PATH) 2. Сделать запрос на создание нового control file (на рабочем окружении): alter […]

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

Настройка shared cursors

http://psoug.org/reference/cursor_sharing.html http://www.orafaq.com/node/758 http://www.freelists.org/post/oracle-l/RE-shared-pool-latch,2 http://kerryosborne.oracle-guy.com/2008/09/flush-a-single-sql-statement/ http://orachat.com/oracle-library-cache-tuning-real-case-study/ AWR-Report In-Depth Analysis –total cursors open, by session select a.value, s.username, s.sid, s.serial# from v$sesstat a, v$statname b, v$session s where a.statistic# = b.statistic#  and s.sid=a.sid and b.name = ‘opened cursors current’; –total cursors open, by username & machine select sum(a.value) total_cur, avg(a.value) avg_cur, max(a.value) max_cur, s.username, s.machine from v$sesstat […]

Read more

DBMS_REDEFINITION: Последовательность действий при переопределении таблицы

1. Проверяем, нет ли противопоказаний для переопределения таблицы BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE( uname => ‘MYUSER’, tname => ‘FILES’, options_flag => DBMS_REDEFINITION.CONS_USE_ROWID); END; 2. Создаем промежуточную таблицу по мотивам имеющейся таблицы, которую нужно переопределить, с новыми параметрами create table MYUSER.int_files tablespace tbs_new as select * from myuser.files where rownum = 0 Индексы и всякие констрейнты создавать не обязательно. Их […]

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

Getting rid of PARTLY AVAILABLE UNDO segments

https://community.oracle.com/thread/2593502 https://dbatricksworld.com/ora-30013-undo-tablespace-undotbs1-is-currently-in-use/ There are ACTIVE and PARTIAL AVAILABLE segments in UNDO: select segment_name, tablespace_name, status from dba_rollback_segs where tablespace_name=’UNDOTBS1′ SEGMENT_NAME TABLESPACE_NAME STATUS —————————— —————————— —————- _SYSSMU10_820739558$ UNDOTBS1 OFFLINE _SYSSMU9_2448906239$ UNDOTBS1 OFFLINE _SYSSMU8_3066916762$ UNDOTBS1 OFFLINE _SYSSMU7_892861194$ UNDOTBS1 OFFLINE _SYSSMU6_1956589931$ UNDOTBS1 OFFLINE _SYSSMU5_2919322705$ UNDOTBS1 OFFLINE _SYSSMU4_3876247569$ UNDOTBS1 OFFLINE _SYSSMU3_4245574747$ UNDOTBS1 OFFLINE for eaxmple :_SYSSMU2_6654314$ UNDOTBS1 PARTLY AVAILABLE […]

Read more

ASH: queries ranged by run time

select s.SQL_TEXT, aa.cnt, aa.SESSION_SERIAL# from v$sql s, ( select * from ( select count(sample_id) cnt, ash.SESSION_SERIAL#, sql_id, SQL_CHILD_NUMBER, sql_exec_id, top_level_sql_id from v$active_session_history ash where ash.SQL_EXEC_START between &date_from and &date_to group by ash.SESSION_SERIAL#, sql_id, sql_child_number, sql_exec_id, top_level_sql_id order by 1 desc ) where rownum < 200 ) aa where s.SQL_ID = aa.SQL_ID and s.CHILD_NUMBER = aa.sql_child_number order by […]

Read more

Running access advisor

Start advisor task: DECLARE taskname varchar2(30) := ‘SQLACCESS_20160902_1’; task_desc varchar2(256) := ‘SQL Access Advisor’; task_or_template varchar2(30) := ‘SQLACCESS_EMTASK’; task_id number; num_found number; sts_name varchar2(256) := ‘STS_20160902_1’; sts_cursor dbms_sqltune.sqlset_cursor; BEGIN — in case “invalid number parameter’ error need to set NLS parameter: EXECUTE IMMEDIATE ‘alter session set nls_numeric_characters=”.,”’; /* Create Task */ dbms_advisor.create_task(DBMS_ADVISOR.SQLACCESS_ADVISOR, task_id, taskname); /* […]

Read more

Oracle Linux Tests

https://oss.oracle.com/projects/olt/dist/documentation/OLT_TestCoverage.pdf Oracle Linux Tests are designed to verify Linux kernel functionality and stability essential for the Oracle Database. The Oracle Linux Test (OLT) kit, which is distributed as an archive file, provides an automated framework, a set of tools and tests for virtualized and non­virtualized systems. This document is for QA teams who conduct the […]

Read more

Using filesystem snapshots for database backup

http://www.oracle.com/technetwork/database/features/availability/rman-fra-snapshot-322251.html Snapshots Are NOT Backups Introduction While storage snapshots are widely used to quickly create point-in-time virtual copies of data, they are also often marketed as valid “backup solutions”. This is an incorrect and dangerous assumption because snapshots, unless copied to secondary media (e.g. another storage array or tape), do not protect against media failures. […]

Read more

Oracle RDBMS memory parameters

http://www.oracle.com/technetwork/articles/systems-hardware-architecture/using-dynamic-intimate-memory-sparc-168402.pdf http://www.dbas-oracle.com/2011/04/relation-between-memorytarget-sgatarget.html If  MEMORY_TARGET is set to a non-zero value. If  SGA_TARGET and PGA_AGGREGATE_TARGET are set, they will be considered the minimum values for the sizes of SGA and the PGA respectively. MEMORY_TARGET can take values from SGA_TARGET + PGA_AGGREGATE_TARGET to MEMORY_MAX_TARGET. If SGA_TARGET is set and PGA_AGGREGATE_TARGET is not set, we will still auto-tune […]

Read more