TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-20 |
제목 | ORA-1118 조치방법(MAXDATAFILES 와 DB_FILES) | ||
---|---|---|---|
ORA-01118 조치방법(MAXDATAFILES 와 DB_FILES)
=========================================== 테이블스페이스를 만들거나 데이타 화일을 추가하다 보면 ORA-1118 : cannot add any more database files: limit of XXX exceeded. 와 같은 에러가 발생하는 경우가 있다. 오라클의 데이타 화일의 최대 갯수는 MAXDATAFILES와 DB_FILES 에 의해서 제한을 받는데 여기서는 이 에러를 해결하는 방법을 알아보기로 한다. 데이타베이스를 처음 만들 때 사용되는 CREATE DATABASE 명령에서 MAXDATAFILES 라는 파라미터를 찾아볼 수 있다. 여기서 지정된 값(명시를 안하면 디폴트로 설정)은 콘트롤 화일에 기록된다. 이 값은 데이타 베이스에 대해서 설정된 최대 데이타화일 갯수이다. 이 값을 변경하려면 콘트롤 화일을 다시 만들어야 한다. 한편, ora-59 에러는 init.ora(UNIX 에서는 init 해당 인스턴스에 대해서 지정된 최대 데이타화일 갯수이다. DB_FILES는 단순히 initSID.ora 화일에서 db_files를 늘린 다음에 DB를 Restartup 하면 새로운 값이 적용된다. 1. 왜 MAXDATAFILES 와 같은 한계값을 설정하는가? -> O/S는 오라클 화일의 갯수를 지정하기 위하여 특정한 갯수의 bit를 사용하며 이 값이 Platform에 따라 다르다. MAXDATAFILES는 이 값의 영향 하에 있게 된다. 일반적인 최대 값은 다음과 같다. V6 V7 -------------------------------------------- UNIX 62 1022 VMS 254 1022 DOS 254 NA [참조]일부 Unix Platform 상의 V7.0.16 이전 버전의 경우 1022보다 작은 경우도 있다. 2. 왜 MAXDATAFILES 값을 가능한 최대로 설정해 두지 않는가? -> MAXDATAFILES 를 크게 지정하면 그만큼 콘트롤 화일의 크기도 늘어나기 때문이다. 3. 왜 DB_FILES를 MAXDATAFILES 의 크기만큼 크게 설정해 두지 않는가? -> DB_FILES를 늘리면 각 User Process에 할당되는 PGA(Program Global Area) 의 크기가 커지기 때문이다. 4. 사용하는 시스템의 MAXDATAFILES를 알 수 있는 방법은? -> 시스템에 따라서 다르므로 Installation Guide를 참조해야만 한다. 5. 콘트롤 화일의 위치를 아는 방법은? -> SQLDBA>show parameter control_files; 또는 SQLDBA>select * from v$controlfile; (7.0.16 이상) 위의 Query를 이용하거나 $ORACLE_HOME/dbs/config.ora 화일을 보면 알 수 있다. [ORA-1118 해결방법] -> ORA-1118 에러는 데이타 화일의 갯수가 MAXDATAFILES 값에 도달한 경우 발생한다. DB_FILES 값에 도달한 경우라면 ORA-59 에러가 발생한다. ORA-59 에러는 init.ora의 DB_FILES를 늘려주고 DB를 Restartup 하면 해결되지만 ORA-1118 에러는 이와 같이 간단하게 해결되지는 않는다. 다음과 같은 방법이 있다. 1. 여러 개의 데이타화일로 구성된 테이블스페이스가 있으면 이를 Export받고 테이블스페이스를 Drop한 다음 하나의 큰 데이타화일을 갖도록 테이블스페이스를 만들고 Import를 한다. 2. V6.0.33 이전 버젼을 사용 중이라면 MAXDATAFILES를 늘리기 위해서는 DB를 새로 만들어야 하며 그 이후 버젼을 사용 중이라면 콘트롤 화일을 새로 만들어서 MAXDATAFILES를 늘릴 수 있다. 1. DB가 mount 또는 open된 상태에서 SQLDBA>alter database backup controlfile to trace; 와 같은 명령을 내리면 7.3 이하 버젼 : $ORACLE_HOME/rdbms/log - 7.3 이상 버젼 : svrmgrl> show parameter user_dump_dest <확인결과> ...app/oracle/admin/SID/udump 에 Trace 화일이 하나 생긴다. 이 화일을 찾으려면 해당 디렉토리에서 가장 최근에 생긴 Trace 화일을 찾으면 된다. 이 화일을 다른 이름으로 복사한 다음 에디터로 열어서 CREATE CONTROLFILE 명령 부분 외의 불필요한 부분과 'REUSE' OPTION 을 지우고 MAXDATAFILES를 늘려 준다. 이 화일의 이름을 newctl.sql 로 하기로 한다. 2. DB를 NORMAL 또는 IMMEDIATE로 shutdown 하고, 콘트롤 화일 생성 시 DB에 영향을 줄 수 있기 때문에 만약을 위해서 DB 전체를 백업 받도록 한다. 3. 최소한 ORCACLE_HOME/dbs 에 있는 Control file 만이라도 백업을 받는다. 4. 다음을 실행한다. SQLDBA>startup nomount SQLDBA>@newctl SQLDBA>alter database open; 5. 이제 필요한 모든 작업은 끝났지만 여기서 다시 한번 full bakcup을 받는 것이 좋다. [ 참고 ] 다음은 콘트롤 화일을 생성하는 명령의 예이다. SQLDBA> STARTUP NOMOUNT SQLDBA> CREATE CONTROLFILE DATABASE ORACLE LOGFILE '/users/oracle/dbs/log1ORACLE.dbf', '/users/oracle/dbs/log2ORACLE.dbf', '/users/oracle/dbs/log3ORACLE.dbf' NORESETLOGS DATAFILE '/users/oracle/dbs/systORACLE.dbf', '/users/oracle/dbs/rbsORACLE.dbf', '/users/oracle/dbs/tempORACLE.dbf', '/users/oracle/dbs/toolORACLE.dbf', '/users/oracle/dbs/usrORACLE.dbf' MAXDATAFILES 100; SQLDBA> ALTER DATABASE OPEN NORESETLOGS; (참고) rdbms 7.2 이상에서는 datafile 갯수를 추가하는 대신 기존의 화일의 크기를 늘려주는 resize 기능이 있습니다. 사용 방법 (7.2 에서는 sqldba lmode=y) 1) svrmgrl> connect internal; svrmgrl> show parameter compatible NAME TYPE VALUE ----------------------------------- ------- --------------------------- compatible string 7.2 위와 같이 compatible 이 7.2 이상이어야 합니다. (만약, 아닐 경우에는 $ORACLE_HOME/dbs/initSID.ora 에 compatible 이 정의되어 있는지 확인한 다음, 없으면 다음 라인을 추가하십시오.) compatible = 7.2.0.0.0 그 다음 re-startup 하시면 됩니다. 2) /users/oracle/dbs/usrORACLE.dbf를 100M 에서 200M 으로 resize 하는 명령 : alter database datafile '/users/ora/dbs/usrORACLE.dbf' resize 200M; |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |