Categories: 勉強会

#jpoug 15分でOracleの情報を共有する JPOUG in 15 minutes #1 に参加してきたまとめ!

JPOUG in 15 minutes #1に参加してきたのでそのまとめになります。

35歳でOracle DBAになった私がデータベースを壊して学んだこと

秋田進之助様

  • 資格だけの人より、業務経験のほうが優先される世の中、業務経験がない場合は自宅で触っているかどうかが問われた
    • DBの仕事を初めて見ると、Linuxのコマンドやあやふやな知識である事に気づいた
  • ある日障害が発生した
    • 2つのインスタンスがある環境で、原因は制御ファイルに記述が誤ったために、インスタンスAのリカバリをしようとしたら、インスタンスBにアーカイブを当ててしまった。
  • 自宅環境を手持ちのPCを使って仮想環境にて構築してみた
  • 検証環境を作った後、DBを壊してみた
    • データファイルの移動
      • RMANを起動してみるとデータファイルが開けないと警告を言われてしまった
    • DBを落とそうとするとDBが落ちなかった
    • また、無理やり落として起動しようとするとMOUNT状態で停止してしまった
  • まとめ
    • 資格の知識だと暗記になりやすいので、業務に近い形で検証を行うとある程度経験を積める

その監査ログきちんと扱えてますか?統合監査で始める監査ログの活用秘伝技大公開!

小生の発表。外部表のDATAPUMPアクセスドライバを使うと監査表とかリストアしやすいんじゃない?と言った感じのお話。

詳細と補足は#jpoug 監査ログのバックアップとその活用法について発表してきた@JPOUG in 15 minutes #1

DBAだってもっと効率化したい!〜最近の自動化事情とOracle Database〜

吉田成利様

  • DB何十個も構成管理、設定確認はつらい
  • 製品のインストール、DBの作成、設定、確認、単体試験などをしたい
  • 最近の構成管理ツール
    • Chef:Recipeとよばれるファイルに設定を記載する
    • Puppet:Rubyで記載する
    • Ansible:YAMLで設定を記載する
    • Itamae:Chefのシンプル版
  • 最近のテスト支援ツール
    • Serverspec:サーバの設定や状態をテストするのが得意
    • Testinfra:ServerspecのPython版
    • Infrataster:サーバの振る舞いを外部からテストするのが得意。(HTTPでアクセスしてステータスコード200でかえってくるかなど)
  • 製品のインストール、DBの作成を作る場合どれ使えばいいか→Ansibleがオススメ
    • なぜなら、エージェントレス、学習コストが低いため
  • DBの設定には作りこみが必要
    • →モジュールの拡張が比較的容易なAnsibleがオススメ
  • OSコマンドで確認できるものはServerspec、SQLの部分はInfratasterの邦画相性が良いかも
    • Infrataster-plugin-oracledbというプラグインを作ってみた
      • 初期化パラメータの設定確認など自動でできます
    • gemコマンド、bundlerでインストールできます

デモ

テスト文一例

実行結果

失敗箇所の詳細

Oracle Database Standard Editionでの運用いろいろ

SEでASHっぽく解析する仕組み

  • セッション詰まったっぽいのが何が原因か?と聞かれ調査した
    • SEで調べられるのはstatspackのみ
  • 15秒おきにv$sessionの内容からActiveなUSERを取得してMySQLに飛ばしてMUNINでグラフ化する仕組みを作ってみた

調査例

  • セッションが詰まっている状態のセッション状況を調べてみる
  • row lock connection(行ロック)が多発していた
  • SECONDS_IN_WAITをみるとセッションが待機していた時間がわかる
  • SQL_IDから実行しているSQL文はわかる
  • セッションが待機している行はROW_WAIT_*を見ればわかる
    • dba_objectsとdbms_rowidパッケージを使って対象のテーブルと行を取得できる
  • どのセッションが原因で待機しているかはBLOCKING_SESSIONをみればSIDがわかる
    • BLOCKING_SESSIONがある場合はセッション情報も見るようにした
  • ただしSQLはなかなか難しい
    • LogMinerを使えば見れる模様
    • XIDを元にアーカイブログから解析するOracle-ArchiveLog-Analyzerを作ってみました

他の機能

  • 各テーブルのDML回数を保存
    • DBMS_STATS.FLUSH_DATABASE_MONITORING_INFOを実行して、各DMLの内容をMySQLに保存している
  • 各テーブルとインデックスサイズのグラフ化
    • 1時間おきに1G以上のテーブルとインデックスのセグメントを取得して、グラフ化している

