반응형
■ [2025-06-06] RAC환경에서 로컬 파일 시스템에 데이터 파일을 잘못 만든 후 ASM 영역으로 move하는 방법 (19c)

 

[2025-06-06] RAC환경에서 로컬 파일 시스템에 데이터 파일을 잘못 만든 후 ASM 영역으로 move하는 방법 (19c)

 

[실습 환경]
OS : Oracle Linux Server 7.9 (Linux rdb01d 5.4.17-2102.201.3.el7uek.x86_64)
DB : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production (Version 19.27.0.0.0)
RAC1 : ol7ora19r1(192.168.0.21) : ORA19R1
RAC2 : ol7ora19r2(192.168.0.22) : ORA19R2


0. 실수로 인해 RAC환경에서 filesystem에 데이터 파일을 생성

 

 

--RAC1번에서

CREATE TABLESPACE TS_TEST DATAFILE 'DATA1' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO;
--> +DATA1으로 했어야 하는데 DATA1으로 지정한 상황!!

 

col file_name for a50
select file_name from DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------
+DATA1_NEW/ORA19R/DATAFILE/system.264.1202825797
+DATA1_NEW/ORA19R/DATAFILE/sysaux.265.1202825873
+DATA1_NEW/ORA19R/DATAFILE/undotbs2.267.1202826057
+DATA1_NEW/ORA19R/DATAFILE/users.268.1202826071
/u01/app/oracle/product/19c/db_1/dbs/DATA1
+DATA1_NEW/ORA19R/DATAFILE/undotbs1.266.1202826029

--> /u01/app/oracle/product/19c/db_1/dbs/ 위치에 파일이 만들어진 상황


 

--RAC1번에서 새로 만든 테이블 스페이스에 테이블 생성하고 데이터 입력
create table sys.tb_test_1
(
 col1 number
)
tablespace ts_test
;

 

insert into tb_test_1 values(1);

commit;

 

--RAC2번에서는 아래와 같은 에러가 발생함
[2025-06-07:21:06:16][ol7ora19r2]<SYS@ORA19R2> select * from sys.tb_test_1;
select * from sys.tb_test_1
                  *
ERROR at line 1:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: '/u01/app/oracle/product/19c/db_1/dbs/DATA1'


 

--지금부터 해당 파일을 asm 영역으로(공유스토리지 영역으로) 옮겨야함!

 

--RAC1번에서

