programing

Oracle에서 임시 테이블스페이스를 축소하는 방법

lastmemo 2023. 2. 25. 19:42
반응형

Oracle에서 임시 테이블스페이스를 축소하는 방법

Oracle에서 임시 테이블스페이스를 축소하려면 어떻게 해야 합니까?데이터베이스 내에 애플리케이션용 스키마가 1개밖에 없고 데이터 테이블 공간 크기가 2GB, 인덱스 테이블 공간 크기가 1GB이기 때문에 최대 25GB까지 증가합니다.

오, 이런 신이시여!내 임시 테이블 공간 크기 좀 봐!또는 Oracle에서 임시 테이블스페이스를 축소하는 방법도 있습니다.

네, 임시 테이블스페이스의 크기를 확인하기 위해 쿼리를 실행했습니다.

SQL> SELECT tablespace_name, file_name, bytes
2  FROM dba_temp_files WHERE tablespace_name like 'TEMP%';

TABLESPACE_NAME   FILE_NAME                                 BYTES
----------------- -------------------------------- --------------
TEMP              /the/full/path/to/temp01.dbf     13,917,200,000

첫 번째 질문은 임시 테이블스페이스가 왜 이렇게 큰가 하는 것입니다.당신은 이것에 대한 답을 즉석에서 알고 있을지도 모릅니다.큰 쿼리가 있기 때문에 실수로 실행되었을 수도 있습니다(여러 번 실행했습니다).다른 예외적인 상황 때문일 수 있습니다.이 경우 정리하려면 임시 테이블스페이스를 축소하고 다음 단계로 넘어가기만 하면 됩니다.

하지만 당신이 모른다면요?축소를 결정하기 전에 테이블스페이스가 큰 원인을 조사해야 할 수도 있습니다.이 문제가 정기적으로 발생하는 경우 데이터베이스에 필요한 공간이 그만큼 많을 수 있습니다.

동적 퍼포먼스 뷰

V$TEMPSEG_USAGE

원인을 규명하는 데 매우 유용할 수 있습니다.

어쩌면 당신은 그 원인에 신경 쓰지 않고 그냥 축소만 하면 될지도 몰라요.오늘은 근무 3일째입니다.데이터 및 임시 테이블스페이스가 13GiB인 경우 데이터베이스의 데이터는 200MiB에 불과합니다.데이터를 축소하고 다음으로 넘어갑니다.다시 자라게 되면 원인을 조사하겠습니다.한편, 그 디스크 볼륨의 용량이 부족하기 때문에, 그 공간을 되찾기만 하면 됩니다.

축소해 봅시다.실행 중인 Oracle 버전과 임시 테이블스페이스 설정 방법에 따라 달라집니다.
Oracle은 사용자가 끔찍한 실수를 하지 않도록 하는 것이 최선입니다.그래서 명령어를 사용해 보고, 동작하지 않는 경우는, 새로운 방법으로 축소합니다.

먼저 데이터 파일을 축소해 보겠습니다.만약 그렇게 할 수 있다면, 우리는 그 공간을 되찾고 내일 왜 그것이 성장했는지 걱정할 수 있습니다.

SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*   
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

에러 메시지에 따라서는, 파일의 현재 사이트보다 작은 사이즈로 시험할 수 있습니다.나는 이것에 대해 제한된 성공을 거두었다.Oracle은 임시 테이블스페이스가 파일의 선두에 있고 지정한 크기보다 작은 경우에만 파일을 축소합니다.일부 오래된 Oracle 문서(이 문서를 수정한 경우)에서는 명령을 발행할 수 있으며 오류 메시지에 축소할 수 있는 크기가 표시됩니다.DBA로 일하기 시작했을 때는 그렇지 않았습니다.몇 번이고 추측을 하고 명령을 다시 실행하면 효과가 있는지 확인할 수 있습니다.

네.그게 안 먹혔어.이건 어때?

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;

11g(아마도 10g)이면 끝!정상적으로 동작하는 경우는, 이전의 커맨드로 되돌아가서, 몇 번 더 시험해 보는 것이 좋습니다.

하지만 그게 실패하면 어쩌지?임시 테이블스페이스가 데이터베이스 설치 시 설정된 기본 임시인 경우 더 많은 작업을 수행해야 할 수 있습니다.이 시점에서 저는 그 공간이 정말 필요한지를 재평가합니다.결국 디스크 용량은 X달러밖에 들지 않습니다.XX a GiB보통 생산 시간에는 이런 변경을 하고 싶지 않습니다.다시 새벽 2시에 일하는 거야! (2시에 일하는 것을 반대하는 것은 아니지만, 단지...)나도 자는 게 좋아그리고 아내는 새벽 2시에 집에 있는 걸 좋아하죠 새벽 4시에 시내 거리를 배회하지 않고요 3시간 전에 주차한 곳을 기억하려고요나는 그 재택근무에 대해 들어본 적이 있다.저는 단지 절반만 통과하면 인터넷 접속이 실패할까 봐 걱정입니다.그러면 사람들이 데이터베이스를 사용하기 위해 아침에 나타나기 전에 시내로 달려가 모든 것을 복구해야 합니다.)

