ねら~ITエンジニア雑記

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

Database

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…

SQLチューニングと対戦格闘ゲームの類似性について語る。- JPOUG Advent Calendar 2016 Day 15 -

JPOUG Advent Calendar 2016 の Day 15 の記事となります。 昨日は Yousuke Yadaさん の 以下の記事でした。 R12.2新機能『Offline Encryption Conversion』 ※バックポート実行 http://blog.livedoor.jp/y_db_y/archives/49072687.html ワイはSQLチューニン…

PL/SQLのコレクション と 12c新機能のWITH句ファンクション で IN句1000個の壁(ORA-1795エラー)を回避/克服してみる。

Oracle Database では IN句に1000個以上の値を指定すると、ORA-1795エラーが発生してしまいます。 SQL> SELECT COUNT(*) FROM TBL_X T1 2 WHERE C1 IN ( 3 1 4 , 2 5 , 3 : (中略) : 4001 ,3999 4002 ,4000 4003 ); ,1001 * ERROR at line 1003: ORA-01795: …

Oracle Database でリテラルの文字列配列をTABLEファンクションでレコードとして返す。

文字列配列のTYPE定義⇒TABLEファンクションでイケるやで彡(゚)(゚) CREATE OR REPLACE TYPE tp_v_array IS TABLE OF VARCHAR2(4000); / SELECT * FROM TABLE(tp_v_array('a', 'b', 'c', 'xxx', 'ZZZ')); 結果は以下の通り。 SQL> CREATE OR REPLACE TYPE tp_v_…

Oracle DBA & Developer Day 2016(DDD 2016) の セッション資料 が公開されました。

タイトルの通り、去る2016年10月27日に開催された Oracle DBA & Developer Day 2016(DDD 2016) の資料が公開されたやで。 彡(^)(^) Oracle DBA & Developer Day 2016 の セッション資料 http://www.oracle.com/technetwork/jp/ondemand/ddd-2016-3373953-ja.…

Oracle Database の PIVOT文で取得レコードの縦横を変換する。