[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ ls -alrt
total 129868
-rw-r--r--.  1 oracle oinstall      3079 May 14  2015 init.ora
drwxrwxr-x. 75 oracle oinstall      4096 Jun  3 12:55 ..
-rw-r-----.  1 oracle asmadmin  19709952 Jun  3 13:05 snapcf_ORA19R1.f
-rw-r--r--.  1 oracle oinstall      1951 Jun  6 17:14 initORA19R1.ora
-rw-rw----.  1 oracle asmadmin      1544 Jun  6 20:08 hc_ORA19R1.dat
drwxr-xr-x.  2 oracle oinstall      4096 Jun  7 20:36 .
-rw-r-----.  1 oracle asmadmin 104865792 Jun  7 21:07 DATA1
-rw-r-----.  1 oracle asmadmin   8388608 Jun  7 21:11 id_ORA19R1.dat
--> DATA1 파일을 ASM영역으로 넣어야함

 

1. 해당 데이터 파일 offline 시키기

 

--RAC1번에서 수행
[2025-06-07:21:15:37][ol7ora19r1]<SYS@ORA19R1> alter database datafile '/u01/app/oracle/product/19c/db_1/dbs/DATA1' offline;

Database altered.

Elapsed: 00:00:00.16

 

2. file system에 있는 datafile을 asm으로 복사

 

--RAC1번에서 수행
[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ alias rt
alias rt='rman target /'

 

[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 7 21:17:53 2025
Version 19.27.0.0.0

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

connected to target database: ORA19R (DBID=1824822448)

 

--RMAN의 COPY DATAFILE명령을 사용함

RMAN> copy datafile '/u01/app/oracle/product/19c/db_1/dbs/DATA1' to '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';
copy datafile '/u01/app/oracle/product/19c/db_1/dbs/DATA1' to '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';
Starting backup at 2025-06-07 21:21:41
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/product/19c/db_1/dbs/DATA1
output file name=+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf tag=TAG20250607T212141 RECID=1 STAMP=1203196902
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2025-06-07 21:21:42

Starting Control File and SPFILE Autobackup at 2025-06-07 21:21:42
piece handle=/home/oracle/rman_backup/ORA19R/autobackup/c-1824822448-20250607-03 comment=NONE
Finished Control File and SPFILE Autobackup at 2025-06-07 21:21:43


[+ASM1:grid@ol7ora19r1][/home/grid]$ asmcmd ls -sl +DATA1_NEW/ORA19R/DATAFILE/
Type      Redund  Striped  Time             Sys  Block_Size  Blocks       Bytes       Space  Name
DATAFILE  UNPROT  COARSE   JUN 06 20:00:00  Y          8192  213761  1751130112  1757413376  SYSAUX.265.1202825873
DATAFILE  UNPROT  COARSE   JUN 06 20:00:00  Y          8192  147201  1205870592  1212153856  SYSTEM.264.1202825797
DATAFILE  UNPROT  COARSE   JUN 07 21:00:00  Y          8192   12801   104865792   109051904  TS_TEST.271.1203196901
DATAFILE  UNPROT  COARSE   JUN 06 20:00:00  Y          8192  105601   865083392   872415232  UNDOTBS1.266.1202826029
DATAFILE  UNPROT  COARSE   JUN 06 20:00:00  Y          8192    9601    78651392    79691776  UNDOTBS2.267.1202826057
DATAFILE  UNPROT  COARSE   JUN 06 22:00:00  Y          8192     641     5251072     8388608  USERS.268.1202826071
DATAFILE  UNPROT  COARSE   JUN 07 21:00:00  N          8192   12801   104865792   109051904  ts_test.dbf => +DATA1_NEW/ORA19R/DATAFILE/TS_TEST.271.1203196901


3. control file 정보 rename

 

--RAC1번에서 수행

[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

 

[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 7 21:26:54 2025
Version 19.27.0.0.0

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


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

 

[2025-06-07:21:26:54][ol7ora19r1]<SYS@ORA19R1> alter database rename file '/u01/app/oracle/product/19c/db_1/dbs/DATA1' to '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';

--> 컨트롤 파일안의 데이터 경로가 바뀜

 

Database altered.

Elapsed: 00:00:00.12

 

4. rman 정보 갱신 및 recover

 

[ORA19R1:oracle@ol7ora19r1][/u01/app/oracle/product/19c/db_1/dbs]$ rt

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 7 21:32:50 2025
Version 19.27.0.0.0

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

connected to target database: ORA19R (DBID=1824822448)

 

--RMAN까지 해당 파일의 위치를 제대로 인식 시켜줌 (위에서 컨트롤 파일 RENAME했어도 해줘야함)

RMAN> switch datafile '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf' to copy;
switch datafile '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf' to copy;
using target database control file instead of recovery catalog
datafile 2 switched to datafile copy "+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf"

 

--RMAN이 해당 파일의 존재를 인식하고 있기 때문에 RECOVER DATAFILE을 함

(오프라인 하는 과정에서 REDO에만 남아있는 트랜잭션 내용까지 모두 적용 시켜야 다시 ONLINE 시킬 수 있음)

RMAN> recover datafile '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';
recover datafile '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';
Starting recover at 2025-06-07 21:35:33
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=575 instance=ORA19R1 device type=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 2025-06-07 21:35:35

 

5. 데이터 파일을 online 시킴

 

[2025-06-07:21:36:12][ol7ora19r1]<SYS@ORA19R1> alter database datafile '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf' online;

Database altered.

Elapsed: 00:00:00.11

 

6. rac2번에서도 해당 테이블 스페이스(해당 데이터 파일)내 테이블을 잘 읽을 수 있는지 확인

 

[2025-06-07:21:06:16][ol7ora19r2]<SYS@ORA19R2> select * from sys.tb_test_1;

      COL1
----------
         1

1 row selected.

Elapsed: 00:00:00.02

 

--12c 이후로는 online datafile move 기능이 있음 - 시작
alter database move datafile '/u01/app/oracle/product/19c/db_1/dbs/DATA1' to '+DATA1_NEW/ORA19R/DATAFILE/ts_test.dbf';
--> 위 명령으로 온라인 중에 가능함

--이렇게 한 후 RAC2번 노드에서 (파일인식이 되지 않았던 범인노드에서) 아래의 명령을 수행

alter system check datafiles;

--12c 이후로는 online datafile move 기능이 있음 - 종료

반응형

+ Recent posts