ねら~ITエンジニア雑記

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

2017-01-01から1年間の記事一覧

V$SQLとその周辺でER図を描いてみよう! - JPOUG Advent Calendar 2017 Day 15 -

JPOUG Advent Calendar 2017 の Day 15 の記事となります。 昨日は おおのたかしさん の記事でした彡(゚)(゚) Oracle Database 12cR2へのアップグレード後に発生するORA-01017 https://www.ashisuto.co.jp/db_blog/article/201712-ora-01017.html 今年はV$SQL…

JavaのPreparedStatementを使ったバインド変数なSQLで、ワザとORA-1000エラーを起こすソースを書いてみて回避策を探る。

ORA-1000エラーはOracle Databaseのセッションでオープンしている カーソル数が最大値を超えた際に発生するエラーです。 ORA-1000 最大オープン・カーソル数を超えました。 早速やってみるやで彡(゚)(゚) まずはテーブルの準備から。 CREATE TABLE TBL_A( C1 N…

SQLNET.AUTHENTICATION_SERVICESをnoneに設定してOS認証を無効化してみる(Oracle Database)

sqlnet.ora の SQLNET.AUTHENTICATION_SERVICES を none に セットすると、OS認証を無効化することができるんやで彡(゚)(゚)さっそくやってみます。 設定前(デフォルト) $ id -a uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba) $ c…

DBMS_PERF.REPORT_PERFHUBファンクションでパフォーマンス・ハブ画面をHTML出力してみる。

DBMS_PERFパッケージのREPORT_PERFHUBファンクションを使うと、 Enterprise Managerのパフォーマンス・ハブ相当の画面をHTML出力できるんやで。 彡(゚)(゚) ※Enterprise Managerを構築することなく、DB単体で出力できます。まず以下のようにしてhtmlファイルを…

単純なINSERT文でもバインド変数のサイズの違いで複数の子カーソルが生成される(Oracle Database)

表題の通り、やってみるやで彡(゚)(゚) INSERTするバインド変数の大きさの順番/組み合わせで挙動が変わるので、 まずはバイト数が小さい順にINSERTしてみるやで。 バイト数の小さい順にINSERT 実行するSQLは下記 -- 共有プールをFLUSH ALTER SYSTEM FLUSH SHA…

java の CallableStatementインタフェース で ストアド・プロシージャ をコールして、V$ACTIVE_SESSION_HISTORY の PROGRAM列 や MODULE列を見てみる。(Oracle Database + java)

java の CallableStatementインタフェース で Oracle Database の ストアド・プロシージャ を コールして、V$ACTIVE_SESSION_HISTORY の PROGRAM列 や MODULE列 に何がセットされるかを見てみるやで彡(゚)(゚)下記サイトを参考にしながら書いてみたやで。 相変…

12cR2(12.2.0.1)のAWRレポートにはAvg Wait に ns(ナノ秒) や us(マイクロ秒) が出力される。(Oracle Database)

下記画像参照やで彡(゚)(゚) us は多数、Network の Avg Wait が ns(ナノ秒)

CLOBをSELECTして表示するjavaソース・サンプル(Oracle Database + java)

下記サイトを参考にしながら書いてみたやで。彡(゚)(゚) ワイ java は不慣れなんで、そこは勘弁やで彡(-)(-) SELECT文サンプル http://java-reference.com/java_db_select.htmlインタフェースClob https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Clob…

SET FEEDBACK ONLY と SET TIMING ON で SQL の結果を表示せずに性能計測(Oracle Database 12cR2新機能)

SQL*Plus の 12cR2の新機能 で、SET FEEDBACK ONLY をセットすると、 結果を表示せずに行数だけを表示できるんやで彡(゚)(゚) SQL*Plus ユーザーズ・ガイドおよびリファレンス リリース2 (12.2) E81324-02 SET FEED[BACK] http://docs.oracle.com/cd/E82638_01…

Oracle APEX Meetup 第2回「2時間でできるAPEXハンズオン」(6/1・木) に行ってみたのでご報告

ちと間が空いたのだけれども、6/1(木) に Oracle APEX Meetup 第2回 に 行ってみたので、レポるやで彡(゚)(゚)今回は「2時間でできるAPEXハンズオン」と銘打って、 簡単なアプリケーションをその場で作るというもの。下記のチュートリアルでBASICなアプリを作…

TRUNCATE TABLE …等 の DDL で「ORA-54: リソース・ビジー…(ORA-00054: resource busy...)」が発生する際の小技(Oracle Database)

以下のように TRUNCATE TABLE …文 や ALTER TABLE …文 を実行すると、 ORA-54エラー(リソース・ビジー) が 発生することがあります。 #十中八九トランザクションが走ってるケースやね彡(゚)(゚) SQL> TRUNCATE TABLE TBL_A; TRUNCATE TABLE TBL_A * ERROR at …

1. SELECT ... FOR UPDATE ⇒ 2. DDL(待機) ⇒ 3. UPDATE ⇒ 1. COMMIT ⇒ 2. DDL流れる ⇒ 3. ROLLBACK でどうなるか?(Oracle Database)

