【Oracle】ハイウォーターマーク(HWM)を下げる方法

sqlplusで以下を叩いて、HWMの状態を確認する。

-- ハイウォーターマークの位置を確認する方法
variable total_blocks number
variable total_bytes number
variable unused_blocks number
variable unused_bytes number
variable last_used_extent_file_id number
variable last_used_extent_block_id number
variable last_used_block number

execute dbms_space.unused_space('スキーマ名', 'テーブル名', 'TABLE', :total_blocks, :total_bytes, :unused_blocks, :unused_bytes, :last_used_extent_file_id, :last_used_extent_block_id, :last_used_block)

print

以下で、HWMをリセットする。(テーブルをDROPしない方法)

-- ハイウォーターマークをリセットする方法の1つ
CREATE TABLE 退避用テーブル名 NOLOGGING PARALLEL
TABLESPACE USERS
PCTFREE 0
STORAGE(INITIAL 40K NEXT 40K PCTINCREASE 0)
AS SELECT * FROM テーブル名;

TRUNCATE TABLE テーブル名;

ALTER TABLE テーブル名 NOLOGGING;
INSERT /*+ APPEND */ INTO テーブル名 SELECT * FROM 退避用テーブル名;
COMMIT;

DROP TABLE 退避用テーブル名;

やってみたけど、正直よく意味がわからない・・・。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です