본문 바로가기

강남 아이티윌 오라클DBA과정 94기/RAC

[오라클 DBA 과정] 89일차 RAC(6) (2026-07-27)

서로 다른 버퍼 캐시를 하나의 캐서처럼 쓰는 게 글로벌 캐시
디스크 I/O보다는 인스턴스 간의 네트워크를 통해 전송하는 게 좋다.
캐시 퓨전은 글로벌 버퍼 동기화하는 것.

vip를 쓰는 이유는 failover. 한 쪽이 에러가 나도 다른 쪽에서 수행할 수 있도록 하기 위함.

_________________________________________________________________________________


■ 동일한 행에 대해서 write


# [3, 31276]
# master node: rac2 node
# request node, hold node: rac1 node(exclusive)
# request node

SYS@racdb1> alter system flush buffer_cache;

SYS@racdb2> alter system flush buffer_cache;

SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected

SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected

<HR@racdb1> update hr.employees set salary = salary * 1.1 where employee_id = 100;

SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000080FB37B0 xcur                2          1


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected


HR@racdb2> update hr.employees set salary = salary * 1.1 where employee_id = 100;
-- waiting
(hang 상태)


SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;
 
LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000080FB37B0 pi                  0          0

pi는 글로벌한 dirty(dirty buffer) 상태를 의미한다.


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;
 
LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000082FF8090 xcur                2          0


SYS@racdb1> /

no rows selected


SYS@racdb2> /

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000082FF8090 xcur                2          0


SYS@racdb1> select inst_id, sid, serial#, event, blocking_instance, blocking_session
from gv$session
where event like '%TX%';

 INST_ID        SID    SERIAL# EVENT                                    BLOCKING_INSTANCE BLOCKING_SESSION
---------- ---------- ---------- ---------------------------------------- ----------------- ----------------
         2         33      19061 enq: TX - row lock contention                            1               52


rac1 노드의 52번 세션 때문에 저 대기 이벤트가 발생했다.


# alter system kill session 'sid,serial#'; -- 싱글에서 세션 죽이는 법
# alter system kill session 'sid,serial#,@inst_id'; -- rac에서 세션 죽이는 법

SYS@racdb1> alter system kill session '33,19061,@2';

System altered.

SYS@racdb1> select inst_id, sid, serial#, event, blocking_instance, blocking_session
from gv$session
where event like '%TX%';  

no rows selected


HR@racdb2> update hr.employees set salary = salary * 1.1 where employee_id = 100;
update hr.employees set salary = salary * 1.1 where employee_id = 100
*
ERROR at line 1:
ORA-00028: your session has been killed


SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000082FF8090 xcur                2          0


HR@racdb1> select salary from hr.employees where employee_id = 100;

    SALARY
----------
     26400


SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000082FF8090 scur                1          0


HR@racdb1> select salary from hr.employees where employee_id = 100;

    SALARY
----------
     26400


SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000080FB37B0 scur                1          1


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000082FF8090 scur                1          0


HR@racdb1> select salary from hr.employees where employee_id = 100;

    SALARY
----------
     24000


SYS@racdb1> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

LOCK_ELEMENT_ADD STATUS      MODE_HELD      LOCAL
---------------- ---------- ---------- ----------
0000000080FB37B0 xcur                2          1


SYS@racdb2> select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 3
and b.block# = 31276;

no rows selected

 
 
 
■ 문장 수준 읽기 일관성

select문이 수행되는 도중에 다른 세션에서 트랜잭션에 의해 데이터를 추가, 변경, 삭제가 발생하더라도 일관성 있는 결과 집합을 리턴하는 것을 의미한다.
오라클을 제외한 다른 데이터베이스는 모든 행을 lock을 사용해 dirty read를 방지한다. 즉, 읽기 작업에 대해 shared lock을 사용함으로써 exclusive lock이 걸린 row를 읽지 못하도록 한다.
오라클은 undo 데이터를 이용해서 완벽한 문장 수준 읽기 일관성을 보장한다.

 
 

■ consistent 모드 읽기

query가 시작된 시점을 기준으로 데이터를 읽는다.
쿼리 시작 시점과 블록의 마지막 변경 시점을 scn(system commit number)을 이용해서 데이터베이스 일관성을 체크한다.
scn 읽기 일관성과 동시성 제어를 위해 사용되고 생성된 리두 로그 정보의 순서를 식별하는 데에도 사용되며, 마지막 데이터 복구를 위해서도 사용된다.

SYS@racdb1> select current_scn, scn_to_timestamp(current_scn) from v$database;

