rm /blog

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

OracleDatabase関連

【Oracle】Create Pluggable Database文のメモ

create pluggable database文のメモ

【Oracle】バルクインサートでどれほど性能向上するか簡単な実験をしてみる

バルクの練習したついでに、ふと思い立って実験してみたくなったのでその実験結果を載せる。 内容は「バルクインサートを使うとどれくらい早くなる?」の簡単な実証実験である。

【Oracle】DEFAULT付の項目にimpdpするとORA-38500が発生することに対するちょっとした愚痴

特定のテーブルAからデータをexpdpして、別スキーマにある同名テーブルAに、default付きの項目をaddしたA'をつくり、A→A'にimpdpすると、「ORA-38500: Unsupported operation: Oracle XML DB not present」というOracleエラーが発生する。 これが意味不明。 …

【Oracle】WITH句について

OracleのWITH句の使い方

【Oracle】Oracleシーケンスの採番値を一気にカウントアップする方法

Oracleシーケンスの現在値を一気に何番もカウントアップする方法のメモ 個人的に、基本INCREMENT BYが「1」の(=1ずつ採番していく)シーケンスをよく使うのでたまにこういうのが必要になるのである。 「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を呼び出すたび…

【Oracle】translate関数と個人的な活用方法(不正データ検知)

OracleのTRANSLATE関数についてメモ

【Oracle】SQL Loaderのdirect=trueオプションでKEY重複データが取り込めることに対する愚痴

SQL Loaderでdirect=trueをオプション指定すると、KEY重複してるデータが登録できてしまう。 PRIMARY KEY INDEXを張ってる場合、この結果、そのPK INDEXが破損するので、 そのPK INDEXを明示的に指定しているhint文があると、SQLエラーになる。 ひどい話であ…

【Oracle】複数テーブルを結合したインラインビューを対象にUPDATEするときのやり方と注意点

異なるKEYのテーブル同士を結合しながら更新する場合のメモとか注意点

【Oracle】副問い合わせに条件を適用して項目を取得するやり方

SELECTやUPDATEの一部に部分的に副問い合わせ(インラインビュー)を組み込む方法について。

【Oracle】PL/SQLの基本的なメモ

OracleでPL/SQL使う時の基本的なメモ

【Oracle】group byで使う条件句「having」について

havingは、group byで集計する時に一緒に使える条件句である。 個人的には、group by部分を副問い合わせにしちまって外側でwhere句で絞り込む方が多いのだが、 集計すると同時に絞り込めるという点では、SQLがシンプルになってよいのだろう。 使い方の備忘録…

【Oracle】統計情報取得と確認方法

テーブルの統計情報の取得方法とその確認方法の基本めも

【Oracle】ADD_MONTHS関数について

あんまりoracleで日付の(特に「月」の)操作を個人的にすることがなかったのでよく知らなかったが、 add_monthsでちょっと困ったのでメモ

【Oracle】既存テーブルの項目定義流用してテーブルCreateだけする(WHERE句に0=1つける)

あるテーブルをつくる(Createする)とき、既存テーブルの項目定義情報をそのまま流用したいときがある。 そのとき、いちいち流用したいテーブルの項目定義調べてCreate文書くのが面倒だったりするので、 Select+Createの要領で、かつ「絶対に結果が返ってこ…

【Oracle】NUL(U+0000)の後ろには文字列結合できない

OracleでNUL(UnicodeでいうとU+0000、制御コード)の後ろに文字列結合すると、結合した文字列が消滅するらしい。 要するにNULの後ろに文字をくっつけることができない。 そういうもんなのか? なんとなく、まあ、気持ちはわからんでもないけどそういうこと…

【Oracle】SQL Loaderコントロールファイルの内容を生成するスクリプト

以下のSQLにバインド変数「target_tab_name」を与えると、 コントロールファイルの中身に相当する内容をsqlで返してくれる。 結果をコピー⇒ペーストすればコントロールファイルの出来上がり。

【ORACLE】DDLの取得

テーブル・マテビュー・INDEXのDDLを取得して、テーブル(マテビュー)別にファイルに吐きだすスクリプト。 DBMS_METADATA.GET_DDL、DBMS_METADATA.GET_DEPENDENT_DDLをカーソルと併用して使用し、 オブジェクト毎にDDLを取得しつつ、ファイルへの出力はUTL_…

【ORACLE】テーブル容量の確認2

前回のやつは、 テーブル名を与えたらそのテーブルの全項目に対するNVL(LENGHB(COLUMN_NAME),0)を作ってくれるが、 その後先頭に「SELECT」と最後尾に「FROM [テーブル名]」を自分でつけて自分でSQLを流すという作業が必要だった。 そこまで含めて完全自動化…

