備忘録

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でできるならまだね。

ちゃんとしたシステム作るなら、ファイルなり・DBなりで運用日付持つでしょうね。
どこまで細かい単位で持つかは設計思想だけど、バッチとオンライン用に2つは持つだろうね。
オンラインは試験用だろうけど、バッチは実運用で必要ね。

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 DEFERRED を指定していると 0 になると思われる。

SQL*Loader のマニュアルを見ると次のように書いてあった。

TRUNCATEオプションを使用すると、SQLのTRUNCATE TABLE table_name REUSE STORAGE文が実行され、表のエクステントが再利用されます。
TRUNCATEオプションにより、表またはクラスタからすべての行が短時間で効率的に削除されるため、最大限の処理パフォーマンスを実現できます。


TRUNCATE TABLE のデフォルトは DROP STORAGE で、セグメントが解放されるが、REUSE STORAGE だと解放されない。デカイテーブルで DROP STORAGE すると時間がかかる時がある。
それが嫌だから、Loader の TRUNCATE は REUSE STORAGE なのだろうが、オプションで変更できない。

SQL*Loader でセグメント解放したい場合は、事前に TRUNCATE TABLE すべし、ということね。

APPEND ヒントの誤った使い方

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

③でおバカな作りになっているストアドプロシージャを最近見た。

1つのプロシージャでDIRECT INSERT&COMMITして、その後別の処理をした後COMMITしている。
1個目のトランザクションの後でエラーとなった時にリカバリーできる作りになっていないのである。
DIRECT INSERTしたものを手で消さないとリラん出来ないダメな作り。
しかも、DIRECT INSERTがそれほど大量の書き込みではないと来る。

TRUNCATE⇒DIRECT INSERT みたいに、一時表では役に立たない場合のワークテーブルへの書き込みになどに限定して使うべき。

ただのINSERT INTO VALUESにAPPENDヒントを付けてあるケースもあった。
APPEND_VALUESヒント」じゃないと効かんのによ。
何も考えず、何も理解せず実装しているんだな~というのが良くわかる。

APPEND_VALUES も1件登録するだけのSQLには意味がなく、
バルクインサートするなどチューニングしても性能要件を満たせない場合に+αとして使うべき。
マニュアルにも次のように書いてあるしね。

APPEND_VALUESヒントを使用すると、パフォーマンスを大幅に向上できます。次に使用方法の例を示します
・ Oracle Call Interface(OCI)を使用するプログラムで、大規模な配列バインドまたは行コールバックを伴う配列バインドを使用する場合
・PL/SQLで、VALUES句とともにINSERT文を使用するFORALLループを伴う多くの行をロードする場合

外部表

この前、はじめて外部表を使ったのでその時のメモ。

・SQL*Loaderでやるより、外部表からSELECT/INSERTで登録する方が大分速い。
 従来型(Direct Pathでない)のLoaderと比べて1/5位の時間で済んだ。

・CREATEする時には特にエラーは起きず、SELECTする時にファイルの形式がおかしかったりするとエラーが発生する。

・SQL*Loaderタイプ(デフォルト)とDATA Pumpタイプのアクセス・ドライバがある。
 SQL*Loaderタイプは、Loaderと一緒の動きをすると思ったが、最終項目が空(「あああ,いいい,」みたいに終わると)だと次のようなエラーになる。

KUP-04021: field formatting error for field Col1
KUP-04023: field start is after end of record
KUP-04101: record 2 rejected in file /home/oracle/datafiles/example.dat


 耳「"」付きの場合は大丈夫。
 「MISSING FIELD VALUES ARE NULL」というオプションが必要。
そんなことは、「SQL*Loaderと外部表との処理内容の違い」に一言も書かれていない。

・外部表を作っても、対象のファイルはロックされない。
 移動したり、消したりすると外部表に SELECT した時エラーとなる。その状態で外部表を放置してたら、
 Oracleの内部ジョブが何かのタイミングでアクセスしてALERTログが出た。

