[오라클 날짜함수: 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을 이용해서 설정을 해 버렸다..

NOARCHIVELOG 모드

- 데이터베이스를 설치하면은 설정되는 기본모드 입니다.

- 체크포인트가 발생한 후 즉시 리두 로그 파일을 재사용 할 수 있습니다.

- 리두 로그가 겹쳐 쓰여지면서 변경정보가 없어지므로 마지막 전체 백업에 대해서만 복구가 가능합니다.

- 데이터베이스가 종료(NORMAL, IMMEDIATE, TRANSACTIONA옵션만 가능<이 세개의 옵션만 ckpt가 수행된 이후 데이터베이스가 shutdown되므로 모든 데이터파일, control file, Redo Log File이 동기화 되어져 있으므로>)되었을 때만 복구 가능한 백업 본 생성이 가능합니다.

- 백업 할 때마다 전체 데이터파일 및 Controlfile을 백업해야 합니다. NoArchiveLog Mode의 DB는 동기화되어 있으므로(NORMAL, IMMEDIATE, TRANSACTIONAL을 사용할 경우) 반드시 온라인 로그 파일을 백업해야 하는 것은 아닙니다.

- Redo Log 파일이 겹쳐 써지기 때문에 마지막 전체 백업 이후의 모든 데이터가 손실 됩니다.

ARCHIVELOG 모드

- 다 쓰여진 리두 로그 파일은 Log Switch가 일어나기 전 체크포인트가 발생하고 ARCn 프로세스에 의해 리두로그 파일을 백업할 때까지(Archivelog 파일 생성) Redo Log File은 재사용될 수 없습니다.

- Archived Log File은 Media 장애가 발생 했을 때 데이터가 손실되지 않도록 데이터베이스를 보호합니다.

- ARCHIVE Log Mode는 온라인 상태에서 데이터베이스를 백업할 수 있습니다.(Hot Bakup)

◈ 운영 중인 오라클의 로그 모드를 확인합니다.

SQL> ARCHIVE LOG LIST;
데이터베이스 로그 모드 아카이브 모드가 아님
자동 아카이브 사용 안함
아카이브 대상 C:\oracle\ora92\RDBMS
가장 오래된 온라인 로그 순서 17
현재 로그 순서 19


◈ PFILE을 이용하여 ARCHIVE LOG MODE로 변경


1. 파라미터 파일에서 수정한다.(INIT<SID>.ORA파일의 parameter 수정)

# 아카이브 프로세스를 오라클 시작과 함께 실행하도록 설정
# log switch 발생시 자동으로 archive를 수행 합니다
LOG_ARCHIVE_START = TRUE

# 아카이브 로그 파일을 저장할 디렉토리 설정
LOG_ARCHIVE_DEST = "C:\oracle\ora92\database\archive"

# 아카이브 로그 파일의 이름 설정
LOG_ARCHIVE_FORMAT = %S.ARC

2. 데이터베이스를 종료 합니다(NORMAL, IMMEDIATE, TRANSACTIONAL)
SQL> SHUTDOWN IMMEDIATE

3. 데이터베이스를 Mount 상태로 시작합니다.
SQL> STARTUP MOUNT

4. ALTER DATABASE 명령을 사용하여 데이터베이스의 모드를 변경합니다.
SQL> ALTER DATABASE ARCHIVELOG;

5. 데이터베이스를 OPEN합니다.
SQL> ALTER DATABASE OPEN;

6. ARCHIVE LOG MODE가 정상적으로 설정되어 있는지 확인합니다.
SQL> ARCHIVE LOG LIST;
데이터베이스 로그 모드 아카이브 모드
자동 아카이브 사용ㄴ
아카이브 대상 C:\oracle\ora92\database\archive
가장 오래된 온라인 로그 순서 17
아카이브할 다음 로그 19
현재 로그 순서 19

7. 데이터베이스에 대한 전체 백업을 수행합니다.


LOG_ARCHIVE_FORMAT 옵션
- %S : redo 로그 시퀀스 번호를 표시하여 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.
- %s : redo 로그 시퀀스 번호를 표시하고, 파일 이름 길이를 일정하게 맞추지 않는다.
- %T : redo 스레드 넘버를 표시하며, 자동으로 왼쪽이 0으로 채워져 파일 이름 길이를 일정하게 만든다.
- %t : redo 스레드 넘버를 표시하며, 파일 이름 길이를 일정하게 맞추지 않는다.
※ NOARCHIVELOG 모드에서 ARCHIVELOG 모드로 변경한 후에는 Control file정보가 변경되어 이전의 백업본은 사용할 수 없으므로 반드시 모든 데이터파일 및 Control file을 백업하여야만 합니다.


◈ SPILE을 수정하여 데이터베이스를 ARCHIVE LOG MODE로 변경하기


1. SPFILE설정

-- sqlplus 실행
C:\> sqlplus /nolog
-- SYSDBA 권한으로 접속

SQL> conn / as sysdba

--LOG_ARCHIVE_START 파라미터 변경
SQL> ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;

--LOG_ARCHIVE_DEST 파라미터 변경
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST=’C:\oracle\ora92\database\archive’
SCOPE=SPFILE;

--log_archive_format 파라미터 변경
SQL> ALTER SYSTEM SET log_archive_format = 'name_%t_%s_%r.arc' scope=spfile;

%t = 스레드 넘버, %s = 시퀸스 넘버, %r = reset logs

10g에서는 반드시 %s, %t, %r를 모두 설정

2. 데이터베이스를 종료 합니다(NORMAL, IMMEDIATE, TRANSACTIONAL)
SQL> SHUTDOWN IMMEDIATE


3. 데이터베이스를 Mount 상태로 시작합니다.
SQL> STARTUP MOUNT


4. ALTER DATABASE 명령을 사용하여 데이터베이스의 모드를 변경합니다.
SQL> ALTER DATABASE ARCHIVELOG;


5. 데이터베이스를 OPEN합니다.
SQL> ALTER DATABASE OPEN;


6. ARCHIVE LOG MODE가 정상적으로 설정되어 있는지 확인합니다.
SQL> ARCHIVE LOG LIST;
데이터베이스 로그 모드 아카이브 모드
자동 아카이브 사용ㄴ
아카이브 대상 C:\oracle\ora92\database\archive
가장 오래된 온라인 로그 순서 17
아카이브할 다음 로그 19
현재 로그 순서 19


7. 데이터베이스에 대한 전체 백업을 수행합니다.

아카이브 로그모드 비활성화

> ALTER DATABASE NOARCHIVELOG;

SQL> show parameter db_recovery_file_dest; 아카이브로그 경로확인

SQL> show parameter recovery *db_recovery 관련정보

8. DB startup 후 archive file 이 정상적으로 쌓이는지 확인
SQL> ALTER SYSTEM SWITCH LOGFILE;

9. 설정한 경로에 아카이브 파일이 생성되었는지 확인

운영중 아카이브 경로수정 및 기동


sys@TGDOM>show parameters spfile ;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /app/oracle/product/10.1.0/dbs
/spfileTGDOM.ora
sys@TGDOM>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /a01b/TGDOM/arch
Oldest online log sequence 1487
Next log sequence to archive 1488
Current log sequence 1488
sys@TGDOM>show parameters log_archive_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string LOCATION=/a01b/TGDOM/arch MAND
ATORY REOPEN

sys@TGDOM> ALTER SYSTEM SET log_archive_dest_1='LOCATION=/a01b/TGDOM/arch2' SCOPE=MEMORY;
System altered.

sys@TGDOM>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /a01b/TGDOM/arch2
Oldest online log sequence 1487
Next log sequence to archive 1488
Current log sequence 1488

sys@TGDOM>ALTER SYSTEM SET log_archive_dest_1='LOCATION=/a01b/TGDOM/arch2' SCOPE=both ;
System altered.

sys@TGDOM>archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /a01b/TGDOM/arch2
Oldest online log sequence 1487
Next log sequence to archive 1488
Current log sequence 1488

sys@TGDOM>ALTER SYSTEM SET log_archive_dest_1='LOCATION=/a01b/TGDOM/arch' SCOPE=both ;
System altered.

## ARchive Process 수동 시작
sys@TGDOM>ALTER SYSTEM ARCHIVE LOG START;
System altered.



TO_CHAR (datetime)


문법

to_char_date::=

그림 설명


목적

TO_CHAR(datetime)함수는 datetime 또는 날짜의 구간값,TIMESTAMP,TIME 구역을 가지는 TIMESTAMP, 또는 TIMESTAMP WITH LOCAL TIME ZONE 데이터 형을 date 포맷 fmt에 의해 지정된 포맷의 VARCHAR2 데이터 타입의 값으로 변환한다. 만약 fmt를 생략한다면, date는 다음과 같이 VARCHAR2 값으로 변환한다.

  • date 값은 기본적 date 포맷의 값으로 변환한다.

  • TIMESTAMP나 TIMESTAMP WITH LOCAL TIME ZONE값은 기본적 timestamp 포맷의 값으로 변환한다.

  • TIMESTAMP WITH TIME ZONE값은 기본적으로 timestamp with time zone 포맷으로 변환한다.

으datetime 포맷애 관한 정보는 "Format Models " 를 참조.

'nlsparam'인수는 월과 일자 이름, 약칭으로 반환되는 언어를 지정한다. 이 인수는 다음과 같은 형태이다.

'NLS_DATE_LANGUAGE = language'

만약 'nlsparam'을 생략하면, 이 함수는 세션에 대한 기본적 일자를 사용한다.


예제

다음 예제는 이 테이블을 이용한다.

CREATE TABLE date_tab (

   ts_col      TIMESTAMP,

tsltz_col   TIMESTAMP WITH LOCAL TIME ZONE,

tstz_col    TIMESTAMP WITH TIME ZONE);

다음 예제는 TO_CHAR을 다른 TIMESTAMP 데이터 형으로 적용한 결과를 보여준다.

TIMESTAMP WITH LOCAL TIME ZONE 열에 대한 결과는 세션 time zone에 민감하고, 이것에 반하여 TIMESTAMP 와 TIMESTAMP WITH TIME ZONE 열에 대한 결과는 세션 time zone에 영향받지 않는다.

ALTER SESSION SET TIME_ZONE = '-8:00';

INSERT INTO date_tab VALUES (

TIMESTAMP'1999-12-01 10:00:00',

TIMESTAMP'1999-12-01 10:00:00',

TIMESTAMP'1999-12-01 10:00:00');

INSERT INTO date_tab VALUES (

TIMESTAMP'1999-12-02 10:00:00 -8:00',

TIMESTAMP'1999-12-02 10:00:00 -8:00',

TIMESTAMP'1999-12-02 10:00:00 -8:00');



SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF'),

       TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM')

FROM date_tab;

TO_CHAR(TS_COL,'DD-MON-YYYYHH2 TO_CHAR(TSTZ_COL,'DD-MON-YYYYHH24:MI:

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

01-DEC-1999 10:00:00           01-DEC-1999 10:00:00.000000 -08:00

02-DEC-1999 10:00:00           02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,

       TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF')

FROM date_tab;

SESSIONTIMEZONE  TO_CHAR(TSLTZ_COL,'DD-MON-YYYY

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

-08:00           01-DEC-1999 10:00:00.000000

-08:00           02-DEC-1999 10:00:00.000000



ALTER SESSION SET TIME_ZONE = '-5:00';

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF'),

       TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM')

FROM date_tab;

TO_CHAR(TS_COL,'DD-MON-YYYYHH2 TO_CHAR(TSTZ_COL,'DD-MON-YYYYHH24:MI:

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

01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00

02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,

       TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF')

FROM date_tab;

SESSIONTIMEZONE           TO_CHAR(TSLTZ_COL,'DD-MON-YYYY

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

-05:00                    01-DEC-1999 13:00:00.000000

-05:00                    02-DEC-1999 13:00:00.000000