RMANを使って、非ASMからASMにデータファイルを移動してみた
環境
Oracle Linux 8.8 (Oracle Cloud)
Oracle Database 19c (ASM環境)
マルチテナント構成
アーカイブログモード
やったこと
Oracleデータベースで表領域を構成するデータファイルを非ASM領域からASMに移動する。
※ASMからASMでも同じ方法になります。
背景
ASMを使ったデータベースなのに、ローカルディスクに表領域(データファイル)を作成した人がいた、、
大まかな流れ
- RMANでデータファイルを新しい場所にコピー
- データファイルをオフラインにする
- 制御ファイル内のデータファイルパスを変更する
- 新しい場所のデータファイルをリカバリして使用できるようにする
- データファイルをオンラインにする
参考マニュアル
マニュアルは非CDB環境の手順のため、以下はCDB対応しています。
実行例
RMANでCDBに接続して操作します。(PDBに接続して行うと途中でエラーになります)
まずは状況の確認でREPORT SCHEMAコマンドを実行。
DATA表領域が想定外の場所に作成されています(★の箇所)
Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jan 23 12:56:46 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: DB1129 (DBID=3959008139)
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name DB1129_WN6_NRT
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 1050 SYSTEM YES +DATA/DB1129_WN6_NRT/DATAFILE/system.261.1154129965
3 1510 SYSAUX NO +DATA/DB1129_WN6_NRT/DATAFILE/sysaux.268.1154129949
4 140 UNDOTBS1 YES +DATA/DB1129_WN6_NRT/DATAFILE/undotbs1.260.1154129987
5 410 PDB$SEED:SYSTEM NO +DATA/DB1129_WN6_NRT/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/system.264.1154129687
6 390 PDB$SEED:SYSAUX NO +DATA/DB1129_WN6_NRT/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/sysaux.265.1154129687
7 50 PDB$SEED:UNDOTBS1 NO +DATA/DB1129_WN6_NRT/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/undotbs1.266.1154129687
8 420 DB1129_PDB1:SYSTEM YES +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/system.273.1154130319
9 430 DB1129_PDB1:SYSAUX NO +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/sysaux.271.1154130331
10 70 DB1129_PDB1:UNDOTBS1 YES +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/undotbs1.270.1154130339
11 5 USERS NO +DATA/DB1129_WN6_NRT/DATAFILE/users.269.1154130501
12 5 DB1129_PDB1:USERS NO +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/users.274.1154130501
14 10 B NO +DATA/DB1129_WN6_NRT/DATAFILE/b.dbf
15 10 C NO +DATA/DB1129_WN6_NRT/DATAFILE/c.283.1158983669
★16 10 DB1129_PDB1:DATA NO /u01/app/oracle/oradata/data01.dbf ★
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 84 TEMP 32767 +DATA/DB1129_WN6_NRT/TEMPFILE/temp.263.1154130037
2 224 PDB$SEED:TEMP 32767 +DATA/DB1129_WN6_NRT/0B3FDF6CEAAC4F7CE0638400000AF374/TEMPFILE/temp.267.1154129725
4 224 DB1129_PDB1:TEMP 4095 +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/TEMPFILE/temp.272.1154130315
backupコマンドで、データファイルをASM(新しい場所)にコピーします。
RMAN> backup as copy datafile "/u01/app/oracle/oradata/data01.dbf" format "+DATA";
Starting backup at 23-JAN-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=210 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00016 name=/u01/app/oracle/oradata/data01.dbf
output file name=+DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/data.282.1159016295 tag=TAG20240123T125814 RECID=6 STAMP=1159016294
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 23-JAN-24
Starting Control File and SPFILE Autobackup at 23-JAN-24
piece handle=+RECO/DB1129_WN6_NRT/AUTOBACKUP/2024_01_23/s_1159016295.271.1159016295 comment=NONE
Finished Control File and SPFILE Autobackup at 23-JAN-24
RMAN> exit
Recovery Manager complete.
SQL*PlusでPDBに接続します。以下の操作ではalter sessionでPDBに切り替えています。
[oracle@db19c oradata]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 23 13:01:43 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DB1129_PDB1 READ WRITE NO
SQL> alter session set container=DB1129_PDB1;
Session altered.
SQL> alter database datafile '/u01/app/oracle/oradata/data01.dbf' offline;
Database altered.
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
[oracle@db19c oradata]$
RMANでCDBに接続し、SWITCHコマンドで制御ファイル内のパスを変更します。
★の箇所に新しいデータファイルのパスが表示されるため、控えておきます。(次の手順で使用します)
[oracle@db19c ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jan 23 13:07:55 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: DB1129 (DBID=3959008139)
RMAN> switch datafile "/u01/app/oracle/oradata/data01.dbf" to copy;
datafile 16 switched to datafile copy ★"+DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/data.282.1159016295"
RMAN>
RECOVERコマンドで新しいデータファイルを最新化します。
RMAN> recover datafile "+DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/data.282.1159016295";
Starting recover at 23-JAN-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=43 device type=DISK
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 23-JAN-24
RMAN> exit
Recovery Manager complete.
[oracle@db19c ~]$
SQL*PlusでPDBに接続し、新しいデータファイルをオンラインにします。
新しい場所に変わっていることを確認します(★の箇所)
[oracle@db19c ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 23 13:12:04 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DB1129_PDB1 READ WRITE NO
SQL> alter session set container=DB1129_PDB1;
Session altered.
SQL> alter database datafile '+DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/data.282 .1159016295' online;
Database altered.
SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
------------------------------ ----------------------------------------------------------------------------------------------------
SYSTEM +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/system.273.1154130319
SYSAUX +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/sysaux.271.1154130331
UNDOTBS1 +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/undotbs1.270.1154130339
USERS +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/users.274.1154130501
★DATA +DATA/DB1129_WN6_NRT/0B40016CF0DE0436E0638400000AFBE7/DATAFILE/data.282.1159016295
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
[oracle@db19c ~]$
最後に、もとのデータファイルを削除します。
[oracle@db19c ~]$ cd /u01/app/oracle/oradata
[oracle@db19c oradata]$ ls
data01.dbf
[oracle@db19c oradata]$ rm data01.dbf
[oracle@db19c oradata]$ ls
[oracle@db19c oradata]$