关于 database-management
面向 Claude 的 OCI 数据库操作 Skill,侧重 Autonomous Database 管理、故障排查与成本控制。内容涵盖连接、克隆、备份和 PDB 操作注意事项,并依据 Oracle 文档提供实务指导。
主要功能
- 01OCI 数据库操作指导
- 02Wallet 与连接故障排查
- 03服务与克隆类型选择建议
- 04备份保留规划
- 05成本与扩缩容计算
- 06PDB 生命周期注意事项
适用场景
- 01诊断 ADB Wallet 连接错误
- 02为测试环境选择克隆类型
- 03估算停止/启动及许可成本
- 04删除 CDB 前检查 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 数据库管理 - 专家知识
🏗️ 使用 OCI Landing Zone Terraform 模块
不要重复造轮子。 使用 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) - Wallet 配置和连接字符串格式
- 最新的 ADB 功能(23ai、26ai)和 API 变更
需要执行 OCI 操作时:
- 使用技能参考资料中的准确 CLI 命令
- 不要猜测 OCI CLI 语法或参数
- 不要假设 API 端点结构
- 加载 oracle-dba 技能以获取详细的 ADB 操作说明
你确实了解的内容:
- Oracle Database 内部机制(SQL、PL/SQL)
- 通用数据库管理原则
- 连接池和 HA 概念
此技能通过提供最新的 OCI 专用数据库操作知识来弥补这一盲区。
你是一名 OCI 数据库专家。此技能提供 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/7 连接池,使用 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
连接字符串注意事项
Wallet 连接失败决策树
"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 倍 | 基础成本的 1 倍 | 批处理作业、报表、大多数应用 |
| LOW | 最大程度共享 | OCPU 数量的 3 倍 | 基础成本的 1 倍 | 后台任务、数据加载 |
示例:2 OCPU 的 ADB
- HIGH:最多 2 个并发查询,每月 $584
- MEDIUM:4 个并发查询,每月 $584
- LOW:6 个并发查询,每月 $584(成本相同,并发数更高)
注意:在 ADB 定价中,HIGH 不会增加费用,但如果根据负载扩容,会消耗更多 OCPU 小时。
使用精确计算优化成本
停止还是缩容
场景:开发用 ADB,2 个 OCPU、1 TB 存储,仅在工作日每天使用 8 小时
选项 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%)
许可模式的影响
| 模式 | 成本 | 适用情况 |
|---|---|---|
| 包含许可 | $0.36/OCPU-hr | 没有现有许可证 |
| BYOL | $0.18/OCPU-hr | 拥有 Oracle DB 许可证(五折) |
场景:4 OCPU ADB,生产环境全天候运行
- 包含许可:$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 skill)
- 连接故障排查(参见上方决策树)
- 成本计算(参见上方表格)
Oracle 官方文档来源
主要参考资料(抓取自 30 多个官方来源):
- Autonomous Database Serverless
- Database Cloud Service
- Exadata Database Service
- Data Guard Configuration
注意:此技能中的连接注意事项、密码规则和成本陷阱均源自 Oracle 官方文档
何时使用此技能
- 连接问题:钱包错误、服务名混淆、网络故障排查
- 成本优化:停止/启动决策、BYOL 评估、自动扩缩容限制
- 备份/克隆:选择克隆类型、规划保留期限、灾难恢复
- PDB 管理:层级、连接字符串、拔出/插入操作
- 密码错误:复杂度验证、ADMIN 用户限制
- 扩缩容:Always-Free 限制、何时扩容而不是停止、成本计算