読者です 読者をやめる 読者になる 読者になる

kenken0807_DBメモ

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

MySQLのsql_modeにあるORACLEとは

これはJPOUG Advent Calendar 2016の16日目の記事です。 最初に言っておきますが、この記事はなんも役に立ちません! では始めます。 MySQLのsql_modeにはいろいろとsqlの動作の設定ができるんですが、 ここにORACLEというのが選択できます。 たぶんOracle d…

Redis Cluster構築メモ

同一ホスト内にRedis Cluster構築してみたのでメモ。 version:Redis 3.2.6 インストール 6台構成でクラスター作成する ノードを追加してみる ノードを撤去してみる ノードを移動してみる インストール 動作確認のためなのでインストールの細かい設定は気にし…

MySQLのInnoDBセカンダリインデックスのロック

MySQLのセカンダリインデックスのロックで嵌ったのでメモ。 isolationがREPEATABLE-READのときギャップロックやらネクストキーロックはセカンダリーインデックスの場合どうなるかよくわかってなかった。 例えば、こんなテーブル作ってcol2にインデックスを作…

MySQLにgdbアタッチするメモ

MySQLにgdbアタッチしてソースコードからいろいろ追う方法を教わったので自分メモ。 gdbアタッチ gdb -p mysqldのプロセス番号 この時点でmysqldが一時停止される。 ブレイクポイント (gdb) b function_name mysqld再開 (gdb) c ステップ実行 (gdb) n 変数確…

Oracle SEでの運用いろいろ@JPOUG in 15 minutes #1

JPOUG in 15 minutes #1 | Japan Oracle User Group (JPOUG)で自分がやってきたOracle SEでの運用方法について話をさせてもらいました。 Oracle Database Standard Editionでの運用いろいろ from kenken0807 www.slideshare.net 主な話としてはSEでASHっぽく…

MyDumperを使ってみた

MySQLのデータインポートツールMyDumperを試したのでメモ。 mysqldump・・・データのエクスポート・インポートをシングルスレッドで実行 mydumper・・・データのエクスポート・インポートをパラレルスレッドで実行 エクスポートしたファイルごとにパラレルで…

OEM再作成のエラー対処方法

RMANで別ホストに移行した時にOEMの作成でいろいろ嵌ったのでメモ。 emca -config dbcontrol db -repos recreate実行時 パターン1 設定: ORA-01031: ???????-?????????? ・ ・ ・ 2014/10/09 9:58:40 oracle.sysman.emcp.util.GeneralUtil initSQLEngineLoa…

Oracle shrinkする上での注意点

Oracleを使用していると、断片化がつらい。 頻繁に更新しているインデックスの断片化が特につらい。 そして表領域を圧迫していく。。 そういう時にEnterpriseEditionであればindex rebuild onlineなんてできるけど、 StandardEditionだとできないのでshrink…

RMANで同一サーバ上にデータベースを複製する

あるOracleDBを同一サーバ上に複製させるメモ。 環境は12cSE2。 現在、稼動中のインスタンス名をtestdb、複製先DBをcopydbとする。 準備 初期化パラメータをコピーして、リネーム cp -p $ORACLE_HOME/dbs/inittestdb.ora $ORACLE_HOME/dbs/initcopydb.ora パ…

基表にSELECT権限がないVIEWに対して実行計画を取得する

基表に対してSELECT権限がないVIEWに対してEXPLAIN PLAN FORを使用して実行計画を取得しようとすると SQL> explain plan for select * from test.test1_view; explain plan for select * from test.test1_view * 行1でエラーが発生しました。: ORA-01039: ビ…

redis3.2.0以降はprotect-modeが有効

最近勉強中のredis。 redis3.2.0以降はデフォルトprotect-modeが有効になっているようで、bindとrequirepassが設定されていない場合 他端末から接続しようとすると↓のメッセージが表示されて情報取得できない。 # redis-cli -h 192.168.1.1 -p 6379 info DEN…

12cから増えたオンライン操作をOracle SE2で試した

Oracle 12cの新機能のオンライン操作をOracle Standard Edition2でできるか確認したのでメモ。 ↓を基にいろいろ確認した。 docs.oracle.com バージョンはOracle 12.1.0.2 SE2 オンラインでのデータファイル移動 結果: × これはもちろんできません。 alter da…

Oracle database 12cマルチスレッドを試してみた

12cからの新機能のプロセスのマルチスレッド化を試してみました。 今回はバックグラウンドプロセスではなく専用サーバのスレッド化についてです。 環境はOracle database 12.1.0.2 SE2 マルチスレッドの有効化 初期化パラメータのTHREADED_EXECUTIONとUSE_DE…

Oracle Database Connect 2016(JPOUG) でDRCPについてLTしました

JPOUGで2回目のLTしました。 さすがに1回目より緊張しないかなーと思たけど、 500人以上の会場の規模にさすがにビビった。。。 イベント内容 Oracle Database Connect 2016 | Japan Oracle User Group (JPOUG) スライド Oracle常駐接続プーリング(DRCP)を…

ORACLEでテーブルごとのDML回数を取得する

テーブルごとの1時間あたりのDML(INSERT,UPDATE,DELETE)の平均を取得するために考えた方法。 確認手段としてDBA_TAB_MODIFICATIONSを使用する。 ALL_TAB_MODIFICATIONS 以下のように確認できる。 SELECT table_name,inserts,updates,deletes,to_char(time…

OracleSERAC+ASMのRMANバックアップから非ASMのシングル環境へリストア

OracleSERAC+ASMのRMANバックアップから非ASM(ファイルシステム)のシングル環境へリストアしたのでメモ。 環境 Oracle11.2.0.4 DB_NAME:orcl 前提 RMANバックアップは毎日0時にフルバックアップを取得(backupset plus archivelog) delete noprompt obsol…

ORACLE RMANで複製データベースの作成

RMANでアクティブなデータベースから同じSIDを持った複製データベースを作成したのでメモ。 複製先サーバ側の設定 複製先サーバでOracleインスタンスが起動できる状態にしておく 同じバージョンORACLEソフトウェアのインストールをしておく 環境変数も設定す…

データリカバリアドバイザを使用したRMANリカバリ方法(ユーザ表領域)

データリカバリアドバイザを使用してリカバリを行うと楽に復旧可能だったのでメモ。 Oracle RACでは対応してないみたい、シングルインスタンスのみ対応。 環境はOracle database 11.2.0.4 SEone。 以下条件で実施している。 1. 高速リカバリ領域の有効化(バ…

Centos7にORACLE database11.2.0.4 SEoneをさくっとサイレントインストールしてみる

GUIを使用せずに簡単にORACLE DATABASEを作成する。 SIDはorclで作成。 環境 今回はdockerを使用する。 dockerのデフォルトshmsizeが64MBで小さすぎてORACLEインスタンス起動できなかったので --shm-sizeを指定できるversion1.10を使用。 # docker --version…

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はオンライ…

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

2. 初期プールサーバ数ではまったこと 初期プールサーバ数デフォルトで検証 DBA_CPOOL_INFOビューで確認すると、 maxsizeがデフォルト40であり、これは変更しなくてはいけないものだというのはわかるが、 minsizeがデフォルト4で接続が足りないとincrsizeが…