sql >> データベース >  >> RDS >> Oracle

12cデータファイルをオンラインで移動

    Oracle 12cより前は、データベースのファイルを移動する場合は、データベースをシャットダウンするか、データファイル/テーブルスペースをオフラインにする必要がありました。実行する可能性のある手順の例を次に示します。

    1. ALTER TABLESPACE my_ts OFFLINE;
    2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
    3. データベースの名前を「/old_dir/my_ts01.dbf」から「/old_dir/my_ts01.dbf」に変更します。
    4. ALTER TABLESPACE my_ts ONLINE;

    Oracle 12cでは、1つのコマンドでこれを非常に簡単に実行でき、別のユーザーが同時にファイルにアクセスできます。これを説明するために、テーブルスペースを作成し、移動中に別のセッションでファイルにアクセスします。

    SQL> create tablespace move_me
    2  datafile '/u01/app/oracle/oradata/ora12c/move_me01.dbf' size 5g;
    Tablespace created.
    SQL> create table system.test_tab (id number) tablespace move_me;
    Table created.
    SQL> insert into system.test_tab values (10);
    1 row created.
    SQL> commit;
    Commit complete.

    それでは、このファイルの移動を始めましょう。

    SQL> alter database move datafile
      2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to
      3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf';

    同時に、別のセッションで、このテーブルスペース内の唯一のテーブルに行を挿入しましょう。

    SQL> insert into system.test_tab values (20);
    1 row created.
    SQL> commit;
    Commit complete.

    ご覧のとおり、ファイルを移動している最中ですが、トランザクションは完了しました。

    ファイルの移動中に、両方のマウントポイントの内容を確認しました。

    [oracle@msp-test-ora12 ora12c]$ ls -l /u01/app/oracle/oradata/ora12c
    total 8769660
    -rw-r----- 1 oracle oinstall   10043392 Sep 17 10:52 control01.ctl
    -rw-r----- 1 oracle oinstall   10043392 Sep 17 10:52 control02.ctl
    -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbf
    -rw-r----- 1 oracle oinstall   52429312 Sep 17 10:52 redo01.log
    -rw-r----- 1 oracle oinstall   52429312 Sep 16 22:00 redo02.log
    -rw-r----- 1 oracle oinstall   52429312 Sep 17 02:00 redo03.log
    -rw-r----- 1 oracle oinstall 1090527232 Sep 17 10:52 sysaux01.dbf
    -rw-r----- 1 oracle oinstall  734011392 Sep 17 10:52 system01.dbf
    -rw-r----- 1 oracle oinstall   68165632 Sep 17 10:45 temp01.dbf
    -rw-r----- 1 oracle oinstall  471867392 Sep 17 10:52 undotbs01.dbf
    -rw-r----- 1 oracle oinstall 1073750016 Sep 17 02:06 users01.dbf
    [oracle@msp-test-ora12 ora12c]$  ls -l /u02/app/oracle/oradata/ora12c
    total 684044
    -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbf
    ご覧のとおり、ファイルは一時的に両方の場所にあります。しばらくすると、MOVEコマンドが完了し、テーブルにすべてのデータが含まれていることがわかります。
    Database altered.
    SQL> select * From system.test_tab;
            ID
    ----------
            10
            20
     この新機能は、私にとって大きな時間の節約になります。多くの場合、さまざまな理由でファイルを再配置する必要があり、この新機能を使用します。 
    1. MySQLでのMAKE_SET()関数のしくみ

    2. OracleRACVIPおよびARPPrimer

    3. MySQLビューの作成、ビューの置換、およびビューステートメントの削除を例に

    4. Oracle PL /SQLTABLEタイプのTO_CHAR