CURRENT_SCN SCN_TO_TIMESTAMP(CURRENT_SCN)
----------- ---------------------------------------------------------------------------
    3456379 24-JUL-26 04.55.59.000000000 AM

쿼리의 scn 번호는 블록의 scn번호보다 작거나 같은 거를 봐야 한다.
block scn ≤ query scn

예)
Query SCN = 100

블록 SCN = 90  → 읽을 수 있음
블록 SCN = 100 → 읽을 수 있음
블록 SCN = 110 → 읽을 수 없음. 트랜잭션 슬랏에 있는 Undo를 적용해 SCN 100 시점으로 되돌려 읽음

undo에 commit 이전 값이 들어있음.(변경 전 값)
transaction layer 안에 있는 transaction slot들에는 undo에 대한 정보가 들어있다. undo에 대해 포인팅이 되어있다.
필요한 undo를 찾아가기 위해서 undo segment 헤더 블록, 트랜잭션 슬랏을 같이 본다.

undo에 있는 값들은 쭉 갖고 있도록 보장하지 않음. 그래서 예전 변경 전 값을 찾으려고 했는데 overwrite되어 못 찾았으면 snapshot too old 오류가 나온다.
이 오류를 해결하기 법은 undo 공간을 여유있게 해놓는 것이다.

undo retention은 일시적으로 undo를 보장하여 일정 시간 지나면 사라지고 undo 테이블스페이스 공간이 부족하면 해당 시간(초 단위)이 지나지 않은 undo라도 overwrite(재사용)가 될 수 있는데, undo_retention 시간 동안 무조건 보장해야 하는 undo가 있으면 retention guarantee로 보장하면 된다.

undo segment 할당 못 받으면 무조건 기다려야 함.

 

■ current 모드 읽기

데이터를 찾아간 바로 그 시점의 최종값을 읽는다.

<<HR 1>>
HR@racdb1> create table hr.emp tablespace users as select * from hr.employees;

Table created.

# consistent 모드 읽기
HR@racdb1> select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4400

# current 모드 읽기
HR@racdb1> update hr.emp set salary = salary + 100 where employee_id = 200;

1 row updated.

HR@racdb1> select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4500

<<HR 2>>
# consistent 모드 읽기
HR@racdb1> select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4400 <<- undo에 있는 이전 값을 가지고 cr블록을 생성한 후 보여준다.(읽기 일관성)


HR@racdb1> update hr.emp set salary = salary + 200 where employee_id = 200;
-- waiting(hang 상태)(hr 1세션에서 트랜잭션을 종료(commit 또는 rollback)할 때까지 기다려야 함.)

만약에 HR 1에서 commit을 한다면 이 결과는 어떻게 나올까? 4500 가지고 업데이트 수행해서 4700이 나오지 않을까?

다른 DB는 무조건 4700인데 오라클 같은 경우는 읽기 일관성이라는 게 있어서 4600으로 생각할 수도 있는데 아니다. 
dml 작업의 경우는 current 모드로 되어 hang 상태가 풀리고 난 뒤의 작업으로 수행되어 4700이 나온다.


<<HR 1>>
HR@racdb1> commit;

Commit complete.


<<HR 2>>
# current 모드 읽고 갱신
HR@racdb1> update hr.emp set salary = salary + 200 where employee_id = 200;

1 row updated. -- hang 상태 풀림.
<<- hang 상태가 풀린 시점의 값을 가지고 update 진행하였다.(waiting에서 풀린 후 현재 블록에 있는 급여 정보를 가지고 수정)

HR@racdb1> select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4700 


<<HR 1>>
HR@racdb1> select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4500


<<HR 2>>
HR@racdb1> commit;

Commit complete.


<<HR 1>>
HR@racdb1>  select salary from hr.emp where employee_id = 200;

    SALARY
----------
      4700


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

<<HR 1>>
HR@racdb1> select salary from hr.emp where employee_id = 110;

    SALARY
----------
      8200

HR@racdb1> update hr.emp set salary = 9000 where employee_id = 110 and salary = 8200;

1 row updated.

HR@racdb1> select salary from hr.emp where employee_id = 110;

    SALARY
----------
      9000


<<HR 2>>
# 대상 행을 읽을 때(조회)는 consistent 모드로 읽고 실제값을 변경할 때(수정 및 삭제)는 current 모드로 읽고 변경한다.
HR@racdb1> update hr.emp set salary = 10000 where employee_id = 110 and salary = 9000;

