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

OracleLOBを削除する方法

    user_objectsでLOBを確認できる1つのシナリオ ただし、user_lobsへの結合 テーブルがすでに削除されている場合は何も見つかりませんが、ごみ箱に入っています

    create table t42 (my_clob clob);
    
    table T42 created.
    

    予想どおり、Justinのクエリには次の列が表示されます:

    select l.table_name,
           l.column_name,
           l.segment_name lob_name
      from user_lobs l
           join user_objects o
             on( o.object_name = l.segment_name );
    
    TABLE_NAME  COLUMN_NAME LOB_NAME                     
    ----------- ----------- ------------------------------
    T42         MY_CLOB     SYS_LOB0000133310C00001$$      
    
    drop table t42;
    
    table T42 dropped.
    

    ジャスティンのクエリでは何も見つかりません:

    select l.table_name,
           l.column_name,
           l.segment_name lob_name
      from user_lobs l
           join user_objects o
             on( o.object_name = l.segment_name );
    
    no rows selected
    

    しかし、それはまだuser_objectsにあります :

    select object_name, object_type, status from user_objects
    where object_type like 'LOB%';
    
    OBJECT_NAME                    OBJECT_TYPE         STATUS
    ------------------------------ ------------------- -------
    SYS_LOB0000133328C00001$$      LOB                 VALID   
    

    そして、ごみ箱でそれを見ることができます:

    select * from user_recyclebin;
    
    OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
    ------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
    SYS_IL0000133310C00001$$       SYS_IL0000133310C00001$$         DROP      LOB INDEX                 USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  NO         NO            133310      133310       133310          0 
    SYS_LOB0000133310C00001$$      SYS_LOB0000133310C00001$$        DROP      LOB                       USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  NO         NO            133310      133310       133310          0 
    BIN$5IUNXtWkUXLgQwEAAH9TlQ==$0 T42                              DROP      TABLE                     USERS                          2013-08-22:08:33:21 2013-08-22:08:33:21    1.0E+13                                  YES        YES           133310      133310       133310          0 
    

    LOBはまだディスク上に存在し、ストレージを使用しています。これが懸念事項だと思います。したがって、質問に答えるには、LOBを実際に削除してそのストレージを解放するには、テーブル全体をパージする必要があります。

    purge table t42;
    
    table purged.
    
    select object_name, object_type, status from user_objects
    where object_type like 'LOB%';
    
    no rows selected
    

    興味深いことに、LOBセグメントに名前を付けた場合、この効果は見られません。

    create table t42 (my_clob clob)
    lob (my_clob) store as my_clob_segment;
    

    上記の手順を繰り返して、エントリはuser_objectsから削除されました dropの後 。

    drop table t42;
    
    table T42 dropped.
    
    select object_name, object_type, status from user_objects
    where object_type like 'LOB%';
    
    no rows selected
    
    select * from user_recyclebin;
    
    OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE                      TS_NAME                        CREATETIME          DROPTIME               DROPSCN PARTITION_NAME                   CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
    ------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
    BIN$5IUNXtWnUXLgQwEAAH9TlQ==$0 MY_CLOB_SEGMENT                  DROP      LOB                       USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  NO         NO            133316      133316       133316          0 
    BIN$5IUNXtWoUXLgQwEAAH9TlQ==$0 T42                              DROP      TABLE                     USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  YES        YES           133316      133316       133316          0 
    SYS_IL0000133316C00001$$       SYS_IL0000133316C00001$$         DROP      LOB INDEX                 USERS                          2013-08-22:08:36:41 2013-08-22:08:36:41    1.0E+13                                  NO         NO            133316      133316       133316          0 
    

    もちろん、ストレージはまだ使用されており、解放するにはパージする必要があります。データディクショナリでは少し一貫性があります。したがって、これは(非常にマイナーな)バグのように見えます。サポートノート394442.1で言及されている動作に関連している可能性があります。



    1. 現在の日付が2つの日付の間にあるかどうかを確認します+mysqlselect query

    2. MySQLを更新すると、影響を受ける行が返されますが、実際にはデータベースは更新されません

    3. フレンドリストのFacebook配列をMySQLテーブルと比較します

    4. Dockerイメージの構築中にPostgresdumpを復元するにはどうすればよいですか?