[Oracle]【DBエンジニア必見】安定運用とトラブルシューティングのための重要技術総まとめ

Oracle

Oracleデータベースの運用・管理は多岐にわたりますが、本記事では、システムの安定運用に不可欠なバックアップ/リカバリ、突発的な性能問題に対処するためのトラブルシューティング、そして日々の管理業務で役立つ基本的な設定確認方法について、重要なポイントをカテゴリー別に詳しく解説します。

複雑に思われがちなOracleの技術も、基本をしっかり押さえれば難しいことはありません。
ぜひ、日々の業務にお役立てください。

確実なデータ保護と復旧:RMAN活用とリカバリ戦略

Oracleデータベースにとって、データ保護と災害からの復旧は最も重要な要素です。Recovery Manager (RMAN) を中心としたバックアップとリカバリの戦略を解説します。

RMANによるオンラインバックアップの必須要件

RMAN(Recovery Manager)は、データブロックや制御ファイルなどを理解し、一貫性のあるバックアップと復旧を支援するOracle専用のツールです。

オンライン(データベースを起動したまま)でバックアップを取得するためには、データベースでアーカイブログモードが有効になっていることが必須です。

  • アーカイブログとは:データベースで発生したすべての変更の記録です。アーカイブログモードを有効にすることで、REDOログが上書きされる前に別のファイルとして保存され、これによりバックアップ取得後の更新履歴を再現(リカバリ)できます。
  • モードの確認と有効化:現在のモードはSQL*Plusでselect log_mode from v$database;またはarchive log listコマンドで確認できます。無効状態(NOARCHIVELOG/No Archive Mode)から有効状態(ARCHIVELOG/Archive Mode)に変更するには、一度データベースをMOUNTモードにしてから、alter database archivelog;を実行し、その後OPENする必要があります。

シンプルなバックアップとリカバリの種類

シンプルなフルバックアップを取得する際は、backup database... plus archivelogコマンドを使用し、万一に備えて制御ファイルやSPFILEも明示的に含めて取得することを推奨します。

リカバリには、「リストア」と「リカバリ」という似た用語がありますが、Oracleではこれらを使い分けています。

用語意味実行内容適用シーン
リストア (Restore)バックアップから必要なファイルを取り戻す作業壊れたファイルを過去の状態に戻す。リストアだけではファイルはバックアップ取得時点の状態にしか戻らない。
リカバリ (Recovery)リストアしたファイルを最新の状態に追いつかせる作業アーカイブログなどを適用して変更履歴を再生する。障害直前や指定した時点の状態に戻す。

さらに、リカバリには以下の2種類があります。

  • 完全リカバリ:障害が発生する直前の最新状態まで戻すリカバリで、データ損失は原則ゼロです。ハード障害や物理的な破損の復旧時によく使われます。
  • 不完全リカバリ指定した過去の時点まで巻き戻すリカバリで、誤操作や論理的障害の復旧に利用されます。不完全リカバリの実行後には、データベースをオープンする際に**RESETLOGS**を指定してREDOログファイルを初期化(リセット)する必要があります。

RMANを利用したデータベース複製

RMANのバックアップを利用することで、データベースを比較的簡単に複製することができます。
これは災対サイト(Data Guard構成のスタンバイ・データベース)の構築や、検証環境の準備に利用されます。

複製は、初期化パラメータファイル(pfile)の作成や環境変数の設定を行った後、RMANコマンドでduplicate database <複製元DB名> to <複製先DB名> backup location '<バックアップパス>';を実行することで行います。

性能問題の診断と高度なトラブルシューティング

データベース管理者にとって、処理遅延への対応は重要な職務です。
SQLチューニングの前に、まず問題の真の原因を特定するための切り分けが求められます。

性能問題の切り分け(ボトルネックの特定)

性能問題の要因は多岐にわたり、複数の要因が絡むことも珍しくありません。
要因は大きくハードウェア/リソース起因Oracleデータベース起因に分類されます。

要因カテゴリ具体的な要因(例)採取すべき情報(例)確認すべきポイント(例)
リソース起因CPU/メモリ不足、ディスクI/O遅延、ネットワーク遅延vmstattopiostatnetstatvmstatr列(CPU割り当て待ち)やsi/so列(スワップ)の増加、iostatのディスクビジー率(%util列)が100%に近い状態。
DB起因データ量の増加、リソース競合(ロック/ラッチ)、SQLの非効率性AWRレポート、ASH、VSESSION/VPROCESS統計情報から推測された行数と実際の行数との大きな乖離、特定の待機イベントの長時間発生。

SQL実行計画の分析とテスト支援

OracleはSQL実行時に最も効率的な順序を計算し、それを実行計画として管理しています。
性能遅延時にはこの実行計画を確認することで、ボトルネックを特定できます。