0 rows updated.
-- 다른 DBMS는 이게 수행된다. 오라클은 트랜잭션 진행중인 거라서 읽기 일관성으로 인해서 작업 수행 안 됨. dirty read(다른 변경된 값으로 읽는 것(조회))가 되면 문제이므로 해당 row 자체를 수정 못하게 lock을 걺.
여기서는 current로만 보지 않는다. 읽기 일관성으로 봄.


HR@racdb1> update hr.emp set salary = 10000 where employee_id = 110 and salary = 8200;
-- waiting(hang 상태)(lock contention 발생)


<<HR 1>>
HR@racdb1> commit;

Commit complete.


<<HR 2>>
HR@racdb1> update hr.emp set salary = 10000 where employee_id = 110 and salary = 8200;

0 rows updated.  -- hang 상태 풀림. 이 행이 (사원 아이디가 110이면서 급여가 9000인 행으로 변경되어) 이제 사라졌으므로 0건 수행된 걸로 뜸.




# SELECT는 consistent 모드로 읽는다.
# DML은 current 모드로 읽고 변경한다.
  다만, 갱신할 대상 행을 식별하는 작업만큼은 consistent 모드로 읽는 작업을 수행한다.


* 조회하면서 미리 대상 row의 lock을 선점하는 것(row lock)은 SELECT ... FOR UPDATE
SELECT FOR UPDATE는 최신 상태의 행을 확인하고 잠금을 걸어야 하므로 current mode read를 사용
SELECT FOR UPDATE문을 조회하면 해당 행에 잠금이 걸려서 다른 세션에서 같은 행을 UPDATE하거나 DELETE하려고 하면 대기하게 된다.

SELECT FOR UPDATE는 대상 행에 row level lock을 미리 걸어 두는 기능이고, 이후 실제 DML이 수행되면 Undo가 생성되어 롤백과 읽기 일관성에 사용된다.

읽기 일관성




https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/data-concurrency-and-consistency.html#GUID-E8CBA9C5-58E3-460F-A82A-850E0152E95C


Database Concepts

This chapter explains how Oracle Database maintains consistent data in a multiuser database environment.

docs.oracle.com

 

 

■ Transaction

- 논리적으로 DML문을 하나로 묶어서 처리하는 작업 단위(atomicity(원자성) => 쪼갤 수 없음. all or nothing)
- 데이터베이스에서 하나의 정합성을 보장하며 완결성 있게 처리되어야 하는 논리적 작업 단위
  내부적으로 여러 개의 SQL문을 묶어서 실행하지만 외부적으로는 하나의 작업처럼 처리한다.
- 정합성(Consistency): 데이터 간의 모순 없이 일치되는 상황(데이터의 앞뒤가 맞는 상태)
- 무결성(Integrity): 데이터가 결함 없이 정확하고 유효함에 초점을 맞춘다.(예: 컬럼 데이터 타입, 크기, 제약조건)



■ Transaction 특징(ACID)

1. Atomicity(원자성)
 - all or nothing
 - 트랜잭션은 논리적으로 쪼갤 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공해야 한다.
 - 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것처럼 ROLLBACK한다.
(전부 commit이 되거나 전부 rollback이 되거나)

2. Consistency(일관성)
 - 트랜잭션은 데이터베이스에 정의된 규칙을 위반했는지 데이터베이스 COMMIT 전에 확인하고 알려준다.
 - constraint, trigger 등을 통해 데이터베이스에 정의된 규칙을 트랜잭션이 위반했다면 rollback 해야 한다.
예) 은행 계좌 송금(계좌 잔고가 음수가 되는 금액을 송금하면 안 된다.) check 제약조건을 구현해놔야 함.


3. Isolation(격리성)
 - 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션은 서로 영향을 주지 않고 독립적으로 실행되는 것처럼 보여야 한다.
 - 데이터베이스는 여러 종류의 isolation level을 제공한다.

4. Durability(지속성)
 - 트랜잭션이 성공적으로 완료(commit)되면 그 결과는 시스템 오류나 정전과 같은 상황에서도 영구적으로 저장되어야 한다.

 


■ ASM INSTANCE

 - ASM을 관리하는 전용 메모리
 - 디스크에 대한 I/O를 관리한다.(OS 메모리를 거치지 않음.)
 - 오라클 인스턴스와 상하관계는 아니고 의사소통을 하면 ASM Storage를 관리한다.
 - shared pool: ASM 디스크에 대한 메타 데이터 정보
 - large pool: 리밸런싱(rebalancing)을 병렬작업에 사용
 - asm cache: 리밸런싱(rebalancing) 작업 중 읽기, 쓰기 블록 사용

