ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Oracle

EXPLAIN PLAN FOR 〜(※AUTOTRACE TRACEONLY含む)で出てくる実行計画 と SQL実行時の実行計画が異なるケースを作ってみる。

EXPLAIN PLAN FOR 〜(※AUTOTRACE TRACEONLY含む)で出てくる実行計画 と SQL実行時の実行計画が異なるケースを作ってみるZe!(`・ω・)Ъ幾つかパターンは有るんですが、WHERE句の範囲検索を バインド変数で指定するケースでやってみます。簡単なんで。まず服は脱…

Oracle の ASH(Active Session History) から リテラルSQL を追跡してみる。

Oracle の ASH(Active Session History) から リテラルSQL を追跡してみます。ASH にはアクティブなセッションの履歴情報、もう少し詳しく言うと DB CPU または 待機状態(Disk IO/ロック待ち/Network待機/etc...) の セッション情報 が 1回/1秒 の間隔で自動…

Oracle の JDBC Thin Driver で Net Trace を取得する。

まず服を脱ぎます。まず "トレース用" のJDBCドライバをダウンロードします。 ojdbc*_g.jar を Oracle のサイトからダウンロードしてきます。JDBCドライバはバージョンが幾つかありますが、差し当たり11gR2(11.2.0.4)の "トレース用"JDBCドライバを下記サイ…

APPENDヒント付きの INSERT 〜 SELECT 〜 文のロック範囲が、INSERT文側のPARTITION句有無で異なる。

通常、APPENDヒント付きの INSERT 〜 SELECT文 は 排他ロック を表全体で獲得します。例えば以下の SQL文 を別セッションから併行で実行すると、 後から実行した SQL は TM enqueue で待機します。 -- ★セッション1 INSERT /*+ APPEND */ INTO TBL_B SELECT…

Oracle Datapump の export(expdp) で出力される dmpファイル の OSグループ を制御する。

Oracle Datapump の export(expdp) で出力される ダンプファイル は、 通常 ${ORACLE_HOME}/bin配下の oracleバイナリと同一の owner:group で出力されます。 [oracle@host1 ~]$ . .ayshibat [oracle@host1 ~]$ ls -la $ORACLE_HOME/bin/oracle -rwsr-s--x 1…

enqueue(ロック) の 待機させている方(ホルダー) と 待機している方(ウェイター) を出力する SQL

Oracle Database の enqueue(ロック) の 待機させている方(ホルダー) と 待機している方(ウェイター)を出力するには、V$LOCKビューを参照します。以下の SQL を実行します。 SET LINESIZE 300; COLUMN SESS FORMAT A20; SELECT DECODE(request,0,'Holder: ',…

LOB型(BLOB / CLOB / BFILE)のデータの長さ(バイト数 or 文字数)を確認する(DBMS_LOB.GETLENGTHファンクション)

※2018/8/20訂正:DBMS_LOBパッケージのGETLENGTHファンクションは、BLOB型はバイト数を戻しますが CLOBについては文字数を返します。バイト数ではありません。謹んでお詫び申し上げます。 下記の記事も参照して下さいやで彡(゚)(゚) CLOB型の(文字数ではなく)…

共有プール上の特定カーソルを狙い打ちで age out(消去)する。(DBMS_SHARED_POOL.PURGEプロシージャ)

共有プールの特定カーソルを狙い打ちで age out(消去) するには、 DBMS_SHARED_POOLパッケージの PURGEプロシージャ を使用します。まず V$SQLAREA を 参照して、age out したい SQL の ADDRESS値 と HASH_VALUE値 を確認します。 SQL> SET LINESIZE 170; SQ…

Bind Peek を もっと使おうぜ! - JPOUG Advent Calendar 2014 (Day 5) -

※2015年12月追記 こちらもよろしく!(`・ω・)ゞ まだ統計固定で消耗してるの? - JPOUG Advent Calendar 2015 (Day9) - [id:gonsuke777:20151208:1449587953] JPOUG Advent Calendar 2014 の 5日目となります。「Bind Peek を もっと使おうぜ!」と銘打って、…

キー項目がブレイクしたタイミングでサマリ集計するSQL (ROW_NUMBER分析ファンクション)