これもやってみましたやで彡(゚)(゚) まずはテストデータから。 --テストデータ SELECT C1 FROM TBL_A; C1 ---------- 1 2 Session1(SELECT ... FOR UPDATE文) SELECT 1 FROM TBL_A WHERE C1 = 1 FOR UPDATE; 1 ---------- 1 23:05:42 SQL> Session2(ALTER TAB…

(1). SELECT ... FOR UPDATE ⇒ (2). SELECT ... FOR UPDATE ⇒ (3). ALTER TABLE ... ⇒ (4). 単なる SELECT の順番でSQLを実行して、ロック(エンキュー)の獲得状況を V$LOCKから確認してみる。(Oracle Database)

タイトル長いけど、やってみるやで彡(゚)(゚) まずはデータ用意から。 CREATE TABLE TBL_A (C1 NUMBER); INSERT INTO TBL_A VALUES(1); INSERT INTO TBL_A VALUES(2); COMMIT; 以下の順番でSQLを流してみると…… Session1のSQLを実行(SELECT ... FOR UPDATE文) …

Oracle Database Technology Night #8(2017/4/21(金)データベース・アップグレードのススメ for Oracle Database 12c)の 資料が公開されていた。

先週金曜日 の Oracle Tech Night #9(チューニング話) に 参加できず悲しみに暮れている中、先月(4月) の Tech Night #8 の 資料が公開されていることに気付いた。彡(゚)(゚) 2017/4/21(金) データベース・アップグレードのススメ for Oracle Database 12c R…

12cで実装された MOVE ONLINE は索引もメンテナンスされてUNUSABLEにならず、DMLも待たされない。(Oracle Database)

昨日の続き。表題の通りで 12cで実装された MOVE ONLINEの方 がメリットがあります。UPDATE INDEXES句による索引メンテナンスは表ロック(TMエンキュー)の 影響で並走するDMLが待たされて、かつ実行中に索引がUNUSABLEになる 瞬間が有るとしばちょう先生より…

表(パーティション)セグメントのMOVE(MOVE PARTITION)時に UPDATE INDEXES句 を付与すると索引がUNUSABLEにならない。(Oracle Database)

※5/10追記:MOVE ONLINEの方がメリットがあります。こちらもご覧ください。 表題の通りで、表(パーティション)セグメントのMOVE(MOVE PARTITION)時に UPDATE INDEXES句 を付与すると索引がUNUSABLEにならないんやで彡(゚)(゚)元データはこちら。 ALTER SESSION…

Excelの「行列を入れ替える」っぽいことをSQLのUNPIVOT/PIVOTでやってみる。(Oracle Database)

まずはサンプルデータの作成彡(゚)(゚) DROP TABLE TBL_10 PURGE; CREATE TABLE TBL_10 ( COL1 VARCHAR2(10) , VALUE1 NUMBER , VALUE2 NUMBER , VALUE3 NUMBER ); INSERT INTO TBL_10 VALUES('XXXXX', 100, 200, 1000); INSERT INTO TBL_10 VALUES('YYYYY', 2…

Oracle TechNight #7 の資料 と Oracle Database Connect 2017 の資料が公開されました。

ワイ と yoheiaさん(https://twitter.com/yoheia ) が 2017/2/27 に 語った Oracle TechNight #7 の資料が公開されたやで彡(゚)(゚) Oracle Database Technology Night 〜集え!オラクルの力(チカラ)〜 http://www.oracle.com/technetwork/jp/ondemand/dat…

SQL の FETCH FIRST n ROWS構文で Top n や 同ソートキー値のレコードを抽出する。(Oracle Database 12c)

Oracle Database 12c で追加された FETCH FIRST n ROWS構文を使うと、 Top n や 同ソートキー値のレコードを抽出できるんやで彡(゚)(゚)サンプルは以下のデータ SELECT MIN(C1) AS C1_MIN , MAX(C1) AS C1_MAX , COUNT(C1) AS C1_CNT , COUNT(DISTINCT C1) AS …

NEXT_DAY関数、TRUNC関数を使って、向こう1000日分のプレミアムフライデーを求めてみる。(Oracle Database)

これでワイもプレミアムや!彡(゚)(゚) ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD'; SELECT TRUNC(NEXT_DAY(SYSDATE+LEVEL, 'friday'), 'MM') AS TUKI , MAX(TRUNC(NEXT_DAY(SYSDATE+LEVEL, 'friday'), 'DD')) AS PREMIUM FROM DUAL CONNECT BY LEVEL …

Oracle DB のファンクション索引を作成すると、拡張統計(式統計)のエントリが自動で作成される。(※Oracle Database 11gR2 で検証)

超マニアックなネタ彡(゚)(゚)Oracle Database のファンクション索引を作成して、作成したファンクション索引を使用する SQLが実行されると、拡張統計(式統計)のエントリが作成されて COL_USAGE$ に格納されます。まずは準備/確認から。この時点では拡張統計…

Oracle Database の DUMP関数 と CONVERT関数 で 文字列のバイトコードを調べる。

はてぶコメントで【「野球」に対応するEUC文字コードは「cceeb5e5」なのが判らん。】と頂いたので、書くやで彡(゚)(゚)文字コードのバイトコードは、Oracle Database だと DUMP関数 で確認できます。 AL32UTF8環境で「野球」のバイトコードを調べると↓(e9878ee…

Oracle Database に 新しい元号(年号)「野球」を追加してみる。(NLSカレンダ・ユーティリティlxegen) ※2019/4/1追記:新元号「令和」の設定方法を追記

元号「野球」を Oracle Database に設定 時代は野球や!彡(゚)(゚) Oracle Database の NLSカレンダ・ユーティリティで 新しい元号(年号)「野球」を追加してみるやで。マニュアルは下記の通り。 Oracle Databaseグローバリゼーション・サポート・ガイド 12cリ…

Oracle Database の NLS_CALENDAR に "Japanese Imperial" を指定して元号を出す。

表題の通りとしか言いようが無いやな彡(゚)(゚) Oracle Database の NLS_CALENDAR に ”Japanese Imperial"を指定すると、 日付データを元号に変換できるんやで。 $ export NLS_CALENDAR="Japanese Imperial"; $ sqlplus /nolog SQL*Plus: Release 12.1.0.2.0 P…