상세 컨텐츠

본문 제목

2024년 3월 8일

오라클 RAC

by 병아리 엔지니어 2024. 3. 8. 17:34

본문

 

1교시

 

# file system

- OS 메모리를 거쳐 Oracle memory 로 로드되는 방식

- 메모리 I/O 일 때는 문제가 없지만, 디스크 I/O 일 때는 OS 메모리를 무조건 거쳐 가야 한다.

- conventional write: Oracle memory 의 버퍼를 OS 메모리를 거쳐 Disk 로 write 한다.

  이런 문제를 해결하고자 Direct Path Write 방식이 등장했다.

 

# raw device

- OS 메모리를 거치지 않고 오라클 메모리로 바로 로드된다.

- 장점: 물리적 읽기 Physical read 시 성능이 file system 보다 월등히 좋다.

- 단점: 유지 / 보수가 어렵다.

 

★ ASM (Automatic Storage Management)

- I/O 작업이 자동으로 모든 디스크에 고르게 분산되어 (스트라이핑)

  디스크 레벨의 hot spot 이나 병목 (bottle neck) 이 없어진다.

- 디스크를 동적으로 추가 / 삭제할 수 있으며, 데이터 재분산 작업을 자동화로 수행한다.

  SAM (Stripe And Mirror Everything)

- raid 0: 스트라이핑 striping

- raid 1: 미러링 mirroring

 

★ ASM Instance

- ASM Cache 를 관리하는 전용 메모리 인스턴스

- 디스크에 대한 I/O 관리 (OS 메모리를 거치지 않음)

- 오라클 인스턴스와 서로 소통하면서 ASM Storage 관리를 한다.

- 이 안에도 Shared Pool, Large Pool 이 있다.

   - Shared Pool: 디스크에 대한 메타 데이터 정보 관리

   - Large Pool: 리밸런싱을 위한 병렬작업에 사용

- ASM Cache: 리밸런스 작업 중 읽기 및 쓰기 블록 사용

- 최소 권장 메모리 크기는 256Mbyte

- 리밸런싱 관련 백그라운드 프로세스

   - RBAL: 리밸런스 작업을 조정하고 ARBn 에게 지시

   - ARBn (n 은 자연수): 리밸런스 데이터 EXTENT 이동 수행

 

★ ASM 제한 사항

- 스토리지 시스템당 63개의 Disk Group 만 지원

  (현장에서는 아무리 많아도 10개)

- ASM Disk 당 최대 4 페타바이트 (petabyte) 까지 지원

  (OS의 logical volume 최대 크기가 4 페타바이트로 되어있는데 오라클도 OS 에 종속되므로)

- 스토리지 시스템당 최대 40 엑사바이트 (exabyte) 지원

- 각 디스크 그룹당 최대 백만 개의 파일 지원

- 최대 파일 크기

   - normal redundancy (2-way mirroring): 23PB (페타바이트) 까지

   - high redundancy (3-way mirroring): 15PB 까지

   - external redundancy (외부 raid 방식 채택 또는 none): 140PB

 

★ ASM AU (Allocation Unit)

- AU: extent (블록의 집합)

- AU 크기는 디스크 그룹 생성시 구성된다.

- AU_SIZE: 기본값 1M (1, 2, 4, 8, 16, 31, 64)

- 오라클은 AU 크기를 자동으로 관리한다.

   - 처음부터 2만 개: AU_SIZE

   - 다음 2만 개까지는 기존 AU_SIZE 에 4배를 곱한다.

     (기존 AU_SIZE 가 1M 였다면 다음 2만 개는 4M로)

   - 다음 나머지: 기존 AU_SIZE 에 16을 곱해서 만든다.

- 10g 버전까지는 AU_SIZE 는 1M 로 고정되어 있었으나, 11g 버전부터 개선되었다.

 

★ ASM 백업

- ASM 백업은 RMAN 으로만 수행해야 한다.

  (User Managed Backup 불가)

- RMAN 을 위한 Disk, Flash Recovery Area를 위한 별도의 저장공간이 필요하다.

- 백업 디스크는 미러링할 필요가 없다.

 

2교시부터는 ASM 관리에 대해서 배워보자.


 

2교시

 

ASM 으로 접속하기

(1번 노드에서는 ASM 1 번으로 접속해야 한다)

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

 

[oracle@rac1 ~]$ sqlplus / as sysasm

 

SQL> show sga

ShP 과 LP은 Variable Size 안에 들어 있다.

 

Total System Global Area  284565504 bytes
Fixed Size                  1336036 bytes
Variable Size             258063644 bytes
ASM Cache                  25165824 bytes

 

SQL> select group_number, name, type, state from v$asm_diskgroup;

현재 디스크 그룹이 2개 만들어져 있는 것이 보인다.

 

GROUP_NUMBER   NAME                           TYPE               STATE
-------------------------------------------------------------------------------------------------
           1                     DATA                           NORMAL       MOUNTED
           2                      FRA                            EXTERN        MOUNTED

 

하나의 그룹당 add 작업되어 있는 디스크 확인하기 (v$asm_disk 라는 뷰로 조회)

SQL> select group_number, disk_number, name, mount_status, path, total_mb from v$asm_disk;

 

디스크 파일과 용량 체크: 남은 용량 많음

SQL> select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number=b.group_number;  2    3    4

 

현재 디스크 그룹 안에 어떤 파일들이 저장되었는지 보기