タイトルだけだと訳が解りませんな。下記表(SALES表)のレコード群を SQL> SELECT * FROM SALES ORDER BY SALES_DATE, JAN_CODE; SALES_DATE JAN_C SALES_CNT ------------------- ----- ---------- 2014/10/06 00:00:00 AAA 100 2014/10/07 00:00:00 AAA 200…

数字のみのレコードを抽出するSQL(REGEXP_LIKE条件) パート2

以前の記事である 数字のみのレコードを抽出するSQL(REGEXP_LIKE条件) http://d.hatena.ne.jp/gonsuke777/20120215/1329301835の改良バージョン。まぁ改良と言っても結果は変わらないんですがね。。。 やっぱり Oracle の REGEXP_LIKE条件を使用してみる。 W…

Java7 と Java5 で hugepage を 使う/使わない が異なる?

とりあえずメモ。hugepage使用の判定方法は yohei-aさんの記事 【Linux で huge page を使っているプロセスを調べる方法:id:yohei-a:20140816:1408168458】を参考。Java7 の場合 [oracle@hostname1 javatest]$ /home/oracle/work/ayshibat/jdk1.7.0_51/bin/j…

Oracle VM for x86(OVM x86)3.2.8 の DomU(Guest OS) で hugepage を使う

Oracle VM for x86(OVM x86)3.2.8 の DomU(Guest OS) で hugepage を使おうとしたら、messages に以下のメッセージが出て使えない。 $ cat /etc/sysctl.conf : vm.nr_hugepages = 512 ★sysctl.conf上では hugepage を設定済み $ cat /var/log/messages : Aug…

連番を生成する SELECT文(階層問い合わせ+LEVEL疑似列)

ちょっとした疑似レコードをSELECTだけで簡単に作れるので、非常に便利です。 階層問い合わせ(CONNECY BY〜) と LEVEL疑似列を使用します。 Oracle Database SQL言語リファレンス 11gリリース2 (11.2) B56299-06 LEVEL疑似列 http://docs.oracle.com/cd/E163…

Oracle Database の「データベース」のデフォルト表領域を確認する方法

DATABASE_PROPERTIESディクショナリを参照する。V$DATABASEじゃないんですね〜〜。 Oracle Databaseリファレンス 11gリリース2 (11.2) B56311-08 DATABASE_PROPERTIES http://docs.oracle.com/cd/E16338_01/server.112/b56311/statviews_2160.htm#sthref1733…

ASMインスタンスで有効なユーザを確認

V$PWFILE_USERSビューを見る。 SQL> SELECT * FROM V$PWFILE_USERS; USERNAME SYSDB SYSOP SYSAS ------------------------------ ----- ----- ----- SYS TRUE TRUE TRUE ASMSNMP TRUE FALSE FALSE SQL>

Oracle Technology Day 2014(名古屋/大阪)で語ってきた。

またまた更新、、、以下のイベントで語って参りますた。 Oracle Technology Day 2014 in 名古屋 http://www.oracle.com/webapps/events/ns/EventsDetail.jsp?p_eventId=176929&src=7863979&src=7863979&Act=65 Oracle Technology Day 2014 in 大阪 http://ww…

INTERVAL DAY TO SECOND型を秒数に変換してみる。

さっきのは前フリで、こっちが本来やりたかったこと。 EXTRACTファンクションを使いまする。例として、1日12時間31分55.129秒の INTERVAL DAY TO SECOND型を秒数に変換してみる。 SELECT EXTRACT(DAY FROM to_dsinterval('+01 12:31:55.129')) AS DAY , EXTR…

INTERVAL DAY TO SECOND型を使って日付を演算してみる。

例として、現在時刻(SYSTIMESTAMP) の 1日12時間31分55.129秒後を算出してみる。 TO_DSINTERVALファンクションを使う。 ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY/MM/DD HH24:MI:SS.FF'; SELECT SYSTIMESTAMP AS CURRENT_TIME , SYSTIMESTAMP + to_ds…

Oracle DBA & Developer Day 2013 セッション資料が公開されてた。

