mcpField
D
database-management

database-management

github.com/acedergren数据与数据库22100 次安装33 周前更新
代码仓库

关于 database-management

面向 Claude 的 OCI 数据库操作 Skill,侧重 Autonomous Database 管理、故障排查与成本控制。内容涵盖连接、克隆、备份和 PDB 操作注意事项,并依据 Oracle 文档提供实务指导。

主要功能

  1. 01OCI 数据库操作指导
  2. 02Wallet 与连接故障排查
  3. 03服务与克隆类型选择建议
  4. 04备份保留规划
  5. 05成本与扩缩容计算
  6. 06PDB 生命周期注意事项

适用场景

  1. 01诊断 ADB Wallet 连接错误
  2. 02为测试环境选择克隆类型
  3. 03估算停止/启动及许可成本
  4. 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 操作时:

  1. 使用技能参考资料中的准确 CLI 命令
  2. 不要猜测 OCI CLI 语法或参数
  3. 不要假设 API 端点结构
  4. 加载 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专用 OCPUOCPU 数量的 1 倍基础成本的 3 倍OLTP 关键事务、交互式查询
MEDIUM共享 OCPUOCPU 数量的 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 多个官方来源):

注意:此技能中的连接注意事项、密码规则和成本陷阱均源自 Oracle 官方文档


何时使用此技能

  • 连接问题:钱包错误、服务名混淆、网络故障排查
  • 成本优化:停止/启动决策、BYOL 评估、自动扩缩容限制
  • 备份/克隆:选择克隆类型、规划保留期限、灾难恢复
  • PDB 管理:层级、连接字符串、拔出/插入操作
  • 密码错误:复杂度验证、ADMIN 用户限制
  • 扩缩容:Always-Free 限制、何时扩容而不是停止、成本计算

评论

支持 Markdown