Oracle DBMS를 운영하다보면 전임자의 실수이거나, 게으른 본인의 생각없는 설치 및 운영으로 인해서 디스크 공간의 부족함으로 인해서 서비스가 중단되는 일이 생기기도 합니다. 본사 내에서 마구잡이로 사용하는 개발용 DB중에 그런 장비가 있었는데 /opt/oracle 디렉토리가 사용율 100%에 이르러서야 확인을 하게 되었습니다.
 문제는 현재 각종 로그가 쌓이는 디렉토리와 $ORACLE_HOME, 그리고 각종 시스템 관련 Datafile, redo log file 등이 같은 파티션에 저장이 되고 있더군요. 그래서 ... 서비스를 중지시키지 않고 작업을 해야겠다는 생각에 redo log file을 옮기기로 결정했습니다. 이게 제일 만만해보이더군요.

리두로그 그룹 및 파일 현황 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE      MEMBER
---------- ---------------- ------- ----------------------------------------
         1 CURRENT          ONLINE  /opt/oracle/oradata/edo01.log                                    
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log 

네번째 리두로그 그룹 및 파일 추가

SQL> alter database add logfile group 4('/data/orasys/redo04.log') size 100M;

Database altered.

SQL>

리두로그 그룹 및 파일 추가 결과 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#;

    GROUP# STATUS           TYPE    MEMBER                                                                              
---------- ---------------- ------- ---------------------------------------- 
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log           
         3 INACTIVE         ONLINE  /opt/oracle/oradata/redo03.log             
         4 UNUSED           ONLINE  /data/orasys/redo04.log

기존 리두로그 파일 그룹중 하나 삭제
SQL> alter database drop logfile group 3;
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         4 UNUSED           ONLINE  /data/orasys/redo04.log

리두로그 파일 그룹 3을 새로운 위치에 추가
SQL> alter  database add logfile group 3 ('/data/orasys/redo03.log') SIZE 100M;

Database altered.

리두로그 파일 그룹 3이 정상적으로 추가되었는지 확인
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------   
         1 CURRENT          ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log            
         3 UNUSED           ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                             

SQL>

로그 스위치를 강재로 일으키며 상태값을 확인해본다.
SQL> alter system switch logfile;

System altered.

SQL>
SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 ACTIVE           ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log              
         3 CURRENT          ONLINE  /data/orasys/redo03.log                    
         4 UNUSED           ONLINE  /data/orasys/redo04.log                            

SQL>
SQL>  alter system switch logfile;

System altered.

SQL> select a.group#, a.status, b.type, b.member from v$log a, v$logfile b where a.group#=b.group#(+);

    GROUP# STATUS           TYPE    MEMBER
---------- ---------------- ------- ----------------------------------------    
         1 INACTIVE         ONLINE  /opt/oracle/oradata/redo01.log
         2 INACTIVE         ONLINE  /opt/oracle/oradata/redo02.log             
         3 INACTIVE         ONLINE  /data/orasys/redo03.log
         4 CURRENT          ONLINE  /data/orasys/redo04.log

SQL>


 기존에 AIX 서버에서 Oracle DB를 운영중이었는데, 여기에 개발용으로 Instance를 하나 추가하는 작업을했습니다. 여러가지 작업이 필요하지만 CREATE DATABASE 명령을 실행하기 전에 해야하는 작업 내용을 정리해보려합니다. 사전 작업 때문에 사실 고생을 좀 했거든요.

1. Parameter file 생성
 $ORACLE_HOME/dbs 디렉토리에 보면 기존 DB에서 사용하는 Parameter file이 있다. 이 파일을 수정해서 init[SID].ora라는 이름으로 파일을 생성한다. 이 작업은 oracle 계정(UNIX 계정)에서 수행해야한다.
 파일 내용중에서 SID, DBNAME, Control file의 위치 및 이름 그리고 디렉토리 이름등을 수정해야한다.
예를 들어 새로 만들 개발DB의 SID를 NEWDEV라고 하면.
수정해줘야 할 부분은 아래와 같다. 음... 그외에도 손볼곳을 손본뒤에 저장한다.
###########################################
# Database Identification
###########################################
db_domain=""
db_name=NEWDEV

###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/oracle/dbms/admin/NEWDEV/bdump
core_dump_dest=/oracle/dbms/admin/NEWDEV/cdump
timed_statistics=TRUE
user_dump_dest=/oracle/dbms/admin/NEWDEV/udump

###########################################
# File Configuration
###########################################
control_files=("/db1/NEWDEV/control01.ctl","/db2/NEWDEV/control02.ctl")

###########################################
# Instance Identification
###########################################
instance_name=NEWDEV

###########################################
# MTS
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=NEWDEVXDB)"

###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_retention=3600
undo_tablespace=UNDOTBS1   <= 이 부분은 CREATE DATABASE 명령을 실행할때와 이름을 맞춰줘야한다.


2. Password file을 생성한다.
 Parameter file과 마찬가지로 $ORACLE_HOME/dbs 디렉토리에서 아래 명령을 실행한다.
# orapwd file=orapwNEWDEV password=비밀번호

그리고 중요한거... 기존의 oracle이라는 UNIX 계정이 아닌 다른 계정에서 oracle이 실행되므로 password file은 oracle 계정(UNIX 계정)에서 생성하고, chmod 명령을 이용하여 권한을 777로 만들어 줘야한다. 근데 instance를 추가하고 난뒤에 DB를 생성하면 이게 원상태로 돌아가버리던데... 이건 뭐가 문제인지...

+ Recent posts