SQL> select group_number, file_number, bytes, redundancy, type from v$asm_file;

더보기

GROUP_NUMBER FILE_NUMBER      BYTES REDUND TYPE
------------ ----------- ---------- ------ ----------------------------------------------------------------
           1         253       1536 MIRROR ASMPARAMETERFILE
           1         255  272756736 MIRROR OCRFILE
           1         256  713039872 MIRROR DATAFILE
           1         257  513810432 MIRROR DATAFILE
           1         258   99622912 MIRROR DATAFILE
           1         259    5251072 MIRROR DATAFILE
           1         260   18694144 HIGH   CONTROLFILE
           1         261   52429312 MIRROR ONLINELOG
           1         262   52429312 MIRROR ONLINELOG
           1         263   32514048 MIRROR TEMPFILE
           1         264  104865792 MIRROR DATAFILE
           1         265   26222592 MIRROR DATAFILE
           1         266   52429312 MIRROR ONLINELOG
           1         267   52429312 MIRROR ONLINELOG
           1         268       3584 MIRROR PARAMETERFILE
           2         256   18694144 UNPROT CONTROLFILE
           2         257   52429312 UNPROT ONLINELOG
           2         258   52429312 UNPROT ONLINELOG
           2         259   52429312 UNPROT ONLINELOG
           2         260   52429312 UNPROT ONLINELOG
           2         261   16197120 UNPROT ARCHIVELOG
           2         262       1024 UNPROT ARCHIVELOG
           2         263       1024 UNPROT ARCHIVELOG
           2         264   16805376 UNPROT ARCHIVELOG
           2         265    4312576 UNPROT ARCHIVELOG
           2         266       1024 UNPROT ARCHIVELOG
           2         267     414720 UNPROT ARCHIVELOG
           2         268       1024 UNPROT ARCHIVELOG
           2         269     366592 UNPROT ARCHIVELOG
           2         270       1024 UNPROT ARCHIVELOG
           2         271       1024 UNPROT ARCHIVELOG
           2         272       1536 UNPROT ARCHIVELOG
           2         273       1024 UNPROT ARCHIVELOG
           2         274    1011200 UNPROT ARCHIVELOG
           2         275     855040 UNPROT ARCHIVELOG
           2         276       1024 UNPROT ARCHIVELOG
           2         277    3281920 UNPROT ARCHIVELOG
           2         278    1940480 UNPROT ARCHIVELOG
           2         279       1024 UNPROT ARCHIVELOG
           2         280     535040 UNPROT ARCHIVELOG
           2         281    1066496 UNPROT ARCHIVELOG
           2         282    3254784 UNPROT ARCHIVELOG
           2         283       1024 UNPROT ARCHIVELOG
           2         284       1024 UNPROT ARCHIVELOG
           2         285     219136 UNPROT ARCHIVELOG
           2         286     266752 UNPROT ARCHIVELOG
           2         287    3200000 UNPROT ARCHIVELOG
           2         288    1940480 UNPROT ARCHIVELOG
           2         289     473088 UNPROT ARCHIVELOG
           2         290     199680 UNPROT ARCHIVELOG
           2         291    6724096 UNPROT ARCHIVELOG
           2         292     433664 UNPROT ARCHIVELOG
           2         293    1868800 UNPROT ARCHIVELOG
           2         294       1024 UNPROT ARCHIVELOG
           2         295       1024 UNPROT ARCHIVELOG
           2         296     476160 UNPROT ARCHIVELOG
           2         297     272896 UNPROT ARCHIVELOG
           2         298    7412736 UNPROT ARCHIVELOG
           2         299       1024 UNPROT ARCHIVELOG
           2         300   45663232 UNPROT ARCHIVELOG

60 rows selected.

 

그룹 1번의 템플릿 보기

SQL> select * from v$asm_template where group_number = 1;

# STRIPE 컬럼을 보면 COARSE 가 있고 FINE 이 있는데

   나홀로 FINE 이라고 되어 있는 것 = 컨트롤파일

   컨트롤파일은 작은 바이너리 형식의 파일이기 때문에 많은 용량이 필요없다.

   그래서 자동으로 128K 짜리로 만들어진 것 (오라클이 자동으로 저렇게 만듦)

   FINE = AU_SIZE 128K / COARSE = AU_SIZE 1M

 

# 새로운 ASM Disk 생성

 

1. rac 중단하기

SQL> exit

 

2. 양쪽 노드 모두 내리기

[oracle@rac1 ~]$ crs_stop -all

 

[oracle@rac1 ~]$ srvctl status instance -d racdb -i racdb1,racdb2
Instance racdb1 is not running on node rac1
Instance racdb2 is not running on node rac2

 

만약 깔끔하게 내려가지 않았다면

다른 쪽 노드에서도 내려보기

(QUESTION. 이 깔끔하게 내려갔는지 안 내려갔는지는 어떻게 알지?)

 

[oracle@rac1 ~]$ crs_stat -t

 

[oracle@rac2 ~]$ crs_stop -all

 

3. rac1 쪽에서 루트 계정으로 가기 + OS 내리기 (양쪽 노드에서)

[oracle@rac1 ~]$ su -
Password: (비밀번호 oracle)

[root@rac1 ~]# init 0

 

[oracle@rac2 ~]$ su -
Password:
[root@rac2 ~]# init 0

 

