데이터파일 이동 작업

1. 데이터 파일 경로 조회

현재 데이터파일은 /app/oracle/oradata/18c/TSORA18 경로에 모여있다.

SQL> select name, status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
/app/oracle/oradata/18c/TSORA18/system01.dbf       SYSTEM
/app/oracle/oradata/18c/TSORA18/ITSM_IND01.dbf     ONLINE
/app/oracle/oradata/18c/TSORA18/sysaux01.dbf       ONLINE
/app/oracle/oradata/18c/TSORA18/ITSM_DATA01.dbf    ONLINE
/app/oracle/oradata/18c/TSORA18/users01.dbf        ONLINE
/app/oracle/oradata/18c/TSORA18/LOB01.dbf          ONLINE
/app/oracle/oradata/18c/TSORA18/USERS_DATA01.dbf   ONLINE
/app/oracle/oradata/18c/TSORA18/USERS_IND01.dbf    ONLINE
/app/oracle/oradata/18c/TSORA18/undotbs02.dbf      ONLINE

9 rows selected.

 

데이터 파일이 있는 경로에 데이터파일 확인

[oracle@ts-oracle1 datafile]$ cd /app/oracle/oradata/18c/TSORA18/
[oracle@ts-oracle1 TSORA18]$ ls -alrt
total 50547212
drwxrwxr-x 4 oracle oinstall          32 Oct 26  2020 ..
-rw-r--r-- 1 oracle oinstall        6870 Sep 30 10:15 contrl.sql
drwxr-x--- 2 oracle oinstall        4096 Sep 30 10:44 .
-rw-r----- 1 oracle oinstall  1924145152 Nov 20 09:00 temp01.dbf
-rw-r----- 1 oracle oinstall   209715712 Jan  3 10:14 redo01.log
-rw-r----- 1 oracle oinstall   209715712 Jan  3 10:14 redo02.log
-rw-r----- 1 oracle oinstall  3160285184 Jan  3 10:15 ITSM_IND01.dbf
-rw-r----- 1 oracle oinstall 10737426432 Jan  3 10:15 ITSM_DATA01.dbf
-rw-r----- 1 oracle oinstall    58990592 Jan  3 10:15 users01.dbf
-rw-r----- 1 oracle oinstall  3221233664 Jan  3 10:15 LOB01.dbf
-rw-r----- 1 oracle oinstall   524296192 Jan  3 10:15 USERS_IND01.dbf
-rw-r----- 1 oracle oinstall  1216356352 Jan  3 14:35 system01.dbf
-rw-r----- 1 oracle oinstall  1073750016 Jan  3 14:35 USERS_DATA01.dbf
-rw-r----- 1 oracle oinstall 29087506432 Jan  3 14:35 sysaux01.dbf
-rw-r----- 1 oracle oinstall   104865792 Jan  3 14:35 undotbs02.dbf
-rw-r----- 1 oracle oinstall   209715712 Jan  3 14:36 redo03.log
-rw-r----- 1 oracle oinstall    11124736 Jan  3 14:37 control01.ctl
-rw-r----- 1 oracle oinstall    11124736 Jan  3 14:37 control02.ctl

 

2. DB shutdown

세션을 하나 더 열어 alert log를 함께 확인한다.

[oracle@ts-oracle1 trace]$ cd $ORACLE_BASE/diag/rdbms/tsora18/TSORA18/trace
[oracle@ts-oracle1 trace]$ tail -f alert_TSORA18.log

 

DB shutdown

SQL> shutdown immediate;


3. 데이터파일 경로 변경
cp /원래경로 /이동할경로

cp /app/oracle/oradata/18c/TSORA18/system01.dbf /oradata/datafile/system01.dbf
cp /app/oracle/oradata/18c/TSORA18/sysaux01.dbf /oradata/datafile/sysaux01.dbf
cp /app/oracle/oradata/18c/TSORA18/ITSM_DATA01.dbf /oradata/datafile/ITSM_DATA01.dbf
cp /app/oracle/oradata/18c/TSORA18/users01.dbf /oradata/datafile/users01.dbf
cp /app/oracle/oradata/18c/TSORA18/ITSM_IND01.dbf /oradata/datafile/ITSM_IND01.dbf
cp /app/oracle/oradata/18c/TSORA18/LOB01.dbf /oradata/datafile/LOB01.dbf
cp /app/oracle/oradata/18c/TSORA18/USERS_DATA01.dbf /oradata/datafile/USERS_DATA01.dbf
cp /app/oracle/oradata/18c/TSORA18/USERS_IND01.dbf /oradata/datafile/USERS_IND01.dbf
cp /app/oracle/oradata/18c/TSORA18/undotbs02.dbf /oradata/datafile/undotbs02.dbf

 

복사된 파일 확인

[oracle@ts-oracle1 ~]$ cd /oradata/datafile/
[oracle@ts-oracle1 datafile]$ ls -alrt
total 48031972
drwxr-xr-x 5 oracle oinstall        4096 Jan  2 10:55 ..
-rw-r----- 1 oracle oinstall  1216356352 Jan  3 16:52 system01.dbf
-rw-r----- 1 oracle oinstall 29087506432 Jan  3 16:54 sysaux01.dbf
-rw-r----- 1 oracle oinstall 10737426432 Jan  3 16:54 ITSM_DATA01.dbf
-rw-r----- 1 oracle oinstall    58990592 Jan  3 16:54 users01.dbf
-rw-r----- 1 oracle oinstall  3160285184 Jan  3 16:54 ITSM_IND01.dbf
-rw-r----- 1 oracle oinstall  3221233664 Jan  3 16:54 LOB01.dbf
-rw-r----- 1 oracle oinstall  1073750016 Jan  3 16:54 USERS_DATA01.dbf
-rw-r----- 1 oracle oinstall   524296192 Jan  3 16:54 USERS_IND01.dbf
drwxr-xr-x 2 oracle oinstall        4096 Jan  3 16:54 .
-rw-r----- 1 oracle oinstall   104865792 Jan  3 16:54 undotbs02.dbf

 

4. DB mount 단계까지 open

SQL> startup nomount;
SQL> alter database mount;

 

5. 변경된 데이터파일 경로 DB에 등록
SQL> alter database rename file '/[원래경로파일]' to '/[이동할경로파일]';

SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/system01.dbf' to '/oradata/datafile/system01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/sysaux01.dbf' to '/oradata/datafile/sysaux01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/ITSM_DATA01.dbf' to '/oradata/datafile/ITSM_DATA01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/users01.dbf' to '/oradata/datafile/users01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/ITSM_IND01.dbf' to '/oradata/datafile/ITSM_IND01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/LOB01.dbf' to '/oradata/datafile/LOB01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/USERS_DATA01.dbf' to '/oradata/datafile/USERS_DATA01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/USERS_IND01.dbf' to '/oradata/datafile/USERS_IND01.dbf';
SQL> alter database rename file '/app/oracle/oradata/18c/TSORA18/undotbs02.dbf' to '/oradata/datafile/undotbs02.dbf';

 