# 리밸런싱(rebalancing) 관련 백그라운드 프로세스
 - RBAL: 리밸런싱 작업을 조정하고 ARBn에게 지시하는 프로세스
 - ARBn: 리밸런싱 데이터를 extent로 이동 수행하는 프로세스

[oracle@rac1 ~]$ . oraenv
ORACLE_SID = [racdb1] ? +ASM1
The Oracle base remains unchanged with value /u01/app/oracle

[oracle@rac1 ~]$ sqlplus / as sysasm

SQL> show sga

Total System Global Area 1137173320 bytes
Fixed Size                  8905544 bytes
Variable Size            1103101952 bytes
ASM Cache                  25165824 bytes

SQL> select * from v$sgainfo;

NAME                                  BYTES RES     CON_ID
-------------------------------- ---------- --- ----------
Fixed SGA Size                      8905544 No           0
ASM Cache Size                     25165824 No           0
Shared Pool Size                  620756992 Yes          0
Large Pool Size                    12582912 Yes          0
Granule Size                        4194304 No           0
Maximum SGA Size                 1137173320 No           0
Startup overhead in Shared Pool   285820104 No           0
Free SGA Memory Available         469762048              0


ASM Cache Size
Shared Pool Size                  
Large Pool Size

이 세 개가 중요한 것

SQL> select component, current_size from v$memory_dynamic_components;


COMPONENT                                                        CURRENT_SIZE
---------------------------------------------------------------- ------------
shared pool                                                         620756992
large pool                                                           12582912
java pool                                                                   0
streams pool                                                                0
unified pga pool                                                            0
SGA Target                                                          675282944
memoptimize buffer cache                                                    0
DEFAULT buffer cache                                                        0
KEEP buffer cache                                                           0
RECYCLE buffer cache                                                        0
DEFAULT 2K buffer cache                                                     0
DEFAULT 4K buffer cache                                                     0
DEFAULT 8K buffer cache                                                     0
DEFAULT 16K buffer cache                                                    0
DEFAULT 32K buffer cache                                                    0
Shared IO Pool                                                              0
Data Transfer Cache                                                         0
In-Memory Area                                                              0
In Memory RW Extension Area                                                 0
In Memory RO Extension Area                                                 0
PGA Target                                                          452984832
ASM Buffer Cache                                                     25165824

 
 

■ ASM redundancy

normal: 2-way mirroring(같은 데이터를 다른 디스크에 복제하여 이중화) 2way하려면 최소한 디스크가 3개 이상이어야 함., 디스크 2배가 있어야 한다. 
high: 2-way mirroring, 디스크 3배가 있어야 한다.
external: asm mirroring 기능을 사용하지 않는다.

 


■ ASM 제한 사항

 - 스토리지는 시스템당 63개 disk group만 지원
 - asm disk 당 최대 4petabyte 지원
 - 각 디스크 그룹 당 최대 백만 개 파일 지원
 - 최대 파일 크기
normal: 23pbyte
high: 15pbyte
external: 140pbyte

 


■ ASM AU(Allocation Unit)

 - AU 크기는 디스크 그룹 생성 시 구성
 - AU_SIZE: 기본값 1M, 4M (1,2,4,8,16,32,64)
 - 오라클은 AU 크기를 자동으로 관리한다.
처음부터 2만 개: AU_SIZE
다음 2만 개: AU_SIZE * 4
다음 나머지: AU_SIZE * 16

SQL> select inst_id, instance_name from gv$instance;

   INST_ID INSTANCE_NAME
---------- ----------------
         1 +ASM1
         2 +ASM2


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

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


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

GROUP_NUMBER NAME                           TYPE   STATE
------------ ------------------------------ ------ -----------
           1 DATA                           EXTERN CONNECTED
           2 FRA                            EXTERN CONNECTED


SQL> select b.name,a.group_number, a.disk_number, a.name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

NAME                           GROUP_NUMBER DISK_NUMBER NAME                           MOUNT_S PATH                                       TOTAL_MB    FREE_MB
------------------------------ ------------ ----------- ------------------------------ ------- ---------------------------------------- ---------- ----------
FRA                                       2           1 FRA_0001                       CACHED  /dev/oracleasm/disks/ASMDISK04                 5116       4616
DATA                                      1           0 DATA_0000                      CACHED  /dev/oracleasm/disks/ASMDISK01                 5116       3456
DATA                                      1           1 DATA_0001                      CACHED  /dev/oracleasm/disks/ASMDISK02                 5116       3496
FRA                                       2           0 FRA_0000                       CACHED  /dev/oracleasm/disks/ASMDISK03                 5116       4620


SYS@racdb1>  select b.name,a.group_number, a.disk_number, a.name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

