1.오라클 내부 구조 (Oracle Architecture)

오라클은 크게 인스턴스(Instance)와 데이터베이스로 나눌 수 있습니다. 인스턴스는 크게 SGA (System Global Area) 등 메모리 영역과 Background Process 등의 서버프로세스로 구성됩니다.
SGA영역은 오라클이 사용하는 메모리 영역으로 $ORACLE_HOME/dbs/inin$ORACLE_SID.ora 파일에 정의된 값에 따라 세팅됩니다. SGA 영역을 세분화 하면 Database buffer cache와 Redo log buffer, Shared pool 영역으로 구성됩니다. 각 영역마다 저장되는 데이터가 다른 것이죠. Background Process들도 각 작업마다 분담하여 수행하게 됩니다. 기본적으로 DBWR, LGWR, PMON, SMON이 있고 네트워크환경의 데이터의 분산기능과 일관성, 백업기능을 지원하기 위해 추가로 RECO, LOCK, ARCH, Dispatcher 등이 있습니다.

오라클 데이터베이스는 데이터를 저장하는 부분으로 물리적인 구조를 보면 데이터파일, 데이터 변경에 대한 히스토리를 저장하고 데이터의 안정성을 위한 로그 파일, 데이터베이스의 전체적인 구조를 저장하고 있는 제어 파일로 구성됩니다. 그리고 Background Process와 SGA영역의 크기에 대한 값을 저장하는 파라미터 파일이 있습니다.


1-1 오라클 메모리 구조

오라클이 사용하는 메모리 영역을 보면 크게 Software Code Area, PGA(Program Global Area), SGA(System Global Area)로 나눌 수 있습니다.


1-1-1 Software Code Area

오라클의 실행 모듈이 할당되는 메모리 공간입니다. 수행중이거나 수행 될 수 도 있는 모듈이 대체로 stack에 올려져 있으며 소프트웨어가 update 되거나 재 인스톨 될 때 변경되어 질 수 있습니다. 일반 유저 프로그램이 접근할 수 없고, 크기는 O/S에 따라 약간씩 다르지만 Virtual Memory에 위치하기도 합니다.

1-1-2 SGA(System Global Area)

오라클 인스턴스의 한 부분으로 인스턴스가 Startup 할 때 메모리에 할당되는 작업 영역입니다. 이 영역은 오라클이 기동중에 사용되는 데이터나 각종 정보들 그리고 일반 유저들의 모든 SQL 문장들이 이곳에서 실행됩니다. init$ORACLE_SID.ora 파라미터 파일의 메모리변수들에 의해서 SGA영역의 크기가 정해집니다. SGA 영역은 클수록 성능상 이점이 있지만 Real Memory 영역에 위치할 수 있도록 적절히 조절해야합니다.


*PGA(Program Global Area)의 구성요소

: 유저 프로세스를 처리하는 서버 프로세스에서 생성하여 사용하는 메모리 영역

1. 정렬 공간(Sort Area) : 정렬을 수행하기 위한 메모리 공간으로 부족하면 디스크를 이용함

2. 세션 정보(Session Information) : 추출된 결과값을 전달하기 위해 유저 프로세스의 세션 정보를 저장

3. 커서 상태 정보(Cursor State) : 해당 SQL의 파싱 정보가 저장되어 있는 주소를 저장

4. 변수 저장 공간(Stack Space) : SQL 문장에 바인드 변수 사용시 이를 저장하는 공간

>> 바인드 변수(Bind Variable) : 변수의 값이 달라져도 같은 문장으로 인식하여 하드 파싱을 줄임

*SGA(System Global Area)의 구성요소

: 디스크에서 읽혀진 데이터가 저장되고 그 데이터들이 읽혀지거나 변경되어지는 작업에 사용되는 공용 메모리 영역

1. 공유 풀(Shared Pool)

ⅰ)고정 영역 : 오라클이 SGA를 관리하는 메커니즘 및 오라클 파라미터 정보가 저장