6. DB open

SQL> alter database open;

 

7. 데이터 파일 확인

SQL> select name, status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
/oradata/datafile/system01.dbf                     SYSTEM
/oradata/datafile/ITSM_IND01.dbf                   ONLINE
/oradata/datafile/sysaux01.dbf                     ONLINE
/oradata/datafile/ITSM_DATA01.dbf                  ONLINE
/oradata/datafile/users01.dbf                      ONLINE
/oradata/datafile/LOB01.dbf                        ONLINE
/oradata/datafile/USERS_DATA01.dbf                 ONLINE
/oradata/datafile/USERS_IND01.dbf                  ONLINE
/oradata/datafile/undotbs02.dbf                    ONLINE

9 rows selected.

 

8. 기존 데이터파일 삭제
rm -rf [삭제할 파일]

[oracle@ts-oracle1 ~]$ cd /app/oracle/oradata/18c/TSORA18/
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/system01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/sysaux01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/ITSM_DATA01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/users01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/ITSM_IND01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/LOB01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/USERS_DATA01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/USERS_IND01.dbf
[oracle@ts-oracle1 TSORA18]$ rm -rf /app/oracle/oradata/18c/TSORA18/undotbs02.dbf

 


Job 삭제

+) 데이터 파일 이동 후 아래와 같은 에러 확인

현재 snapshot을 찍는 같은 job이 2개 돌고있는데 이게 같은 시간에 돌면서 PK(snap_id) 충돌이 나 에러가 떨어진 것으로 유추됨 

2023-01-03T17:00:08.132008+09:00
Errors in file /app/oracle/diag/rdbms/tsora18/TSORA18/trace/TSORA18_j001_9137.trc:
ORA-12012: error on auto execute of job 61
ORA-00001: unique constraint (PERFSTAT.STATS$DATABASE_INSTANCE_PK) violated
ORA-06512: at "PERFSTAT.STATSPACK", line 4936
ORA-06512: at "PERFSTAT.STATSPACK", line 105
ORA-06512: at line 1

 

job 확인 후 삭제할 job number 확인

SQL> select * from dba_jobs

 

job 삭제 방법 
EXEC DBMS_JOB.REMOVE( [job number] );

commit를 해줘야 job이 삭제된다.

SQL> EXEC DBMS_JOB.REMOVE(61);

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

 

job을 다시 조회하면 해당 job이 삭제된 것을 확인할 수 있다.

Archive log full 인 경우 해결

쿼리 실행이 오래 걸리는 것을 확인한 후 DB에 문제가 생긴 것을 확인

 

alert log 확인

[oracle@ts-oracle1 ~]$ cd $ORACLE_BASE/diag/rdbms/tsora18/TSORA18/trace
[oracle@ts-oracle1 trace]$ ls -alrt alert_TSORA18.log
-rw-r----- 1 oracle oinstall 50738390 Jan  2 16:39 alert_TSORA18.log

 

계속 같은 에러가 반복적으로 떨어지는 것을 확인

2023-01-02T10:04:42.455750+09:00
Errors in file /app/oracle/diag/rdbms/tsora18/TSORA18/trace/TSORA18_arc2_24933.trc:
ORA-19502: write error on file "/run/user/1001/archarch_1_2610_1049881890.arc", block number 210944 (block size=512)
ORA-27072: File I/O error
Additional information: 4
Additional information: 210944
Additional information: 53248
ORA-19502: write error on file "/run/user/1001/archarch_1_2610_1049881890.arc", block number 210944 (block size=512)
ARC2 (PID:24933): I/O error 19502 archiving LNO:3 to '/run/user/1001/archarch_1_2610_1049881890.arc'
ARC2 (PID:24933): Stuck archiver: insufficient local LADs
ARC2 (PID:24933): Stuck archiver condition declared

 

disk 용량 확인

disk 용량 확인시 아카이브 로그가 저장되는 공간인 /run/user/1001이 97%로 full 차서 아카이브 로그가 저장이 안 되어 발생한 것으로 확인된다.

[oracle@ts-oracle1 1001]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  986M   15G   7% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       100G   86G   15G  86% /
tmpfs           3.2G     0  3.2G   0% /run/user/0
tmpfs           3.2G  3.1G  104M  97% /run/user/1001
/dev/sdb1       394G   73M  374G   1% /oradata

 

아카이브 로그 확인

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /run/user/1001/arch
Oldest online log sequence     2610
Next log sequence to archive   2610
Current log sequence           2612

 

아카이브 로그 파일이 떨어지는 곳은 /run/user/1001/arch 이지만 arch 디렉토리가 없어 /run/user/1001에 떨어진다.

 

아카이브 로그 파일을 공간이 여유로운 /oradata/arch 밑으로 이동시킨 후 아카이브 로그가 떨어지도록 해결해준다.

[oracle@ts-oracle1 oradata]$ ls -alrt
total 32
drwx------  2 oracle oinstall 16384 Jan  2 10:49 lost+found
drwxr-xr-x  2 oracle oinstall  4096 Jan  2 10:55 arch
drwxr-xr-x  2 oracle oinstall  4096 Jan  2 10:55 datafile
drwxr-xr-x  5 oracle oinstall  4096 Jan  2 10:55 .
dr-xr-xr-x 21 root   root      4096 Jan  2 12:08 ..

 

현재 아카이브 로그가 저장되는 디렉토리 확인

전부 /oradata/arch로 이동시킨다.