퍼티가 내려갔다.

 

도구 > 미디어 > 만들기

 

하드 디스크 만들기

VDI > 다음

 

미리 전체 크기 할당 > 다음

 

그리고 디스크 위치를 지정해야 하는데

오른쪽에 있는 폴더 모양 아이콘 클릭하기

 

그러면 이런 창이 뜨는데

 

위치는 아까 그 도구 > 미디어에서

이미 만들어져 있는 디스크를 아무거나 하나 클릭한 다음

> 맨 아래에 있는 '위치' (여기서는 D:\oracle_rac11g\grid\asm_disk1.vdi) 랑 같은 위치로 지정하기

 

이렇게.

 

완료 누르기

 

그러면 가상머신 오른쪽에 이렇게 미디어 생성 중이라는 메시지가 뜬다.

 

 

새로 추가한 디스크들 공유 가능으로 설정하고 꼭 맨 오른쪽 아래 적용버튼 누르기

 

똑같은 방법으로 디스크 하나 더 만들기

 

그리고 가상머신들 목록에서 rac1 클릭 > 설정

 

저장소에 보면 방금 만든 disk 7번과 8번이 들어와 있지 않은데

얘네를 추가해주어야 한다.

 

컨트롤러: SATA 클릭 > 맨 오른쪽에 있는 아이콘 클릭

 

여기서 Not Attached 에 들어있는 7번 디스크 선택

(지금은 8번 디스크 만들기 전이라서 Not Attached 에 7번 디스크 하나밖에 안들어있지만

8번 디스크 만든 다음 Not Attached 에 8번 디스크도 들어있다면 > 8번 디스크도 추가해주기)

 

그러면 이런 모습이 된다.

 

8번까지 추가하기

 

추가가 다 끝난 뒤의 화면

 

rac2 에서도 똑같은 작업 반복하기

(여기서도 디스크 만들고 나서 '공유 가능 > 적용' 눌러주는 거 잊지 말기!!!!!!!!!!!!!!!!!!!!!!!!!!!!)

(그리고 rac2 에서 같은 작업을 반복할 때는 디스크를 추가할 때 attached 에서 선택해야 한다.)

 

그러면 rac1 과 rac2 의 저장소는

각각 이런 모습이 된다.

(디스크 추가하고 나서 '공유 가능' 으로 바꿔주는 거 잊지말기!!!!!!!!!!!!!!!!!!!!!!!!!)


나 여기서부터 놓쳤어 ㅠㅠㅠㅠㅠ

(사진 11:15 사타포트 7은 뭐야?...)

 

rac1 가상머신 시작

퍼티 켜기 > 루트로 로그인

[oracle@rac1 ~]$ su -
Password: (비밀번호 oracle)

 

[root@rac1 ~]# fdisk -l

파티션되어 있지 않은 디스크들은 맨 밑에 뜬다.

/dev/sdh, /dev/sdi 얘네가 파티션되어 있지 않은 디스크들

더보기

Disk /dev/sda: 53.6 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         535     4192965   82  Linux swap / Solaris
/dev/sda3             536        6527    48130740   83  Linux

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         652     5237158+  83  Linux

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         652     5237158+  83  Linux

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         652     5237158+  83  Linux

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1         652     5237158+  83  Linux

Disk /dev/sdf: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1         652     5237158+  83  Linux

Disk /dev/sdg: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdg1               1         652     5237158+  83  Linux

Disk /dev/sdh: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdh doesn't contain a valid partition table

Disk /dev/sdi: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdi doesn't contain a valid partition table

 

파티션하기

(/ 다음에 파티션되지 않은 디스크들 이름 써주기)

[root@rac1 ~]# fdisk /dev/sdk (이름은 내 화면에 뜬걸로 쓰기)

 

[root@rac1 ~]# fdisk /dev/sdh

 

n, p, 1, 엔터, 엔터, w

 

그다음 것도 똑같이 fdisk /dev/sdl (이름은 내 화면에 뜬 걸로)

> n, p, 1, 엔터, 엔터, w

 

더보기

[root@rac1 ~]# fdisk /dev/sdi
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

 

파티션한 디스크 확인

fdisk -l |perl -ne 'print if/^\/dev\/sd[b-l]\d/'

 

현재 디스크 확인하기

[root@rac1 ~]# oracleasm listdisks

ASMDISK01
ASMDISK02
ASMDISK03
ASMDISK04
ASMDISK05
ASMDISK06

 

ASMDISK 6번까지 원래는 만들어 놨는데

지금 7, 8 을 추가했으므로 새로 만들기

 

[root@rac1 ~]# oracleasm createdisk ASMDISK07 /dev/sdh1

디스크 이름은 순서대로 하면 된다. (내걸로)

 

[root@rac1 ~]# oracleasm createdisk ASMDISK07 /dev/sdh1
Writing disk header: done
Instantiating disk: done

 

[root@rac1 ~]# oracleasm createdisk ASMDISK08 /dev/sdi1
Writing disk header: done
Instantiating disk: done

 

다시 현재 디스크 확인하기

[root@rac1 ~]# oracleasm listdisks
ASMDISK01
ASMDISK02
ASMDISK03
ASMDISK04
ASMDISK05
ASMDISK06
ASMDISK07
ASMDISK08

 

다 했으면 rac2 번 노드 띄우기

 

rac2 에서 oracleasm listdisks 해보기 : 아까 파티션해놓았던 (8번까지)

