database-management について
Claude向けのOCIデータベース運用スキルで、Autonomous Databaseの管理、トラブルシューティング、コスト管理を扱います。Oracleのドキュメントに基づき、接続、クローン、バックアップ、PDB運用の注意点をまとめています。
主な機能
- 01OCIデータベース運用ガイダンス
- 02Walletと接続のトラブルシューティング
- 03サービスとクローン種別の選択支援
- 04バックアップ保持計画
- 05コストとスケーリングの計算
- 06PDBライフサイクルの注意点
活用シーン
- 01ADB Wallet接続エラーの診断
- 02テスト環境向けクローン種別の選択
- 03停止・起動とライセンス費用の試算
- 04CDB削除前のPDB確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedergren/ oci-agent-skills --skill database-managementインストール後、Claude Code で/database-managementを入力して読み込まれたか確認します。
同梱ファイルmetadata.jsonreferences/oci-dbcs-cli.md
詳細
OCI Database Management - エキスパートナレッジ
🏗️ OCI Landing Zone Terraform Modulesを使用する
一から作り直す必要はありません。 データベースインフラストラクチャには、oracle-terraform-modules/landing-zoneを使用してください。
Landing Zoneで解決できること:
- ❌ 悪いプラクティス #4:不十分なネットワークセグメンテーション(Landing Zoneがデータベース層を分離します)
- ❌ 悪いプラクティス #9:パブリックなデータベースエンドポイント(Security Zonesがプライベートサブネットを強制します)
- ❌ 悪いプラクティス #10:監視機能がない(Landing Zoneがデータベースのアラームを自動構成します)
このスキルが提供するもの:Landing Zone内にデプロイされたデータベースのADB操作、トラブルシューティング、コスト最適化です。
⚠️ OCI CLI/APIに関する知識の不足
OCI CLIコマンドやOCI APIの構造については詳しくありません。
トレーニングデータに含まれる以下の情報は、限られており、古くなっています。
- OCI CLIの構文とパラメーター(毎月更新されます)
- OCI APIのエンドポイントとリクエスト/レスポンス形式
- データベースサービスのCLI操作(
oci db autonomous-database) - ウォレットの構成と接続文字列の形式
- 最新のADB機能(23ai、26ai)とAPIの変更
OCIの操作が必要な場合:
- スキルのリファレンスに記載された正確なCLIコマンドを使用してください
- OCI CLIの構文やパラメーターを推測しないでください
- APIエンドポイントの構造を決めつけないでください
- 詳細なADB操作についてはoracle-dbaスキルを読み込んでください
把握していること:
- Oracle Databaseの内部機能(SQL、PL/SQL)
- 一般的なデータベース管理の原則
- コネクションプーリングとHAの概念
このスキルは、最新のOCI固有のデータベース操作を提供することで、知識の不足を補います。
OCI Databaseのエキスパートです。このスキルでは、Claudeに不足している接続文字列の注意点、コスト上の落とし穴、バックアップ/クローンのパターン、PDB管理でのミス、ADB固有の運用知識を提供します。
絶対にしてはいけないこと
❌ 誤った接続サービス名は絶対に使用しないでください(パフォーマンス/コストに影響します)
Autonomous Database provides 3 service names:
- HIGH: Dedicated CPU, highest performance, **3x cost of LOW**
- MEDIUM: Shared CPU, balanced
- LOW: Most sharing, cheapest, sufficient for OLTP
# WRONG - using HIGH for background jobs (expensive)
connection_string = adb_connection_strings["high"] # 3x cost!
# RIGHT - match service to workload
connection_string = adb_connection_strings["low"] # Batch jobs, reporting
connection_string = adb_connection_strings["high"] # Critical transactions only
コストへの影響:24時間365日のコネクションプールでHIGHではなくLOWを使用すると、月額220ドルではなく73ドルとなり、3倍の無駄が発生します。
❌ 停止したデータベースのコストがゼロだと決めつけないでください
# WRONG assumption - "stopped" database is free
Stop ADB at night to save costs
# Reality:
Stopped ADB charges:
- Storage: $0.025/GB/month continues
- Backups: Retention charges continue
- Compute: ZERO (only part that stops)
Example: 1TB ADB stopped 16 hrs/day
- Compute savings: $584/month × 67% = $391 saved
- Storage cost: $25.60/month (still charged)
- Net savings: $391/month (not $610 expected)
❌ パスワードの複雑さを無視しないでください(必ず失敗します)
OCI Database password requirements (strict regex):
- 12-30 characters
- 2+ uppercase, 2+ lowercase
- 2+ numbers, 2+ special (#-_)
- NO username in password
- NO repeating chars (aaa, 111)
# WRONG - fails validation
--admin-password "MyPass123" # Only 1 special char, < 12 chars
# RIGHT - meets requirements
--admin-password "MyP@ssw0rd#2024" # 2 upper, 2 lower, 2 num, 2 special, 16 chars
❌ クローンの種類を混同しないでください(パフォーマンスやコストに影響します)
| Clone Type | Use Case | Cost | Refresh | When Source Deleted |
|------------|----------|------|---------|---------------------|
| **Full clone** | Prod → Dev (one-time) | Full ADB cost | Cannot refresh | Clone survives |
| **Refreshable clone** | Prod → Test (weekly refresh) | Storage only (~30%) | Manual refresh | Clone deleted |
| **Metadata clone** | Schema-only copy | Minimal | N/A | Clone survives |
# WRONG - full clone for dev environment that needs weekly prod data
oci db autonomous-database create-from-clone-adb \
--clone-type FULL # Wastes $500/month, no refresh capability
# RIGHT - refreshable clone for test environments
oci db autonomous-database create-refreshable-clone \
# Costs $150/month storage, can refresh from prod weekly
コストの落とし穴:テスト用のフルクローンは月額500ドルですが、リフレッシュ可能なクローンなら月額150ドルで済みます(70%削減)。
❌ PDBを先に確認せずにCDBを削除しないでください
# WRONG - deletes Container Database with PDBs inside (data loss)
oci db database delete --database-id <cdb-ocid>
# All pluggable databases deleted with no warning!
# RIGHT - check for PDBs first
oci db pluggable-database list --container-database-id <cdb-ocid>
# If PDBs exist, decide: unplug, clone, or explicitly delete each
❌ アプリケーションコードでADMINユーザーを使用しないでください(セキュリティリスクがあります)
# WRONG - application uses ADMIN credentials
app_config = {
'user': 'ADMIN',
'password': admin_password # Full database control!
}
# RIGHT - create app-specific user with least privilege
CREATE USER app_user IDENTIFIED BY <password>;
GRANT CONNECT, RESOURCE TO app_user;
GRANT SELECT, INSERT, UPDATE ON app_schema.* TO app_user;
# ADMIN only for DBA tasks, never in application code
❌ Always-Freeの制限を忘れないでください(スケールアップに失敗します)
Always-Free Autonomous Database limits:
- 1 OCPU max (cannot scale beyond)
- 20 GB storage max
- 1 database per tenancy per region
- NO private endpoints
- NO auto-scaling
# WRONG - trying to scale always-free database
oci db autonomous-database update \
--autonomous-database-id <adb-ocid> \
--cpu-core-count 2 # FAILS: Always-free max is 1 OCPU
# RIGHT - convert to paid tier first, THEN scale
oci db autonomous-database update \
--autonomous-database-id <adb-ocid> \
--is-free-tier false # Convert to paid
# Now can scale to 2+ OCPUs
接続文字列に関する注意点
ウォレット接続の失敗時に使う判断ツリー
"Connection refused" or "Wallet error"?
│
├─ Wallet file issues?
│ ├─ Check: TNS_ADMIN env variable set?
│ │ └─ export TNS_ADMIN=/path/to/wallet
│ ├─ Check: sqlnet.ora has correct wallet location?
│ │ └─ WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/path/to/wallet")))
│ └─ Check: Wallet password correct?
│
├─ Network security?
│ ├─ Private endpoint ADB?
│ │ └─ Check: Source IP in NSG/security list?
│ │ └─ Check: VPN/FastConnect for on-premises access?
│ └─ Public endpoint ADB?
│ └─ Check: Database whitelisted your IP? (Access Control List)
│
├─ Database state?
│ └─ Check: Lifecycle state = AVAILABLE (not STOPPED, UPDATING)?
│ └─ oci db autonomous-database get --autonomous-database-id <ocid> --query 'data."lifecycle-state"'
│
└─ Service name wrong?
└─ Check: Using correct service name from tnsnames.ora?
└─ HIGH: <dbname>_high
└─ MEDIUM: <dbname>_medium
└─ LOW: <dbname>_low
サービス名の選択(コストとパフォーマンス)
| サービス | CPU割り当て | 同時実行数 | コスト | 用途 |
|---|---|---|---|---|
| HIGH | 専用OCPU | OCPU数の1倍 | 基本料金の3倍 | OLTPの重要なトランザクション、対話型クエリ |
| MEDIUM | 共有OCPU | OCPU数の2倍 | 基本料金と同額 | バッチジョブ、レポート作成、ほとんどのアプリ |
| LOW | 最大限共有 | OCPU数の3倍 | 基本料金と同額 | バックグラウンドタスク、データロード |
例:2 OCPUのADB
- HIGH:同時クエリの最大数は2、月額584ドル
- MEDIUM:同時クエリ数は4、月額584ドル
- LOW:同時クエリ数は6、月額584ドル(同じコストで、同時実行数が増えます)
注意点:ADBの料金ではHIGHのほうが高くなることはありませんが、負荷に応じてスケールする場合、OCPU時間をより多く消費します。
正確な計算によるコスト最適化
停止とスケールダウンの判断
シナリオ:開発用ADB、2 OCPU、ストレージ1 TB、平日のみ1日8時間使用
オプション1:未使用時に停止する(1日16時間+週末)
Usage: 8 hrs/day × 5 days = 40 hrs/week (24% utilization)
Compute cost: $0.36/OCPU-hr × 2 × 40 × 4.3 weeks = $124/month
Storage cost: $0.025/GB/month × 1000 = $25/month
Total: $149/month
オプション2:常時稼働で1 OCPUにスケールする
Compute cost: $0.36/OCPU-hr × 1 × 730 hrs = $263/month
Storage cost: $25/month
Total: $288/month
推奨:停止/起動により月額139ドルの節約になります(48%削減)。
ライセンスモデルによるコストへの影響
| モデル | コスト | 使用するケース |
|---|---|---|
| License Included | $0.36/OCPU-hr | 既存のライセンスがない場合 |
| BYOL | $0.18/OCPU-hr | Oracle DB のライセンスを保有している場合(50%割引) |
シナリオ:4 OCPU の ADB、本番環境で24時間365日稼働
- License Included:$0.36 × 4 × 730 = $1,051/月
- BYOL:$0.18 × 4 × 730 = $526/月
- 節約額:ライセンスを保有している場合は、$525/月($6,300/年)
注意点:BYOL では、監査時にライセンスの証明が必要です
自動スケーリングによるコスト管理
# DANGER - unbounded auto-scaling
resource "oci_database_autonomous_database" "prod" {
cpu_core_count = 2
is_auto_scaling_enabled = true # Can scale to 3× (6 OCPUs!)
}
# Cost: 2 OCPUs × $0.36 × 730 = $526/month baseline
# If auto-scales to 6 OCPUs during peak: $1,578/month (3× surprise bill!)
# SAFER - set scaling limit
# (Not available via API, must set in console: Manage Scaling → Max OCPU count)
ベストプラクティス:コストを管理するため、最大 OCPU をベースラインの2倍に設定します(2 OCPU → 最大4 OCPU)
バックアップとクローンのパターン
自動バックアップと手動バックアップの保持期間
自動バックアップ(無料):
- 保持期間:デフォルトで60日(1~60日で設定可能)
- 頻度:毎日、増分バックアップ
- コスト:ADB のストレージ料金に含まれます
- 注意点:ADB を削除すると、保持期間の経過後に自動バックアップも削除されます
手動バックアップ:
- 保持期間:削除するまで
- コスト:$0.025/GB/月(ストレージと同じ料金)
- ユースケース:長期保持(コンプライアンス、法的保全)
コスト上の落とし穴:
Scenario: 1 TB ADB, keep 2 years of backups for compliance
Wrong assumption: Automatic backups are free forever
Reality: Automatic backups deleted 60 days after ADB deletion
Right approach: Manual backup before deleting ADB
Cost: $0.025/GB × 1000 GB × 24 months = $600 for 2-year retention
クローンと更新可能なクローンの選択
| フルクローン | 更新可能なクローン | |
|---|---|---|
| ユースケース | 恒久的な開発用コピー | 本番データが必要なテスト環境 |
| コスト | ソース ADB の100% | 約30%(ストレージのみ) |
| 更新 | 更新できません | ソースから手動で更新 |
| ソース削除時 | クローンは残ります | クローンは自動削除されます |
| 編集可能 | はい | はい(ただし、更新時に上書きされます) |
注意点:ソース ADB を削除すると、更新可能なクローンも削除されます。警告はありません!
ベストプラクティス:
- 開発環境(恒久的):フルクローン
- QA 環境(本番環境から毎週更新):更新可能なクローン
- 本番環境への移行前:フルクローン(ソース削除後も残ります)
PDB 管理での注意点
階層の混同:
DB System or Exadata
└─ Container Database (CDB)
└─ Pluggable Database (PDB) ← Application connects here
└─ Schemas, tables, etc.
重要:PDB の接続文字列では、CDB のホストと PDB のサービス名を使用します
# WRONG - trying to connect to CDB
sqlplus admin/pass@cdb-host:1521/ORCLCDB
# RIGHT - connect to PDB inside CDB
sqlplus app_user/pass@cdb-host:1521/PDB1
PDB のライフサイクルに関する注意点:PDB を切り離しても、データは削除されません
# Unplug PDB → creates XML metadata file
oci db pluggable-database unplug --pdb-id <ocid>
# PDB still exists in storage, can re-plug elsewhere
# Charges continue until DELETE
段階的に読み込むリファレンス
OCI Database Cloud Service CLI
読み込むタイミング oci-dbcs-cli.md:
- DB Systems(VM、RAC、Exadata)の作成または管理
- 災害復旧のための Data Guard の構成
- パッチ適用とメンテナンス作業
- バックアップとリカバリの手順
- ExaDB-D および ExaDB-C@C の操作
次の場合は読み込まないでください:
- Autonomous Database の操作(oracle-dba スキルを使用)
- 接続のトラブルシューティング(上記の判断ツリーを使用)
- コスト計算(上記の表を使用)
Oracle 公式ドキュメントの参照先
主な参照先(公式ソース30件以上をスクレイピング):
- Autonomous Database Serverless
- Database Cloud Service
- Exadata Database Service
- Data Guard Configuration
注:このスキルに記載されている接続時の注意点、パスワードのルール、コスト上の落とし穴は、Oracle 公式ドキュメントに基づいています
このスキルを使用するケース
- 接続の問題:ウォレットエラー、サービス名の混同、ネットワークのトラブルシューティング
- コストの最適化:停止/起動の判断、BYOL の評価、自動スケーリングの上限
- バックアップ/クローン:クローンの種類の選択、保持期間の計画、災害復旧
- PDB 管理:階層、接続文字列、切り離し/接続操作
- パスワードエラー:複雑さの検証、ADMIN ユーザーの制限
- スケーリング:Always-Free の上限、スケーリングと停止の判断、コスト計算