NAME                 GROUP_NUMBER DISK_NUMBER NAME                 MOUNT_S PATH                                       TOTAL_MB    FREE_MB
-------------------- ------------ ----------- -------------------- ------- ---------------------------------------- ---------- ----------
FRA                             2           1 FRA_0001             CACHED  /dev/oracleasm/disks/ASMDISK04                 5116       4616
DATA                            1           0 DATA_0000            CACHED  /dev/oracleasm/disks/ASMDISK01                 5116       3456
DATA                            1           1 DATA_0001            CACHED  /dev/oracleasm/disks/ASMDISK02                 5116       3496
FRA                             2           0 FRA_0000             CACHED  /dev/oracleasm/disks/ASMDISK03                 5116       4620

asm이나 db나 똑같이 나온다.


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

GROUP_NUMBER FILE_NUMBER      BYTES REDUND TYPE
------------ ----------- ---------- ------ --------------------
           1         253       1536 UNPROT ASMPARAMETERFILE
           1         255  165974016 UNPROT OCRFILE
           1         256       3072 UNPROT PASSWORD
           1         257       2560 UNPROT PASSWORD
           1         258       2048 UNPROT PASSWORD
           1         259  954212352 UNPROT DATAFILE
           1         260  734011392 UNPROT DATAFILE
           1         261  372252672 UNPROT DATAFILE
           1         262    5251072 UNPROT DATAFILE
           1         263   19709952 UNPROT CONTROLFILE
           1         264  209715712 UNPROT ONLINELOG
           1         265  209715712 UNPROT ONLINELOG
           1         266   40902656 UNPROT TEMPFILE
           1         267   26222592 UNPROT DATAFILE
           1         268  209715712 UNPROT ONLINELOG
           1         269  209715712 UNPROT ONLINELOG
           1         270       4608 UNPROT PARAMETERFILE
           1         271    2195456 UNPROT OCRBACKUP
           1         272    2195456 UNPROT OCRBACKUP
           1         273    2195456 UNPROT OCRBACKUP
           1         275    2195456 UNPROT OCRBACKUP
           1         276    2195456 UNPROT OCRBACKUP
           2         256   19709952 UNPROT CONTROLFILE
           2         257  209715712 UNPROT ONLINELOG
           2         258  209715712 UNPROT ONLINELOG
           2         259  209715712 UNPROT ONLINELOG
           2         260  209715712 UNPROT ONLINELOG


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

GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME                           PRIM MIRR     CON_ID
------------ ------------ ------ ------ - ------------------------------ ---- ---- ----------
           1          200 UNPROT COARSE Y PARAMETERFILE                  COLD COLD          0
           1          201 UNPROT COARSE Y ASMPARAMETERFILE               COLD COLD          0
           1          203 UNPROT COARSE Y VOTINGFILE                     COLD COLD          0
           1          204 UNPROT COARSE Y DUMPSET                        COLD COLD          0
           1          205 UNPROT FINE   Y CONTROLFILE                    COLD COLD          0
           1          206 UNPROT COARSE Y FLASHFILE                      COLD COLD          0
           1          207 UNPROT COARSE Y ARCHIVELOG                     COLD COLD          0
           1          208 UNPROT COARSE Y ONLINELOG                      COLD COLD          0
           1          209 UNPROT COARSE Y DATAFILE                       COLD COLD          0
           1          310 UNPROT COARSE Y TEMPFILE                       COLD COLD          0
           1          311 UNPROT COARSE Y BACKUPSET                      COLD COLD          0
           1          312 UNPROT COARSE Y XTRANSPORT BACKUPSET           COLD COLD          0
           1          313 UNPROT COARSE Y INCR XTRANSPORT BACKUPSET      COLD COLD          0
           1          314 UNPROT COARSE Y AUTOBACKUP                     COLD COLD          0
           1          315 UNPROT COARSE Y XTRANSPORT                     COLD COLD          0
           1          317 UNPROT COARSE Y CHANGETRACKING                 COLD COLD          0
           1          318 UNPROT COARSE Y FLASHBACK                      COLD COLD          0
           1          319 UNPROT COARSE Y KEY_STORE                      COLD COLD          0
           1          420 UNPROT COARSE Y AUTOLOGIN_KEY_STORE            COLD COLD          0
           1          421 UNPROT COARSE Y AUDIT_SPILLFILES               COLD COLD          0
           1          422 UNPROT COARSE Y DATAGUARDCONFIG                COLD COLD          0
           1          423 UNPROT COARSE Y OCRFILE                        COLD COLD          0