목록들이 뜬다. (만약 안되면 rac2 가상머신과 퍼티를 껐다가 다시 켜서 해보기)

파티션은 한쪽 노드에서만 하면 됨, 이렇게 하면 다른 쪽 노드에서도 사용할 수 있다.

 

rac2 에서 oracle 로 로그인하기

 

crs_start -all 로 올리기


3교시

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

 

[oracle@rac1 ~]$ sqlplus / as sysasm

 

SQL> select group_number, disk_number, name, mount_status, path, total_mb from v$asm_disk;

 

# 사용 가능한 디스크 확인

SQL> select group_number, mount_status, path, total_mb from v$asm_disk where mount_status = 'CLOSED';

 

SQL> select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;  2    3    4

 

# 디스크 그룹에 디스크 추가하기

fra 라는 디스크 그룹에 7번 디스크 추가하기

 

SQL> ALTER DISKGROUP FRA ADD DISK '/dev/oracleasm/disks/ASMDISK07' rebalance power 10;
ALTER DISKGROUP FRA ADD DISK '/dev/oracleasm/disks/ASMDISK07' rebalance power 10
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15001: diskgroup "FRA" does not exist or is not mounted

 

SQL> select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;  2    3    4

 

# 디스크 그룹에서 디스크 삭제 (지우고 싶은 디스크 이름 DISK_NAME 선택)

SQL> alter diskgroup fra drop disk 방금추가한디스크이름;

 

지워졌는지 확인해보기

SQL> select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;  2    3    4

 

혹시 STATE 부분에 DROPPING 이라고 나온다면? 지금 삭제하고 있는 중이라는 뜻

 

디스크 그룹에 디스크를 추가할 때는 파일이름을 쓰고

디스크 그룹에서 디스크를 삭제할 때는 디스크 이름을 쓴다.

 

# 새로운 디스크 그룹 생성

사용 가능한 디스크들이 있는지 체크하기

 

SQL> select group_number, mount_status, path, total_mb from v$asm_disk where mount_status = 'CLOSED';

 

새로운 디스크 그룹에 7번과 8번 디스크 추가하기

 

SQL> create diskgroup asm_dg external redundancy disk '/dev/oracleasm/disks/ASMDISK07', '/dev/oracleasm/disks/ASMDISK08';

Diskgroup created.

 

현재 만들어져 있는 디스크 그룹들 다시 확인하기

사용 가능한 디스크가 2개라고 나온다.

SQL> select group_number, mount_status, path, total_mb from v$asm_disk where mount_status = 'CLOSED';

 

SQL> select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;  2    3    4

 

# 디스크 그룹 삭제하기 (회사가 나를 열받게 할 때 수행하면 좋음 )

SQL> drop diskgroup asm_dg;
Diskgroup dropped.

 

SQL> select group_number, mount_status, path, total_mb from v$asm_disk where mount_status = 'CLOSED';

다시 확인하면: 디스크 그룹에 넣었던 디스크는 다시 사용 가능한 디스크로 보이게 된다.

 

디스크 그룹 다시 생성하기

SQL> create diskgroup asm_dg external redundancy disk '/dev/oracleasm/disks/ASMDISK07', '/dev/oracleasm/disks/ASMDISK08';

Diskgroup created.

 

SQL> select group_number, name, type, state from v$asm_diskgroup;


나 db 가 안올라와.... 이유를 모르겠어...

 

4교시

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? racdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
[oracle@rac1 ~]$ sqlplus / as sysdba

show parameter spfile

NAME TYPE VALUE

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

spfile string +DATA/racdb/spfileracdb.ora

 

SQL>!

cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/

ls

 

 

 

cat initracdb1.ora

SPFILE='+DATA/racdb/spfileracdb.ora'

 

vi initracdb1.ora

(아무 짓도 안하고 그냥 읽어보기만 하고 :q! 하고 나옴)

 

DB 스타트업시에는 무조건 /u01/app/oracle/product/11.2.0/dbhome_1/dbs/

이 위치를 참고한다.

 

[oracle@rac1 dbs]$ exit

 

SQL> create pfile='/home/oracle/init.ora' from spfile;

File created.

 

>!

 

ls

cat init.ora

 

exit

 

구성되어 있는 테이블스페이스 이름과 크기 확인

SQL> select tablespace_name, bytes/1024/1024 mb, file_name from dba_data_files;

 

컨트롤파일 정보도 확인해보기

select name from v$controlfile;

 

리두로그 정보 확인해보기

하나의 그룹당 멤버들이 다른 디스크에 만들어져 있는 것이 보인다.

select a.group#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

 

그런데 시퀀스 번호가 같다?!

로드마다 리두로그 그룹이 다른데 b.thread# 라는 컬럼을 추가해서 보면

인스턴스 번호가 각각 다른 것이 보인다.

(리두는 로드별로 구성이 된다)

 

select a.group#, b.thread#, b.sequence#, a.member, b.bytes/1024/1024 MB, b.archived, b.status
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

 

현재 디스크 그룹 보기 (ASM 쪽 말고 oracle 쪽에서도 볼 수 있다)

select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

 

내 화면이 정상, 선생님 화면은

state 가 mounted, mounted, dismounted

type 도 asm_dg 는 null

 

SYS@racdb1> exit
Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

 

alter diskgroup asm_dg mount;