実行計画の確認方法には以下の4つがあります。

  • 共有プールから確認:メモリ(共有プール)にキャッシュされている情報を、dbms_xplan.display_cursorプロシージャを使って確認します。
  • AWR SQLレポート:共有プールから消えた過去の情報(デフォルトで過去8日間)を、awrsqrpt.sqlを実行して取得します。
  • SQLトレース:SQL実行時の詳細な内容をトレースファイルとして取得し、tkprofツールで整形して実行計画を確認します。
  • EXPLAIN PLAN:実際にSQLを実行せずに実行計画を出力しますが、確認精度は落ちる可能性があります。

さらに、性能が遅い特定のSQLを別環境で再現テストするために、SQLテスト・ケース・ビルダーが利用できます。
これはDBMS_SQLDIAG.EXPORT_SQL_TESTCASEおよびIMPORT_SQL_TESTCASEというパッケージツールで、対象のSQL文、DDL、データ、統計情報などを自動で取得し、再現環境を簡単に構築します。

セッションとOSプロセスの紐づけ

特定のOracleセッション(SID)がOS上でどのような状態にあるか(例:CPU使用率)を調査する場合、SIDとOS上のプロセスID(OSPIDまたはSPID)を紐づける必要があります。

この紐づけは、v$sessionv$processを結合するSQLを実行することで可能です。

  • v$processSPID列がOS上のプロセスIDに相当します。
  • 障害発生時など、データベース全体がハングしている状況を分析するために、SYSTEM STATEダンプ(alter session set events 'immediate trace name systemstate level 266';)を取得することでも、SIDとOSPIDの情報を得ることができます。

日常業務で役立つOracle DBの基本管理設定

安定したデータベース運用を支えるために、接続、バージョン、文字コード、タイムゾーンといった基本設定の確認と管理は欠かせません。

データベース接続と接続ユーティリティ

Oracle Databaseへの接続方法は、主にBEQ接続(ローカル接続)とNET接続(リスナー経由)の2種類があります。

  • PDBへのローカル接続:マルチテナント環境でPDBに直接接続するには、環境変数としてORACLE_PDB_SIDを追加で指定します。
  • NET接続の確認:アプリケーションからの接続で一般的に使われるNET接続では、事前にリスナーが起動していることと、データベースのサービスがリスナーに登録されていることを確認する必要があります。
  • トラブルシューティング:接続エラーが出た場合は、tnspingコマンドで接続識別子に対するリスナーの応答を確認することが、問題の切り分けに有効です。また、oerrコマンドはORAエラーやTNSエラーの内容を教えてくれる便利なツールです。

バージョン情報、キャラクタセット、タイムゾーンの管理

データベースバージョンの確認:Oracle Database 19cでは「19.10.0.0.0」のような5桁でバージョンが表記され、特にRU(リリース・アップデート)などのパッチ情報を含む前半の3桁が重要です。v$versionopatch lspatchesコマンド、またはアラートログから確認できます。マルチテナント環境では、datapatch -prereqでPDBのバージョンを確認することもできます。

キャラクタセット(文字コード):日本語などのマルチバイト文字を扱う場合、DB作成時のキャラクタセット指定が重要です。CDB/PDBのキャラクタセットはv$nls_parametersから確認可能。SQL*Plusで文字化けが発生した場合、クライアント側のNLS_LANG環境変数をDB側と同じに設定することで回避できます。

タイムゾーン設定:Oracle DBには、データベース自体のタイムゾーン(DBTIMEZONE)と、メンテナンスウィンドウのタイムゾーン(DEFAULT_TIMEZONE)の2種類があり、CDBとPDBで個別に設定・管理が可能です。

その他の管理タスク

ASMディスク使用率の確認:ASM(Automatic Storage Management)のディスク使用率を定期的に確認し、容量不足を早期に検知することが安定運用のために重要です。SQL*Plusから冗長性を考慮した使用率を計算するクエリで確認できます。

DDL文の確認:作成済みの表からDDL文(データ定義言語)を確認したい場合、dbms_metadata.get_ddlプロシージャを使用することでCREATE文として出力させることができ、他のデータベース環境でそのまま実行することも可能です。

サンプルユーザの作成:SQLの動作確認用として、Oracle Databaseに用意されているスクリプト(utlsampl.sql)を実行することで、サンプルユーザ(scott、パスワード:tiger)とサンプル表(EMP、DEPTなど)を作成できます。

データベースリンク:データベースリンク機能を利用することで、リモートDBの表をローカルのように参照・更新できますが、バージョン互換性やリンクの乱立による管理の複雑化には注意が必要です。

運用テストのためのTips:運用テストのために意図的にデータベースに負荷を掛けることで、パフォーマンステストなどに活用することができます。

まとめ

本記事で解説したOracleの技術情報が、みなさまの業務の助けとなれば幸いです。
Oracleの様々な機能について、ぜひ実機で動かして試してみてください。

コメント

タイトルとURLをコピーしました