[oracle@ts-oracle1 ~]$ cd /run/user/1001
[oracle@ts-oracle1 1001]$ ls -alrt
total 3172472
-rw-r----- 1 oracle oinstall 167680000 Sep 27 15:24 archarch_1_2591_1049881890.arc
-rw-r----- 1 oracle oinstall 162232832 Sep 27 15:24 archarch_1_2592_1049881890.arc
-rw-r----- 1 oracle oinstall 200333824 Sep 27 15:24 archarch_1_2593_1049881890.arc
-rw-r----- 1 oracle oinstall 200176128 Sep 27 15:25 archarch_1_2594_1049881890.arc
-rw-r----- 1 oracle oinstall 166613504 Sep 28 04:00 archarch_1_2595_1049881890.arc
-rw-r----- 1 oracle oinstall 168433152 Sep 28 20:00 archarch_1_2596_1049881890.arc
-rw-r----- 1 oracle oinstall 200332288 Sep 29 10:05 archarch_1_2597_1049881890.arc
-rw-r----- 1 oracle oinstall 161772032 Sep 29 18:50 archarch_1_2598_1049881890.arc
-rw-r----- 1 oracle oinstall 166884864 Sep 30 08:00 archarch_1_2599_1049881890.arc
-rw-r----- 1 oracle oinstall 171574784 Nov 16 17:00 archarch_1_2600_1049881890.arc
-rw-r----- 1 oracle oinstall 163061760 Nov 17 12:00 archarch_1_2601_1049881890.arc
-rw-r----- 1 oracle oinstall 163527680 Nov 18 07:00 archarch_1_2602_1049881890.arc
-rw-r----- 1 oracle oinstall 168455680 Nov 19 02:00 archarch_1_2603_1049881890.arc
-rw-r----- 1 oracle oinstall 165522944 Nov 19 21:00 archarch_1_2604_1049881890.arc
-rw-r----- 1 oracle oinstall 163832832 Nov 20 15:00 archarch_1_2605_1049881890.arc
-rw-r----- 1 oracle oinstall 167092736 Nov 21 08:00 archarch_1_2606_1049881890.arc
-rw-r----- 1 oracle oinstall 163598848 Nov 22 01:00 archarch_1_2607_1049881890.arc
-rw-r----- 1 oracle oinstall 162375168 Nov 22 18:00 archarch_1_2608_1049881890.arc
-rw-r----- 1 oracle oinstall 165066240 Nov 23 11:00 archarch_1_2609_1049881890.arc
drwxr-xr-x 4 root   root            80 Dec  1 13:42 ..
drwx------ 2 oracle oinstall       420 Jan  2 16:34 .

 

아카이브 로그 파일 이동