ⅱ)동적 영역

①라이브러리 캐쉬(Library Cashe)

: 실행된 SQL, SQL에 대한 분석 정보 및 실행 계획이 저장

②데이터 딕셔너리 캐쉬(Data Dictionary Cashe, Row Cashe)

: 테이블, 인덱스,함수, 및 트리거 등 오라클 오브젝트 정보 및 권한 등의 정보가 저장

>>> 재사용을 위한 SQL의 조건

①대.소문자 일치

②띄어쓰기 일치

③오브젝트 소유자 일치

2. 데이터 버퍼 캐쉬(Data Buffer Cashe) : 디스크에서 읽혀진 데이터가 저장되는 메모리 공간

3. 리두 로그 버퍼(Redo Log Buffer) : 복구를 위해 데이터의 변경 로그를 저장

>>> 선 로그 기법(Ahead Logging) : 변경 작업 중 장애가 발생하여도 복구를 할 수 있게 로그를 먼저 기록

4. 대형 풀(Large Pool) : 필수 영역은 아니나 공유 풀의 부하를 감소시킴

ⅰ)UGA (User Global Area)영역 저장 : PGA의 부분 집합(정렬 공간, 세션 정보, 커서 상태 정보)

공유 서버(MTS) 환경에서는 UGA가 공유 풀을 사용하는데 이를 방지하기 위해 대형 풀을 설정

ⅱ)RMAN(Recover Manager)의 정보 저장

ⅲ)병렬 프로세스(Parallel Processing)의 정보 저장

설정하지 않으면 병렬 프로세스 메시지(PX MSG)는 공유 풀을 사용

ⅳ)I/O 슬래이브 프로세스의 정보 저장

5. 자바 풀(Java Pool) : 자바 명령 구문을 분석할 때 사용하는 메모리 공간

*공유 메모리 자동 관라(Automatic Shared Memory Management, ASMM) 10g

오라클 10g의 새로운 기능으로 오라클의 MMAN 백그라운드 프로세스가 업무 부하를 판단하여 공유 풀, 데이터 버퍼 캐쉬, 대형 풀 및 자바 풀의 크기를 조정하는 기능

장점 ①메모리 관리 요소 감소

②메모리 사용 효율 증가

③메모리 부족으로 인한 에러 감소

고려사항 ①MMAN이 관리하지 않는 SGA 구성요소

②사용자가 MMAN이 관리하는 MMAN에 의해 관리되는 SGA 영역의 최소값 설정


[오라클 날짜함수: MONTHS_BETWEEN, SYSDATE, TODAY, LAST_DAY, NEXT_DAY]

1. select name, lastlogin, lastlogin+30, lastlogin-30, lastlogin+365,
lastlogin+5/24, lastlogin-8/24 from member where id = 'jsoh2';
--member테이블에서 id가 jsoh2위치하는 name, lastlogin 2개의 컬럼을 뿌려주고,
--lastlogin 컬럼의 값에 +30일을 출력, -30일을 출력, +365일을 출력,
--5시간 더한 값을 출력, 8시간 뺀 값을 출력

2. select months_between('2008/11/25', '2001/08/12') "기간" from dual;
--월 단위로 날짜 연산을 하는 함수
--개월간의 차이: 87.4193548387097개월, 약 87개월
3. SELECT ADD_MONTHS(SYSDATE,5) FROM DUAL;
--월 단위로 날짜 연산을 하는 함수
4. select ID, JOINDATE, MONTHS_BETWEEN(SYSDATE, JOINDATE) TENURE,
ADD_MONTHS(JOINDATE, 6) REVIEW FROM MEMBER
WHERE id = 'jsoh2' and MONTHS_BETWEEN(SYSDATE, JOINDATE) < 120;
--member테이블에서 id가 jsoh2위치하는 id, joindate 2개의 컬럼을 뿌려주고,
--tenure컬럼에는 현재날짜(sysdate)-회원가입한날(joindate)를 계산한 개월수 출력하고,
--review컬럼에는 회원가입한날(joindate)에서 6개월 이후의 값을 출력
5. select sysdate from dual;
--현재시간
6. SELECT SYSDATE TODAY, LAST_DAY(SYSDATE) LASTDAY FROM dual ;
--해당 날짜가 속한 달의 마지막 날짜를 반환하는 함수
7. SELECT NEXT_DAY(sysdate, 'sunday') from dual
--해당 일을 기준으로 명시된 요일의 다음 날짜를 변환하는 함수

