OracleのFLASHBACKテーブルをPURGEする

OracleのFLASHBACKテーブルをPURGEする。

Oracle10gからFLASHBACKが有効になっている場合は、単純にDROP TABLEしても元のテーブルがゴミ箱(RECYCLEBIN)に残っている。
しかし、DROP TABLEなんてテスト環境でしか実行しないので、FLASHBACKはあまり必要ない。
なので、通常はゴミ箱を経由しないようにDROP TABLEしている。

FLASHBACKしないDROP TABLE

1
DROP TABLE TABLE_TEST_01 PURGE;

これで、RECYCLEBINに保存せずにDROPできる。

PURGEを忘れてしまった場合

たまにPURGEを付けるのを忘れてしまい、BIN$…なテーブルが残ってしまう。それを消したいとき。

1
PURGE TABLE TABLE_TEST_01;

とすることで削除することができる。
ゴミ箱内のテーブルがすべて不要であれば、ゴミ箱ごとPURGEできる。

1
PURGE RECYCLEBIN;

まとめ

もし、DROP TABLEが本当に誤りだった場合、FLASHBACK TABLE文でテーブルを元に戻せる。

1
FLASHBACK TABLE TABLE_TEST_01 TO BEFORE DROP;

これで助かることがあるかもしれない。やっぱりFLASHBACHは残しておくべきだろうか・・・。

同じタグの記事
同じカテゴリの記事

pythonでデータクラス

pythonでデータクラス

python3.7の新機能を読んでいた。
dataclassアノテーションが使えるようになったようだ。
これで、Kotlinの様に簡単にDtoを定義できるようになる。

dataclassの作り方

1
2
3
4
5
6
7
8
import dataclasses

@dataclasses.dataclass
class Dto37:
    id: int
    name: str

dto = Dto37(1, 'One')

簡単だ。かつては普通のクラスを作って、コンストラクタですべてのプロパティを受け取れるようにしたり、
__str__や__repr__を実装したりしていたのに。

しかし、NamedTupleというのを使えば、python3.6でも似たようなことができるようだ。

typing.NamedTuple

1
2
3
4
5
6
7
from typing import NamedTuple

class Dto36(NamedTuple):
    id: int
    name: str

dto = Dto36(2, 'Two')

なんてことだ。簡単だ。

さらに調べると、collections.namedtupleというのを使えば、python3.1でも似たようなことができていた。

collections.namedtuple

1
2
3
4
5
6
7
from collections import namedtuple

Dto31 = namedtuple('Dto31', ['id', 'name'])
dto = Dto31(3, 'Three')

Dto31_2 = namedtuple('Dto31_2', 'id,name')
dto = Dto31_2(4, 'Four')

これは少し癖がある。データタイプも指定できないし。
でも、パラメータを配列で渡しても良いし、カンマ区切りの文字列や、スペース区切りの文字列で渡しても良い。__repr__も実装されている。結構便利だ。

改めてdataclassアノテーション

今までも、やり方はあったのになぜ今回dataclassを追加したか。
dataclassの説明を読むと、適用されるメソッド(__repr__や__eq__など)のコントロールができたり、公開するフィールドを選んだりすることができるのがdataclassのようだ。読み取り専用のクラスも作成できたり、自由度が高くなっている。
今後、python3.7がメインの環境になった暁には、利用してみよう。

同じタグの記事
同じカテゴリの記事