COARSE: au_size 크기로 구성
FINE: 128kb



# 사용할 수 있는 디스크 확인

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

PATH
----------------------------------------
/dev/oracleasm/disks/ASMDISK06
/dev/oracleasm/disks/ASMDISK07
/dev/oracleasm/disks/ASMDISK05



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

SQL> alter diskgroup fra add disk '/dev/oracleasm/disks/ASMDISK05' rebalance power 10;

Diskgroup altered.


SQL> select b.name,a.group_number, a.disk_number, a.name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;
  
NAME                           GROUP_NUMBER DISK_NUMBER NAME                           MOUNT_S PATH                                       TOTAL_MB    FREE_MB
------------------------------ ------------ ----------- ------------------------------ ------- ---------------------------------------- ---------- ----------
FRA                                       2           2 FRA_0002                       CACHED  /dev/oracleasm/disks/ASMDISK05                 5116       4780
FRA                                       2           1 FRA_0001                       CACHED  /dev/oracleasm/disks/ASMDISK04                 5116       4780
DATA                                      1           0 DATA_0000                      CACHED  /dev/oracleasm/disks/ASMDISK01                 5116       3456
DATA                                      1           1 DATA_0001                      CACHED  /dev/oracleasm/disks/ASMDISK02                 5116       3496
FRA                                       2           0 FRA_0000                       CACHED  /dev/oracleasm/disks/ASMDISK03                 5116       4780



# 사용할 수 있는 디스크 확인

SQL> select path from v$asm_disk where mount_status = 'CLOSED'; -- ASMDISK05가 빠졌다.

PATH
----------------------------------------
/dev/oracleasm/disks/ASMDISK07
/dev/oracleasm/disks/ASMDISK06



# 디스크 그룹에 디스크 삭제

SQL> alter diskgroup fra drop disk fra_0002;

Diskgroup altered.

SQL> select b.name,a.group_number, a.disk_number, a.name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;
  
NAME                           GROUP_NUMBER DISK_NUMBER NAME                           MOUNT_S PATH                                       TOTAL_MB    FREE_MB
------------------------------ ------------ ----------- ------------------------------ ------- ---------------------------------------- ---------- ----------
FRA                                       2           1 FRA_0001                       CACHED  /dev/oracleasm/disks/ASMDISK04                 5116       4620
DATA                                      1           0 DATA_0000                      CACHED  /dev/oracleasm/disks/ASMDISK01                 5116       3456
DATA                                      1           1 DATA_0001                      CACHED  /dev/oracleasm/disks/ASMDISK02                 5116       3496
FRA                                       2           0 FRA_0000                       CACHED  /dev/oracleasm/disks/ASMDISK03                 5116       4616



# 사용할 수 있는 디스크 확인

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

PATH
----------------------------------------
/dev/oracleasm/disks/ASMDISK06
/dev/oracleasm/disks/ASMDISK07
/dev/oracleasm/disks/ASMDISK05



# 새로운 디스크 그룹 생성

SQL> create diskgroup asm_dg external redundancy disk '/dev/oracleasm/disks/ASMDISK05';

Diskgroup created.

SQL> select b.name,a.group_number, a.disk_number, a.name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;
  
NAME                           GROUP_NUMBER DISK_NUMBER NAME                           MOUNT_S PATH                                       TOTAL_MB    FREE_MB
------------------------------ ------------ ----------- ------------------------------ ------- ---------------------------------------- ---------- ----------
ASM_DG                                    3           0 ASMDISK05                      CACHED  /dev/oracleasm/disks/ASMDISK05                 5119       5067
FRA                                       2           1 FRA_0001                       CACHED  /dev/oracleasm/disks/ASMDISK04                 5116       4620
DATA                                      1           0 DATA_0000                      CACHED  /dev/oracleasm/disks/ASMDISK01                 5116       3456
DATA                                      1           1 DATA_0001                      CACHED  /dev/oracleasm/disks/ASMDISK02                 5116       3496
FRA                                       2           0 FRA_0000                       CACHED  /dev/oracleasm/disks/ASMDISK03                 5116       4616


SYS@racdb1> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/RACDB/PARAMETERFILE/spfi
                                                 le.270.1239203391

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

TABLESPACE_NAME                FILE_NAME                                                  MB
------------------------------ -------------------------------------------------- ----------
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355



# 테이블스페이스 생성

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

Tablespace created.

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

TABLESPACE_NAME                FILE_NAME                                                  MB
------------------------------ -------------------------------------------------- ----------
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355



select * from dba_tablespaces; 조회

MSSM, ASSM




# 데이터 파일 추가

