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;


21 марта 2012 г.

online source code formatter

Онлайн форматирование исходного кода для вставки в html http://quickhighlighter.com

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;  

Искать может долго, несколько минут, поэтому добавляем условие "rownum=1",
чтобы если нашло строку не искало дальше, так будет быстрее.


15 марта 2012 г.

oracle: манипуляции с PERFSTAT

oracle: statspack

Перенести схему PERFSTAT в другое табличное пространство. 
Освободить место в существующем  табличном пространстве.
Експорт/импорт схемы PERFSTAT.

-- создать tablespace куда хотим перенести
CREATE TABLESPACE perfstat_tbs datafile '/u01/ORADATA/PERFSTAT/perfstat_01.dbf'
SIZE 5000m autoextend ON;


-- останавливаем job сбора статистики (выполняется от владельца джоба)
-- обязательно нужен commit
SELECT *
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;
/


-- экспорт схемы
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;
....

-- удаляем полностью 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

-- проверяем индексы
SELECT index_name,status FROM dba_indexes WHERE owner='PERFSTAT';

-- проверяем джоб
SELECT * FROM user_jobs;