※ 아래 이미지 3개는 전부 같은 내용을 담고 있다.

[날짜함수: MONTHS_BETWEEN, SYSDATE, TODAY, LAST_DAY, NEXT_DAY]

1번
출력결과
NAME LASTLOGIN LASTLOGIN+30 LASTLOGIN-30 LASTLOGIN+365 LASTLOGIN+5/24 LASTLOGIN-8/24
홍길동 2008-07-10 15:37:25 2008-08-09 15:37:25 2008-06-10 15:37:25 2009-07-10 15:37:25 2008-07-10 20:37:25 2008-07-10 07:37:25
2번
출력결과
기간
1900-03-27 10:03:52
3번
출력결과
ADD_MONTHS(SYSDATE,5)
2009-04-25 17:23:13
4번
출력결과
ID JOINDATE TENURE REVIEW
jsoh2 2008-07-10 15:36:35 1900-01-04 11:40:13 2009-01-10 15:36:35
5번
출력결과
SYSDATE
2008-11-25 17:23:13
6번
출력결과
TODAY LASTDAY
2008-11-25 17:23:14 2008-11-30 17:23:14
7번
출력결과
NEXT_DAY(SYSDATE,'SUNDAY')
2008-11-30 17:23:14 http://blog.naver.com/agamaster

[출력결과 이미지사이즈: 원본]

[SQL 결과]



아카이브모드 사용


파라미터파일(init[SID].ora)에 다음과 같이 지정한다.

log_archive_start = true   (자동 아카이브를 사용하겠음,  ARCH백그라운드프로세스가 실행됨)

log_archive_dest = "C:\Oracle\oradata\maddog\archive" (아카이브로그가 저장될 곳)

log_archive_format = %%ORACLE_SID%%T%TS%S.ARC (파일이름을 어떤 식으로 할 것인가 지정)

이렇게 한 후, 데이터베이스를 시동하면 자동아카이빙으로 들어가게 된다.

오라클 8iEE(Enterprise Edition 8.1.xx버전이후로는 다음과 같이 사용할 것을 권고하고 있다.)

log_archive_start가 true이면 온라인redolog파일이 full되었을 경우 자동으로 아카이빙을 처리할 수 있게 한다.

log_archive_dest_1 = "location=C:\Oracle\oradata\maddog\archive"



log_archive_dest_n에서 n은 5개까지 잡혀져 있다.

자동 아카이빙이란
online redo log파일이 full이되면 로그스위치가 발생한다.
LGWR는 redo를 online redo log의 또 다른 set에 쓰기 시작한다.
(즉, 다른 로그그룹에 쓴다.)
로그 스위치후, 체크포인트가 발생한다.
LGWR는 DBWR에게 DB의 변경사항들을 포함하는 모든 버퍼에 있는 버퍼캐쉬의 내용을
디스크에 쓰도록한다. 또한 LOGWR는 로그스위치정보를 datafile의 헤더와 control파일에
쓴다. 자동 아카이빙을 설정했다면 마지막으로 ARCH백그라운드 프로세스가 online redo log를
LOG_ARCHIVE_DEST에 지정되어 있는 디렉토리로 복사한다.
만약 수동으로 아카이브하려면 다음과 같이 해줘야 한다.

이것은 full된 online redo log파일을 아카이브한다.

alter system archive log all to '/u01/oracle/arch'