자, 다시 진지한 얘기로 돌아가서...축소할 임시 테이블스페이스가 기본 임시 테이블스페이스일 경우 먼저 새 임시 테이블스페이스를 만들고 기본 임시 테이블스페이스로 설정한 후 오래된 기본 임시 테이블스페이스를 삭제하고 다시 만들어야 합니다.두 번째 작성된 임시 테이블을 말미에 의해 드롭합니다.

SQL> CREATE TEMPORARY TABLESPACE temp2
2  TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3  AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

Database altered.

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.


SQL> CREATE TEMPORARY TABLESPACE temp
2  TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3  AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

Database altered.

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

이것들 중 하나가 도움이 되었으면 좋겠네요!

테이블스페이스 관리 옵션은 8i 버전보다 훨씬 향상되었습니다.이는 특히 임시 테이블스페이스(로컬로 관리되는 임시 파일)에 적절한 유형의 파일을 사용하는 경우에 해당됩니다.

따라서 이 명령어처럼 단순할 수 있으며 테이블스페이스를 128메가까지 줄일 수 있습니다.

alter tablespace <your_temp_ts> shrink space keep 128M;

Oracle의 온라인 문서는 매우 우수합니다.자세한 것은 이쪽.

편집하다

OP에 이전 버전의 데이터베이스가 있는 것처럼 보입니다.이전 버전에서는 개별 데이터 파일의 크기를 조정해야 합니다.먼저 파일명을 찾아주세요.이 쿼리들 중 하나 또는 다른 것이 이 작업을 수행할 수 있습니다.

select file_name from dba_data_files where tablespace_name = '<your_temp_ts>'
/

select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>'
/ 

그런 다음 이 명령어로 이 경로를 사용합니다.

alter database datafile '/full/file/path/temp01.dbf'  resize 128m
/

사용하는 Oracle 버전을 기록해야 합니다.Oracle 11g 이외의 것을 사용하는 경우가 많기 때문에 임시 테이블스페이스를 축소할 수 없습니다.

다른 방법:

1)alter database tempfile '[your_file]' resize 128M;그것은 아마 실패할 것이다.
2) 테이블스페이스를 드롭하여 다시 만듭니다.축소할 임시 테이블스페이스가 기본 임시 테이블스페이스일 경우 먼저 새 임시 테이블스페이스를 생성하여 기본 임시 테이블스페이스로 설정한 후 오래된 기본 임시 테이블스페이스를 삭제하고 다시 작성해야 할 수 있습니다.그 후 작성된 두 번째 임시 테이블을 삭제합니다.3) Oracle 9i 이상에서는 temp 파일을 삭제하고 새로운 파일을 추가할 수 있습니다.

여기에 모든 것이 아주 상세하게 설명되어 있다.


다음 링크를 참조하십시오.http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
이미 링크되어 있었지만, 아마 놓쳤을지도 모르기 때문에, 여기 다시 표시됩니다.

임시 저장 공간이 필요하기 때문에 데카르트 제품이나 대규모 정렬 작업 때문일 수 있습니다.

동적 퍼포먼스 뷰V$TEMPSEG_USAGE원인을 진단하는 데 도움이 됩니다.

임시 테이블스페이스는 데이터베이스 정렬 및 결합 작업 및 글로벌 임시 테이블 저장에 사용됩니다.시간이 지남에 따라 크기가 커질 수 있으므로 임시 테이블스페이스를 다시 작성하거나 축소하여 사용하지 않는 공간을 해방해야 합니다.

TEMP 테이블스페이스를 축소하는 순서

alter database datafile  'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M;

도움이 되지 않는 경우:

  • 새 테이블스페이스 생성
  • 새 임시 테이블스페이스로 전환
  • 이전 테이블스페이스가 사용되지 않을 때까지 기다립니다.
  • 오래된 테이블스페이스 삭제

향후 스토리지를 재확보할 필요가 있을 경우에 대비하여 대체 온도를 떨어뜨릴 필요가 없습니다.

  1. 임시 그룹에서 독립 실행형 임시로 설정
  2. 잠시 기다린 다음 임시 그룹의 구성원 크기 조정
  3. 기본값을 임시 그룹으로 다시 설정
  4. 잠시 기다렸다가 독립 실행형 온도 크기를 조정합니다.마지막 단계를 서두를 필요는 없다

언급URL : https://stackoverflow.com/questions/1824572/how-to-shrink-temp-tablespace-in-oracle

반응형