Describe MaxDataFile의변경 here {{{ SQL> --Control File의 MAXDATAFILES의 수정 SQL> connect internal 연결되었습니다. SQL> alter database backup controlfile to trace; 데이타베이스가 변경되었습니다. SQL> --udump에 create control 형식으로 된 파일을 백업했을 것이다. 해당 경로를 찾아본다. SQL> shutdown immediate; 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다. SQL> Trace 내용 -- Create Controlfile 명령이 보일 것이다. ========================================================================================== Dump file e:\Oracle\admin\ora816\udump\ORA03404.TRC Thu Oct 30 03:32:50 2003 ORACLE V8.1.6.0.0 - Production vsnsta=0 vsnsql=e vsnxtr=3 Windows 2000 Version 5.2 , CPU type 586 Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Windows 2000 Version 5.2 , CPU type 586 Instance name: ora816 Redo thread mounted by this instance: 1 Oracle process number: 14 Windows thread id: 3404, image: ORACLE.EXE *** SESSION ID:(11.55) 2003-10-30 03:32:50.082 *** 2003-10-30 03:32:50.082 # The following commands will create a new control file and use it # to open the database. # Data used by the recovery manager will be lost. Additional logs may # be required for media recovery of offline data files. Use this # only if the current version of all online logs are available. STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORA816" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 16 MAXLOGHISTORY 1815 LOGFILE GROUP 1 'E:\ORACLE\ORADATA\ORA816\REDO03.LOG' SIZE 1M, GROUP 2 'E:\ORACLE\ORADATA\ORA816\REDO02.LOG' SIZE 1M, GROUP 3 'E:\ORACLE\ORADATA\ORA816\REDO01.LOG' SIZE 1M DATAFILE 'E:\ORACLE\ORADATA\ORA816\SYSTEM01.DBF', 'E:\ORACLE\ORADATA\ORA816\RBS01.DBF', 'E:\ORACLE\ORADATA\ORA816\USERS01.DBF', 'E:\ORACLE\ORADATA\ORA816\TEMP01.DBF', 'E:\ORACLE\ORADATA\ORA816\TOOLS01.DBF', 'E:\ORACLE\ORADATA\ORA816\INDX01.DBF', 'E:\ORACLE\ORADATA\ORA816\DR01.DBF', 'E:\ORACLE\ORADATA\ORA816\WS_DATA1.ORA', 'E:\ORACLE\ORADATA\ORA816\WS_IDX1.ORA', 'E:\ORACLE\ORADATA\ORA816\TMP1ORCL.ORA' CHARACTER SET KO16KSC5601 ; # Recovery is required if any of the datafiles are restored backups, # or if the last shutdown was not normal or immediate. RECOVER DATABASE # Database can now be opened normally. ALTER DATABASE OPEN; # No tempfile entries found to add. # ========================================================================================== MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 32 MAXINSTANCES 16 MAXLOGHISTORY 1815 여기에서 볼 수 있듯이 로그파일의 개수나 로그 맴버의 개수, 최대 데이터 파일수등이 있는 것이 보인다. 이 값이 넘어가면 오라클은 기동되지 않을 것이다. 다음을 정확히 수행한다. 1. MAXDATAFILES값을 어마어마한 숫자로 늘려준다. MAXDATAFILES 100000000000 2. 기존의 제어파일명을 바꾼다. 필자의 경우 제어파일의 위치는 다음과 같다. control_files = ("e:\Oracle\oradata\ora816\control01.ctl", "e:\Oracle\oradata\ora816\control02.ctl", "e:\Oracle\oradata\ora816\control03.ctl") control01.ctl.old, control01.ctl.old, control01.ctl.old로 바꾸었다. SQL> startup mount ora816 exclusive; ORACLE 인스턴스가 시작되었습니다. Total System Global Area 237008140 bytes Fixed Size 70924 bytes Variable Size 79572992 bytes Database Buffers 157286400 bytes Redo Buffers 77824 bytes ORA-00205: ????? ????? ??, ?? ??? ? ?? ??? ?? ??? ?????? SQL> -- 위에서 trace한 것에서 Create Controlfile...을 실행시킨다. SQL> CREATE CONTROLFILE REUSE DATABASE "ORA816" NORESETLOGS NOARCHIVELOG 2 MAXLOGFILES 32 3 MAXLOGMEMBERS 2 4 MAXDATAFILES 100000000000 5 MAXINSTANCES 16 6 MAXLOGHISTORY 1815 7 LOGFILE 8 GROUP 1 'E:\ORACLE\ORADATA\ORA816\REDO03.LOG' SIZE 1M, 9 GROUP 2 'E:\ORACLE\ORADATA\ORA816\REDO02.LOG' SIZE 1M, 10 GROUP 3 'E:\ORACLE\ORADATA\ORA816\REDO01.LOG' SIZE 1M 11 DATAFILE 12 'E:\ORACLE\ORADATA\ORA816\SYSTEM01.DBF', 13 'E:\ORACLE\ORADATA\ORA816\RBS01.DBF', 14 'E:\ORACLE\ORADATA\ORA816\USERS01.DBF', 15 'E:\ORACLE\ORADATA\ORA816\TEMP01.DBF', 16 'E:\ORACLE\ORADATA\ORA816\TOOLS01.DBF', 17 'E:\ORACLE\ORADATA\ORA816\INDX01.DBF', 18 'E:\ORACLE\ORADATA\ORA816\DR01.DBF', 19 'E:\ORACLE\ORADATA\ORA816\WS_DATA1.ORA', 20 'E:\ORACLE\ORADATA\ORA816\WS_IDX1.ORA', 21 'E:\ORACLE\ORADATA\ORA816\TMP1ORCL.ORA' 22 CHARACTER SET KO16KSC5601 23 ; 동작제어 파일이 생성되었습니다. SQL> --어떤 복구 작업이 수행되었다면 alter database open resetlog 처럼 SQL> --resetlog옵션을 붙여줘야 한다. SQL> alter database open; 데이타베이스가 변경되었습니다. SQL> 컨트롤 파일이 있던 경로로 가보면 3개의 컨트롤 파일이 생성되어 있을 것이다. 필자는 일반 PC 여서 컨트롤 파일을 하나의 디스크에 놓았다. 만약 실제 서비스중인 DB서버인 경우는 이렇게 컨트를 파일이 하나의 디스크에 있어서는 곤란다. 깔끔하게 이전의 컨트롤 파일을 지워준다. }}}