SYS@racdb1> alter tablespace asm_tbs add datafile;

Tablespace altered.

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

TABLESPACE_NAME                FILE_NAME                                                  MB
------------------------------ -------------------------------------------------- ----------
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355
ASM_TBS                        +DATA/RACDB/DATAFILE/asm_tbs.274.1239444263               100



# 테이블스페이스에 속한 데이터 파일 삭제

SYS@racdb1> alter tablespace asm_tbs drop datafile '+DATA/RACDB/DATAFILE/asm_tbs.274.1239444263';

Tablespace altered.


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

TABLESPACE_NAME                FILE_NAME                                                  MB
------------------------------ -------------------------------------------------- ----------
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355



# OMF(Oracle Managed File)
오라클 데이터베이스의 운영체제 파일을 직접 관리하지 않아도 된다.
파일이 아닌 데이터베이스 객체 관점에서 작업을 진행한다.

SYS@racdb1>  show parameter db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +DATA


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

System altered.

SYS@racdb1> show parameter db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      +ASM_DG



# OMF를 이용한 테이블 스페이스 생성

SYS@racdb1> create tablespace insa_tbs;

Tablespace created.

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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10 NO
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES
INSA_TBS                       +ASM_DG/RACDB/DATAFILE/insa_tbs.257.1239444619            100 YES -- OMF 이용하여 생성한 테이블스페이스 기본 사이즈: 100MB


SYS@racdb1> alter database datafile '+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899' autoextend on; -- autoextend on하는 명령어

Database altered.


SYS@racdb1> alter tablespace insa_tbs add datafile;

Tablespace altered.

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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10 YES
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES
INSA_TBS                       +ASM_DG/RACDB/DATAFILE/insa_tbs.257.1239444619            100 YES
INSA_TBS                       +ASM_DG/RACDB/DATAFILE/insa_tbs.258.1239444933            100 YES


SYS@racdb1> drop tablespace insa_tbs including contents;

Tablespace dropped.


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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899              10 YES
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES


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

Table created.


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

TABLESPACE_NAME                   EXTENTS      BYTES     BLOCKS
------------------------------ ---------- ---------- ----------
ASM_TBS                                 1      65536          8



# ASM_TBS 테이블스페이스를 +ASM_DG -> +DATA 그룹으로 이관

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
UNDOTBS2                       ONLINE
ASM_TBS                        ONLINE


SYS@racdb1> alter tablespace asm_tbs offline normal;

Tablespace altered.


SYS@racdb1> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
UNDOTBS2                       ONLINE
ASM_TBS                        OFFLINE


SYS@racdb1> exit