Oracle運用Tips大放出!便利なSWITCHコマンドと落とし穴 〜表領域のASMディスクグループ変更編〜

  • RAC環境にHW増強し、ASMのディスクを足して+DGDATAというASMディスクの領域を増やしてみた。HWの残りの領域を+DGDATA2として作った。
    • しかしDGDATAがいっぱいになったのでDGDATA2に引っ越すことになった
  • SWITCHコマンドを使えばデータファイルをデータファイルのコピーへ切り替えることができる

作業イメージ

  • DGDATA2にバックアップを取った後、DGDATAの表領域をオフラインにし、DGDATA2のバックアップへスイッチ後リカバリし、ONLINEにする
  • メリットとしては業務停止時間が少なく済み、データの個別移行が少ない
  • 正常性の確認としてVALIDATE DATAFILEコマンドを使用したらブロック破損が発生した
    • v$database_block_corruptionをみたらNOLOGGINGと記載されていた
      • NOLOGGINGとは、特定のDML/DDL操作のREDOログを出力させない設定
    • 今回はバックアップ開始後のテーブルでNOLOGGINGのテーブルがあり、そこの部分がブロック破損してしまった

対処法

  • FILE#列、BLOCK#列からオブジェクトを特定する。
    • オブジェクト特定後、オブジェクトの再作成をする
    • その後、Analyzeコマンドを実施してSELECTして確認する
  • しかし対処したにも関わらずVALIDATE DATAFILEをしても破損が残っていた
    • このブロックは再作成して他のブロックに言ったので、もう使われていないので何も気にしなくていいです

事前対策

  • RMANバックアップ前から業務停止をして更新を発声させないようにする
  • RMANバックアップ前にFORCE_LOGGINGを設定する
    • ただし、REDO生成増加によるI/O増加でパフォーマンス劣化します

そうだ 検証、しよう。

三原健一様

  • 検証に役立つ情報を紹介します

準備フェーズデータ作成

別スキーマにテーブル作成

  • alter session set current_schema~
    • デフォルトはログインユーザがスキーマになるが、その際のアプリケーションコンテキストのセッション情報を変えられる
    • アプリケーションコンテキストを変えると別スキーマに指定をしなくてもログインユーザとは別のスキーマにテーブルを作成できたりする

10万件を一括インサート

  • FORALL i IN 1..10000 insert into TEST values w_ins(i);
  • といった書き方で10万件インサートできます

実行フェーズ トレース

  • トレースファイルの出力場所はv$diag_infoを見るとわかります
  • alter session set tracefile_identifier = ‘SQLTRC’;
    • 出力されるトレースファイルの名前にsuffixを追加できます
  • トレースの有効化
    • alter system set events ‘10046 trace name context forever, level 12’;
  • SQLトレース:10046
    • 12を設定するとバインド変数値、待機イベント情報をとる最高の値になる
  • CBOトレース(10053)
    • 2は計算結果のみ
  • トレースの番号についてはUTL_LMS.GET_MESSAGEで取得できます

ブロック・ダンプ取得

  • DBMS_ROWIDを使ってファイル番号とブロック番号を取得する
  • ブロック・ダンプを取得するときはALTER SYSTEM DUMP DATAFILE データファイル#. BLOCK ブロック#で取得する

評価フェーズ

  • tkprofコマンドを用いると、オプションに用いた情報でソートされたり、整数でソートされたSQLを出したりなどができる
    • 内部動作の検証で見るときはsysオプションをよく使う

tips

  • AWRレポートをまとめて出力するTips
    • report_type、num_days、begin_snap、end_sanp、report_nameを変数として指定してawrrprt.sqlを実行するとまとめて実行できるのでそれをエクセルなどで作って出力する
  • データ・ディクショナリ定義の確認
    • DBA_VIEWSを調べるとどんな構造しているのかがわかります

お役立ちサイト

@mogmetの所感

15分という長さは程よい長さでゆったり聞ける長さだなと感じました。

LTなどの5分だと急いで発表するためあまり深掘りして話せず、問題の背景までは話せないことが多いのですが、時間があることによってより深掘りして聞けるので15分も中々ありですね!

個人的に気になったのは、Ansibleで自動化などはちょうど今やってる仕事で使っていたので、やっている仲間が増えて少し嬉しく感じました。また、テストの自動化についてもInfratasterは知らなかったので是非使ってみようと思いました。

mogmet

View Comments

  • Your article made me suddenly realize that I am writing a thesis on gate.io. After reading your article, I have a different way of thinking, thank you. However, I still have some doubts, can you help me? Thanks.

  • I am currently writing a paper that is very related to your content. I read your article and I have some questions. I would like to ask you. Can you answer me? I'll keep an eye out for your reply. 20bet