ぐぐったら出てきた。ワイのもジャストプレイヤー・瀧CEOの資料もうpされてた。 他の方々の資料も盛りだくさん。皆さんよろしくやで〜〜。 Oracle DBA & Developer Day 2013 セッション資料http://www.oracle.com/technetwork/jp/ondemand/ddd-2013-2051348…

Oracle DBA & Developer Day 2013 で語ってきた。

ひっそりと更新、、、以下のイベントで語ってきたやで〜〜。Oracle DBA & Developer Day 2013http://www.oracle.co.jp/events/dbadev2013/自分は以下のセッションを担当しますた。SQLチューニングについてっすね。 【A-1】オラクル・コンサルが語る! SQLチ…

sqlldrの終了コード

何年か振りに sqlldr のコントロールファイルを書く用事があったので、メモ。http://docs.oracle.com/cd/E16338_01/server.112/b56303/ldr_params.htm#i1005019 Oracle Databaseユーティリティ 11gリリース2 (11.2) B56303-04 終了コードによる結果の検査と…

Solaris11でps出力のコマンド部分が80文字で切れる問題の対策

問題は表題の通りで、下記のようにps出力のコマンド部分が途中で切れる。 root:~# ps -ef | grep -i java agentuse 7626 10046 0 11月 12日 ? 0:00 /u02/app/oracle/Middleware/agent/core/12.1.0.1.0/jdk/bin/sparcv9/java -Xmx128M agentuse 24384 10046 0…

BLOB を CLOB に変換する(DBMS_LOB.CONVERTTOCLOB)

BLOB型のデータをCLOB型に変換するには DBMS_LOBパッケージのCONVERTTOCLOBプロシージャを使用する。 Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス 11g リリース2(11.2) B56262-03 79 DBMS_LOB CONVERTTOCLOBプロシージャ h…

共有プール上の実行計画を出力する。(DBMS_XPLAN.DISPLAY_CURSOR)

久々の更新じゃーい!共有プール上に格納された SQL の実行計画を出力するには、 DBMS_STATSパッケージの DISPLAY_CURSORファンクションを使用する。 SQL> SET LINESIZE 170; SQL> SET PAGESIZE 1000; SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('…

数字のみのレコードを抽出するSQL(REGEXP_LIKE条件)

※追記:パート2(http://d.hatena.ne.jp/gonsuke777/20140909/1410228639)も見てね。 Oracle の REGEXP_LIKE条件を使用してみる。 WITH A AS ( SELECT 'A' AS COL1 FROM DUAL UNION SELECT '1' FROM DUAL UNION SELECT '2' FROM DUAL UNION SELECT '1A' FROM …

時刻xx:00とxx:30に statspack.snap; を実行するジョブ作成 part2

以前のエントリ(http://d.hatena.ne.jp/gonsuke777/20110829/1314610674)の改良版。 DBMS_JOBS の代わりに DBMS_SCHEDULER を使用する。repeat_intervalパラメータに何を書くかがポイント。 BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name => 'STATSPACK_SNAPS…

表領域(TABLESPACE)の定義を DBMS_METADATA で抽出してみる

SQL は↓(※訳有って9iR2環境で実行) SET PAGES 0; SET LINESIZE 32767; SET LONG 2000000; SET LONGC 2000000; COLUMN DDL FORMAT A32767; SELECT DBMS_METADATA.GET_DDL('TABLESPACE','TEST1') AS DDL FROM DUAL; 結果は↓ DDL -----------------------------…

一時表領域の最大/使用サイズを確認するスクリプト(修正版)

よくよく考えたら V$TEMP_SPACE_HEADER だけで良かったでござる(´・ω・`) ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; COLUMN BYTES_MAX FORMAT 999,999,999,999; COLUMN BYTES_FREE FORMAT 999,999,999,999; COLUMN BYTES_USED FORMAT 99…

一時表領域の最大/使用サイズを確認するスクリプト

DBA_TEMP_FILES 及び V$TEMP_SPACE_HEADER を参照する。 SET LINESIZE 170; ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS'; COLUMN MAX_BYTES FORMAT 999,999,999,999; COLUMN FREE_BYTES FORMAT 999,999,999,999; COLUMN USED_BYTES FORMAT…