Oracle Database 18c 新機能

Oracle Database 18c マニュアル が公開されていたので、新機能について軽く見た。 12c に比べると、アプリ屋に関する新機能が極端に少ない(OLAP向けだから?OLTP でも Core の Database エンジンは同じだとおもうが)。 次は、少ないものの中から目にとまったもの。 ■Private Temporary Tables Private temporary tables are temporary database objects that are automatically dropped at the end of a transaction or a …

続きを読む

FIXED_DATE

マニュアルを見ていたら、「FIXED_DATE」というのを見つけた。 ALTER SYSTEM SET FIXED_DATE = '2018-03-19-00:00:0' SCOPE = MEMORY; とかで SYSDATE の返す値を固定にできるそうだ。 戻すには ALTER SYSTEM SET FIXED_DATE = NONE SCOPE = MEMORY; とする。 ふ~ん。でも、使えんね。 SYSTIMESTAMP は変更できない(できるパラメータもなさそう) SYSTEM 単位でしか変更できない。共用だからそんな簡単に変更できないし。ALTER SESSIONでできるならま…

続きを読む

SQL*Loader の TRUNCATE

SQL*Loader で TRUNCATE とすると、ロードする前に TRUNCATE してくれるが、セグメント解放してくれなかったので調べた。 SELECT *FROM DBA_SEGMENTS WHERE OWNER = 'XXX' AND SEGMENT_NAME='テーブル名' AND SEGMENT_TYPE='TABLE'; とするとセグメントの情報を取得できる。BYTES や BLOCKS を見れば良い。詳細はマニュアル参照。 TRUNCATE すると、BLOCKS が 1 になるはずだが、そうなっていなかった。 ※CREATE TABLE で SEGMENT CREATION…

続きを読む

APPEND ヒントの誤った使い方

「APPENDヒント」というのがある。 DIRECT PATH INSERT してね、っというヒントである。 DIRECT PATHの何がうれしいかと言うと、バッファキャッシュを経由せずに直接データファイルに書き込むので速いというメリットがある。 しかし、主に次のデメリットがある。 ①HWMが上がる。  ⇒データファイルが膨れるばかり。 ②テーブル(パーティション)をロックする  ⇒同時実行性が制限される ③コミットしないとINSERTしたレコードを参照できない 「ダイレクト・パス・インサートの使用上の注意」にまとめられている。 アプリを組む上で、②③が特に問題になる。 ③でおバカな作りに…

続きを読む

外部表

この前、はじめて外部表を使ったのでその時のメモ。 ・SQL*Loaderでやるより、外部表からSELECT/INSERTで登録する方が大分速い。  従来型(Direct Pathでない)のLoaderと比べて1/5位の時間で済んだ。 ・CREATEする時には特にエラーは起きず、SELECTする時にファイルの形式がおかしかったりするとエラーが発生する。 ・SQL*Loaderタイプ(デフォルト)とDATA Pumpタイプのアクセス・ドライバがある。  SQL*Loaderタイプは、Loaderと一緒の動きをすると思ったが、最終項目が空(「あああ,いいい,」みたいに終わると)だと次のような…

続きを読む