[oracle@rac1 ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Jul 24 10:22:39 2026
Version 19.3.0.0.0

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

connected to target database: RACDB (DBID=1236819723)

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    910      SYSTEM               YES     +DATA/RACDB/DATAFILE/system.259.1239202827
2    0        ASM_TBS              NO      +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899
3    700      SYSAUX               NO      +DATA/RACDB/DATAFILE/sysaux.260.1239202861
4    355      UNDOTBS1             YES     +DATA/RACDB/DATAFILE/undotbs1.261.1239202887
5    25       UNDOTBS2             YES     +DATA/RACDB/DATAFILE/undotbs2.267.1239203295
7    5        USERS                NO      +DATA/RACDB/DATAFILE/users.262.1239202887

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    39       TEMP                 32767       +DATA/RACDB/TEMPFILE/temp.266.1239202971


RMAN> copy datafile '+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899' to '+DATA/RACDB/DATAFILE/asm_tbs01.dbf';

Starting backup at 24-JUL-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=64 instance=racdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899
output file name=+DATA/RACDB/DATAFILE/asm_tbs01.dbf tag=TAG20260724T102455 RECID=1 STAMP=1239445495
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 24-JUL-26

Starting Control File and SPFILE Autobackup at 24-JUL-26
piece handle=+FRA/RACDB/AUTOBACKUP/2026_07_24/s_1239445496.261.1239445497 comment=NONE
Finished Control File and SPFILE Autobackup at 24-JUL-26


RMAN> list copy;

specification does not match any control file copy in the repository
specification does not match any archived log in the repository
List of Datafile Copies
=======================

Key     File S Completion Time Ckp SCN    Ckp Time        Sparse
------- ---- - --------------- ---------- --------------- ------
1       2    A 27-JUL-26       3487089    27-JUL-26       NO
        Name: +DATA/RACDB/DATAFILE/asm_tbs01.dbf
        Tag: TAG20260724T102455


RMAN> exit


[oracle@rac1 ~]$ sqlplus / as sysdba


SYS@racdb1> alter tablespace asm_tbs rename datafile '+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239443899' to '+DATA/RACDB/DATAFILE/asm_tbs01.dbf';

Tablespace altered.


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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +DATA/RACDB/DATAFILE/asm_tbs01.dbf
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES


SYS@racdb1> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
UNDOTBS2                       ONLINE
ASM_TBS                        OFFLINE


SYS@racdb1> alter tablespace asm_tbs online;

Tablespace altered.


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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +DATA/RACDB/DATAFILE/asm_tbs01.dbf                         10 YES
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES


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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +DATA/RACDB/DATAFILE/asm_tbs01.dbf                         10 YES
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES


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

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



# ASM_TBS 테이블스페이스를 +DATA -> +ASM_DG그룹으로 이관

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
UNDOTBS2                       ONLINE
ASM_TBS                        ONLINE

7 rows selected.

SYS@racdb1> alter tablespace asm_tbs offline normal;

Tablespace altered.

SYS@racdb1> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
UNDOTBS2                       ONLINE
ASM_TBS                        OFFLINE


SYS@racdb1> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@rac1 ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Mon Jul 27 17:08:14 2026
Version 19.3.0.0.0

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

connected to target database: RACDB (DBID=1236819723)


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    910      SYSTEM               YES     +DATA/RACDB/DATAFILE/system.259.1239202827
2    0        ASM_TBS              NO      +DATA/RACDB/DATAFILE/asm_tbs01.dbf
3    700      SYSAUX               NO      +DATA/RACDB/DATAFILE/sysaux.260.1239202861
4    355      UNDOTBS1             YES     +DATA/RACDB/DATAFILE/undotbs1.261.1239202887
5    25       UNDOTBS2             YES     +DATA/RACDB/DATAFILE/undotbs2.267.1239203295
7    5        USERS                NO      +DATA/RACDB/DATAFILE/users.262.1239202887

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    39       TEMP                 32767       +DATA/RACDB/TEMPFILE/temp.266.1239202971


RMAN> copy datafile '+DATA/RACDB/DATAFILE/asm_tbs01.dbf' to '+ASM_DG'; -- '+DATA/RACDB/DATAFILE/asm_tbs01.dbf'파일을 +ASM_DG그룹으로 복사

Starting backup at 27-JUL-26
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=44 instance=racdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=+DATA/RACDB/DATAFILE/asm_tbs01.dbf
output file name=+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239728975 tag=TAG20260727T170934 RECID=2 STAMP=1239728975
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 27-JUL-26

Starting Control File and SPFILE Autobackup at 27-JUL-26
piece handle=+FRA/RACDB/AUTOBACKUP/2026_07_27/s_1239728976.262.1239728977 comment=NONE
Finished Control File and SPFILE Autobackup at 27-JUL-26


RMAN> list copy;

specification does not match any control file copy in the repository
specification does not match any archived log in the repository
List of Datafile Copies
=======================

Key     File S Completion Time Ckp SCN    Ckp Time        Sparse
------- ---- - --------------- ---------- --------------- ------
2       2    A 27-JUL-26       3591134    27-JUL-26       NO
        Name: +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239728975
        Tag: TAG20260727T170934

1       2    A 24-JUL-26       3487089    24-JUL-26       NO
        Name: +DATA/RACDB/DATAFILE/asm_tbs01.dbf
        Tag: TAG20260724T102455


RMAN> exit

[oracle@rac1 ~]$ sqlplus / as sysdba

SYS@racdb1> alter tablespace asm_tbs rename datafile '+DATA/RACDB/DATAFILE/asm_tbs01.dbf' to '+ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239728975';

Tablespace altered.

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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239728975
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES


SYS@racdb1> alter tablespace asm_tbs online;

Tablespace altered.


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

TABLESPACE_NAME                FILE_NAME                                                  MB AUT
------------------------------ -------------------------------------------------- ---------- ---
SYSTEM                         +DATA/RACDB/DATAFILE/system.259.1239202827                910 YES
SYSAUX                         +DATA/RACDB/DATAFILE/sysaux.260.1239202861                700 YES
UNDOTBS2                       +DATA/RACDB/DATAFILE/undotbs2.267.1239203295               25 YES
USERS                          +DATA/RACDB/DATAFILE/users.262.1239202887                   5 YES
ASM_TBS                        +ASM_DG/RACDB/DATAFILE/asm_tbs.256.1239728975              10 YES
UNDOTBS1                       +DATA/RACDB/DATAFILE/undotbs1.261.1239202887              355 YES