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
2024년 3월 11일 (학원에서의 마지막 날) (0) | 2024.03.11 |
---|---|
2024년 3월 6일 2교시 + 3교시 + 4교시 (0) | 2024.03.06 |
2024년 3월 5일 1교시 (0) | 2024.03.05 |
2024년 3월 4일 1교시 QUESTION. (0) | 2024.03.04 |
2024년 2월 29일 QUESTION. (0) | 2024.02.29 |