kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

OracleとMySQLのalter table column動作の違い(データがある場合)

OracleとMySQLを使用しているとカラム変更の動作がいろいろと違ってくるので、 どっちがどっちかわからなくなることか多いのでまとめ。 OracleDatabaseSE(11.2.0.4)とMySQL5.6.29(INNODB)で調査。 1. 実行可能なものは(可) 2. 実行が即時で終了するもの…

Oracle-semi-onlineDDL作成した

結構前にJPOUGでLTしたOracleDatabaseセミオンラインDDLを作成しました。 ベンチマークツールのswingbenchで試したりしたのですが、たぶん動くはず。。。 OracleDatabase11gR2に対応。 仕組みは以下を参照 kenken0807.hatenablog.com github.com できること…

Oracle 別スキーマ間でFAST REFRESH ON COMMITモードのマテリアライズドビューを作成する

スキーマMVIEW_MOTOのテーブルTESTに対して スキーマMVIEW_SAKIにFAST REFRESH ON COMMITモードのマテリアライズドビューを作成する MVIEW_MOTOにテーブルとマテリアライズドビューログの作成 CREATE TABLE test (id NUMBER,id2 NUMBER,del_flg NUMBER,CONST…

Oracle オンラインREDOログとアーカイブログの解析ツール

前回記述したブログを元に解析ツールを作成した。 kenken0807.hatenablog.com Oracle-ArchiveLog-Analyzer github.com MySQLのmysqlbinlogのような感じでLogMinerを使用してトランザクションごとにコミット順にテキストフォーマットで表示する。 インストー…

Oracle LogMinerを使用してトランザクションごとコミット順に並び替えて表示する

アーカイブログやオンラインREDOログからLogMinerを使用して、実行されたSQLを調査する際に 不要な内部SQLがあったりして確認が手間だったりする。 不要な内部SQLを取得せずにトランザクションごとにまとめて、コミットした順番で表示させる。 前提 サプリメ…

sqlloaderで既存のシーケンスのNEXTVALを使用する

sqlloaderで既存のシーケンスのNEXTVALを使用には コントロールファイルの対象カラムにexpression句と対象のシーケンスを指定してあげる。 以下例ではtest_seqidカラムにSEQ_SEQTEST.NEXTVALの値を格納する。 コントロールファイルを作成 $ vim test.ctl LOA…

SHC(Shell Script Compiler)を使ってみた

ソースコード隠して簡単なスクリプトを書くことになり、 どうしようかと思ってググってたらSHCというシェルスクリプト用のコンパイラを見つけたので さっそく試してみた。 シェルスクリプトをCのコードに変換して、バイナリ化してくれるみたい。 環境 CentOS…

Oracle SQL経過時間の確認とnagios監視

1.現在のSQL経過時間を確認するSQL SELECT AUDSID, nvl(round((sysdate - SQL_EXEC_START) * 24 * 60 * 60,0),0) as ACTIVE_TIME ,sql_id ,username FROM v$session WHERE username in ('ORAUSER','ORAUSER2') AND --チェックするユーザを入れる status='ACT…

標準監査とトリガーを使用して監査したSQL文を1つのファイルに集約する

ざっくりこんなことがしたい 指定したユーザのみSQL監査(例:KANSA)、KANSAユーザにはselect権限のみ ↓ ログインした段階でログイン情報をテキストに出力 ↓ ログオフした段階でいままで実行したORAUSERユーザのオブジェクトへのクエリをテキストに出力 ↓ そ…

MySQLのSHOW構文をORACLE(SQL*Plus)でも実行したい

JPOUG Advent Calendar 2015の3日目のエントリーです。 昨日はShinnosuke Akitaさんの「Oracle DatabaseのASMディスクグループの空き容量を調べる」でした。 普段ORACLEとMySQLを使用してるとよくSQL*PlusでもSHOW構文を使ってしまって、こうなっちゃうので…

ORACLE CMP$テーブルとは・・

あるスキーマのLOBカラムを持つテーブルを洗い出していたときに、 たまたまCMP3$104964というテーブルが引っかかった。 このようなテーブル作った覚えはなかったが、再度検索するとすでなくなっていた。。 ORACLE内部でcreate tableしてすぐにdrop tableして…

JPOUG> SET EVENTS 20151017でLTしました

だいぶ遅くなってしまったが、JPOUG> SET EVENTS 20151017でLTをさせていただきました。 あまり登壇する機会はないので非常に緊張しました。 Oracle Database Standard EditionでセミオンラインDDL from kenken0807 www.slideshare.net 内容としては、 oracl…

オンラインでサプリメンタルロギングを有効にしたメモ

とある理由でOracleサプリメンタルロギングを有効にすることがあり、 本番サーバのトラフィックがある中で実行してみたのでメモ。 実行するSQLは以下、 alter database add supplemental log data (primary key,unique) columns; すでに最小サプリメンタルロ…

Oracle Standard EditionでActive Session History (ASH)っぽくグラフ化する

kenken0807.hatenablog.com 前回の記事でASHっぽく分析するようにMySQLにv$sessionを投入していたが、 今回はそれをMuninにてグラフ化することでOracle Enterprise Managerの平均アクティブ・セッションのグラフっぽくする。 ↓Oracle Enterprise Managerの平…

Oracle Standard EditionでActive Session History (ASH)っぽく監視、分析する

Oracle Database Standard EditionではASHはもちろんできない。 なので、それっぽい監視の仕組みを導入している。 仕組みとしては、 1、30秒毎にV$SESSIONの情報を取得しMySQLに突っ込む 2、MySQLのデータをMuninでグラフ化 1、30秒毎にV$SESSIONの情…

オンライン・アプリケーション・アップグレードヒント句とは

コメント を見ているとオンライン・アプリケーション・アップグレードのヒントってのでいくつかあったけど なにかよくわからなかったから試してみた。 1.CHANGE_DUPKEY_ERROR_INDEXヒント INSERT操作およびUPDATE操作時に指定した索引に対して一意キー違反が…

Oracle どんなに巨大なテーブルでもカラム定義変更を即時で完了させる方法

巨大なテーブルでカラムの定義変更中はDML処理が enq: TM - contentionやlibrary cache lockなどで待機してしまう。 待機させないためにカラム定義変更を即時で完了させることのできる方法をまとめたメモ。 とあるテーブル SQL>desc ab Name Null? Type ----…

インデックスのshrinkとrebuildの違いを検証

ANALYZE INDEX VALIDATE STRUCTUREでインデックス情報を取得し違いをさくっと検証した。 注意:ANALYZE INDEX VALIDATE STRUCTURE 実行中のDML処理は、ANALYZEによるロックが開放されるまで待機してしまう。 現在のインデックスの状態 SQL> analyze index TE…

バインド変数が使用できないバッチ処理の共有プール肥大化対処方法

とあるバッチ処理がバインド変数を使用できずに共有プールが肥大化していた。 そのためstatspackを1時間毎に取得していたが、1時間では取得処理が終わらない状況になってしまった。 select pool, name, bytes/1024/1024 MB from v$sgastat where pool = 's…

常駐接続プーリング(DRCP)で共有プールが肥大化する

前回導入したDRCPを使用しているOracleのshared_poolが異常な勢いで増えてしまったため、 ORA-04031: 共有メモリーの○○バイトを割当てできません が発生してしまった。 SQL文でバインド変数を使用してないところも多いので共有SQL領域が増えているのかなと思…

Oracle デフォルト設定でテーブルがselectされてるかさくっと調査する

とあるテーブルがselectされているか教えてほしいと言われたので、 標準監査の設定をしていなかったが明示的にaudit_trailをNONEにしていなければ 11gR2からaudit_trailがデフォルトではDBとなっている。 確認 >show parameter audit_trail NAME TYPE VALUE …

Oracle NULLも容量として加算されるテーブル構成

NULL許容のカラムの後にNOT NULL制約のついたカラムがあるとNULL値も容量を使ってしまう。 テーブル作成 create table nullfirst ( id number, [PRIMARY KEY] id2 number, [NULL許容] id3 number, [NULL許容] id4 number, [NULL許容] idnotnull number not n…

シーケンスを再作成せずに指定した番号に進める方法

シーケンスを作成した際に、初期値はstart withで指定してあげた値から始めることができる。 create sequence TEST_SEQ start with 10000; select SEQUENCE_NAME ,MIN_VALUE,CACHE_SIZE,LAST_NUMBER from user_sequences; SEQUENCE_NAME MIN_VALUE CACHE_SIZ…

Oracle 読み取り専用ユーザー(READ ONLY)の作成

とあるユーザに対して、読み取り専用でユーザーを作成したのでメモ。 書き込み兼読み取りユーザー・・TEST 読み取りユーザー・・TEST_READONLY TESTユーザーの読み取り専用ユーザーTEST_READONLYを作成する。 すでにTESTユーザーには複数のテーブルが存在し…

Oracleデータベース作成時の自動メンテナンスタスクとは

Oracle11gR2でDBCAを使用してデータベースを作成していると、↓のような自動メンテナンスタスクのチェックボックスを選択する項目がある。 この自動メンテナンスタスクはもちろんONにしたほうが良いが(defalt ON)何をやっているのか調べてみた。 自動メンテナ…

Oracle Standard Editionで可能なフィジカル・スタンバイ・データベース検証(基本スタンバイ)

ディザスターリカバリ用に基本スタンバイの検証を行う。 プライマリデータベース(P)とスタンバイデータベース(S)の冗長構成を作成することができ、プライマリデータベースにて作成されたアーカイブログを逐次スタンバイデータベースへ転送し適用するとい…

Oracleリスナーの追加方法メモ

Oracle Listenerを追加する際にいつもわからなくなるのでメモ。 環境はOracle 11.2.0.4。 1.動的リスナー追加 2.動的リスナーを大量に追加 3.静的リスナー追加 1.動的リスナー追加 LISTENER2とLISTENER3を追加する listener.ora編集 vim listener.ora LISTEN…

Oracle Textを使用したチェックボックスでの検索

Oracle(RDB)でのチェックボックス検索はけっこう鬼門だったりする。 チェックボックスで持っている項目をカラムとして列持ちしてあげると 項目がなくなったり追加の際にカラム自体の追加、削除をすることになり、表ロックがかかりメンテナンスが難しい。 ま…

Oracle Standard Editionでも使えたフラッシュバックデータアーカイブ

まず、フラッシュバックデータアーカイブとは その存続期間中、表に対するすべてのトランザクションによる変更を追跡および格納できます。 レコード・ステージ・ポリシーと監査レポートのコンプライアンスに役立ちます。 Oracle® Databaseアドバンスト・アプ…

Oracle常駐接続プーリング(DRCP)を導入して苦労したメモ(3)

4.DRCPの監視と調整方法 まず、DRCPおいて監視すべき項目を洗い出す。 ・ listenerへの確立回数と拒否回数 ・ 現在のプールサーバ数と使用されているプールサーバ数 ・ DRCPへのリクエスト回数とウェイト回数 これらの項目をグラフ化すれば、DRCPはオンライ…