alter system archive log start(자동아카이빙사용)는 ARCHIVE_LOG_DEST에 지정된 디렉토리로

archive log파일을 기록한다. 만일 수동으로 위치를 지정하고 싶다면 다음과 같이

한다.

alter system archive log start to '/u02/oracle/archive'



SVRMGR> startup

ORACLE 인스턴스가 시작되었습니다.

시스템 글로벌 영역                         45487372 바이트 합계

Fixed Size                                          70924 바이트

Variable Size                                    28364800 바이트

Database Buffers                                 16973824 바이트

Redo Buffers                                        77824 바이트

데이터베이스가 마운트되었습니다.

데이터베이스가 열려졌습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive (ARCHIVE_LOG_DEST)

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

현재 위의 예에서 보듯이 DB가 아카이브 모드가 아니다.

데이터베이스 로그 모드'는 데이터베이스 생성시 지정해줘야 된다.

default는 noarchivelog이다.

create database .. [archivelog or noarchivelog]



noarchivelog인 데이터베이스를 archivelog모드로 변경하기 위해선 다음과 같이 해야 한다.

1. 데이터베이스 인스턴스를 shutdown한다.

2. 데이터베이스를 백업한다.(DB변경사항이 있으면 하는 형식적인 절차이다.)

3. 데이터베이스 인스턴스를 start, mount한다.(open하지 않음)

만일 OPS(Oracle Parallel Server)를 사용한다면 exclusive하게 mount해야 한다.

4. 데이터베이스를 archivelog모드로 변경한다.



SVRMGR> shutdown

데이터베이스가 닫혔습니다.

데이터베이스가 마운트 해제되었습니다.

ORACLE 인스턴스가 종료되었습니다.

SVRMGR> startup mount exclusive;

ORACLE 인스턴스가 시작되었습니다.

시스템 글로벌 영역                         45487372 바이트 합계

Fixed Size                                          70924 바이트

Variable Size                                    28364800 바이트

Database Buffers                                 16973824 바이트

Redo Buffers                                        77824 바이트

데이터베이스가 마운트되었습니다.

SVRMGR> alter database maddog archivelog;

명령문이 처리되었습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive

가장 오래된 온라인 로그 순차   1165

다음 아카이브 로그 순차        1167

현재 로그 순차                 1167

SVRMGR> alter database maddog open;

명령문이 처리되었습니다.

참조)

패러미터파일에서 log_archive_start = true을 설정하여 자동 아카이브를 사용할 수도 있으나,

서버관리자에서 archive log start로도 자동 아카이브를 사용할 수도 있다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 불가능

아카이브 수신지                C:\Oracle\Ora81\RDBMS

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

SVRMGR> alter system archive log start (alter system은 생략 가능하다)

명령문이 처리되었습니다.

SVRMGR> archive log list

데이터베이스 로그 모드         아카이브 모드가 아님

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\Ora81\RDBMS

가장 오래된 온라인 로그 순차   1165

현재 로그 순차                 1167

SVRMGR> alter system archive log stop (alter system은 생략 가능하다)

명령문이 처리되었습니다.

참조)
log_archive_format에 대해 살펴보자.

log_archive_format = %%ORACLE_SID%%T%TS%S.ARC

%%ORACLE_SID은 자신의 SID가 될 것이다. 여기서는 maddog이 되겠다.

%T: OPS(Oracle Parallel Server)안에 있는 instance의 redo log들에 대한 쓰레드번호. 좌측이 0으로 채워짐
%t: 상동. 좌측이 0으로 채워지지 않음
%S: 로그시퀀스번호. 좌측이 0으로 채워짐
%s: 상동. 좌측이 0으로 채워지지 않음

실제 위의 예에서 log_archive_format로 지정한 파일이름이 어떻게 생성되는지를 보자.
SVRMGR> alter system switch logfile; 이 명령으로 archive log파일이 디스크에 기록되게 된다