【ORACLE】分散トランザクションについて

前に書いた記事の詳細を補足する(見返したら自分で良くわからなかったので)。 舞台となるのはDB LINKでつながっている2つのDBである。(↓のようなイメージ) ●LOCAL DBには「TABLE_A」というテーブルと、「SYNONYM_B」というシノニムがある。 SYNONYM_Bは…

【ORACLE】サブパーティションプルーニングのバグ

有識者との問い合わせのやり取りの中で発覚した、結論からいうとOracleのバグらしいのだが、 俺自身がよくわかっていないので情報整理する意味で書いてみる。 内容としては、厄介なことに同じSQLでも結果が異なるケースをもたらすようだ。

【ORACLE】RANK関数

OracleのRANK関数-いわゆる「順位」をつけるための関数-の使い方の個人的なメモ 基本的な使い方はSELECTの項目内に以下のように記述する↓ rank() over(order by COLUMN_NAME [ASC|DESC] ) という感じ。 ・何か指定できるみたいだが、この使い方だと同値は…

【ORACLE】マテビューの元になるオブジェクト情報

マテビューのもとになるオブジェクト情報が「USER_MVIEW_DETAIL_RELATIONS」というシステム表?で見れる 例えばマテビューAの元オブジェクト情報が見たいときは select DETAILOBJ_NAME,DETAILOBJ_TYPE from USER_MVIEW_DETAIL_RELATIONS WHERE MVIEW_NAME = …

【ORACLE】FOR UPDATEの勘違いと真実(今さら)、あと実験

Oracleの「FOR UPDATE OF TABLE.COLUMN」は、指定した項目を基準としてレコードの排他をかける構文だと思ってたが、 SELECTの対象が複数存在する場合にどのテーブルをロックするかを指定するもとの情報らしくて、 SELECT対象が1テーブルだけだとあまり意味…

【ORACLE】default付のテーブル項目追加中にSELECTするとかえってこない

テーブルにdefault指定付きの項目を追加(alter table tabne_name add column_name column_type default default_value)すると、 ”テーブル項目追加中(alter文実行中)”はそのテーブルに対するSELECTが待たされるらしい。 alterが終われば解放されてSELECT…

【ORACLE】Functionの実行時間はフェッチに大部分含まれる

OracleのFunctionの実行時間はSQLそのものの完了よりはフェッチの部分に大部分が含まれるように感じる。 Functionを呼び出したタイミングではその中身まで深く計算せず、 フェッチしている中で詳細な計算をしていくようなイメージのようである。 SELECT文の…

【ORACLE】V$SESSION.BLOCKING_SESSIONについて

Oracleの公式のマニュアルみたいのを見ると 「V$SESSION.BLOCKING_SESSIONにはブロックしているセッションの情報が出力される」 といった内容のことが書かれているが、 主語がないので自セッションから見て ・他セッションにブロックされているのか ・他セッ…

【ORACLE】テーブルを使用しているソースやマテビューの調査(+α)

DBA_TABLESを基準にしてFUNCTIONやPROCEDUREのソースを調査し そのテーブルが使用されているかどうかを検査するSQL。 このSQLの返却結果の中でOBJ_USING_COUNTが1以上のテーブルは 少なくともどこかで使われています。 ⇒そのテーブルをDROPして削除する/ALT…

【ORACLE】他サーバやマシンからの接続セッションを特定する方法

V$SESSION.MACHINEにマシン名で検索をかけて、 あとはLOGON_TIMEやV$SQL.SQLTEXT等を見ればある程度わかるけど、 そのあたりがはっきりしない場合に接続元マシンから探り当てる方法。 ※例によって経験則なので確実かどうかわかりません ※Linuxを前提にしてい…

【ORACLE】セッションが実行中のSQLを調べる

ここに挙げたやり方に則り 実際によく使ってる簡易的にセッションの情報を取得するSQL。 リンク先で挙げたようなV$SESSIONとV$SESSION_LONGOPSに加えて V$SQLを結合してSQL_FULLTEXTを取得します (そのセッションがどんなSQL投げてるのか調べる)。

【ORACLE】テーブル容量の確認

テーブルの容量はDBA_SEGMENTS.BYTESに格納されているので、 SEGMENT_NAMEにテーブル名を与えればゲットすることが出来る SELECT SEGMENT_NAME,BYTES FROM DBA_SEGMENTS WHERE SEGMENT_NAME = :TAB_NAME BYTESは単位が本当に「バイト」なので、 キロバイトに…