・複数回アクセスする場合は、いったんワークテーブルに書き写した方が良い。マニュアルかどこかのサイトに書いてあった。
 まあ、その通りだろう。バイナリでファイルロックしてあるわけでないので、都度パースする必要があるからね。

・制約をつけられない

・LOCK TABLEできない

2017/02/26 新百合ヶ丘-平瀬川-多摩川-蒲田

09:10 0km   小田急新百合ヶ丘駅
09:40 2.8km 平瀬川支川源流近く
10:30 6.9km 平瀬川合流点
12:00 14.5km 多摩川合流河口
14:40 26.7km 第二京浜の橋を渡り多摩川と別れる
15:15 30km  蒲田ゴール

新百合ヶ丘駅
JR南武線の登戸乗り換えで小田急の準急で到着。
南口で怪しい団体が寄付してくれって連呼していた。

鍋ころがし由来
地名「鍋ころがしの」由来。詳しい解説はこちら

田園調布学園大学
川の名前を調べる地図を見ると、田園調布学園大学の校内が源流ぽかったので行ってみました。
入れず、GoogleMapsだともう少し北が源流みたいだが、道路に隣接していないので行けず。
田園調布でもないのに、なんでこんな名前なんでしょうね。

平瀬川支川
平瀬川支川の源流点近く。
もっと詳しいのを見たい人は横浜水道みちを行くをどうぞ。自分とは目的が違うようで詳しさは段違いです。

花大根の花?
花大根の花でしょうか。迷い込んだ狭い場所に咲いていました。周りが囲まれているから風が無く暖かいところだからよいのかも。

マリアンナ医大手前
マリアンナ医大の少し手前です。川っぽくなってきました。花壇の水を汲んでいました。

あゆみ橋水位計?
あゆみ橋の水位計だと思う。氾濫危険水位までいったことあるのかな?

平瀬川支川。本川じゃない。
平瀬川支川。本川じゃないのをここで初めて知る。平瀬川支川とかじゃなく、ちゃんとした名前つけてあげれば良いのに。
本川より支川の方が長いようなきがしますが。。。

スズメの行水
使っているデジカメFinePix XP30ではズームが限界でよくわからないけど、スズメが行水しています。
3羽いたけど、カメラ構えてとろうとしたら減っていた。笛吹川に行ったとき石和温泉近くで鹿が川を走っていたのも取りそびれた。

平瀬川本川との合流点
左が本川で、右が支川(こっちを歩いていた)

ホトケノザ?
ホトケノザ?えらい群生している。食用にならないそうです。勝手に群生しているのでしょうかね。

久地円筒分水
久地円筒分水
津田山を突き抜けて平瀬川がながれているが、津田山をこえたところにあった。津田山結構な坂でした。
二ヶ領用水の水を4つに分けるらしい。平瀬川の水は合流しないとのこと。

二ヶ領用水久地円筒分水

平瀬川-二ヶ領用水
左が平瀬川で右が二ヶ領用水の残りカスの水。どちらも最終的には多摩川の水になるから、二ヶ領用水の水がわんさか流れてくることは無いだろう。

多摩川合流点
右岸から多摩川に合流します。もっと先の本当に合流する手前でフライフィッシングをしている人がいたが、
何を釣っていたんだろうか?あんな臭い川に渓流魚がいるとも思えんが。

二子玉川下流
さすがにこの辺の水は臭い。昭島あたりからもう臭かったからここで臭いのは仕方ないが。

菜の花
菜の花。セイヨウアブラナだと思うが、確かではない。

多摩川遊歩道
多摩川遊歩道だったか、そんな感じの看板があったが、すごい感じ。大雨がふったら埋まっちゃうから別に掘らなくても良いと思うのだが。。。

調布取水堰
調布取水堰。釣りをしている人が結構いた。ここの水は飲料水にはならず、工業用水に使っているらしい。
羽村取水堰の水ならいいが、ここのは嫌だね。

多摩川を渡り東京へ
車だと第二京浜-環八で行くんだろうが、歩きだから適当にジグザグ進む。
前のページ 次のページ

FC2Ad