명령문이 처리되었습니다.

SVRMGR> archive log list;

데이터베이스 로그 모드         아카이브 모드

자동 아카이벌                  사용 가능

아카이브 수신지                C:\Oracle\oradata\maddog\archive

가장 오래된 온라인 로그 순차   1166

다음 아카이브 로그 순차        1168

현재 로그 순차                 1168

DB의 아카이브상태는 v$database뷰에서도 알수 있다.

v$database는 또한 change-based복구에서 필요로 하는 SCN을 제공한다.

로그순차(log sequence)의 경우 v$log_history뷰에서도 알 수 있다.

v$database의 정보는 control file에서 수집된 것이다.

SQL> select * from v$database;

DBID NAME      CREATED  RESETLOGS_CHANGE# RESETLOG PRIOR_RESETLOGS_CHANGE#

---------- --------- -------- ----------------- -------- -----------------------

PRIOR_RE LOG_MODE     CHECKPOINT_CHANGE# ARCHIVE_CHANGE# CONTROL CONTROLF

-------- ------------ ------------------ --------------- ------- --------

CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLF OPEN_RESETL VERSION_

--------------------- ------------------- -------- ----------- --------

OPEN_MODE

----------

3524231243 MADDOG    00/09/03                 1 00/09/03                       0

ARCHIVELOG             83385621          161317 CURRENT 00/09/03

3554            83385621 00/11/07 NOT ALLOWED 00/09/03

READ WRITE

SQL> SELECT * FROM V$LOG_HISTORY;

RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TI NEXT_CHANGE#

---------- ---------- ---------- ---------- ------------- -------- ------------

1  407369109          1          1             1 00/09/03          281

2  407369111          1          2           281 00/09/03          673

3  407369114          1          3           673 00/09/03         1248

4  407369119          1          4          1248 00/09/03         1740

5  407369121          1          5          1740 00/09/03         2339

6  407369124          1          6          2339 00/09/03         2929

7  407369127          1          7          2929 00/09/03         3442

.

.

1165  407373591          1       1165        161240 00/09/03       161317

1166  407374000          1       1166        161317 00/09/03       181479

1167  412272843          1       1167        181479 00/09/03       182038

위의 명령실행후, C:\Oracle\oradata\maddog\archive에 가보면 다음과 같은 파일이 생긴것을 알 수 있다.

MADDOGT001S01167.ARC

현재 활성화된 리두로그는 다음의 질의를 통해 알수 있다.

여기서 ARCHIVED(예제에서는 ARC로 이름이 짤렸다.)는 어떤 리두로그그룹이 archive되었는지 알 수 있다.

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TI

---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------

1          1       1168    1048576          1 NO  CURRENT                 182038 00/10/29

2          1       1166    1048576          1 YES INACTIVE                161317 00/09/03

3          1       1167    1048576          1 YES INACTIVE                181479 00/09/03

SQL> select * from v$logfile;

GROUP# STATUS  MEMBER

---------- ------- ----------------------------------------

1         C:\ORACLE\ORADATA\MADDOG\REDO01.LOG

2 STALE   C:\ORACLE\ORADATA\MADDOG\REDO02.LOG

3         C:\ORACLE\ORADATA\MADDOG\REDO03.LOG

음.. v$log와 v$logfile을 group#으로 join key를 삼아서 join하면 좋겠군..

패러미터파일(init.ora)의 LOG_ARCHIVE_DEST에 저장되는 아카이브된 redo로그들은

보통 오프라인상태인 테이프등에 백업받아 두는 것이 좋다.

만약 아카이브된 리두로그가 손상되었다면 손상된 리두로그 바로 전의 시점까지만

복구된다. 이런 상황에서는 단지 완벽하지 않은(incomplete) 복구를 할 수 밖에 없다.

incomplete복구는 time-based, change-based, cancel-based가 있다.

2001-11-11 추가

아카이브된 리두로그(offline 리두로그라고도 함)파일들은 log_archive_dest에 쌓이게 되고

