2025/08/15 -------------------------------------------------------------------------------- 企業内の社内情報システムのOracle Databaseのデータベース管理者として 日常運用中に備えるべきトラブルには、どのような物がありますか? -------------------------------------------------------------------------------- SQLが遅い/終わらない 接続数枯渇 リソース使いすぎ(CPU,メモリ,表領域,TEMP/UNDO表領域) ロック競合 ORA-00600(内部エラー) マイナーupgrade計画/実施 -------------------------------------------------------------------------------- 挙げられたものの内、 ハードウェア/インフラ障害系の全てと、リスナーの障害、アーカイブログの枯渇監視は、 Amazon RDS for Oracleの場合マネージド化されているため、利用企業の管理者として できる日常の備えは、AWSサービスとの緊急サポートの連絡体制の訓練のみですか。 -------------------------------------------------------------------------------- はい。なのでRDS利用下での日常の備えは 1. AWS緊急サポート連絡体制の確立 障害検知から AWS サポートへの連絡までのフローを決めておく 障害時に提供すべき情報(DBインスタンスID、発生時刻、影響内容)を即座に出せるようにする 実際に「模擬障害」を想定して連絡手順を訓練しておく 2. CloudWatch / RDS イベント通知の活用 Amazon RDS Event Subscriptionsで重要イベント(再起動、フェイルオーバー等)を SNS 通知 CloudWatch アラームで CPU使用率、接続数、クエリ遅延などアプリ層に関わる指標を監視 (ハードウェア障害は検出できないが、影響の兆候は拾える) 3. 業務側の影響最小化準備 フェイルオーバー後の接続確認手順(アプリ側の接続再試行設定など) 復旧までの暫定運用手順(代替DBの利用、処理延期など) 復旧後のデータ整合性確認手順(整合性チェックSQL、レポート) -------------------------------------------------------------------------------- RDS for Oracleでも、オンプレミス版OracleDatabaseと同様に、ORA-00600内部エラーが発生することは有りますか。 -------------------------------------------------------------------------------- はい。アラートログの全文を添えてAWSサポートに調査を依頼する。 -------------------------------------------------------------------------------- RDS for Oracle 日常監視チェックリスト(利用者DBA向け) 1. 毎日チェック 項目 目的 確認方法(例) 接続数(Max Utilization) 接続枯渇・性能劣化の兆候検出 CloudWatch DatabaseConnections、SQLで V$SESSION CPU / メモリ使用率 高負荷状態の検出 CloudWatch CPUUtilization、FreeableMemory ストレージ使用率(全体) 容量逼迫の予兆検出 CloudWatch FreeStorageSpace 表領域使用率(Tablespace) アプリデータの容量逼迫検出 SQLで DBA_DATA_FILES / DBA_FREE_SPACE ログ(アラートログ) ORAエラーや重要警告の早期検出 CloudWatch Logs(RDS ログエクスポート) 失敗したジョブの有無 夜間バッチ・定期処理の失敗検知 DBA_SCHEDULER_JOB_RUN_DETAILS、DBA_JOBS ロック競合 業務処理の停止防止 V$LOCK、V$SESSION | 項目 | 目的 | 確認方法(例) | | -------------------- | ---------------- | ------------------------------------------------- | | 接続数(Max Utilization) | 接続枯渇・性能劣化の兆候検出 | CloudWatch `DatabaseConnections`、SQLで `V$SESSION` | | CPU / メモリ使用率 | 高負荷状態の検出 | CloudWatch `CPUUtilization`、`FreeableMemory` | | ストレージ使用率(全体) | 容量逼迫の予兆検出 | CloudWatch `FreeStorageSpace` | | 表領域使用率(Tablespace) | アプリデータの容量逼迫検出 | SQLで `DBA_DATA_FILES` / `DBA_FREE_SPACE` | | ログ(アラートログ) | ORAエラーや重要警告の早期検出 | CloudWatch Logs(RDS ログエクスポート) | | 失敗したジョブの有無 | 夜間バッチ・定期処理の失敗検知 | `DBA_SCHEDULER_JOB_RUN_DETAILS`、`DBA_JOBS` | | ロック競合 | 業務処理の停止防止 | `V$LOCK`、`V$SESSION` | 2. 毎週チェック 項目 目的 確認方法(例) SQL性能劣化 統計情報更新やデータ増加による実行計画悪化を検出 AWR レポート比較、DBMS_XPLAN 統計情報更新状況 最適化精度の維持 DBA_TAB_STATISTICS インデックスの断片化・不要化 クエリ性能低下予防 INDEX_STATS、アクセス頻度分析 接続タイムアウト・アプリ接続エラー アプリの接続設定や再接続動作を確認 アプリログ、CloudWatch DatabaseConnections の変動 監査ログ(必要時) 不正アクセスや操作の検知 CloudWatch Logs(監査ログ出力設定時) | 項目 | 目的 | 確認方法(例) | | ----------------- | ------------------------ | ------------------------------------------ | | SQL性能劣化 | 統計情報更新やデータ増加による実行計画悪化を検出 | AWR レポート比較、`DBMS_XPLAN` | | 統計情報更新状況 | 最適化精度の維持 | `DBA_TAB_STATISTICS` | | インデックスの断片化・不要化 | クエリ性能低下予防 | `INDEX_STATS`、アクセス頻度分析 | | 接続タイムアウト・アプリ接続エラー | アプリの接続設定や再接続動作を確認 | アプリログ、CloudWatch `DatabaseConnections` の変動 | | 監査ログ(必要時) | 不正アクセスや操作の検知 | CloudWatch Logs(監査ログ出力設定時) | 3. 毎月チェック 項目 目的 確認方法(例) バックアップ整合性(リストアテスト) 復旧可能性の担保 スナップショット復元テスト(別インスタンスで実施) バージョン / パッチレベル確認 脆弱性対応・機能追加対応 AWSコンソールの RDS エンジンバージョン情報 権限設定(最小権限原則) 不正操作・誤操作防止 DBA_ROLE_PRIVS、DBA_SYS_PRIVS 外部連携(DBリンク、S3等)動作確認 連携停止による業務影響防止 試験クエリ、連携ジョブテスト アーカイブデータの整理 ストレージ肥大化防止 古い履歴・ログテーブルのパージ | 項目 | 目的 | 確認方法(例) | | ------------------- | ------------- | -------------------------------- | | バックアップ整合性(リストアテスト) | 復旧可能性の担保 | スナップショット復元テスト(別インスタンスで実施) | | バージョン / パッチレベル確認 | 脆弱性対応・機能追加対応 | AWSコンソールの RDS エンジンバージョン情報 | | 権限設定(最小権限原則) | 不正操作・誤操作防止 | `DBA_ROLE_PRIVS`、`DBA_SYS_PRIVS` | | 外部連携(DBリンク、S3等)動作確認 | 連携停止による業務影響防止 | 試験クエリ、連携ジョブテスト | | アーカイブデータの整理 | ストレージ肥大化防止 | 古い履歴・ログテーブルのパージ | -------------------------------------------------------------------------------- 企業内の社内情報システムにAmazon RDS for Oracle 19cを使用しています。 データベース管理者として日常運用中に備えるべきトラブルには、どのような物がありますか? -------------------------------------------------------------------------------- Oracle統計情報の更新管理は、RDS for Oracleの場合自動で行ってくれますか? -------------------------------------------------------------------------------- はい、Amazon RDS for Oracle では統計情報(Optimizer Statistics)の更新は自動で行われます。 具体的には、RDS for Oracle でもオンプレの Oracle と同様に Oracle 自身の自動統計収集機能 (Automatic Optimizer Statistics Collection) が有効化されており、 デフォルトでは 毎晩のメンテナンスウィンドウ中 に DBMS_STATS を使って収集されます。 要するに、「基本はAWS任せでOK。ただし業務特性に合わせた追加の統計更新はDBA側の責任」 という運用になります。 -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 対象ユーザーのセッション一覧表示 -------------------------------------------------------------------------------- SELECT SID, SERIAL#, USERNAME, OSUSER, LOGON_TIME, MACHINE, PROGRAM FROM V$SESSION WHERE USERNAME = 'USER1'; -------------------------------------------------------------------------------- セッションの切断 -------------------------------------------------------------------------------- exec rdsadmin.rdsadmin_util.kill(71, 51703); -------------------------------------------------------------------------------- ユーザーに付与されているロールとシステム権限の確認 -------------------------------------------------------------------------------- SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'USER1'; SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'USER1'; -------------------------------------------------------------------------------- 各種リソース上限の確認 -------------------------------------------------------------------------------- SELECT * FROM V$RESOURCE_LIMIT -------------------------------------------------------------------------------- 高負荷のセッションの特定 -------------------------------------------------------------------------------- AWSの拡張モニタリングで見る方法 https://repost.aws/ja/knowledge-center/rds-oracle-high-cpu-utilization SQLあり https://einherjar1632.hatenablog.com/entry/2015/10/16/222648 -------------------------------------------------------------------------------- 長時間実行中のセッションの特定 -------------------------------------------------------------------------------- https://oha-yo.com/oracle/vsessin1/ select s.SQL_ID,s.STATUS,s.SCHEMANAME,a.SQL_TEXT ,LAST_ACTIVE_TIME -- 動作開始時間 ,LAST_CALL_ET -- 実行し続けている秒数 from v$session s inner join v$sqlarea a on s.SQL_ID = a.SQL_ID where s.LAST_CALL_ET > 2 and s.SQL_ID is not null and s.STATUS = 'ACTIVE' order by LAST_CALL_ET; -------------------------------------------------------------------------------- ロックしている表とユーザーの抽出 -------------------------------------------------------------------------------- https://qiita.com/C_HERO/items/19d378a8f535b39d8250 -- 全ロックを表示: ロックしているもの SELECT DO.OWNER || '.' || DO.OBJECT_NAME AS OBJECT, DECODE(LO.LOCKED_MODE, 1, 'NULL', 2, '行共有(SS)', 3, '行排他(SX)', 4, '共有(S)', 5, '共有行排他(SRX)', 6, '排他(X)', '???' ) AS LOCKED_MODE, TO_CHAR(L.CTIME / 60,'99990.9') AS MIN, LO.ORACLE_USERNAME, LO.OS_USER_NAME, LO.PROCESS, S.SID, S.SERIAL# FROM DBA_OBJECTS DO, V$LOCKED_OBJECT LO, V$LOCK L, V$SESSION S WHERE DO.OBJECT_ID = LO.OBJECT_ID AND LO.SESSION_ID = L.SID AND LO.XIDSQN = L.ID2 AND LO.PROCESS = S.PROCESS AND LO.XIDUSN > 0; -------------------------------------------------------------------------------- トレースログの取得 -------------------------------------------------------------------------------- SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file( p_directory => 'BDUMP', p_filename => 'alert_yourdb.log')); --------------------------------------------------------------------------------