Вы здесь

Как пересоздать табличное пространство TEMP

Here is a script that will display the contents of the TEMP tablespace.

set pagesize 60 linesize 132 verify off
break on file_id skip 1

column file_id heading "File|Id"
column tablespace_name for a15
column object          for a15
column owner           for a15
column MBytes          for 999,999

 

select tablespace_name,
'free space' owner, /*"owner" of free space */
' ' object,         /*blank object name */
file_id, /*file id for the extent header*/
block_id, /*block id for the extent header*/
CEIL(blocks*4/1024) MBytes /*length of the extent, in Mega Bytes*/
from dba_free_space
where tablespace_name like '%TEMP%'
union
select tablespace_name,
substr(owner, 1, 20), /*owner name (first 20 chars)*/
substr(segment_name, 1, 32), /*segment name */
file_id, /*file id for extent header */
block_id, /*block id for extent header */
CEIL(blocks*4/1024) MBytes /*length of the extent, in Mega Bytes*/
from dba_extents
where tablespace_name like '%TEMP%'
order by 1, 4, 5
/

select
   srt.tablespace,
   srt.segfile#,
   srt.segblk#,
   srt.blocks,
   a.sid,
   a.serial#,
   a.username,
   a.osuser,
   a.status
from
   v$session    a,
   v$sort_usage srt
where
   a.saddr = srt.session_addr
order by
   srt.tablespace, srt.segfile#, srt.segblk#,

 

   srt.blocks;

____________________________________________  Посмотреть все табличные пространства

 select * from v$TEMP_SPACE_HEADER;

select * from v$TEMP_EXTENT_POOL;

____________________________________________   файл-темп-размер и фри

col allocated_bytes format 999,999,999,999,999;
col free_bytes format 999,999,999,999,999;

select
   a.tablespace_name,
   a.file_name,
   a.bytes c3,
   b.free_bytes
FROM
   dba_temp_files a,
   (SELECT file_id, SUM(bytes) free_bytes
      FROM dba_free_space b GROUP BY file_id) b
WHERE
a.file_id=b.file_id
ORDER BY
a.tablespace_name;

____________________________________________

Увеличить файл

ALTER DATABASE TEMPFILE '/u01/oradata/b11/temp01.dbf' AUTOEXTEND ON  NEXT 10M MAXSIZE 2048M;

добавить файл

ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/bm7/onlinelog/BM7M3/datafile/temp_b4mphmky_.tmp' SIZE 100M AUTOEXTEND ON  NEXT 100M MAXSIZE UNLIMITED;

 

Если что-то случилось с табличным пространством, предназначенным для временного хранения информации (TEMP), то его достаточно просто пересоздать.

При этом нет никакой необходимости останавливать БД. Если во временном табличном пространстве возникли ошибки, то сама БД их будет попросту игнорировать, а вот операции DML будут приводить к сбоям. смотрим что есть по дефолту

SELECT * FROM database_properties WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';

select name from v$tempfile;

посмотреть свободное место v$temp_extent_pool

Но, если оно выделено -- не факт что используется.

Там другой алгоритм выделения

Текущее ИСПОЛЬЗОВАНИЕ -- v$sort_usage Пробуем самый простой способ:

SQL> alter database tempfile ‘/data/oracle/oracle/product/10.2.0/db_1/oradata/homer/temp01.dbf’ resize 100M;

alter database tempfile ‘/data/oracle/oracle/product/10.2.0/db_1/oradata/homer/temp01.dbf’ resize 100M *

ERROR at line 1: ORA-00376: file 81 cannot be read at this time ORA-01110: data file 81: ‘/data/oracle/oracle/product/10.2.0/db_1/oradata/homer/temp01.dbf’

-- создаем новое табличное пространство

CREATE TEMPORARY TABLESPACE temp TEMPFILE '/u02/bm7/tempfile/temp.dbf' SIZE 20M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '/u01/oradata/db/ibso/temp1.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 30720M TABLESPACE GROUP '' EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

-- задаем созданное табличное пространство как табличное пространство по умолчанию для хранения временных данных

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

-- проверяем наличие открытых сессий, работающих со старым табличным пространством TEMP

-- если есть, немедленно их завершаем

SELECT USERNAME, SESSION_NUM, SESSION_ADDR FROM V$SORT_USAGE;

 SELECT USERNAME, SESSION_NUM, TABLESPACE FROM V$SORT_USAGE where  TABLESPACE='TEMP' group by  USERNAME, SESSION_NUM, TABLESPACE;

-- вместо SESSION_NUM, SESSION_ADDR в следующем запросе необходимо поставить номер сессии и адрес, полученные предыдущим запросом

SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SERIAL#=SESSION_NUM;

SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE SADDR=SESSION_ADDR;

ALTER SYSTEM KILL 'SID,SERIAL#' IMMEDIATE;

-- удаляем старое табличное пространство

DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

-- создаем это табличное пространство заново

CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'ORACLE_BASE/oradata/temp01.dbf' SIZE 200M;

-- назначаем это пространство временным по-умолчанию

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

-- удаляем табличное пространство, созданное вначале

DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

Menu: 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
4 + 1 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.