mv /run/user/1001/* /oradata/arch

 

파일이 이동된 것을 확인할 수 있다.

[oracle@ts-oracle1 ~]$ cd /oradata/arch
[oracle@ts-oracle1 arch]$ ls -alrt
total 3172488
-rw-r----- 1 oracle oinstall 167680000 Sep 27 15:24 archarch_1_2591_1049881890.arc
-rw-r----- 1 oracle oinstall 162232832 Sep 27 15:24 archarch_1_2592_1049881890.arc
-rw-r----- 1 oracle oinstall 200333824 Sep 27 15:24 archarch_1_2593_1049881890.arc
-rw-r----- 1 oracle oinstall 200176128 Sep 27 15:25 archarch_1_2594_1049881890.arc
-rw-r----- 1 oracle oinstall 166613504 Sep 28 04:00 archarch_1_2595_1049881890.arc
-rw-r----- 1 oracle oinstall 168433152 Sep 28 20:00 archarch_1_2596_1049881890.arc
-rw-r----- 1 oracle oinstall 200332288 Sep 29 10:05 archarch_1_2597_1049881890.arc
-rw-r----- 1 oracle oinstall 161772032 Sep 29 18:50 archarch_1_2598_1049881890.arc
-rw-r----- 1 oracle oinstall 166884864 Sep 30 08:00 archarch_1_2599_1049881890.arc
-rw-r----- 1 oracle oinstall 171574784 Nov 16 17:00 archarch_1_2600_1049881890.arc
-rw-r----- 1 oracle oinstall 163061760 Nov 17 12:00 archarch_1_2601_1049881890.arc
-rw-r----- 1 oracle oinstall 163527680 Nov 18 07:00 archarch_1_2602_1049881890.arc
-rw-r----- 1 oracle oinstall 168455680 Nov 19 02:00 archarch_1_2603_1049881890.arc
-rw-r----- 1 oracle oinstall 165522944 Nov 19 21:00 archarch_1_2604_1049881890.arc
-rw-r----- 1 oracle oinstall 163832832 Nov 20 15:00 archarch_1_2605_1049881890.arc
-rw-r----- 1 oracle oinstall 167092736 Nov 21 08:00 archarch_1_2606_1049881890.arc
-rw-r----- 1 oracle oinstall 163598848 Nov 22 01:00 archarch_1_2607_1049881890.arc
-rw-r----- 1 oracle oinstall 162375168 Nov 22 18:00 archarch_1_2608_1049881890.arc
-rw-r----- 1 oracle oinstall 165066240 Nov 23 11:00 archarch_1_2609_1049881890.arc
drwxr-xr-x 5 oracle oinstall      4096 Jan  2 10:55 ..
drwxr-xr-x 2 oracle oinstall      4096 Jan  2 16:54 .

 

현재 아카이브 로그가 떨어지는 곳을 확인하면 공간이 부족해서 아카이브 로그가 떨어지지 못한 파일이 정상적으로 떨어진 것을 확인할 수 있다.

[oracle@ts-oracle1 1001]$ ls -alrt
total 515112
drwxr-xr-x 4 root   root            80 Dec  1 13:42 ..
-rw-r----- 1 oracle oinstall 164784640 Jan  2 16:54 archarch_1_2610_1049881890.arc
drwx------ 2 oracle oinstall       100 Jan  2 16:54 .
-rw-r----- 1 oracle oinstall 162350080 Jan  2 16:54 archarch_1_2611_1049881890.arc
-rw-r----- 1 oracle oinstall 200333824 Jan  2 16:54 archarch_1_2612_1049881890.arc

 

공간도 줄어든 것을 확인할 수 있다.

[oracle@ts-oracle1 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  994M   15G   7% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       100G   86G   15G  86% /
tmpfs           3.2G     0  3.2G   0% /run/user/0
tmpfs           3.2G  504M  2.7G  16% /run/user/1001
/dev/sdb1       394G  3.1G  371G   1% /oradata

 


아카이브 로그 경로 변경

공간이 여유로운 디스크에 아카이브 경로를 변경할 것이다.

 

아카이브 로그 경로 확인

현재 아카이브 로그 저장 경로는 /run/user/1001/arch

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /run/user/1001/arch
Oldest online log sequence     2610
Next log sequence to archive   2610
Current log sequence           2612

 

/oradata/arch로 아카이브 경로 이동할 것이다.

[oracle@ts-oracle1 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs            16G  994M   15G   7% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1       100G   86G   15G  86% /
tmpfs           3.2G     0  3.2G   0% /run/user/0
tmpfs           3.2G  504M  2.7G  16% /run/user/1001
/dev/sdb1       394G  3.1G  371G   1% /oradata

 

현재 아카이브 경로 확인

SQL> show parameter arch

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string      LOCATION=/run/user/1001/arch
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string

 

아카이브 경로 변경

SQL> alter system set log_archive_dest_1='location=/oradata/arch' scope=spfile;

System altered.

 

alert log 확인

DB 재시작하기 전에 alert log를 같이 확인하면서 재시작한다.

tail -f 옵션 : 파일 뒤부터 실시간으로 떨어지는 log를 확인할 수 있다.

cd $ORACLE_BASE/diag/rdbms/[DB명]/[SID명]/trace/alert[SID].log
tail -f alert[SID].log

 

DB 재시작

SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount;
SQL> alter database open;

 

경로 변경 확인

경로가 변경된 것을 확인할 수 있다.

SQL> show parameter arch

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target                   integer     0
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string      location=/oradata/arch
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string

 

아카이브 로그 강제 생성

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

 

아카이브 로그 확인

오늘 날짜로 아카이브 로그가 쌓인 것을 확인할 수 있다.

[oracle@ts-oracle1 ~]$ cd /oradata/arch
[oracle@ts-oracle1 arch]$ ls -alrt
total 3307168
-rw-r----- 1 oracle oinstall 167680000 Sep 27 15:24 archarch_1_2591_1049881890.arc
-rw-r----- 1 oracle oinstall 162232832 Sep 27 15:24 archarch_1_2592_1049881890.arc
-rw-r----- 1 oracle oinstall 200333824 Sep 27 15:24 archarch_1_2593_1049881890.arc
-rw-r----- 1 oracle oinstall 200176128 Sep 27 15:25 archarch_1_2594_1049881890.arc
-rw-r----- 1 oracle oinstall 166613504 Sep 28 04:00 archarch_1_2595_1049881890.arc
-rw-r----- 1 oracle oinstall 168433152 Sep 28 20:00 archarch_1_2596_1049881890.arc
-rw-r----- 1 oracle oinstall 200332288 Sep 29 10:05 archarch_1_2597_1049881890.arc
-rw-r----- 1 oracle oinstall 161772032 Sep 29 18:50 archarch_1_2598_1049881890.arc
-rw-r----- 1 oracle oinstall 166884864 Sep 30 08:00 archarch_1_2599_1049881890.arc
-rw-r----- 1 oracle oinstall 171574784 Nov 16 17:00 archarch_1_2600_1049881890.arc
-rw-r----- 1 oracle oinstall 163061760 Nov 17 12:00 archarch_1_2601_1049881890.arc
-rw-r----- 1 oracle oinstall 163527680 Nov 18 07:00 archarch_1_2602_1049881890.arc
-rw-r----- 1 oracle oinstall 168455680 Nov 19 02:00 archarch_1_2603_1049881890.arc
-rw-r----- 1 oracle oinstall 165522944 Nov 19 21:00 archarch_1_2604_1049881890.arc
-rw-r----- 1 oracle oinstall 163832832 Nov 20 15:00 archarch_1_2605_1049881890.arc
-rw-r----- 1 oracle oinstall 167092736 Nov 21 08:00 archarch_1_2606_1049881890.arc
-rw-r----- 1 oracle oinstall 163598848 Nov 22 01:00 archarch_1_2607_1049881890.arc
-rw-r----- 1 oracle oinstall 162375168 Nov 22 18:00 archarch_1_2608_1049881890.arc
-rw-r----- 1 oracle oinstall 165066240 Nov 23 11:00 archarch_1_2609_1049881890.arc
drwxr-xr-x 5 oracle oinstall      4096 Jan  2 10:55 ..
-rw-r----- 1 oracle oinstall 137878528 Jan  3 10:14 arch_1_2613_1049881890.arc
-rw-r----- 1 oracle oinstall      1024 Jan  3 10:14 arch_1_2614_1049881890.arc
drwxr-xr-x 2 oracle oinstall      4096 Jan  3 10:14 .
-rw-r----- 1 oracle oinstall     28672 Jan  3 10:14 arch_1_2615_1049881890.arc

Redo log file 추가/삭제

Redo log Group 추가

SQL> ALTER DATABASE ADD LOGFILE GROUP [group number]
2 (['member file1', 'member file2', ... ]) SIZE [크기];

- redo log group을 추가한다. [group number]는 생략 가능하다.

 

Redo log group 삭제

SQL> ALTER DATABASE DROP LOGFILE GROUP [group number];

- 지정한 redo log group을 삭제한다.

- OS 상에서는 삭제되지 않으므로 OS에서도 삭제해줘야 한다.

 

Redo log file 정보 확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3;
 
    Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 16
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 16
         1          2 /u01/app/oracle/oradata/ORCL/redo02.log              200 INACTIVE                 17
         1          2 /u01/app/oracle/oradata/ORCL/redo02_2.log            200 INACTIVE                 17
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  18
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  18

6 rows selected.

 

현재 리두로그는 각 그룹별로 2개씩 생성되어 있다. 하지만 리두로그 이중화는 서로 다른 디스크에 저장하는 것이 권고이다.

서로 다른 디스크가 되어있지 않으므로 서로 다른 디렉토리에 저장하면서 그룹 추가/삭제 및 멤버 추가/삭제 작업을 진행할 것이다.

 

참고) 리두로그 이중화 및 STATUS

 

Redo log 이중화 및 STATUS

Redo log - DB에서 발생하는 모든 변경사항 기록하는 파일 - 장애시 복구를 위한 DML 문장 저장 (데이터 파일에 쓰여지지 않은 커밋된 데이터를 복구하기 위해서 사용) - LGWR은 그룹 내의 모든 리두 로

lemonandgrapefruit.tistory.com

 

Disk 추가

작업 전 Disk를 추가해준다.

[oracle@oracle ~]$ mkdir -p /u01/app/oracle/oradata/disk1
[oracle@oracle ~]$ mkdir -p /u01/app/oracle/oradata/disk2
[oracle@oracle ~]$ ll /u01/app/oracle/oradata
합계 0
drwxr-x---. 2 oracle oinstall 260 12월 20 13:46 ORCL
drwxr-xr-x. 2 oracle oinstall   6 12월 21 13:50 disk1
drwxr-xr-x. 2 oracle oinstall   6 12월 21 13:50 disk2

Redo log file 그룹 추가 및 삭제

Redo log file 정보 확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3;
 
    Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 16
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 16
         1          2 /u01/app/oracle/oradata/ORCL/redo02.log              200 INACTIVE                 17
         1          2 /u01/app/oracle/oradata/ORCL/redo02_2.log            200 INACTIVE                 17
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  18
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  18

6 rows selected.

 

Redo log 그룹 삭제

그룹 2를 삭제

SQL> ALTER DATABASE DROP LOGFILE GROUP 2;

Database altered.

 

Redo log file을 조회해보면 group2가 INACTIVE 상태이므로 삭제된 것을 확인할 수 있다.

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3;

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 16
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 16
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  18
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  18

 

하지만 OS 상에서는 Redo log file 2는 삭제되지 않은 것을 확인할 수 있다.

[oracle@oracle ~]$ ll /u01/app/oracle/oradata/ORCL
합계 2849652
-rw-r-----. 1 oracle oinstall  10600448 12월 21 13:58 control01.ctl
-rw-r-----. 1 oracle oinstall  10600448 12월 21 13:58 control02.ctl
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo01.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo01_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo02.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo02_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 13:58 redo03.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 13:58 redo03_2.log
-rw-r-----. 1 oracle oinstall 576724992 12월 21 13:55 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 734011392 12월 21 13:47 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 12월  6 10:03 temp01.dbf
-rw-r-----. 1 oracle oinstall 319823872 12월 21 13:55 undotbs01.dbf
-rw-r-----. 1 oracle oinstall   5251072 12월 21 09:11 users01.dbf

 

rm 명령으로 OS에서도 삭제해 준다.

[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo02.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo02_2.log
[oracle@oracle ~]$ ll /u01/app/oracle/oradata/ORCL
합계 2440044
-rw-r-----. 1 oracle oinstall  10600448 12월 21 14:00 control01.ctl
-rw-r-----. 1 oracle oinstall  10600448 12월 21 14:00 control02.ctl
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo01.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 09:11 redo01_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:00 redo03.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:00 redo03_2.log
-rw-r-----. 1 oracle oinstall 576724992 12월 21 14:00 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 734011392 12월 21 13:47 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 12월  6 10:03 temp01.dbf
-rw-r-----. 1 oracle oinstall 319823872 12월 21 14:00 undotbs01.dbf
-rw-r-----. 1 oracle oinstall   5251072 12월 21 09:11 users01.dbf

 

 

그룹 생성 및 멤버 추가

그룹 4 생성 및 멤버 추가

SQL> ALTER DATABASE ADD LOGFILE GROUP 4
  2  ('/u01/app/oracle/oradata/ORCL/redo04.log', '/u01/app/oracle/oradata/ORCL/redo04_2.log') SIZE 200M;

Database altered.

 

Redo log file 정보를 확인하면 그룹 4가 생성된 것을 확인할 수 있다.

그룹 4는 아직 사용하지 않았으므로 UNUSED로 표시된다.

    Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 16
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 16
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  18
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  18
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 UNUSED                    0
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 UNUSED                    0

6 rows selected.

 

로그 스위치 수행

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

 

다시 Redo log file을 확인하면 아래와 같이 상태가 변경된 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 20
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 20
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  21
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  21
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 19
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 19

6 rows selected.

Redo log file 재배치

/u01/app/oracle/oradata/ORCL 디렉토리에 위치한 redo log file을 3개의 그룹과 2개의 멤버 파일로 서로 다른 디스크의 마운트 디렉토리인 disk1와 disk2에 다중화하고 그룹의 번호는 1,2,3으로 설정한다.

 

현재 Redo log file 정보

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3;
 
    Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/ORCL/redo01.log              200 INACTIVE                 20
         1          1 /u01/app/oracle/oradata/ORCL/redo01_2.log            200 INACTIVE                 20
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 CURRENT                  21
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 CURRENT                  21
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 19
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 19

6 rows selected.

 

 

그룹 삭제

그룹 1, 2, 3으로 운영할 것이므로 기존에 있던 그룹 1, 3은 삭제한다.

SQL> ALTER DATABASE DROP LOGFILE GROUP 1;

Database altered.

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE DROP LOGFILE GROUP 3
*
ERROR at line 1:
ORA-01623: log 3 is current log for instance orcl (thread 1) - cannot drop
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ORCL/redo03.log'
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ORCL/redo03_2.log'

 

로그스위치 수행

현재 그룹 3이 사용 중이므로 그룹 삭제가 되지 않는다.

로그스위치를 통해 상태를 변경한다.

SQL> alter system switch logfile;

System altered.

 

그룹 4가 현재 상태가 되었고 그룹 3은 ACTIVE 상태가 되었다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 ACTIVE                   21
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 ACTIVE                   21
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 CURRENT                  22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 CURRENT                  22

 

체크포인트 수행

체크포인트를 발생하여 그룹 3의 status를 Active에서 Inactive 상태로 변경시킨다.

SQL> alter system checkpoint;

System altered.

 

Redo log file 상태를 확인하면 그룹 3이 ACTIVE 에서 INACTIVE 상태로 변경된 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 INACTIVE                 21
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 INACTIVE                 21
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 CURRENT                  22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 CURRENT                  22

 

그룹 3 삭제 오류

다시 그룹 3을 삭제하려고 하지만 로그 파일은 최소 2개는 필요하다는 에러가 떨어지게 된다.

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE DROP LOGFILE GROUP 3
*
ERROR at line 1:
ORA-01567: dropping log 3 would leave less than 2 log files for instance orcl (thread 1)
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ORCL/redo03.log'
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ORCL/redo03_2.log'

 

그룹 5 생성

새로 그룹과 멤버를 생성해 준다. 임시로 생성하는 것으로 나중에 삭제할 것이다.

SQL> ALTER DATABASE ADD LOGFILE GROUP 5
  2  ('/u01/app/oracle/oradata/ORCL/redo05.log', '/u01/app/oracle/oradata/ORCL/redo05_2.log') SIZE 200M;

Database altered.

 

로그 스위치 및 체크포인트 수행

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

 

Redo log file 조회

그룹 5가 생성되었고 그룹 3이 INACTIVE 상태이므로 삭제가 가능해졌다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          3 /u01/app/oracle/oradata/ORCL/redo03.log              200 INACTIVE                 21
         1          3 /u01/app/oracle/oradata/ORCL/redo03_2.log            200 INACTIVE                 21
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 22
         1          5 /u01/app/oracle/oradata/ORCL/redo05.log              200 CURRENT                  23
         1          5 /u01/app/oracle/oradata/ORCL/redo05_2.log            200 CURRENT                  23

6 rows selected.

 

그룹 3 삭제

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;

Database altered.

 

그룹 3이 삭제된 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 22
         1          5 /u01/app/oracle/oradata/ORCL/redo05.log              200 CURRENT                  23
         1          5 /u01/app/oracle/oradata/ORCL/redo05_2.log            200 CURRENT                  23

 

리두로그 그룹 생성

리두로그 그룹 1, 2, 3을 disk1, 2에 각각 미러링 하여 생성한다.

SQL> !ls -alrt /u01/app/oracle/oradata
합계 4
drwxrwxr-x. 9 oracle oinstall  112 12월  2 13:28 ..
drwxr-xr-x. 2 oracle oinstall    6 12월 21 13:50 disk1
drwxr-xr-x. 2 oracle oinstall    6 12월 21 13:50 disk2
drwxr-x---. 5 oracle oinstall   44 12월 21 13:50 .
drwxr-x---. 2 oracle oinstall 4096 12월 21 14:45 ORCL

SQL> ALTER DATABASE ADD LOGFILE GROUP 1
  2  ('/u01/app/oracle/oradata/disk1/redo01_1.log', '/u01/app/oracle/oradata/disk2/redo01_2.log') SIZE 200M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 2
  2  ('/u01/app/oracle/oradata/disk1/redo02_1.log', '/u01/app/oracle/oradata/disk2/redo02_2.log') SIZE 200M;

Database altered.

SQL> ALTER DATABASE ADD LOGFILE GROUP 3
  2  ('/u01/app/oracle/oradata/disk1/redo03_1.log', '/u01/app/oracle/oradata/disk2/redo03_2.log') SIZE 200M;

Database altered.

 

Redo log 그룹 3개가 생성된 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/disk1/redo01_1.log           200 UNUSED                    0
         1          1 /u01/app/oracle/oradata/disk2/redo01_2.log           200 UNUSED                    0
         1          2 /u01/app/oracle/oradata/disk1/redo02_1.log           200 UNUSED                    0
         1          2 /u01/app/oracle/oradata/disk2/redo02_2.log           200 UNUSED                    0
         1          3 /u01/app/oracle/oradata/disk1/redo03_1.log           200 UNUSED                    0
         1          3 /u01/app/oracle/oradata/disk2/redo03_2.log           200 UNUSED                    0
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 22
         1          5 /u01/app/oracle/oradata/ORCL/redo05.log              200 CURRENT                  23
         1          5 /u01/app/oracle/oradata/ORCL/redo05_2.log            200 CURRENT                  23

10 rows selected.

 

로그스위치 및 체크포인트 수행

현재 그룹 5가 CURRENT 상태이므로 로그 스위치, 체크포인트를 통해 상태를 변경한 후 그룹 4, 5를 삭제한다.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> alter system checkpoint;

System altered.

 

그룹 4, 5가 INACTIVE 상태인 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/disk1/redo01_1.log           200 INACTIVE                 24
         1          1 /u01/app/oracle/oradata/disk2/redo01_2.log           200 INACTIVE                 24
         1          2 /u01/app/oracle/oradata/disk1/redo02_1.log           200 INACTIVE                 25
         1          2 /u01/app/oracle/oradata/disk2/redo02_2.log           200 INACTIVE                 25
         1          3 /u01/app/oracle/oradata/disk1/redo03_1.log           200 CURRENT                  26
         1          3 /u01/app/oracle/oradata/disk2/redo03_2.log           200 CURRENT                  26
         1          4 /u01/app/oracle/oradata/ORCL/redo04.log              200 INACTIVE                 22
         1          4 /u01/app/oracle/oradata/ORCL/redo04_2.log            200 INACTIVE                 22
         1          5 /u01/app/oracle/oradata/ORCL/redo05.log              200 INACTIVE                 23
         1          5 /u01/app/oracle/oradata/ORCL/redo05_2.log            200 INACTIVE                 23

10 rows selected.

 

그룹 4, 5 삭제

SQL> alter database drop logfile group 4;

Database altered.

SQL> alter database drop logfile group 5;

Database altered.

 

그룹 4, 5가 삭제된 것을 확인할 수 있다.

   Thread#     Group# Logfile                                        Size (MB) STATUS            SEQUENCE#
---------- ---------- --------------------------------------------- ---------- ---------------- ----------
         1          1 /u01/app/oracle/oradata/disk1/redo01_1.log           200 INACTIVE                 24
         1          1 /u01/app/oracle/oradata/disk2/redo01_2.log           200 INACTIVE                 24
         1          2 /u01/app/oracle/oradata/disk1/redo02_1.log           200 INACTIVE                 25
         1          2 /u01/app/oracle/oradata/disk2/redo02_2.log           200 INACTIVE                 25
         1          3 /u01/app/oracle/oradata/disk1/redo03_1.log           200 CURRENT                  26
         1          3 /u01/app/oracle/oradata/disk2/redo03_2.log           200 CURRENT                  26

6 rows selected.

 

OS에서 파일 삭제

리두로그는 삭제됐지만 OS에서는 남아있으므로 따로 삭제한다.

[oracle@oracle ~]$ ll /u01/app/oracle/oradata/ORCL
합계 3259260
-rw-r-----. 1 oracle oinstall  10600448 12월 21 15:01 control01.ctl
-rw-r-----. 1 oracle oinstall  10600448 12월 21 15:01 control02.ctl
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:27 redo01.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:27 redo01_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:40 redo03.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:40 redo03_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:46 redo04.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:46 redo04_2.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:55 redo05.log
-rw-r-----. 1 oracle oinstall 209715712 12월 21 14:55 redo05_2.log
-rw-r-----. 1 oracle oinstall 576724992 12월 21 15:01 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 734011392 12월 21 15:01 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 12월  6 10:03 temp01.dbf
-rw-r-----. 1 oracle oinstall 319823872 12월 21 15:01 undotbs01.dbf
-rw-r-----. 1 oracle oinstall   5251072 12월 21 14:56 users01.dbf

 

rm으로 삭제

[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo01.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo01_2.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo03.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo03_2.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo04.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo04_2.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo05.log
[oracle@oracle ~]$ rm -rf /u01/app/oracle/oradata/ORCL/redo05_2.log

 

파일이 OS에서 삭제된 것을 확인할 수 있다.

[oracle@oracle ~]$ ll /u01/app/oracle/oradata/ORCL
합계 1620828
-rw-r-----. 1 oracle oinstall  10600448 12월 21 15:05 control01.ctl
-rw-r-----. 1 oracle oinstall  10600448 12월 21 15:05 control02.ctl
-rw-r-----. 1 oracle oinstall 576724992 12월 21 15:03 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 734011392 12월 21 15:03 system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 12월  6 10:03 temp01.dbf
-rw-r-----. 1 oracle oinstall 319823872 12월 21 15:03 undotbs01.dbf
-rw-r-----. 1 oracle oinstall   5251072 12월 21 15:03 users01.dbf

Redo log

- DB에서 발생하는 모든 변경사항 기록하는 파일

- 장애시 복구를 위한 DML 문장 저장 (데이터 파일에 쓰여지지 않은 커밋된 데이터를 복구하기 위해서 사용)

- LGWR은 그룹 내의 모든 리두 로그 파일에 동시에 동일한 정보를 기록

- 최소 2개 이상의 리두 로그 그룹이 필요

- 리두로그 그룹내 멤버는 서로 다른 디스크에 저장 권고

- 각 그룹내 리두로그 멤버는 이중화 권고

  *리두로그 파일 그룹 크기를 증가시키거나 감소시키려면 새로운 리두로그 파일 그룹을 추가 후 이전 리두로그 파일 그룹을 삭제

 

STATUS : 로그 상태

V$LOG 에서 확인 가능

Status 설명
UNUSED  온라인 리두 로그가 기록된 적이 없음
새로 추가된 Redo log일 경우
CURRENT 현재 리두 로그
리두 로그가 활성화된 상태
ACTIVE 로그가 Active 상태지만 현재 리두로그는 아닌 상태
Check Point 이전 상태
crash recovery에 필요
블록복구에 사용 중일 수 있음
보관할 수도 있고 안할 수도 있음
CLEARING ALTER DATABASE CLEAR LOGFILE 명령문 이후에 빈 로그로 다시 생성됨
로그가 지워지면 UNUSED 상태로 변경됨
CLEARING_CURRENT 닫힌 스레드에서 현재 로그를 지우는 중인 상태
INACTIVE 인스턴스 복구에 더이상 필요 없는 상태
Check Point 완료 이후의 상태
media reovery에 사용 중일 수 있음
보관할 수도 있고 안할 수도 있음

 


Redo log 그룹 내 멤버 이중화

 

Redo log File 정보

리두로그 그룹 3개, 리두로그 파일이 그룹 내 단일 구성으로 되어있는 것을 확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

 

리두로그 멤버 추가

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo01_2.log' to group 1;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo02_2.log' to group 2;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo03_2.log' to group 3;

Database altered.

 

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

 

Log switch 발생

SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

리두로그 그룹 2를 사용하고 있었는데 로그스위치로 인하여 그룹2의 상태는 ACTIVE 상태가 된다.

 

Log switch 두번 더 발생

다시 그룹2가 CURRENT 상태가 되고 나머지 그룹1, 3은 ACTIVE 상태가 된다.

 

 

Check point 발생

SQL> ALTER SYSTEM CHECKPOINT;

System altered.

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

체크포인트 발생으로 그룹1, 3의 상태는 INACTIVE 상태가 된다.

 

현재 아카이브 모드 확인

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
Oldest online log sequence     11
Next log sequence to archive   13
Current log sequence           13

 

 

spfile 사용 유무 확인

spfile 사용 중인것으로 확인

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.0.0
                                                 /dbhome_1/dbs/spfileorcl.ora

 

 

아카이브 저장 경로 확인

현재 아카이브 저장 경로가 log_archive_dest로 지정되어 있다.

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string      /u01/app/oracle/product/19.0.0
                                                 /dbhome_1/dbs/arch
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string

 

 

아카이브 로그 파일 저장 디렉토리 생성

아카이브 로그 파일을 저장할 디렉토리가 없다면 생성한다.

새로운 창을 열어 아카이브 로그 파일 저장 경로 디렉토리를 생성한다.

*mkdir -p 옵션 : 존재하지 않는 중간 디렉토리를 자동 생성해줌

[oracle@oracle ~]$ mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch

 

 

아카이브 로그 모드 변경
아카이브 로그 저장 경로를 지정하고 아카이브 로그 파일 포맷을 지정한다.

아카이브 저장 경로를 log_archive_dest 에서 log_archive_dest_1로 변경한다.

scope=spfile 이므로 DB를 재시작한다.

*log_archive_dest_n 파라미터 설정시 'location= [해당 디렉토리]' 로 설정해야 한다. 

location을 빼고 설정하면 DB를 재시작할 경우 에러가 떨어지게 된다.

(해당 에러 : ORA-16024: parameter LOG_ARCHIVE_DEST_1 cannot be parsed)

SQL> alter system set log_archive_dest = '' scope = spfile;

System altered.

SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch' scope=spfile;

System altered.

SQL> shutdown immediate;
SQL> startup;

 

 

아카이브 저장 경로 확인

아카이브 저장 경로가 log_archive_dest_1로 변경되었고 디렉토리도 변경된 것을 확인할 수 있다.

SQL> show parameter log_archive

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string      location=/u01/app/oracle/produ
                                                 ct/19.0.0/dbhome_1/dbs/arch
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string

 

 

아카이브 로그 강제 생성

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

 

 

아카이브 로그 파일 경로에 파일이 생성된 것을 확인할 수 있다.

기존 아카이브 로그 파일

[oracle@oracle ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
[oracle@oracle arch]$ ll
합계 6004
-rw-r-----. 1 oracle oinstall    1024 12월  6 15:49 1_10_1122384552.arc
-rw-r-----. 1 oracle oinstall    4096 12월  6 15:49 1_11_1122384552.arc
-rw-r-----. 1 oracle oinstall 3652096 12월 19 10:46 1_12_1122384552.arc
-rw-r-----. 1 oracle oinstall 2484224 12월  6 15:49 1_9_1122384552.arc

 

새로 생성된 아카이브 로그 파일

[oracle@oracle arch]$ ll
합계 12904
-rw-r-----. 1 oracle oinstall    1024 12월  6 15:49 1_10_1122384552.arc
-rw-r-----. 1 oracle oinstall    4096 12월  6 15:49 1_11_1122384552.arc
-rw-r-----. 1 oracle oinstall 3652096 12월 19 10:46 1_12_1122384552.arc
-rw-r-----. 1 oracle oinstall 7055360 12월 19 11:01 1_13_1122384552.arc
-rw-r-----. 1 oracle oinstall    1024 12월 19 11:01 1_14_1122384552.arc
-rw-r-----. 1 oracle oinstall    4096 12월 19 11:01 1_15_1122384552.arc
-rw-r-----. 1 oracle oinstall 2484224 12월  6 15:49 1_9_1122384552.arc

SCOPE는 SPFILE 운영 환경 중에만 설정 가능하다.

 

spfile 사용 유무 확인

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.0.0
                                                 /dbhome_1/dbs/spfileorcl.ora

 

파라미터 변경 명령어

alter system set [변경하고 싶은 파라미터]=[변경 값] scope=[both | memory | spfile];

 

[SCOPE = BOTH | MEMORY | SPFILE]

- BOTH : 현재 Instance와 spfile의 내용을 모두 수정하여 추후 DB가 재시작 되어도 적용

- MEMORY : 현재 Instance 내에서만 적용

- SPFILE : 현재 Instance에는 적용되지 않고, 추후 DB가 다시 시작될 때 적용

 

 

ex.아카이브 로그 포맷 변경시

SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

이 경우 현재 instance에는 적용이 안되고 DB를 재시작 할 경우 적용된다.

아카이브 로그 모드 변경

 

현재 아카이브 모드 상태 확인

현재 노아카이브 모드로 확인된다.

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
Oldest online log sequence     7
Current log sequence           9

 

 

spfile 사용 유무 확인

spfile 사용 중인것으로 확인

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.0.0
                                                 /dbhome_1/dbs/spfileorcl.ora

 

 

현재 instance 상태

SQL> select status from v$instance;

STATUS
------------
OPEN

 

 

아카이브 저장 경로 확인

현재 아카이브 저장 경로가 지정되어 있지 않다.

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
...

 

 

아카이브 로그 파일 저장 디렉토리 생성

새로운 창을 열어 아카이브 로그 파일 저장 경로에 디렉토리를 생성해둔다.

[oracle@oracle ~]$ mkdir /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch

 

 

아카이브 로그 모드 변경

아카이브 로그 저장 경로를 지정하고 아카이브 로그 파일 포맷을 지정한다.

mount 단계에서 아카이브 로그 모드 변경한다.

SQL> alter system set log_archive_dest='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch' scope=spfile;

System altered.

SQL> alter system set log_archive_format='%t_%s_%r.arc' scope=spfile;

System altered.

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

SQL> startup mount;
ORACLE instance started.

Total System Global Area 1073737800 bytes
Fixed Size                  8904776 bytes
Variable Size             620756992 bytes
Database Buffers          440401920 bytes
Redo Buffers                3674112 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            /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
Oldest online log sequence     7
Next log sequence to archive   9
Current log sequence           9

 

 

아카이브 로그 경로 지정 확인

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string      /u01/app/oracle/product/19.0.0
                                                 /dbhome_1/dbs/arch
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string

 

 

아카이브 로그 강제 생성

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL>

 

 

아카이브 로그 파일 경로에 파일이 생성된 것을 확인할 수 있다.

[oracle@oracle ~]$ cd /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch
[oracle@oracle arch]$ ls -alrt
합계 2436
drwxr-xr-x. 3 oracle oinstall     106 12월  6 15:48 ..
-rw-r-----. 1 oracle oinstall 2484224 12월  6 15:49 1_9_1122384552.arc
-rw-r-----. 1 oracle oinstall    1024 12월  6 15:49 1_10_1122384552.arc
drwxr-xr-x. 2 oracle oinstall      86 12월  6 15:49 .
-rw-r-----. 1 oracle oinstall    4096 12월  6 15:49 1_11_1122384552.arc

DBCA로 DB 구성시 문자 집합을 KO16MSWIN949로 설정하고 아래 기본 언어와 기본 영역을 한국어와 한국으로 설정한 경우 sqlplus를 접속하면 글자가 깨지는 것을 확인할 수 있다. 

 

아래와 같이 ????로 글자가 깨지는 것을 확인할 수 있다.

[oracle@oracle ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 2 13:55:25 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


??? ???:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL>
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0?? ???????.
[oracle@oracle ~]$

 

오라클에서 언어설정과 OS 상에서 언어 설정이 달라서 생기는 문제로 OS에서 NLS_LANG를 설정해주면 된다.

 

NLS_LANG 설정

[oracle@oracle ~]$ export NLS_LANG=american_america.ko16mswin949
[oracle@oracle ~]$ echo $NLS_LANG
american_america.ko16mswin949

 

+) 계속 설정을 유지하고 싶으면 /home/[oracle 계정 ID]/.bash_profile 에서 맨 아래줄에

export NLS_LANG=american_america.ko16mswin949 를 추가한다.

 

다시 접속하면 글자가 깨지지 않는 것을 확인할 수 있다. 

[oracle@oracle ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 2 14:05:17 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL>
SQL>
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle ~]$

 

클라이언트 서버 접속 설정


① 인바운드 규칙 생성
서버 접속 설정 전 방화벽에서 인바운드 규칙을 생성해 주어야 한다.

[제어판 > Windows Defender 방화벽] 선택

 


고급 설정 선택


 
인바운드 규칙 설정
새규칙을 만든다.



규칙 종류 선택
포트번호로 접속을 허용할 것이다.



프로토콜 선택
1521포트에 대해서 접속을 허용할 것이다.



연결 허용 작업 선택



인바운드 규칙이 적용될 프로필 지정



인바운드 규칙 이름 설정



인바운드 규칙 생성 확인

 

  
② 클라이언트 PC 네트워크 설정
버추얼박스 네트워크 설정 
호스트 네트워크 관리자를 선택한다.



수동으로 어댑터 설정 
IP 주소는 서버 주소의 Gateway로 설정한다.


 
참고) ORACLE서버의 IP 구성 




Windows Server VM 네트워크 설정
버추얼박스 네트워크 설정도 호스트 전용 어댑터로 변경한다. 


 
Client에서 DB 접속
Client PC Orange에서 Windows Server에 설치한 DB 접속한다.

client 컴퓨터의 tnsnames.ora 

ORA19_W= 
    (DESCRIPTION= 
        (ADDRESS_LIST= 
            (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.114)(PORT=1521)) 
        ) 
        (CONNECT_DATA= 
            (SERVICE_NAME=orcl)(SERVER=DEDICATED) 
        ) 
    )



Orange 이용 DB 접속 


 
접속 완료 

'DB ORACLE 공부 기록' 카테고리의 다른 글

ARCHIVE LOG MODE 변경  (0) 2022.12.06
sqlplus에서 글자 깨짐 해결 (????? 나올 경우)  (0) 2022.12.02
서버 접속 정보 설정 (TNSNAMES.ora)  (0) 2022.12.02
Listener 생성  (0) 2022.12.02
DB 생성 (DBCA)  (0) 2022.12.02

서버 접속 정보 설정


Net Configuration Assistant 실행 



로컬 네트 서비스 이름 구성 선택




수행 작업 선택
추가 선택



서비스 이름 선택



프로토콜 선택
TCP 선택한다.



호스트 이름 설정
IP로 설정한다.


 

접속 테스트 선택



TNSNAME 구성 완료




Tnsnames 확인
ORACLE_HOME\network\admin에서 tnsnames.ora 파일이 생성된 것을 확인한다.


tnsnames.ora 

# tnsnames.ora Network Configuration File: C:\app\oracle\product\19.0.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora 
# Generated by Oracle configuration tools. 
 
ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  ) 
 
LISTENER_ORCL = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.114)(PORT = 1521)) 
 
 
ORCL = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.114)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
      (SERVICE_NAME = orcl) 
    ) 
  )


 
접속 테스트 확인 
로컬 네트워크 서비스 이름 구성 선택

  
 
테스트 선택


 
테스트할 네트 서비스 이름 선택


 
로그인 설정
System/PW 설정한다.



테스트 확인


 
TNSNAMES을 이용한 접속 테스트 
sqlplus system/1234@ORCL 


 

'DB ORACLE 공부 기록' 카테고리의 다른 글

sqlplus에서 글자 깨짐 해결 (????? 나올 경우)  (0) 2022.12.02
클라이언트 Windows Server 접속 설정  (0) 2022.12.02
Listener 생성  (0) 2022.12.02
DB 생성 (DBCA)  (0) 2022.12.02
Windows Server에 ORACLE 설치  (0) 2022.12.02

+ Recent posts