PIVOT文で取得レコードの縦持ち/横持ちを変換するやで彡(゚)(゚) このSQLで取得できる…… COLUMN TARGET_NAME FORMAT A8; COLUMN TARGET_TYPE FORMAT A15; SELECT TARGET_NAME , TARGET_TYPE , AVAILABILITY_STATUS AS AVAILABILITY_STATUS , ROUND(SUM(END_TI…

iostat の await, svctm の 見かた、考え方 ※10/30スライド修正

iostat の await, svctm の 見かた、考え方を書いたやで彡(゚)(゚) ※10/30スライド修正 Slideshareの元リンクは下記やで彡(゚)(゚) iostat の await svctm の 見かた、考え方 http://www.slideshare.net/shibataayumu/iostat-await-svctm 下記のブログをめっちゃ…

Oracle Database 12c 新機能、適応計画(Adaptive Plan)のサブプランが発動した時/しなかった時の実行計画を DBMS_XPLAN.DISPLAY_CURSOR の FORMAT => 'ADAPTIVE' で比較してみる。

こっちがサブプラン発動時(HASH JOINに変更された時)の実行計画 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('aqkqdv23rmnj7', NULL, 'ADAPTIVE ALLSTATS LAST')); PLAN_TABLE_OUTPUT ----------------------------------------------------------------…

Oracle Database 12c で OPTIMIZER_DYNAMIC_SAMPLING=11 をセットすると、Dynamic Sampling の 結果 が RESULT CACHE に格納されて、異なるSQL で 共有される。

表題の通り、Dynamic Sampling を 11 にセットすると、Dynamic Sampling の 結果 が Result Cache に格納されて、異なるSQL(sql_id が 異なる SQL) で Dynamic Dampling の 結果が共有されるんやで。彡(゚)(゚) 従来の動作 SQLの実行計画作成時(Hard Parse時)…

Oracle Database の SELECT文・SAMPLE句が、BLOCK句有り/無し で 読込量 が 全く異なる。

表題の通り、Oracle Database の SELECT文 の SAMPLE句が、 BLOCK句有り/無し で 読込量 が 全く違うんやで。知らんかった。。。彡(゚)(゚) SAMPLE句無し の 場合 SET AUTOTRACE TRACEONLY; SELECT /*+ FULL(A) CACHE(A) */ COUNT(*) FROM TEST_TABLE_A A; :…

DBMS_LOB.LoadClobFromFileプロシージャを使ってテキストファイルを Oracle Database の CLOB型列 に ロードする。

表題の通り、DBMS_LOB.LOADCLOBFROMFILEプロシージャ で テキストファイル を CLOB型列 に ロードするやで彡(゚)(゚)まずCLOB型の列を持つテーブルとディレクトリ・オブジェクトを作ります。 CONNECT AYSHIBAT/xxxxxxxx CREATE TABLE TEST_CLOB ( C1 NUMBER , …

プラットフォーム毎(Linux, Solaris, HP-UX, AIX等)のエンディアンの違いを V$TRANSPORTABLE_PLATFORMビュー で確認する。

Oracle Database の V$TRANSPORTABLE_PLATFORMビュー を参照すると、 プラットフォーム毎(Linux, Solaris, HP-UX, AIX等)のエンディアンの 違いを確認できるんやで彡(゚)(゚) SET LINESIZE 300; SET PAGESIZE 100; COLUMN PLATFORM_NAME FORMAT A50; SELECT * …

Oracle Database の 共有プール(Shared Pool) の 存続期間による分割(サブヒープ、従属ヒープ)数 は、11gR2⇔12cR1 及び 手動SGA⇔自動SGA で 異なる。 ※2016/6/27追記

表題の通り、共有プール(Shared Pool) の 存続期間による分割(サブヒープ、従属ヒープ)数 は、 11gR2⇔12cR1 及び 手動SGA⇔自動SGA で 異なるんやで。彡(゚)(゚)存続期間による分割(サブヒープ、従属ヒープ)数 って何ぞや?てな方は、 共有プールの構造を解説し…

SQLの構文が間違っているとV$SYSSTAT統計の「parse count (failures)」がカウントされる。

下記のシバタツさん資料より。シバタツ流!チューニングの極意 「パフォーマンス・チューニングの勘どころ」 http://www.oracle.com/technetwork/jp/ondemand/db-new/b-5-shibatatsu-1484769-ja.pdf

グローバル統計/パーティション統計の収集 で GRANULARITY => 'GLOBAL AND PARTITION' と 'APPROX_GLOBAL AND PARTITION' の負荷の違いを計測してみる。

やってみる。まずはデータ作成。 -- データ作成 DROP TABLE TBL_A; CREATE TABLE TBL_A ( C1 NUMBER , C2 DATE , C3 NUMBER , C4 VARCHAR2(100) ) PARTITION BY RANGE (C2) INTERVAL(NUMTODSINTERVAL(1, 'DAY')) SUBPARTITION BY HASH (C1) SUBPARTITIONS 16…

DBMS_STATS.SEED_COL_USAGEプロシージャ と DBMS_STATS.CREATE_EXTENDED_STATSファンクション で 拡張統計のエントリを(半)自動作成してみる。

表題の検証をやってみるやで彡(゚)(゚) まずデータ作成します。実行スクリプトは下記の通りです。データ作成スクリプト CONNECT AYSHIBAT/xxxxxxxx DROP TABLE TBL_A; CREATE TABLE TBL_A AS SELECT LEVEL AS C1 , TO_DATE('2016/04/27', 'YYYY/MM/DD')+(LEVEL…

NOLOGGING で ダイレクト・ロードしても 索引有無 や 索引付与の順序 で REDO生成量が異なると云う話

タイトルでおおよそ語ってしまったんですが、NOLOGGING属性 の 表 に ダイレクト・ロード で データ を ローディングしても、 索引有無 や 索引付与の順序 で REDO生成量は異なるんやで彡(゚)(゚)下記のサンプル表&INSERT〜SELECT〜文で、Appendヒントや索引…

JPOUG Tech Talk Night #6 イベントレポート(by 21cafe様)

先日の JPOUG Tech Talk Night #6 が記事になったやで!彡(゚)(゚) Oracle運用のノウハウが満載!JPOUG Tech Talk Night #6イベントレポート https://geechs-magazine.com/tag/event/20160331 ワイ(柴田AYU) の プレゼンや、中嶋さん、太田さん、三原さん の …

SQL再帰WITH句の手習いズンドコキヨシ(※元ネタ有り)

懲りずにズンドコキヨシ。 ワイ将、明智重蔵氏 の 下記エントリに衝撃を受ける。彡(゚)(゚) Oracleの再帰With句でズンドコキヨシ http://qiita.com/AketiJyuuzou/items/c2bc63872125e7277e96 と云う訳(?)で、再帰WITH句の手習いがてら、リファクタリングっぽく…

WITH句 の FUNCTION で ズンドコキヨシ(※ワンライナー可)

ズンドコキヨシまとめ http://qiita.com/shunsugai@github/items/971a15461de29563bf90 こないだは30個位だったズンドコキヨシのタグが、100個超えとる……負けてはいられん!今度は Oracle Database 12cR1 新機能 の WITH句 の FUNCTION で ズンドコしてみた…