컨트롤 파일의 재생성(DB명 변경)
컨트롤 파일을 재생성하는 이유는 다음과 같다.
1. Media failure로 인해 모든 컨트롤 파일을 잃어버렸다. 2. 데이터베이스 이름을 변경하고 싶다. 3. 현재 지정된 리두로그파일 그룹, 리두로그파일 멤버, 아카이블 리두로그파일, 데이터파일, 인스턴스의 최대수를 변경하고 싶다. 여기서는 DB명을 변경하는 시나리오를 살펴보겠다.
SQL> startup mount ORACLE instance started.
Total System Global Area 189102108 bytes Fixed Size 75804 bytes Variable Size 89006080 bytes Database Buffers 99942400 bytes Redo Buffers 77824 bytes Database mounted. SQL> alter database backup controlfile to trace;
Database altered.
SQL> show parameter user_dump_dest
NAME TYPE VALUE ------------------------------------ ------- ------------------------------ user_dump_dest string C:\oracle\admin\maddog\udump SQL> host dir C:\oracle\admin\maddog\udump C 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 48BB-0BA0
C:\oracle\admin\maddog\udump 디렉터리
2003-04-25 05:08p <DIR> . 2003-04-25 05:08p <DIR> .. 2003-04-25 02:52p 664 ORA00348.TRC 2003-04-25 05:03p 660 ORA00608.TRC 2003-04-25 02:48p 198,307 ORA00964.TRC 2003-04-25 05:03p 618 ORA01216.TRC 2003-04-25 05:08p 1,853 ORA01512.TRC 5개 파일 202,102 바이트 2 디렉터리 5,677,813,760 바이트 남음
user_dump_dest에 생성된 컨트롤파일의 복사본을 적절히 편집한다. 이는 아래 명령으로 바로 편집할 수도 있고, 자주 쓰는 편집기로 수정해도 된다. SQL> host edit C:\oracle\admin\maddog\udump\ORA01512.TRC
백업된 컨트롤파일의 내용을 함 보자. SQL> host type C:\oracle\admin\maddog\udump\ORA01512.TRC Dump file C:\oracle\admin\maddog\udump\ORA01512.TRC Fri Apr 25 17:08:35 2003 ORACLE V8.1.7.0.0 - Production vsnsta=0 vsnsql=e vsnxtr=3 Windows 2000 Version 5.0 Service Pack 3, CPU type 586 Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production Windows 2000 Version 5.0 Service Pack 3, CPU type 586 Instance name: maddog
Redo thread mounted by this instance: 1
Oracle process number: 14
Windows thread id: 1512, image: ORACLE.EXE
*** SESSION ID:(11.1) 2003-04-25 17:08:35.607 *** 2003-04-25 17:08:35.607 # 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 ma # 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 "MADDOG" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 1 MAXLOGHISTORY 1815 LOGFILE GROUP 1 'C:\ORACLE\ORADATA\MADDOG\REDO01.LOG' SIZE 1M, GROUP 2 'C:\ORACLE\ORADATA\MADDOG\REDO02.LOG' SIZE 1M, GROUP 3 'C:\ORACLE\ORADATA\MADDOG\REDO03.LOG' SIZE 1M DATAFILE 'C:\ORACLE\ORADATA\MADDOG\SYSTEM01.DBF', 'C:\ORACLE\ORADATA\MADDOG\RBS01.DBF', 'C:\ORACLE\ORADATA\MADDOG\USERS01.DBF', 'C:\ORACLE\ORADATA\MADDOG\TEMP01.DBF', 'C:\ORACLE\ORADATA\MADDOG\TOOLS01.DBF', 'C:\ORACLE\ORADATA\MADDOG\INDX01.DBF', 'C:\ORACLE\ORADATA\MADDOG\DR01.DBF' 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. #
SQL>
여기서는 다음과 같이 변경할 것이다.
DB명 : MADDOG -> DB MAXDATAFILES : 254 -> 100 (테스트 용도라면 100개면 적당할 것이다.) REUSE -> SET NORESETLOGS -> RESETLOGS RECOVER DATABASE 제거 ALTER DATABASE OPEN -> ALTER DATABASE OPEN RESETLOGS
변경한 것은 d:\temp\crtctl.sql 파일로 저장했고, 내용은 보면 다음과 같다.
SQL> host type d:\temp\crtctl.sql STARTUP NOMOUNT CREATE CONTROLFILE SET DATABASE "DB" RESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 1815 LOGFILE GROUP 1 'C:\ORACLE\ORADATA\DB\REDO01.LOG' SIZE 1M, GROUP 2 'C:\ORACLE\ORADATA\DB\REDO02.LOG' SIZE 1M, GROUP 3 'C:\ORACLE\ORADATA\DB\REDO03.LOG' SIZE 1M DATAFILE 'C:\ORACLE\ORADATA\DB\SYSTEM01.DBF', 'C:\ORACLE\ORADATA\DB\RBS01.DBF', 'C:\ORACLE\ORADATA\DB\USERS01.DBF', 'C:\ORACLE\ORADATA\DB\TEMP01.DBF', 'C:\ORACLE\ORADATA\DB\TOOLS01.DBF', 'C:\ORACLE\ORADATA\DB\INDX01.DBF', 'C:\ORACLE\ORADATA\DB\DR01.DBF' CHARACTER SET KO16KSC5601; ALTER DATABASE OPEN RESETLOGS;
먼저 DB를 shutdown한다. 컨트롤파일은 nomount모드에서 생성가능하다. DB생성 또한 nomount모드에서 수행하는 것도 알아두면 좋겠다. 연관해서 기억하면 좋겠지요? 윈도에는 좀 특이한 점이 있기 때문에 아래에 있는 것과 같이 oradim명령으로 한번더 수행해준다. (관리도구 - 서비스를 보면 shutdown명령후에도 DB가 시작상태에 있는 것을 볼 수 있다.) 컨트롤파일을 새로 생성하기 때문에 이전의 컨트롤 파일을 제거한다. SQL> shutdown ORA-01109: database not open
Database dismounted. ORACLE instance shut down. SQL> host oradim -shutdown -SID maddog SQL> host del c:\oracle\oradata\db\control*.*
이제 실행하면 된다. maddog으로 되어 있는 부분을 db로 변경해야 한다. 우선 C:\oracle\ora81\database의 initmaddog.ora 파일을 initdb.ora파일명으로 변경한다. initdb.ora에 maddog이라고 되어 있는 모든 것들을 울트라에디트등의 편집기를 이용해 db로 모두 변경한다. 윈도에서는 레지스트리도 변경해줘야 한다. 아래의 레지스트리키의 maddog을 모두 db로 변경한다. HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 maddog이라는 이름의 디렉토리를 db로 변경한다.
[notice] 레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 에서 ORA_db_AUTOSTART의 값이 false로 되어 있으면, 관리도구 - 서비스에서 오라클 시작시 오라클 인스턴스만 올라오게 된다. 인스턴스뿐만 아니라 DB도 같이 올라오게 하려면 이를 true로 변경하면 된다.
SQL> host move c:\oracle\oradata\maddog c:\oracle\oradata\db 1개 파일을 이동했습니다.
admin쪽은 자꾸 액세스가 거부되어서 창을 모두 닫고 수행했다. D:\>move c:\oracle\admin\maddog c:\oracle\admin\db 1개 파일을 이동했습니다.
서비스에 기존의 maddog을 제거한다. D:\>oradim -delete -sid maddog
서비스에 새로운 db를 등록한다. 관리도구 - 서비스에 OracleServicedb 가 등록된 것을 확인한다. 상태가 시작됨으로 표시되어 있다. D:\>oradim -new -sid db -startmode m -pfile c:\oracle\admin\db\pfile\initdb.ora
C:\oracle\ora81\database\PWDmaddog.ora을 C:\oracle\ora81\database\PWDdb.ora로 변경한다.
메시지를 영어로 보이도록 변경한다. 에러메시지가 한글로는 깨지는 경우가 많다. D:\>set NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
이제 새로만든 crtctl.sql파일을 수행해준다.
D:\>sqlplus /nolog
SQL*Plus: Release 8.1.7.0.0 - Production on 금 Apr 25 17:52:54 2003
(c) Copyright 2000 Oracle Corporation. All rights reserved.
SQL> connect internal Connected to an idle instance. SQL> @d:\temp\crtctl.sql ORACLE instance started.
Total System Global Area 189102108 bytes Fixed Size 75804 bytes Variable Size 89006080 bytes Database Buffers 99942400 bytes Redo Buffers 77824 bytes
Control file created.
Database altered.
SQL> show parameter db_name
NAME TYPE VALUE ------------------------------------ ------- ------------------------------ db_name string db SQL> select * from v$database;
DBID NAME CREATED RESETLOGS_CHANGE# RESETLOGS ---------- --------- --------- ----------------- --------- PRIOR_RESETLOGS_CHANGE# PRIOR_RES LOG_MODE CHECKPOINT_CHANGE# ----------------------- --------- ------------ ------------------ ARCHIVE_CHANGE# CONTROL CONTROLFI CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# --------------- ------- --------- --------------------- ------------------- CONTROLFI OPEN_RESETL VERSION_T OPEN_MODE --------- ----------- --------- ---------- 3609131437 DB 25-APR-03 187893 25-APR-03 187846 25-APR-03 NOARCHIVELOG 187894 0 CURRENT 25-APR-03 4309 187923 25-APR-03 NOT ALLOWED 25-APR-03 READ WRITE
SQL>
마지막으로 Net8을 사용하고 있다면, tnsnames.ora와 listener.ora도 필요에 따라 maddog으로 된 부분을 db로 변경한다.
|