반응형
01686, 00000, "max # files (%s) reached for the tablespace %s"
// *Cause: The number of files for a given tablespace has reached its maximum
// value
// *Action: Resize existing files in the tablespace, or partition the objects
// among multiple tablespaces, or move some objects to a different
// tablespace.
원인 : 테이블스페이스 당 허용된 데이터파일의 갯수를 넘어서서 나는 에러.
오라클 매뉴얼에 따르면, Maximum per tablespace 는 Operating system dependent; usually 1022라고 나옵니다.
1022개가 일반적입니다.
출처 :
https://docs.oracle.com/database/121/REFRN/GUID-939CB455-783E-458A-A2E8-81172B990FE9.htm#REFRN0042
저는 이때까지 db_files라는 db 파라미터와 controlfile 내에 있는 maxdatafiles의 갯수가 중요한 줄 알았는데, 그거와 별개로 한 테이블스페이스 당 데이터파일의 갯수가 제한이 있다는 것이 새로 알게된 사실입니다. 문제가 발생한 DB에서는 db_files는 10000개, maxdatafiles는 32767개입니다.
select name,value,description from v$parameter where name like '%db_files%';
NAME VALUE DESCRIPTION
--------- ------- --------------------------
db_files 10000 max allowable # db files
controlfile의 정보
...
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "DBXXXXX" NORESETLOGS ARCHIVELOG
MAXLOGFILES 1024
MAXLOGMEMBERS 5
MAXDATAFILES 32767
MAXINSTANCES 32
MAXLOGHISTORY 33012
...
해결 : 데이터파일을 추가하지 않고 테이블 삭제 or reorg하여 용량을 확보하거나, 다른 테이블스페이스를 사용합니다.
반응형
댓글