여기에 쌓인 파일들의 목록들은 v$archived_log에 기록된다.

2001-12-22 추가

패러미터파일(Init.ora)에서 아카이브관련된 이름은 log_archive_로 시작한다.

SVRMGRL프롬프트상에서 아카이브에 관련된 이름은 archive log로 지정된다.

관련뷰: v$archived_log, v$logfile, v$log, v$log_history

2004-01-31 추가

9i부터는 다음과 같이 하면 된다.

DB를 아카이빙이 사용할 디렉토리 지정

SQL> alter system set log_archive_dest='/u01/app/oracle/admin/dev/arch'; (오라클 재시작시 반영안됨)

or

SQL> alter system set log_archive_dest='/u01/app/oracle/admin/dev/arch' scope=both; (오라클 재시작시 반영됨)

DB를 아카이브모드로 변경

SQL> alter database maddog archivelog;

자동 아카이빙 활성화

SQL> alter system archive log start; 

SQL> alter system set log_archive_start=true scope=spfile; (오라클 재시작시 반영되도록 함)

1. 먼저, 아카이브 모드로 운영되는지 확인.(sqlplus 로 접속후 확인)

몇가지 방법이 있음…

SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 214
Current log sequence 216

SQL> select log_mode from v$database;

LOG_MODE
————
NOARCHIVELOG

2. 위를 보면 아카이브 모드가 아닌것을 알 수 있음.

3. spfile(server parameter file)로 부터 pfile(parameter file)생성.

SQL> create pfile=’$ORACLE_HOME/dbs/initfox.ora’
from spfile=’$ORACLE_HOME/dbs/spfilefox.ora’;

4. 위에서 생성한 pfile에 아래 사항을 추가(ARCHIVE_LOCATE는 다른 파티션에 잡아주는것이 좋다.)

*.log_archive_start=TRUE
*.log_archive_dest_1=’location=ARCHIVE_LOCATE’
*.log_archive_format=’SID_%s_%t_%r.arc’

5. 설정을 적용하기위해 데이타베이스를 재시작한다.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.

Total System Global Area 293601280 bytes
Fixed Size 1978144 bytes
Variable Size 125833440 bytes
Database Buffers 159383552 bytes
Redo Buffers 6406144 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 215
Next log sequence to archive 217
Current log sequence 217

6. 아카이브로그가 생성되는지 확인해본다.

여기에서 문제가 발생했다. 아카이브 로그가 지정한 디렉토리에 생성되지 않고 USE_DB_RECOVERY_FILE_DEST에 생성이 되는 문제다. 여기에서 USE_DB_RECOVERY_FILE_DEST를 내가 원하는 디렉토리로 바꾸는 방법은?

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.

Total System Global Area 293601280 bytes
Fixed Size 1978144 bytes
Variable Size 113250528 bytes
Database Buffers 171966464 bytes
Redo Buffers 6406144 bytes
Database mounted.
SQL> alter database noarchivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 217
Current log sequence 219
SQL>

일단 No archive mode로 바꾸고 난 후.

SQL> alter system
2 set log_archive_start = true
3 scope=spfile
4 ;
System altered.

SQL> alter system
2 set log_archive_dest_1=’location=/export/home/oracle_archive’
3 scope=spfile;

System altered.

SQL> alter system
2 set log_archive_format=’fox_%s_%t_%r.arc’
3 scope=spfile;

System altered.

그 후에 데이타베이스를 재 시작 해 준다.

SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount

SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /export/home/oracle_archive
Oldest online log sequence 217
Current log sequence 219

원하는 디렉토리로 바뀌었다.

다시 아카이브 모드로 바꿔준다.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /export/home/oracle_archive
Oldest online log sequence 217
Next log sequence to archive 219
Current log sequence 219

사실 , 처음에는 pfile을 이용하려고 했던 것인데, spfile을 이용해서 설정을 해 버렸다..