Показаны сообщения с ярлыком oracle. Показать все сообщения
Показаны сообщения с ярлыком oracle. Показать все сообщения
1 сентября 2013 г.
30 ноября 2012 г.
oracle: JDBC Thin Client in v$session
Заметки о том как отображаются сессии от JDBC Thin Client в v$session
Если попытаться посмотреть информацию о JDBC Thin Client в v$session, то всегда v$session.process = 1234
Почему так происходит, почему PID клиентского процесса в OS всегда 1234 в случае с JDBC Thin Client ?
Ответ:
How to Set V$SESSION Properties Using the JDBC Thin Driver [ID 147413.1]
Note: The JDBC driver cannot correctly retrieve the values of some V$SESSION
properties on its own. Specifically, the driver exhibits the following behavior:
- When querying the TERMINAL field of the V$SESSION table using the JDBC
Thin driver, the value returned is "unknown".
- When querying the PROCESS field of the V$SESSION table using the JDBC
Thin driver, the value returned is "1234".
- The driver returns the process ID as "1234" by default, since obtaining
a process ID is not possible using the JDBC Thin driver.
Java developer can provide value in code (if code change is an option) using Java Properties when creating JDBC connection:
prop.put("v$session.process", clientProcess);
prop.put("v$session.program", programName);
Если попытаться посмотреть информацию о JDBC Thin Client в v$session, то всегда v$session.process = 1234
SELECT s.program,s.process, s.sid, s.seq#, s.event
FROM v$session s
FROM v$session s
| JDBC Thin Client | 1234 | 4894 | 29653 | db file sequential read |
Почему так происходит, почему PID клиентского процесса в OS всегда 1234 в случае с JDBC Thin Client ?
Ответ:
How to Set V$SESSION Properties Using the JDBC Thin Driver [ID 147413.1]
Note: The JDBC driver cannot correctly retrieve the values of some V$SESSION
properties on its own. Specifically, the driver exhibits the following behavior:
- When querying the TERMINAL field of the V$SESSION table using the JDBC
Thin driver, the value returned is "unknown".
- When querying the PROCESS field of the V$SESSION table using the JDBC
Thin driver, the value returned is "1234".
- The driver returns the process ID as "1234" by default, since obtaining
a process ID is not possible using the JDBC Thin driver.
Java developer can provide value in code (if code change is an option) using Java Properties when creating JDBC connection:
prop.put("v$session.process", clientProcess);
prop.put("v$session.program", programName);
9 октября 2012 г.
oracle 11g: ADRCI утилита для анализа диагностики
В Oracle 11 произошли некоторые изменения в alert.log, теперь он представляет собой xml файл, но можно и найти его в текстовом виде ( искать в папке ../traces).
Появилась текстовая утилита ADRCI, которая позволяет работать с диагностическими данными, сообщениями и ошибками в alert.log.
Почитать об ADRCI можно тут и тут (или погуглить).
Для примера пару комманд:
Утилита имеет справку:
Появилась текстовая утилита ADRCI, которая позволяет работать с диагностическими данными, сообщениями и ошибками в alert.log.
Почитать об ADRCI можно тут и тут (или погуглить).
Для примера пару комманд:
$ adrci
adrci> SHOW INCIDENT -last 10
ADR Home = /oradump/diag/rdbms/cust1/cust1:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
-------------------- ----------------------------------------------------------- ----------------------------------------
383543 ORA 600 [25027] 2012-09-18 01:02:56.410000 +03:00
383542 ORA 600 [kghstack_underflow_internal_1] 2012-09-18 01:02:44.434000 +03:00
adrci> SHOW INCIDENT -MODE DETAIL -P "INCIDENT_ID=383543"
adrci> SHOW INCIDENT -last 10
ADR Home = /oradump/diag/rdbms/cust1/cust1:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
-------------------- ----------------------------------------------------------- ----------------------------------------
383543 ORA 600 [25027] 2012-09-18 01:02:56.410000 +03:00
383542 ORA 600 [kghstack_underflow_internal_1] 2012-09-18 01:02:44.434000 +03:00
adrci> SHOW INCIDENT -MODE DETAIL -P "INCIDENT_ID=383543"
Утилита имеет справку:
$ adrci
adrci> HELP
adrci> HELP
5 августа 2012 г.
oracle: Oracle Database Reference
Oracle® Database Reference 10g Release 2 (10.2) (Параметры инициализации, представления, метрики)
Oracle® Database Reference 11g Release 2 (11.2) (Параметры инициализации, представления, метрики)
Oracle® Database Reference 11g Release 2 (11.2) (Параметры инициализации, представления, метрики)
1 августа 2012 г.
5 июня 2012 г.
1 июня 2012 г.
oracle: show list of dbms packages
Посмотреть список dbms пакетов:
SELECT DISTINCT name,TYPE
FROM dba_source
WHERE name LIKE 'DBMS_%'
ORDER BY name;
FROM dba_source
WHERE name LIKE 'DBMS_%'
ORDER BY name;
6 апреля 2012 г.
oracle: лицензирование
Источник: http://dba.ucoz.ru/index/0-53
Распространение программных продуктов Oracle (далее "Программы") осуществляется путем предоставления лицензий на их использование.
Продажа лицензий в России и странах СНГ производится только уполномоченными партнерами компании Oracle.
Техническая поддержка лицензируемых Программ предоставляется в течение одного года и приобретается вместе с лицензиями. По окончании срока действия технической поддержки, она может быть продлена на очередной годовой период.
Стоимость лицензий и технической поддержки рассчитывается на основании всемирного Прейскуранта Oracle ( Oracle Global Price List). Лицензируемые Программы предоставляются по каналам электронной связи или на носителях CD-ROM. Лицензирование Программ означает приобретение прав на их использование, а не покупку самих программных продуктов.
Основные варианты лицензирования:
- Named User Plus ("Именованный пользователь"). "Named User Plus" - лицо, уполномоченное использовать программы, установленные на одном или нескольких серверах, не зависимо от того, использует ли оно программу в данный момент времени или нет. Автоматическое устройство (не требующее участия человека) при возможности доступа к программам считается как Named User Plus в дополнение ко всем лицам, уполномоченным использовать программы. При использовании мультиплексирующих аппаратных или программных средств (например, монитора транзакций или веб-сервера) это число должно быть определено на входе мультиплексора. Число Named User Plus для ряда программ должно быть не менее установленного правилами лицензирования (см. раздел "Минимальное число пользователей").
5 апреля 2012 г.
oracle: импорт с помощью imp
Импорт в другое табличное пространство
Необходимо импортировать таблицу в другую базу данных в другую схему в другое табличное пространство. Так же можно разнести таблицу и индексы по разным табличным пространствам.
-- экспорт таблицы
-- по желанию можно добавить ещё каких нибудь параметров экспорта, например:
Переливаем файл exp_table.dmp в то место, откуда будем экспортировать(на другой сервер, например).
Импорт в другую базу в другую схему в другое табличное пространство.
Общий алгоритм такой:
1. Создаем таблицу в нужной нам схеме, с нужным параметром TABLESPACE
Если есть возможность посмотреть sql-код создания исходной таблицы CREATE TABLE, то можно скопировать этот код в редактор или в какой нить Oracle Developer, отредактировать как нам надо с учётом новой схемы и табличного пространства и затем создать таблицу в нужном нам месте с нужными параметрами.
Можно сгенерировать sql-код CREATE TABLE из файла экспорта exp_table.dmp .
Для этого используем утилиту импорта imp и опцию INDEXFILE.
В итоге получим файл create_table_name.sql, имя которого задали в параметре INDEXFILE, при этом никакие данные не импортируются.
Редактируем файл как нам надо, и создаём таблицу.
2. Импортируем в созданную таблицу данные из файла exp_table.dmp .
Не забываем при этом использовать параметр IGNORE=Y, он позволяет продолжить импорт в таблицу, которая уже существует, без него импорт выругается, что таблица уже существует.
Необходимо импортировать таблицу в другую базу данных в другую схему в другое табличное пространство. Так же можно разнести таблицу и индексы по разным табличным пространствам.
-- экспорт таблицы
exp user@sid FILE=exp_table.dmp TABLES=\(SCHEMA.TABLE_NAME\) STATISTICS=NONE
-- по желанию можно добавить ещё каких нибудь параметров экспорта, например:
exp user@sid FILE=exp_table.dmp TABLES=\(SCHEMA1.TABLE_NAME\) STATISTICS=NONE GRANTS=N INDEXES=N
Переливаем файл exp_table.dmp в то место, откуда будем экспортировать(на другой сервер, например).
Импорт в другую базу в другую схему в другое табличное пространство.
Общий алгоритм такой:
1. Создаем таблицу в нужной нам схеме, с нужным параметром TABLESPACE
Если есть возможность посмотреть sql-код создания исходной таблицы CREATE TABLE, то можно скопировать этот код в редактор или в какой нить Oracle Developer, отредактировать как нам надо с учётом новой схемы и табличного пространства и затем создать таблицу в нужном нам месте с нужными параметрами.
Можно сгенерировать sql-код CREATE TABLE из файла экспорта exp_table.dmp .
Для этого используем утилиту импорта imp и опцию INDEXFILE.
imp user@sid2 file=exp_table.dmp TABLES=\(TABLE_NAME\) fromuser=SCHEMA1 touser=SCHEMA2 indexfile=create_table_name.sql
В итоге получим файл create_table_name.sql, имя которого задали в параметре INDEXFILE, при этом никакие данные не импортируются.
Редактируем файл как нам надо, и создаём таблицу.
2. Импортируем в созданную таблицу данные из файла exp_table.dmp .
imp user@sid2 file=exp_table.dmp TABLES=\(TABLE_NAME\) fromuser=SCHEMA1 touser=SCHEMA2 FEEDBACK=10000 IGNORE=Y
Не забываем при этом использовать параметр IGNORE=Y, он позволяет продолжить импорт в таблицу, которая уже существует, без него импорт выругается, что таблица уже существует.
29 марта 2012 г.
oracle: кто использует TEMPORARY Tablespaces
Нужно узнать какие сессии используют временное табличное пространство в данный момент:
SELECT DISTINCT s.username, s.sid, s.serial#, s.osuser, u.TABLESPACE, u.contents, u.segtype, u.extents, u.blocks
FROM v$session s, v$sort_usage u
WHERE s.saddr=u.session_addr
ORDER BY s.username, s.osuser;
FROM v$session s, v$sort_usage u
WHERE s.saddr=u.session_addr
ORDER BY s.username, s.osuser;
27 марта 2012 г.
oracle: параметр MAXEXTENTS для таблицы
Изменить параметр MAXEXTENTS для таблицы
ALTER TABLE TABLE_NAME storage (MAXEXTENTS unlimited);
21 марта 2012 г.
oracle: какому объекту принадлежит блок
Есть file# (номер файла) и block# (номер блока).
Нужно узнать к какому объекту принадлежит этот блок.
SELECT owner,
segment_name,
segment_type
FROM dba_extents
WHERE file_id = FILE#
AND block# BETWEEN block_id AND block_id + blocks - 1
AND ROWNUM = 1;
segment_name,
segment_type
FROM dba_extents
WHERE file_id = FILE#
AND block# BETWEEN block_id AND block_id + blocks - 1
AND ROWNUM = 1;
Искать может долго, несколько минут, поэтому добавляем условие "rownum=1",
чтобы если нашло строку не искало дальше, так будет быстрее.
15 марта 2012 г.
oracle: манипуляции с PERFSTAT
oracle: statspack
Перенести схему PERFSTAT в другое табличное пространство.
Освободить место в существующем табличном пространстве.
Експорт/импорт схемы PERFSTAT.
-- создать tablespace куда хотим перенести
-- останавливаем job сбора статистики (выполняется от владельца джоба)
-- обязательно нужен commit
-- Сохраним на всякий случай сам джоб из какого нить девелопера
-- экспорт схемы
-- импорт схемы
Сохраняем скрипт создания юзера PERFSTAT со всеми грантами и прочим из какого нить девелопера в файл скажем perfstata_schema.sql
Будет что вроде приведённого ниже куска, если переносим в другой tablespace, то при импорте меняем DEFAULT TABLESPACE PERFSTAT_TBS в оператре CREATE USER PERFSTAT на тот tablespace, в который хотим его перенести, ну и не забыть создать сам tablespace.
-- удаляем полностью PERFSTAT, чтобы удалить все данные в схеме
-- создаём схему PERFSTAT, которую предварительно сохранили в perfstata_schema.sql
-- импорт
-- проверяем индексы
-- проверяем джоб
Перенести схему PERFSTAT в другое табличное пространство.
Освободить место в существующем табличном пространстве.
Експорт/импорт схемы PERFSTAT.
-- создать tablespace куда хотим перенести
CREATE TABLESPACE perfstat_tbs datafile '/u01/ORADATA/PERFSTAT/perfstat_01.dbf'
SIZE 5000m autoextend ON;
SIZE 5000m autoextend ON;
-- останавливаем job сбора статистики (выполняется от владельца джоба)
-- обязательно нужен commit
SELECT *
FROM user_jobs;
EXEC dbms_job.broken(jobno, TRUE);
COMMIT;
FROM user_jobs;
EXEC dbms_job.broken(jobno, TRUE);
COMMIT;
-- Сохраним на всякий случай сам джоб из какого нить девелопера
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'statspack.snap;'
,next_date => TO_DATE('01.01.4000 00:00:00','dd/mm/yyyy hh24:mi:ss')
,INTERVAL => 'trunc(SYSDATE+1/24,'HH')'
,no_parse => FALSE
,instance => 1
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || TO_CHAR(x));
COMMIT;
END;
/
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'statspack.snap;'
,next_date => TO_DATE('01.01.4000 00:00:00','dd/mm/yyyy hh24:mi:ss')
,INTERVAL => 'trunc(SYSDATE+1/24,'HH')'
,no_parse => FALSE
,instance => 1
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || TO_CHAR(x));
COMMIT;
END;
/
-- экспорт схемы
cd /backup_vol/oracle_backup
export NLS_LANG=AMERICAN_AMERICA.CL8ISO8859P5
exp perfstat@orcl FILE=perfstat_15_03_2012.dmp LOG=perfstat_15_03_2012.LOG owner=PERFSTAT-- импорт схемы
Сохраняем скрипт создания юзера PERFSTAT со всеми грантами и прочим из какого нить девелопера в файл скажем perfstata_schema.sql
Будет что вроде приведённого ниже куска, если переносим в другой tablespace, то при импорте меняем DEFAULT TABLESPACE PERFSTAT_TBS в оператре CREATE USER PERFSTAT на тот tablespace, в который хотим его перенести, ну и не забыть создать сам tablespace.
CREATE USER PERFSTAT
IDENTIFIED BY VALUES 'xxxxxxxxxxxxxx'
DEFAULT TABLESPACE PERFSTAT_TBS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
....
IDENTIFIED BY VALUES 'xxxxxxxxxxxxxx'
DEFAULT TABLESPACE PERFSTAT_TBS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
....
-- удаляем полностью PERFSTAT, чтобы удалить все данные в схеме
DROP USER PERFSTAT CASCADE;
-- создаём схему PERFSTAT, которую предварительно сохранили в perfstata_schema.sql
-- импорт
export NLS_LANG=AMERICAN_AMERICA.CL8ISO8859P5
imp perfstat@orcl file=perfstat_12_05_2011.dmp log=imp_perfstat_12_05_2011.log fromuser=PERFSTAT touser=PERFSTAT
imp perfstat@orcl file=perfstat_12_05_2011.dmp log=imp_perfstat_12_05_2011.log fromuser=PERFSTAT touser=PERFSTAT
-- проверяем индексы
SELECT index_name,status FROM dba_indexes WHERE owner='PERFSTAT';
-- проверяем джоб
SELECT * FROM user_jobs;
16 января 2012 г.
oracle: мониторинг объектов схемы
1. Посмотреть кто к каким объектам схемы обращается.
Используем представление V$ACCESS.
V$ACCESS содержит информацию о блокировках, которые в данный момент наложены на объекты library cache. Это делается для того чтобы они не ушли из library cache пока они требуются для выполнения sql запроса.
2. Есть программа, нужно узнать к каким объектам она обращается.
-- кто к каким объектам схемы обращается
SELECT a.object,
a.type,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a,
v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER('arbor')
ORDER BY a.object;
SELECT a.object,
a.type,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a,
v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER('arbor')
ORDER BY a.object;
Используем представление V$ACCESS.
V$ACCESS содержит информацию о блокировках, которые в данный момент наложены на объекты library cache. Это делается для того чтобы они не ушли из library cache пока они требуются для выполнения sql запроса.
2. Есть программа, нужно узнать к каким объектам она обращается.
-- основываясь на п.1, можно посмотреть информацию о том: какая конкретная программа
-- какие объекты использует
SELECT a.object,
a.TYPE,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a, v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER ('arbor')
AND b.program LIKE 'ck_KenanPaymentCreate%'
ORDER BY a.object;
-- какие объекты использует
SELECT a.object,
a.TYPE,
a.sid,
b.username,
b.osuser,
b.program
FROM v$access a, v$session b
WHERE a.sid = b.sid
AND a.owner = UPPER ('arbor')
AND b.program LIKE 'ck_KenanPaymentCreate%'
ORDER BY a.object;
oracle: мониторинг блокировок
oracle: блокировки (locks), защёлки (latches), enqueues
Мониторинг блокировок (http://my-oracle.it-blogs.com.ua/)
Запросы для мониторинга блокировок в базе.
-- смотрим блокировки, установленные текущими транзакциями в базе,
-- которые блокируют запросы на блокировку от других сессий (where block=1)
-- смотрим активные сессии, которые чего то ждут, и чего они собственно ждут
-- смотрим блокировки, установленные текущими транзакциями в базе,
-- кто и на что и какой тип блокировки установил
Мониторинг блокировок (http://my-oracle.it-blogs.com.ua/)
Запросы для мониторинга блокировок в базе.
-- смотрим блокировки, установленные текущими транзакциями в базе,
-- которые блокируют запросы на блокировку от других сессий (where block=1)
SELECT l.SID,s.username,s.program,l.TYPE,l.LMODE,ROUND(CTIME/60) "Time(Min)",
(SELECT object_name FROM dba_objects WHERE object_id=lo.object_id) obj,
DECODE(lo.locked_mode,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
TO_CHAR(lo.locked_mode)) mode_held
FROM V$LOCK l, v$locked_object lo, v$session s
WHERE block=1
AND l.sid=lo.session_id AND l.sid=s.sid;
(SELECT object_name FROM dba_objects WHERE object_id=lo.object_id) obj,
DECODE(lo.locked_mode,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
TO_CHAR(lo.locked_mode)) mode_held
FROM V$LOCK l, v$locked_object lo, v$session s
WHERE block=1
AND l.sid=lo.session_id AND l.sid=s.sid;
-- смотрим активные сессии, которые чего то ждут, и чего они собственно ждут
SELECT s.program,s.username,s.osuser,s.machine,sw.* FROM v$session_wait sw,v$session s
WHERE sw.sid=s.sid
AND sw.event<>'rdbms ipc message' AND sw.event NOT LIKE 'SQL*Net%'
ORDER BY sw.event ASC;
WHERE sw.sid=s.sid
AND sw.event<>'rdbms ipc message' AND sw.event NOT LIKE 'SQL*Net%'
ORDER BY sw.event ASC;
-- смотрим блокировки, установленные текущими транзакциями в базе,
-- кто и на что и какой тип блокировки установил
SELECT oracle_username, session_id,s.program,object_name,DECODE(a.locked_mode,
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
TO_CHAR(a.locked_mode)) mode_held
FROM V$LOCKED_OBJECT a,DBA_OBJECTS b,v$session s WHERE a.object_id = b.object_id
AND a.session_id=s.sid;
0, 'None', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Exclusive', /* X */
TO_CHAR(a.locked_mode)) mode_held
FROM V$LOCKED_OBJECT a,DBA_OBJECTS b,v$session s WHERE a.object_id = b.object_id
AND a.session_id=s.sid;
11 января 2012 г.
oracle: DBMS_SESSION аналогия ALTER SESSION для PL/SQL
Этот пакет DBMS_SESSION предоставляет доступ к SQL командам ALTER SESSION и SET ROLE для PL/SQL
Дока: DBMS_SESSION
Дока: DBMS_SESSION
21 декабря 2011 г.
oracle: Выполнить запрос в pl/sql коде
Выполнить запрос в pl/sql коде:
DECLARE
pc_id number := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE('pc_id: '||pc_id);
insert into GUPPI.DEPT(DEPTNO,DNAME,LOC) values (pc_id, 'TEST', 'TEST_LOC');
commit;
EXCEPTION
WHEN OTHERS THEN
pc_id:= 0;
DBMS_OUTPUT.PUT_LINE('Error pc_id: '||pc_id);
END;
/
pc_id number := 1;
BEGIN
DBMS_OUTPUT.PUT_LINE('pc_id: '||pc_id);
insert into GUPPI.DEPT(DEPTNO,DNAME,LOC) values (pc_id, 'TEST', 'TEST_LOC');
commit;
EXCEPTION
WHEN OTHERS THEN
pc_id:= 0;
DBMS_OUTPUT.PUT_LINE('Error pc_id: '||pc_id);
END;
/
20 декабря 2011 г.
oracle: Мониторинг отката транзакции
Если по какой то причине сделали rollback транзакции, то интересно как долго он будет выполнятся. Оценить это можно сделав запросы к v$transaction.
В этом представлении есть два поля USED_UREC и USED_UBLK.
USED_UREC - Number of undo records used
USED_UBLK - Number of undo blocks used
Во время rollback значения этих полей уменьшается и стремится к нулю, т.е. rollback закончится, когда значения этих полей станут равны нулю.
Запросы для мониторинга:
В этом представлении есть два поля USED_UREC и USED_UBLK.
USED_UREC - Number of undo records used
USED_UBLK - Number of undo blocks used
Во время rollback значения этих полей уменьшается и стремится к нулю, т.е. rollback закончится, когда значения этих полей станут равны нулю.
Запросы для мониторинга:
select * from v$transaction;
-- конкрето поля USED_UREC и USED_UBLK
SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk
FROM v$session a, v$transaction b
WHERE a.saddr = b.ses_addr;
-- конкрето поля USED_UREC и USED_UBLK
SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk
FROM v$session a, v$transaction b
WHERE a.saddr = b.ses_addr;
7 ноября 2011 г.
Подписаться на:
Сообщения (Atom)