3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ALTER TABLE INCLUDING ROWS文の動作を試す (Oracle Database 12.2)

Posted at

テーブルのメンテナンス

テーブルから不要なデータを削除する場合にはDELETE文を実行します。一方ででテーブルの表領域を移動する場合や再構成するためにはALTER TABLE MOVE文を実行します。
ALTER TABLE MOVE文は表領域の指定を行わなずに、同一表領域内でテーブルの再構成を行う場合にも実行できます。Oracle Database 12cではこのデータの移動と不要データの削除を同時に行うALTER TABLE MOVE INCLUDING ROWS文がサポートされました。

実行例

使い方は簡単です。ALTER TABLE MOVE文に残すレコードを示す条件文を指定します
(マニュアル https://docs.oracle.com/cd/E82638_01/SQLRF/ALTER-TABLE.htm#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877)。

例1 特定のレコードのみ残して同一表領域内で再構成

下記の例では、30日より前のレコードを削除しています。

SQL> ALTER TABLE orders MOVE INCLUDING ROWS WHERE order_date >= to_date(sysdate - 30) ;

例2 パーティションのマージ

下記の例では、パーティション h1_2018とh2_2018を、パーティション y2018にマージしています。その際にorder_status列がNULLのレコードを削除しています。
パーティションのマージだけでなく、パーティションのスプリットや、通常のテーブルからパーティション・テーブルへの変換時にもINCLUDING ROWS句を指定することができます。

SQL> ALTER TABLE orders MERGE PARTITION h1_2018, h2_2018 INTO PARTITION y2018
       INCLUDING ROWS order_status IS NOT NULL ;

例3 表領域の移動

下記の例では、パーティション y2017を表領域pastに移動しています。その際にorder_status列がNULLのレコードを削除しています。

SQL> ALTER TABLE orders MOVE PARTITION y2017 TABLESPACE past 
       INCLUDING ROWS order_status IS NOT NULL ;

オプションの指定

ALTER TABLE MOVE文が素晴らしいのは、ONLINE指定が可能であることとデータの移動にNOLOGGINGが指定できることです。この機能により大量データの移動を運用中に、高速に行うことができます。

例4 NOLOGGINGとONLINE指定

SQL> ALTER TABLE orders MOVE ONLINE NOLOGGING INCLUDING ROWS WHERE order_date >= to_date(sysdate - 30) ;

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?