OracleDatabase関連
タイトルの通り。 最初はポスグレで始めたのだが、そういやこれ他のDBだとどうなるのかなと思って実験してみた。
create pluggable database文のメモ
バルクの練習したついでに、ふと思い立って実験してみたくなったのでその実験結果を載せる。 内容は「バルクインサートを使うとどれくらい早くなる?」の簡単な実証実験である。
特定のテーブルAからデータをexpdpして、別スキーマにある同名テーブルAに、default付きの項目をaddしたA'をつくり、A→A'にimpdpすると、「ORA-38500: Unsupported operation: Oracle XML DB not present」というOracleエラーが発生する。 これが意味不明。 …
OracleのWITH句の使い方
Oracleシーケンスの現在値を一気に何番もカウントアップする方法のメモ 個人的に、基本INCREMENT BYが「1」の(=1ずつ採番していく)シーケンスをよく使うのでたまにこういうのが必要になるのである。 「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を呼び出すたび…
OracleのTRANSLATE関数についてメモ
SQL Loaderでdirect=trueをオプション指定すると、KEY重複してるデータが登録できてしまう。 PRIMARY KEY INDEXを張ってる場合、この結果、そのPK INDEXが破損するので、 そのPK INDEXを明示的に指定しているhint文があると、SQLエラーになる。 ひどい話であ…
異なるKEYのテーブル同士を結合しながら更新する場合のメモとか注意点
SELECTやUPDATEの一部に部分的に副問い合わせ(インラインビュー)を組み込む方法について。
OracleでPL/SQL使う時の基本的なメモ
havingは、group byで集計する時に一緒に使える条件句である。 個人的には、group by部分を副問い合わせにしちまって外側でwhere句で絞り込む方が多いのだが、 集計すると同時に絞り込めるという点では、SQLがシンプルになってよいのだろう。 使い方の備忘録…
テーブルの統計情報の取得方法とその確認方法の基本めも
あんまりoracleで日付の(特に「月」の)操作を個人的にすることがなかったのでよく知らなかったが、 add_monthsでちょっと困ったのでメモ
あるテーブルをつくる(Createする)とき、既存テーブルの項目定義情報をそのまま流用したいときがある。 そのとき、いちいち流用したいテーブルの項目定義調べてCreate文書くのが面倒だったりするので、 Select+Createの要領で、かつ「絶対に結果が返ってこ…
OracleでNUL(UnicodeでいうとU+0000、制御コード)の後ろに文字列結合すると、結合した文字列が消滅するらしい。 要するにNULの後ろに文字をくっつけることができない。 そういうもんなのか? なんとなく、まあ、気持ちはわからんでもないけどそういうこと…
以下のSQLにバインド変数「target_tab_name」を与えると、 コントロールファイルの中身に相当する内容をsqlで返してくれる。 結果をコピー⇒ペーストすればコントロールファイルの出来上がり。
テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。 DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、 オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_…
前回のやつは、 テーブル名を与えたらそのテーブルの全項目に対するNVL(LENGHB(COLUMN_NAME),0)を作ってくれるが、 その後先頭に「SELECT」と最後尾に「FROM [テーブル名]」を自分でつけて自分でSQLを流すという作業が必要だった。 そこまで含めて完全自動化…
前に書いた記事の詳細を補足する(見返したら自分で良くわからなかったので)。 舞台となるのはDB LINKでつながっている2つのDBである。(↓のようなイメージ) ●LOCAL DBには「TABLE_A」というテーブルと、「SYNONYM_B」というシノニムがある。 SYNONYM_Bは…
有識者との問い合わせのやり取りの中で発覚した、結論からいうとOracleのバグらしいのだが、 俺自身がよくわかっていないので情報整理する意味で書いてみる。 内容としては、厄介なことに同じSQLでも結果が異なるケースをもたらすようだ。
OracleのRANK関数-いわゆる「順位」をつけるための関数-の使い方の個人的なメモ 基本的な使い方はSELECTの項目内に以下のように記述する↓ rank() over(order by COLUMN_NAME [ASC|DESC] ) という感じ。 ・何か指定できるみたいだが、この使い方だと同値は…
マテビューのもとになるオブジェクト情報が「USER_MVIEW_DETAIL_RELATIONS」というシステム表?で見れる 例えばマテビューAの元オブジェクト情報が見たいときは select DETAILOBJ_NAME,DETAILOBJ_TYPE from USER_MVIEW_DETAIL_RELATIONS WHERE MVIEW_NAME = …
Oracleの「FOR UPDATE OF TABLE.COLUMN」は、指定した項目を基準としてレコードの排他をかける構文だと思ってたが、 SELECTの対象が複数存在する場合にどのテーブルをロックするかを指定するもとの情報らしくて、 SELECT対象が1テーブルだけだとあまり意味…
テーブルにdefault指定付きの項目を追加(alter table tabne_name add column_name column_type default default_value)すると、 ”テーブル項目追加中(alter文実行中)”はそのテーブルに対するSELECTが待たされるらしい。 alterが終われば解放されてSELECT…
OracleのFunctionの実行時間はSQLそのものの完了よりはフェッチの部分に大部分が含まれるように感じる。 Functionを呼び出したタイミングではその中身まで深く計算せず、 フェッチしている中で詳細な計算をしていくようなイメージのようである。 SELECT文の…
Oracleの公式のマニュアルみたいのを見ると 「V$SESSION.BLOCKING_SESSIONにはブロックしているセッションの情報が出力される」 といった内容のことが書かれているが、 主語がないので自セッションから見て ・他セッションにブロックされているのか ・他セッ…
DBA_TABLESを基準にしてFUNCTIONやPROCEDUREのソースを調査し そのテーブルが使用されているかどうかを検査するSQL。 このSQLの返却結果の中でOBJ_USING_COUNTが1以上のテーブルは 少なくともどこかで使われています。 ⇒そのテーブルをDROPして削除する/ALT…
V$SESSION.MACHINEにマシン名で検索をかけて、 あとはLOGON_TIMEやV$SQL.SQLTEXT等を見ればある程度わかるけど、 そのあたりがはっきりしない場合に接続元マシンから探り当てる方法。 ※例によって経験則なので確実かどうかわかりません ※Linuxを前提にしてい…
ここに挙げたやり方に則り 実際によく使ってる簡易的にセッションの情報を取得するSQL。 リンク先で挙げたようなV$SESSIONとV$SESSION_LONGOPSに加えて V$SQLを結合してSQL_FULLTEXTを取得します (そのセッションがどんなSQL投げてるのか調べる)。