Diskgroup altered.

 

[oracle@rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 8 14:18:08 2024

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options

 

SQL> alter diskgroup asm_dg mount;

 

SQL> exit

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? racdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

 

[oracle@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 8 14:19:30 2024

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


Connected to:
Oracle Database 11g Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options

 

SYS@racdb1> select group_number, name, type, state from v$asm_diskgroup;

이제 선생님도 connected, connected, mounted 라고 나오심.

 

현재 사용할 수 있는 디스크 그룹들 용량 체크

select b.name as group_name, a.name as disk_name, a.header_status, a.state,
a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

 

# 테이블스페이스 생성하기 (수행하지 말기!!!!!!!!!!)

SYS@racdb1> show parameter db

이 중에서 db_create_file_dest: 테이블스페이스가 만들어지는 위치

 

테이블스페이스는 현장에서 업무별로 분리된다.

 

asm_dg 라는 디스크에 10m 짜리 테이블스페이스 만들기

SYS@racdb1> create tablespace asm_tbs datafile '+asm_dg', size 10m;

Tablespace created.

(시간이 좀 오래 걸리네...)

 

조금 전에 생성한 테이블스페이스 정보 확인

 

 


5교시

 

위치 정보를 추가하지 않고 테이블스페이스를 만들면 어디에 추가되는지 확인해보자.

SYS@racdb1> alter tablespace asm_tbs add datafile;

Tablespace altered.

 

OMF (Oracle Managed Files)

테이블 스페이스를 생성 및 추가할 경우, 데이터파일의 위치를 표현하지 않으면

자동으로 db_create_file_dest 파라미터에 설정한 위치에 생성된다.

데이터 파일 사이즈는 100M, extent 관리 방식은 LOCAL, 세그먼트 공간 관리는 auto, 자동 확장 기능

 

show parameter db_create_file_dest;

 

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

SYS@racdb1> select tablespace_name, status, contents, extent_management,

segment_space_management
from dba_tablespaces;  2    3

 

ASM_TBS 데이터파일 지우기

SYS@racdb1> alter tablespace asm_tbs drop datafile '+DATA/racdb/datafile/asm_tbs.270.1163083803';

Tablespace altered.

 

테이블스페이스 확인해보기

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

db_create_file_dest 라는 파라미터값 수정하기

 

SYS@racdb1> alter system set db_create_file_dest = '+ASM_DG';
System altered.

 

수정된 파라미터값 확인하기

SYS@racdb1> show parameter db_create_file_dest

 

새 테이블스페이스 만들기

SYS@racdb1> create tablespace insa_tbs;

Tablespace created.

 

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

SYS@racdb1> alter tablespace insa_tbs add datafile;

Tablespace altered.

 

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

테이블스페이스 삭제: 테이블스페이스를 OMF 방식으로 만들면 삭제도 오라클이 알아서 해준다.

SYS@racdb1> drop tablespace insa_tbs;

Tablespace dropped.

 

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

SYS@racdb1> alter database datafile '+DATA/racdb/datafile/asm_tbs.269.1163082437' autoextend on;

Database altered.

 

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

SYS@racdb1> create table hr.emp1 tablespace asm_tbs as select * from hr.employees;
Table created.

 

extent 와 세그먼트 정보 확인

SYS@racdb1> select tablespace_name, extents, bytes, blocks from dba_segments
where segment_name = 'EMP1' and owner = 'HR';  2

 

데이터 건수 세어보기

SYS@racdb1> select count(*) from hr.emp1;

  COUNT(*)
--------------
       107

 

# ASM_TBS 테이블스페이스를 +ASM_DG 에서 +DATA 그룹으로 이동

 

상태 정보 확인하기

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

이관작업해야 하는 테이블스페이스 오프라인 모드로 떨어뜨리기

SYS@racdb1> alter tablespace asm_tbs offline normal;

Tablespace altered.

 

오프라인 모드로 떨어졌는지 확인하기

 

SYS@racdb1> !

[oracle@rac1 ~]$ rman target /

더보기

[oracle@rac1 ~]$ rman target /

 

Recovery Manager: Release 11.2.0.1.0 - Production on Fri Mar 8 15:14:50 2024

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: RACDB (DBID=1160452274)

리포트 스키마: 오프라인으로 떨어져 있는 것만 크기가 0으로 보인다.

RMAN> report schema;

더보기

RMAN> report schema;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name RACDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    680      SYSTEM               ***     +DATA/racdb/datafile/system.256.1162835387
2    490      SYSAUX               ***     +DATA/racdb/datafile/sysaux.257.1162835389
3    95       UNDOTBS1             ***     +DATA/racdb/datafile/undotbs1.258.1162835389
4    5        USERS                ***     +DATA/racdb/datafile/users.259.1162835389
5    100      EXAMPLE              ***     +DATA/racdb/datafile/example.264.1162835541
6    25       UNDOTBS2             ***     +DATA/racdb/datafile/undotbs2.265.1162835749
7    0        ASM_TBS              ***     +ASM_DG/racdb/datafile/asm_tbs.256.1163082429
8    0        ASM_TBS              ***     +DATA/racdb/datafile/asm_tbs.269.1163082437

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    31       TEMP                 32767       +DATA/racdb/tempfile/temp.263.1162835533

 

데이터파일 카피하기

기존 위치: +DATA/racdb/datafile/asm_tbs.269.1163082437

새로운 위치: +DATA/racdb/datafile/asm_tbs01.dbf

그러면 저 새로운 파일 위치에 백업본이 만들어진다.

 

RMAN> copy datafile '+DATA/racdb/datafile/asm_tbs.269.1163082437' to '+DATA/racdb/datafile/asm_tbs01.dbf';

더보기

RMAN> copy datafile '+DATA/racdb/datafile/asm_tbs.269.1163082437' to '+DATA/racdb/datafile/asm_tbs01.dbf';

Starting backup at 08-MAR-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=152 instance=racdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00008 name=+DATA/racdb/datafile/asm_tbs.269.1163082437
output file name=+DATA/racdb/datafile/asm_tbs01.dbf tag=TAG20240308T151815 RECID=2 STAMP=1163085499
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:08
Finished backup at 08-MAR-24

RMAN 에서 빠져나오기

 

RMAN> exit

Recovery Manager complete.

 

다시 오라클로

[oracle@rac1 ~]$ exit
exit

SYS@racdb1>

 

SYS@racdb1> alter tablespace asm_tbs rename datafile '+DATA/racdb/datafile/asm_tbs.269.1163082437' to '+DATA/racdb/datafile/asm_tbs01.dbf';
Tablespace altered.

 

테이블스페이스 온라인으로 올리기

SYS@racdb1> alter tablespace asm_tbs online;
Tablespace altered.

 

확인

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;

 

SYS@racdb1> select count(*) from hr.emp1;

  COUNT(*)
------------------
       107

 

원복도 똑같은 방법으로 하면 된다.

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

이관작업해야 하는 테이블스페이스 오프라인 모드로 떨어뜨리기
SYS@racdb1> alter tablespace asm_tbs offline normal;
Tablespace altered.

 

오프라인 모드로 떨어졌는지 확인하기

 

RMAN 으로 접속하기

SYS@racdb1> !
[oracle@rac1 ~]$ rman target /

 

RMAN> report schema;

 

RMAN> copy datafile '+DATA/racdb/datafile/asm_tbs.269.1163082437' to '+ASM_DG';

 

그러면 어느 위치에 백업된다고 위치 정보를 띄워준다. (output file name 부분)

 

rman 에서 exit > OS 에서 exit > 오라클로 가기

 

SYS@racdb1> alter tablespace asm_tbs rename datafile '' to '+asm/새로운위치';

 

수정 후 온라인으로 올리기

SYS@racdb1> alter tablespace asm_tbs online;

 

확인

SYS@racdb1> select tablespace_name, bytes/1024/1024 mb, file_name, autoextensible from dba_data_files;


6교시

 

<< racdb 쪽에서 >>

SYS@racdb1> select group_number, name, type, state from v$asm_diskgroup;

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

[oracle@rac1 ~]$ sqlplus / as sysasm

 

<< ASM 쪽에서 >>

SQL> select group_number, name, type, state from v$asm_diskgroup;

 

# 디스크 그룹을 dismount 상태로 바꾸기

ASM 디스크 그룹을 마운트에서 디스마운트로 바꿔 보자.

 

(ASM 쪽에서 작업하기)

SQL> alter diskgroup asm_dg dismount;

수행하면: 디스마운트할 수가 없다고 하면서 오류가 발생한다.

(저 디스크 그룹은 이미 사용하고 있기 때문에 내릴 수가 없기 때문)

# 디스크 그룹을 디스마운트시킬 때는: 디스크 그룹에 속한 테이블스페이스들이 오프라인 상태일 때만 가능하다.

더보기

SQL> alter diskgroup asm_dg dismount;
alter diskgroup asm_dg dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "ASM_DG" precludes its dismount

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? racdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

 

<<다시 racdb1 쪽에서>>

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

체크포인트 유발

SYS@racdb1> alter tablespace asm_tbs offline normal;

Tablespace altered.

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

[oracle@rac1 ~]$ sqlplus / as sysasm

 

# 디스크 그룹을 디스마운트시키기

 

<< asm >>

 

SQL> select group_number, name, type, state from v$asm_diskgroup;

 

SQL> alter diskgroup asm_dg dismount;
Diskgroup altered.

 

SQL> select group_number, name, type, state from v$asm_diskgroup;

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? racdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle
[oracle@rac1 ~]$ sqlplus / as sysdba

 

<< racdb1 >>

 

alter tablespace asm_tbs online;

Tablespace altered.

(오류가 발생해야 정상... 그런데 선생님도 오류 안나심)

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+asm1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle

 

# 디스크 그룹을 mount

 

 

<<asm>>

SQL> alter diskgroup asm_dg mount;
alter diskgroup asm_dg mount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "ASM_DG" cannot be mounted
ORA-15013: diskgroup "ASM_DG" is already mounted

이미 마운트되어 있다고 하면서 오류가 발생한다.

(이건 버추얼의 문제인 듯 ㅠㅠ)

 

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [+ASM1] ? racdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle

[oracle@rac1 ~]$ sqlplus / as sysdba

 

<<racdb>>

SYS@racdb1> alter tablespace asm_tbs online;
Tablespace altered.

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

SYS@racdb1> select count(*) from hr.emp1;

  COUNT(*)
-----------------
       107

 

테이블 생성하는 것도 문제가 없어야 정상

 

SYS@racdb1> create table hr.emp_temp tablespace asm_tbs as select * from hr.employees;
Table created.

 

SYS@racdb1> select count(*) from hr.emp_temp;

  COUNT(*)
-----------------
       107

 

ORACLE_SID = [racdb1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle
[oracle@rac1 ~]$ 

[oracle@rac1 ~]$ cd /u01/app/11.2.0/grid/sqlplus/admin

 

[oracle@rac1 admin]$ ls
glogin.sql  help  libsqlplus.def  plustrce.sql  pupbld.sql

여기서 glogin.sql 파일 수정하기

 

[oracle@rac1 admin]$ vi glogin.sql

맨 아랫줄에 SET SQLPROMPT '&_USER.@&CONNECT_IDENTIFIER.> ' 얘 붙여넣고 저장하고 나오기

 

그러면 +ASM1 쪽에서 SQL+로 접속했을 때

SYS@+ASM1> 이라고 표시된다.

 

2번 노드에서도 똑같은 작업 해놓기

 

다시 +ASM1에서

 

<< asm 1 >> 아래처럼 오류가 발생해야 정상

SYS@+ASM1> alter diskgroup asm_dg dismount;
alter diskgroup asm_dg dismount
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15027: active use of diskgroup "ASM_DG" precludes its dismount

 

하지만 강제로 디스마운트 상태로 내리고 싶다면?

할 수는 있지만 그렇게 하면 일이 커지게 된다.

 

SYS@+ASM1> alter diskgroup asm_dg dismount force;
Diskgroup altered.

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

SYS@racdb1> create table hr.insa tablespace asm_tbs as select * from hr.employees;
Table created.
테이블 생기면 안되고 오류 발생해야 정상인데 나는 오류 발생 안했어...

 

SYS@racdb1> select group_number, name, type, state from v$asm_diskgroup;

 

마운트 단계로 올리기

그런데 나는 이 단계에서 오류가 발생함.

 

SYS@racdb1> alter diskgroup asm_dg mount;

alter diskgroup asm_dg mount
*
ERROR at line 1:
ORA-15000: command disallowed by current instance type

 

SYS@racdb1> select group_number, name, type, state from v$asm_diskgroup;

 

SYS@racdb1> create table hr.insa1 tablespace asm_tbs as select * from hr.employees;
Table created.
테이블은 여전히 잘 만들어지네... ㅡㅡ

 

SYS@racdb1> exit

[oracle@rac1 admin]$ sqlplus / as sysdba

 

테이블을 조회했을 때 문제가 발생해야 정상이라는데 (강제로 디스마운트 상태로 내렸기 때문에)

난 아~~~~~ 무런 문제가 없어... 이거 왜 이러는 거야...

 

SYS@racdb1> select count(*) from hr.emp1;

  COUNT(*)
----------
       107

그런데 문제는 datafile 7 번 때문에 발생했다고 하심.

여기서부터는 나는 아무 문제도 없기 때문에 필기만 ㅠㅠ

 

'+ASM_DG/racdb/datafile/asm_tbs.256.1163086057'

 

SYS@racdb1> alter tablespace asm_tbs offline immediate;

Tablespace altered.

 

select a.file#, b.name, a.name, a.status, a.checkpoint_change#
from v$datafile a, v$tablespace b
where a.ts# = b.ts#;

 

SYS@racdb1> recover datafile '+ASM_DG/racdb/datafile/asm_tbs.256.1163086057';

백업 리커버리할 때 많이 봤던 Specify log 중에서 auto 고르고

 

테이블스페이스 다시 온라인으로 올리기

SYS@racdb1> alter database datafile '+ASM_DG/racdb/datafile/asm_tbs.256.1163086057' online;


7교시

 

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

 

(나는 asm_tbs가 온라인으로 올라와 있지만 오프라인이어야 정상)

SYS@racdb1> alter tablespace asm_tbs online;

 

SYS@racdb1> select count(*) from hr.emp;

  COUNT(*)
------------------
       107

 

SYS@racdb1> create table hr.insa tablespace asm_tbs as select * from hr.employees;

Table created.

 

SYS@racdb1> show parameter db_recovery_file_dest;

 

SYS@racdb1> archive log list

 

OS 로 나가기

 

SYS@racdb1> !

 

RMAN 으로 접속
[oracle@rac1 admin]$ rman target /

 

RMAN> report schema;

더보기

RMAN> report schema;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name RACDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    680      SYSTEM               ***     +DATA/racdb/datafile/system.256.1162835387
2    490      SYSAUX               ***     +DATA/racdb/datafile/sysaux.257.1162835389
3    95       UNDOTBS1             ***     +DATA/racdb/datafile/undotbs1.258.1162835389
4    5        USERS                ***     +DATA/racdb/datafile/users.259.1162835389
5    100      EXAMPLE              ***     +DATA/racdb/datafile/example.264.1162835541
6    25       UNDOTBS2             ***     +DATA/racdb/datafile/undotbs2.265.1162835749
7    0        ASM_TBS              ***     +ASM_DG/racdb/datafile/asm_tbs.256.1163082429
8    10       ASM_TBS              ***     +DATA/racdb/datafile/asm_tbs01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    31       TEMP                 32767       +DATA/racdb/tempfile/temp.263.1162835533

 

RMAN> show all;

더보기

RMAN> show all;

RMAN configuration parameters for database with db_unique_name RACDB are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_racdb1.f'; # default

 

컨트롤파일이 지가 알아서 저절로 백업되도록 하기

RMAN> config controlfile autobackup on;

더보기

RMAN> config controlfile autobackup on;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "identifier": expecting one of: "advise, allocate, alter, backup, @, catalog, change, configure, connect, convert, copy, create, crosscheck, delete, drop, duplicate, exit, flashback, grant, host, import, list, mount, open, print, quit, recover, register, release, repair, replace, report, reset, restore, resync, revoke, run, send, set, show, shutdown, spool, sql, startup, switch, transport, unregister, upgrade, validate, {, "
RMAN-01008: the bad identifier was: config
RMAN-01007: at line 1 column 1 file: standard input

 

백업이 필요한 파일들 보기 (한번도 백업받은 적이 없기 때문에 모든 파일이 백업을 필요로 함)

RMAN> report need backup;

 

더보기

RMAN> report need backup;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of files with less than 1 redundant backups
File #bkps Name
---- ----- -----------------------------------------------------
1    0     +DATA/racdb/datafile/system.256.1162835387
2    0     +DATA/racdb/datafile/sysaux.257.1162835389
3    0     +DATA/racdb/datafile/undotbs1.258.1162835389
4    0     +DATA/racdb/datafile/users.259.1162835389
5    0     +DATA/racdb/datafile/example.264.1162835541
6    0     +DATA/racdb/datafile/undotbs2.265.1162835749
7    0     +ASM_DG/racdb/datafile/asm_tbs.256.1163082429

 

백업받기

RMAN> backup as compressed backupset database;

 

근데 지금까지 아~~~~~~~ 무 말이 없다가

이제서야 datafile 7번에 액세스할 수 없다고 하면서 오류가 남 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

죽일까^^?

더보기

RMAN> backup as compressed backupset database;

Starting backup at 08-MAR-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=30 instance=racdb1 device type=DISK
RMAN-06169: could not read file header for datafile 7 error reason 6
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 03/08/2024 17:11:24
RMAN-06056: could not access datafile 7

아...... 진짜 @#%@$^#&$*% (심한말)

필기만 따라갈 수밖에 없겠네...

 

백업본 확인해보기

RMAN> list backup;

 

퍼티에서 ASM1 쪽으로 가기 (새 세션)

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/11.2.0/grid is /u01/app/oracle
[oracle@rac1 ~]$ asmcmd

 

ASMCMD> ls
DATA/
FRA/

(원래는 여기 ASM_DG/ 도 있어야 정상)

 

ASMCMD> cd ASM_DG

(없어서 안 들어가진다)

 

ASMCMD> ls

 

ASMCMD> cd RACDB

 

ASMCMD> ls

cd DATAFILE

ls

ASM_TBS.255.(어쩌고저쩌고 숫자)

...

 

cd /

cd ..

cd ..

pwd

 

(홈 화면까지 가기)

홈: +ASM_DG/RACDB/DATAFILE

 

ASMCMD> ls

ASM_DG/

DATA/

FRA/

 

ASMCMD> cd ASM_DG

ASMCMD> cd ..

ASMCMD> find --type datafile asm_dg asm*

+asm_dg/RACDB/DATAFILE/ASM_TBS.256.1163086057

 

ASMCMD>cd ASM_DG/RACDB/DATAFILE

ls

ASM_TBS.256.1163086057

 

ls -al

 

asm 파일 지우기

ASMCMD> rm -f ASM_TBS.256.1163086057

 

그런데 지워지지 않고 오류가 발생한다. (함부로 지울 수도 없음)

ORA-15032, ORA-15028

 

테이블스페이스 상태 정보 확인하기

select tablespace_name, status fro dba_tablespaces;

 

테이블스페이스 오프라인으로 떨어뜨려 놓기

alter tablespace asm_tbs offline normal;

 

테이블스페이스 상태 정보 다시 확인하기

select tablespace_name, status fro dba_tablespaces;

 

데이터파일들 확인하기

select tablespace_name, file_name, status from dba_data_files;

 

다시 ASM 에서 파일을 지우면: 지워진다.

ASMCMD> rm -f ASM_TBS.256.1163086057

 

ls 해보면 지워진 게 보인다. (장애 유발시킨 것)

AMSCMD-08002 오류 발생

 

다시 SYS@racdb1 에서: 테이블스페이스 온라인으로 올리기

 

SYS@racdb1> alter tablespace asm_tbs online;

ORA-01157, ORA-01110 오류 발생

 

RMAN 에서

list failure;

하면: 지원하지 않는다고 나온다.

 

RMAN> list failure;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of list command at 03/08/2024 17:27:39
RMAN-05533: LIST FAILURE is not supported on RAC database

 

RMAN> restore datafile 7;
RMAN> recover datafile 7;

 

다시 ASMCMD 쪽에서

ASMCMD> ls -al

 

다시 DB 창에서

 

현재 테이블스페이스 상태 정보 확인

SYS@racdb1> select tablespace_name, status fro dba_tablespaces;

오프라인으로 떨어져 있는 ASM_TBS 온라인으로 다시 올리기

 

SYS@racdb1> alter tablespace asm_tbs online;

 

테이블스페이스 상태 정보 다시 확인하기

SYS@racdb1> select tablespace_name, status fro dba_tablespaces;

 

SYS@racdb1> select count(*) from hr.emp;

  COUNT(*)
------------------
       107

관련글 더보기