Oracleデータベースでのデータファイル移動は、システム管理者にとって避けて通れない作業です。適切な方法でデータファイルを移動することは、システムの信頼性・性能・運用効率を向上させる重要なステップとなります。本記事では、データファイル移動の背景、目的、手順を徹底解説し、初心者から上級者まで役立つ情報を提供します。
リンク
リンク
リンク
データファイル移動の目的と必要性
1. ストレージ容量の再配分
成長するデータベースの要求に応じて、容量不足のストレージから新しいストレージへデータファイルを移動することで、運用停止を防ぎます。
- 例: ディスク
/u01/
が容量不足となり、新しいディスク/u02/
に移行。
2. ストレージパフォーマンスの最適化
アクセス頻度の高いデータファイルを高速なストレージ(SSDやNVMe)に移動することで、クエリ性能を向上させます。
- 例: データベース応答を高速化するために、重要な表領域をHDDからSSDに移動。
3. ストレージ障害への対応
古いストレージデバイスやエラーが多発しているディスクから、健全なストレージにデータを移行し、障害リスクを軽減。
- 例: RAID構成が壊れたディスクからデータを移動し、信頼性を確保。
4. ディレクトリ構造の標準化
初期段階で臨時に作成したデータファイルのパスを、標準的なディレクトリ構造に変更。
- 例:
/tmp
に配置されたデータファイルを正式な/u01/oradata/
に移動。
5. データベースのリストラクチャリング
システム統合や分割に伴い、特定の表領域を独立したストレージに移動することで、管理とパフォーマンスを最適化。
- 例: 新しいアプリケーションごとに専用ストレージを割り当て。
データファイル移動の選択肢
オフラインデータファイル移動
- 表領域をオフラインにした状態で移動。
- シンプルだが、表領域がオフラインの間はデータにアクセスできない。
オンラインデータファイル移動(12c以降)
- 表領域をオンラインのまま移動可能。
- ダウンタイム不要で、運用中のシステムに最適。
オフラインデータファイル移動の手順
手順
- 表領域をオフラインにする
ALTER TABLESPACE 表領域名 OFFLINE;
- データファイルをOSコマンドで移動
mv /旧パス/データファイル名 /新パス/データファイル名
- データベースに新しいファイルパスを登録
ALTER DATABASE RENAME FILE '/旧パス/データファイル名' TO '/新パス/データファイル名';
- 表領域をオンラインに戻す
ALTER TABLESPACE 表領域名 ONLINE;
オンラインデータファイル移動の手順(12c以降)
手順
- データファイル移動コマンドを実行
ALTER DATABASE MOVE DATAFILE '/旧パス/データファイル名' TO '/新パス/データファイル名';
- 移動状況を確認
V$DATAFILE
ビューやアラートログで移動が成功したことを確認します。
- ファイルの新しいパスを確認
SELECT FILE_NAME FROM DBA_DATA_FILES WHERE FILE_NAME LIKE '%データファイル名%';
オンライン移動の利点
- 運用中に実行可能 データベースやアプリケーションのダウンタイムを完全に回避。
- 簡便な操作 SQLコマンドだけで完結。OSレベルの操作が不要。
- リスクの低減 データファイル移動中も表領域が使用可能。
注意点
- ストレージ容量の確認 新しいディスクやストレージに十分な空き容量を確保してください。
- バックアップの取得 データファイルを移動する前に、必ずデータベース全体のバックアップを取得してください。
- アーカイブログモードの確認 データ移動時のログ生成を考慮し、アーカイブログモードが有効であることを確認します。
SELECT LOG_MODE FROM V$DATABASE;
- ファイルパスの正確性 新しいファイルパスが正しいかどうか慎重に確認してください。
実践例
オフライン移動の例
- 表領域をオフラインにします。
ALTER TABLESPACE USERS OFFLINE;
- データファイルを移動します。
mv /u01/app/oracle/oradata/V19/users01.dbf /home/oracle/tablespace/users01.dbf
- データファイルの新しいパスを登録します。
ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/V19/users01.dbf' TO '/home/oracle/tablespace/users01.dbf';
- 表領域をオンラインに戻します。
ALTER TABLESPACE USERS ONLINE;
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
FILE_ID FILE_NAME TABLESPACE_NAME ONLINE_STATUS
---------- -------------------------------------------------- -------------------- ---------------------
7 /u01/app/oracle/oradata/V19/users01.dbf USERS ONLINE
4 /u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 ONLINE
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM SYSTEM
3 /u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX ONLINE
SQL> ALTER TABLESPACE USERS OFFLINE;
表領域が変更されました。
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
FILE_ID FILE_NAME TABLESPACE_NAME ONLINE_STATUS
---------- -------------------------------------------------- -------------------- ---------------------
7 /u01/app/oracle/oradata/V19/users01.dbf USERS OFFLINE
4 /u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 ONLINE
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM SYSTEM
3 /u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX ONLINE
SQL> host mv /u01/app/oracle/oradata/V19/users01.dbf /home/oracle/tablespace/users01.dbf
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/V19/users01.dbf' TO '/home/oracle/tablespace/users01.dbf';
データベースが変更されました。
SQL> ALTER TABLESPACE USERS ONLINE;
表領域が変更されました。
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
FILE_ID FILE_NAME TABLESPACE ONLINE_STATUS
---------- -------------------------------------------------- ---------- ---------------------
7 /home/oracle/tablespace/users01.dbf USERS ONLINE
4 /u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 ONLINE
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM SYSTEM
3 /u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX ONLINE
オンライン移動の例
- データファイルを移動します。
ALTER DATABASE MOVE DATAFILE '/u01/oradata/users01.dbf' TO '/u02/oradata/users01.dbf';
- ファイルパスを確認します。
SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
FILE_ID FILE_NAME TABLESPACE ONLINE_STATUS
---------- -------------------------------------------------- ---------- ---------------------
7 /u01/app/oracle/oradata/V19/users01.dbf USERS ONLINE
4 /u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 ONLINE
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM SYSTEM
3 /u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX ONLINE
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/V19/users01.dbf' TO '/home/oracle/tablespace/users01.dbf';
データベースが変更されました。
SQL> SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
FILE_ID FILE_NAME TABLESPACE ONLINE_STATUS
---------- -------------------------------------------------- ---------- ---------------------
4 /u01/app/oracle/oradata/V19/undotbs01.dbf UNDOTBS1 ONLINE
1 /u01/app/oracle/oradata/V19/system01.dbf SYSTEM SYSTEM
3 /u01/app/oracle/oradata/V19/sysaux01.dbf SYSAUX ONLINE
7 /home/oracle/tablespace/users01.dbf USERS ONLINE
まとめ
Oracleデータファイルの移動は、ストレージ管理やパフォーマンス向上、障害対応において欠かせない作業です。本記事で紹介したオフライン移動とオンライン移動の手順を参考に、安全かつ効率的に作業を進めてください。
作業前後には以下のコマンドを使用して確認を行うことをおすすめします。
SELECT FILE_ID, FILE_NAME, TABLESPACE_NAME, ONLINE_STATUS FROM DBA_DATA_FILES;
これで、どのような移動作業にも対応できるようになります。ぜひ参考にしてください!
[参考]
Oracle Databaseデータベース管理者ガイド 19c
コメント