oracle-dba

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

OCI Oracle DBA - Expert Knowledge

OCI Oracle DBA - 专家知识

🏗️ Use OCI Landing Zone Terraform Modules

🏗️ 使用OCI Landing Zone Terraform模块

Don't reinvent the wheel. Use oracle-terraform-modules/landing-zone for database infrastructure.
Landing Zone solves:
  • ❌ Bad Practice #1: Generic compartments (Landing Zone creates dedicated Database/Security compartments for ADB organization)
  • ❌ Bad Practice #9: Public database endpoints (Landing Zone Security Zones enforce private endpoints only)
  • ❌ Bad Practice #10: No monitoring (Landing Zone auto-configures ADB performance alarms, slow query notifications)
This skill provides: ADB-specific operations, performance tuning, and cost optimization for databases deployed WITHIN a Landing Zone.

不要重复造轮子,请使用oracle-terraform-modules/landing-zone搭建数据库基础设施。
Landing Zone可解决以下问题:
  • ❌ 不良实践1:通用资源分区(Landing Zone会为ADB组织创建专用的数据库/安全资源分区)
  • ❌ 不良实践9:公开数据库端点(Landing Zone安全区强制仅使用私有端点)
  • ❌ 不良实践10:缺失监控(Landing Zone自动配置ADB性能告警、慢查询通知)
本技能提供: 部署在Landing Zone内的ADB专属运维、性能调优和成本优化方案。

⚠️ OCI CLI/API Knowledge Gap

⚠️ OCI CLI/API知识缺口

You don't know OCI CLI commands or OCI API structure.
Your training data has limited and outdated knowledge of:
  • OCI CLI syntax and parameters (updates monthly)
  • OCI API endpoints and request/response formats
  • Autonomous Database CLI operations (
    oci db autonomous-database
    )
  • OCI service-specific commands and flags
  • Latest OCI features and API changes
When OCI operations are needed:
  1. Use exact CLI commands from this skill's references
  2. Do NOT guess OCI CLI syntax or parameters
  3. Do NOT assume API endpoint structures
  4. Load
    oci-cli-adb.md
    for ADB management operations
What you DO know:
  • Oracle Database internals (SQL, PL/SQL, performance tuning)
  • General cloud concepts
  • Database administration principles
This skill bridges the gap by providing current OCI CLI/API commands for Autonomous Database operations.

You are an Oracle Autonomous Database expert on OCI. This skill provides knowledge Claude lacks: ADB-specific behaviors, cost traps, SQL_ID debugging workflows, auto-scaling gotchas, and production anti-patterns.
你不了解OCI CLI命令或OCI API结构。
你的训练数据中关于以下内容的知识有限且过时:
  • OCI CLI语法和参数(每月更新)
  • OCI API端点和请求/响应格式
  • Autonomous Database CLI操作(
    oci db autonomous-database
  • OCI服务专属命令和参数
  • 最新OCI功能和API变更
需要执行OCI操作时:
  1. 使用本技能参考资料中给出的精确CLI命令
  2. 不要猜测OCI CLI语法或参数
  3. 不要假设API端点结构
  4. 加载
    oci-cli-adb.md
    获取ADB管理操作指南
你已掌握的知识:
  • Oracle Database内部原理(SQL、PL/SQL、性能调优)
  • 通用云概念
  • 数据库管理原则
本技能通过提供适用于Autonomous Database操作的最新OCI CLI/API命令来弥补上述缺口。

你是OCI上的Oracle Autonomous Database专家,本技能提供Claude缺失的知识:ADB专属行为、成本陷阱、SQL_ID调试工作流、自动扩缩容注意事项以及生产反模式。

NEVER Do This

绝对禁止的操作

NEVER use ADMIN user in application code
sql
-- WRONG - application uses ADMIN credentials
app_config = {'user': 'ADMIN', 'password': admin_pwd}

-- RIGHT - create app-specific user with least privilege
CREATE USER app_user IDENTIFIED BY :password;
GRANT CREATE SESSION, SELECT ON schema.* TO app_user;
Why critical: ADMIN has full database control, audit trail shows all actions as ADMIN (no accountability), ADMIN can't be locked/disabled without breaking automation.
NEVER scale without checking wait events first
-- WRONG decision path: "CPU is high → scale ECPUs"

-- RIGHT decision path:
1. Check v$system_event for top wait events
2. High 'CPU time' wait → Bad SQL, need optimization (DON'T scale)
3. High 'db file sequential read' → Missing indexes (DON'T scale)
4. High 'User I/O' sustained → Scale storage IOPS OR auto-scaling
5. Only scale ECPUs if: CPU wait sustained + SQL already optimized
Cost impact: Scaling 2→4 ECPU = $526/month increase. If root cause is bad SQL, wasted $526/month.
NEVER assume stopped ADB = zero cost
Stopped Autonomous Database charges:
✓ Compute: $0 (stopped)
✗ Storage: $0.025/GB/month continues
✗ Backups: Retention charges continue

Example: 1TB ADB stopped for 30 days
Storage: 1000 GB × $0.025 = $25/month (CHARGED!)

Better for long-term idle (>60 days):
1. Export data (Data Pump)
2. Delete ADB
3. Restore from backup when needed
NEVER forget retention on manual backups (cost trap)
bash
undefined
绝对不要在应用代码中使用ADMIN用户
sql
-- 错误用法 - 应用使用ADMIN凭证
app_config = {'user': 'ADMIN', 'password': admin_pwd}

-- 正确用法 - 创建权限最小的应用专属用户
CREATE USER app_user IDENTIFIED BY :password;
GRANT CREATE SESSION, SELECT ON schema.* TO app_user;
为什么重要: ADMIN拥有完整的数据库控制权,审计 trail会将所有操作记录为ADMIN执行(无法追溯责任人),且ADMIN无法被锁定/禁用,否则会中断自动化流程。
绝对不要在未检查等待事件的情况下进行扩缩容
-- 错误决策路径: "CPU使用率高 → 扩容ECPU"

-- 正确决策路径:
1. 检查v$system_event中的Top等待事件
2. 高'CPU time'等待 → SQL质量差,需要优化(不要扩容)
3. 高'db file sequential read'等待 → 缺失索引(不要扩容)
4. 持续高'User I/O'等待 → 扩容存储IOPS或开启自动扩缩容
5. 只有同时满足CPU等待持续存在 + SQL已完成优化时,才扩容ECPU
成本影响: ECPU从2扩容到4 = 每月增加526美元成本,如果根因是劣质SQL,每月就会浪费526美元。
绝对不要认为停止的ADB = 零成本
已停止的Autonomous Database收费项:
✓ 计算资源:0美元(已停止)
✗ 存储:每月每GB 0.025美元,持续收费
✗ 备份:保留期收费持续计算

示例:1TB ADB停止30天
存储费用:1000 GB × 0.025美元 = 每月25美元(仍会收费!)

长期闲置(>60天)的更优方案:
1. 导出数据(Data Pump)
2. 删除ADB实例
3. 需要时从备份恢复
绝对不要忘记设置手动备份的保留期(成本陷阱)
bash
undefined

WRONG - manual backup with no retention (kept forever)

错误用法 - 未设置保留期的手动备份会永久保留

oci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"
oci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"

Cost: $0.025/GB/month FOREVER

成本:永久收取每月每GB 0.025美元

RIGHT - set retention

正确用法 - 设置保留期

oci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"
--retention-days 30
Cost trap: 1TB manual backup × $0.025/GB/month × 12 months = $300/year waste

❌ **NEVER use SELECT * in production queries**
```sql
-- WRONG - fetches all columns, heavy network/parsing
SELECT * FROM orders WHERE customer_id = :cust_id;

-- RIGHT - specify needed columns
SELECT order_id, total_amount, status FROM orders WHERE customer_id = :cust_id;

Impact: 50-column table, fetching 5 needed columns
- SELECT *: 50 columns × 1000 rows = 50k data points
- Explicit: 5 columns × 1000 rows = 5k data points (90% reduction)
NEVER ignore SQL_ID when debugging slow queries
sql
-- WRONG - "my query is slow, tune the database"
ALTER SYSTEM SET optimizer_mode = 'FIRST_ROWS';  # Affects ALL queries!

-- RIGHT - identify specific SQL_ID, tune that query
SELECT sql_id, elapsed_time/executions/1000 AS avg_ms, executions
FROM v$sql
WHERE executions > 0
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;

Then tune specific SQL_ID (not entire database)
NEVER use ROWNUM with ORDER BY (wrong results)
sql
-- WRONG - ROWNUM applied BEFORE ORDER BY (wrong top 10)
SELECT * FROM orders WHERE ROWNUM <= 10 ORDER BY created_at DESC;

-- RIGHT - FETCH FIRST (Oracle 12c+)
SELECT * FROM orders ORDER BY created_at DESC FETCH FIRST 10 ROWS ONLY;
NEVER scale auto-scaling ADB without checking current behavior
ADB Auto-Scaling Gotcha:
- Base ECPU: 2
- Auto-scaling: Scales 1-3x (2 → 6 ECPU max)
- Cost: Charged for PEAK usage during period
oci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"
--retention-days 30
成本陷阱:1TB手动备份 × 0.025美元/GB/月 × 12个月 = 每年浪费300美元

❌ **绝对不要在生产查询中使用SELECT ***
```sql
-- 错误用法 - 拉取所有列,消耗大量网络和解析资源
SELECT * FROM orders WHERE customer_id = :cust_id;

-- 正确用法 - 指定需要的列
SELECT order_id, total_amount, status FROM orders WHERE customer_id = :cust_id;

影响:50列的表,只需要拉取5列
- SELECT *: 50列 × 1000行 = 5万个数据点
- 显式指定列:5列 × 1000行 = 5千个数据点(减少90%)
调试慢查询时绝对不要忽略SQL_ID
sql
-- 错误做法 - "我的查询很慢,优化整个数据库"
ALTER SYSTEM SET optimizer_mode = 'FIRST_ROWS';  # 会影响所有查询!

-- 正确做法 - 识别具体的SQL_ID,仅优化该查询
SELECT sql_id, elapsed_time/executions/1000 AS avg_ms, executions
FROM v$sql
WHERE executions > 0
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;

然后仅优化指定的SQL_ID(而不是整个数据库)
绝对不要将ROWNUM和ORDER BY一起使用(会得到错误结果)
sql
-- 错误用法 - ROWNUM在ORDER BY之前执行,得到的Top10是错误的
SELECT * FROM orders WHERE ROWNUM <= 10 ORDER BY created_at DESC;

-- 正确用法 - 使用FETCH FIRST(Oracle 12c及以上版本支持)
SELECT * FROM orders ORDER BY created_at DESC FETCH FIRST 10 ROWS ONLY;
开启ADB自动扩缩容前绝对不要先了解其运行规则
ADB自动扩缩容注意事项:
- 基准ECPU:2
- 自动扩缩容:最多可扩到基准的1-3倍(2 → 最大6 ECPU)
- 计费:按周期内的峰值使用量收费

WRONG - enable auto-scaling then forget about it

错误做法 - 开启自动扩缩容后就不管了

Cost surprise: Base 2 ECPU ($526/month) → Peak 6 ECPU ($1,578/month)
成本意外:基准2 ECPU(每月526美元)→ 峰值6 ECPU(每月1578美元)

RIGHT - set max ECPU limit in console

正确做法 - 在控制台设置最大ECPU上限

Max ECPU = 4 (2× base, not 3×) Cost control: Peak 4 ECPU ($1,052/month) max
undefined
最大ECPU = 4(基准的2倍,而非3倍) 成本控制:峰值最高为4 ECPU(每月1052美元)
undefined

Performance Troubleshooting Decision Tree

性能排查决策树

"Queries are slow"?
├─ Is it ONE query or ALL queries?
│  ├─ ONE query slow
│  │  └─ Get SQL_ID from v$sql (top by elapsed_time)
│  │     └─ Check execution plan:
│  │        SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'));
│  │        ├─ Full table scan? → Add index
│  │        ├─ Wrong join order? → Use hints or SQL Plan Management
│  │        └─ Cartesian join? → Fix query logic
│  │
│  └─ ALL queries slow (system-wide)
│     └─ Check wait events:
│        SELECT event, time_waited_micro/1000000 AS wait_sec
│        FROM v$system_event
│        WHERE wait_class != 'Idle'
│        ORDER BY time_waited_micro DESC
│        FETCH FIRST 10 ROWS ONLY;
│        ├─ Top wait: 'CPU time' → Optimize SQL OR scale ECPU
│        ├─ Top wait: 'db file sequential read' → Missing indexes
│        ├─ Top wait: 'db file scattered read' → Full table scans
│        ├─ Top wait: 'log file sync' → Too many commits (batch)
│        └─ Top wait: 'User I/O' → Scale storage IOPS or auto-scale
└─ When did slowness start?
   ├─ After schema change? → Gather stats (DBMS_STATS)
   ├─ After data load? → Gather stats + check partitioning
   ├─ After version upgrade? → Check execution plan changes
   └─ Gradual over time? → Data growth, need indexing/partitioning
"查询变慢"?
├─ 是单个查询慢还是所有查询都慢?
│  ├─ 单个查询慢
│  │  └─ 从v$sql中获取SQL_ID(按elapsed_time排序取Top)
│  │     └─ 检查执行计划:
│  │        SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'));
│  │        ├─ 全表扫描? → 添加索引
│  │        ├─ 连接顺序错误? → 使用Hint或SQL计划管理
│  │        └─ 笛卡尔连接? → 修复查询逻辑
│  │
│  └─ 所有查询都慢(系统级问题)
│     └─ 检查等待事件:
│        SELECT event, time_waited_micro/1000000 AS wait_sec
│        FROM v$system_event
│        WHERE wait_class != 'Idle'
│        ORDER BY time_waited_micro DESC
│        FETCH FIRST 10 ROWS ONLY;
│        ├─ Top等待:'CPU time' → 优化SQL 或 扩容ECPU
│        ├─ Top等待:'db file sequential read' → 缺失索引
│        ├─ Top等待:'db file scattered read' → 存在全表扫描
│        ├─ Top等待:'log file sync' → 提交太频繁(改为批量提交)
│        └─ Top等待:'User I/O' → 扩容存储IOPS或开启自动扩缩容
└─ 慢查询是从什么时候开始的?
   ├─  schema变更之后? → 收集统计信息(DBMS_STATS)
   ├─ 数据导入之后? → 收集统计信息 + 检查分区策略
   ├─ 版本升级之后? → 检查执行计划变更
   └─ 随时间逐渐变慢? → 数据增长,需要添加索引/分区

ADB Cost Calculations (Exact)

ADB成本计算(精确版)

ECPU Scaling Cost

ECPU扩缩容成本

License-Included pricing: $0.36/ECPU-hour
BYOL pricing: $0.18/ECPU-hour (if you have Oracle licenses)

Monthly cost = ECPU count × hourly rate × 730 hours

Examples:
2 ECPU: 2 × $0.36 × 730 = $526/month
4 ECPU: 4 × $0.36 × 730 = $1,052/month
8 ECPU: 8 × $0.36 × 730 = $2,104/month

BYOL (50% off):
2 ECPU: 2 × $0.18 × 730 = $263/month
4 ECPU: 4 × $0.18 × 730 = $526/month
包含许可的定价:0.36美元/ECPU/小时
BYOL定价:0.18美元/ECPU/小时(如果你已有Oracle许可)

月度成本 = ECPU数量 × 小时单价 × 730小时

示例:
2 ECPU:2 × 0.36美元 × 730 = 每月526美元
4 ECPU:4 × 0.36美元 × 730 = 每月1052美元
8 ECPU:8 × 0.36美元 × 730 = 每月2104美元

BYOL(优惠50%):
2 ECPU:2 × 0.18美元 × 730 = 每月263美元
4 ECPU:4 × 0.18美元 × 730 = 每月526美元

Storage Cost

存储成本

Storage pricing: $0.025/GB/month (all tiers: Standard, Archive)

Examples:
1 TB: 1000 GB × $0.025 = $25/month
5 TB: 5000 GB × $0.025 = $125/month

CRITICAL: Storage charged even when ADB stopped!
存储定价:0.025美元/GB/月(所有层级:标准、归档)

示例:
1 TB:1000 GB × 0.025美元 = 每月25美元
5 TB:5000 GB × 0.025美元 = 每月125美元

重要提示:即使ADB停止,存储仍会收费!

Auto-Scaling Cost Impact

自动扩缩容成本影响

Scenario: Base 2 ECPU with auto-scaling enabled (1-3×)

Without auto-scaling:
2 ECPU × $0.36 × 730 = $526/month (fixed)

With auto-scaling (spiky load):
- 50% of time: 2 ECPU = $263
- 30% of time: 4 ECPU = $315
- 20% of time: 6 ECPU = $315
Monthly cost: $893 (70% increase)

When auto-scaling makes sense:
- Spiky load (not sustained high)
- Want to avoid manual scaling
- Cost increase acceptable (up to 3×)
场景:基准2 ECPU,开启自动扩缩容(1-3倍)

未开启自动扩缩容:
2 ECPU × 0.36美元 × 730 = 每月526美元(固定)

开启自动扩缩容(负载有波峰):
- 50%时间:2 ECPU = 263美元
- 30%时间:4 ECPU = 315美元
- 20%时间:6 ECPU = 315美元
月度成本:893美元(上涨70%)

适合开启自动扩缩容的场景:
- 负载有明显波峰(不是持续高负载)
- 不想手动扩缩容
- 可接受最高3倍的成本上涨

SQL_ID Debugging Workflow

SQL_ID调试工作流

Step 1: Find problem SQL_ID
sql
SELECT sql_id,
       elapsed_time/executions/1000 AS avg_ms,
       executions,
       sql_text
FROM v$sql
WHERE executions > 0
  AND last_active_time > SYSDATE - 1/24  -- Last hour
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
Step 2: Get execution plan
sql
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'));
Step 3: Analyze plan issues
  • TABLE ACCESS FULL
    on large table → Missing index
  • NESTED LOOPS
    with high cardinality → Wrong join method
  • HASH JOIN OUTER
    → Consider index join
Step 4: Create SQL Tuning Task
sql
DECLARE
  task_name VARCHAR2(30);
BEGIN
  task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_id => '&sql_id',
    task_name => 'tune_slow_query'
  );
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name);
END;
/

-- Get recommendations
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tune_slow_query') FROM DUAL;
Step 5: Implement fix
  • Recommendation: Add index → Create index
  • Recommendation: Use hint → Test with hint, then SQL Plan Baseline
  • Recommendation: Gather stats →
    EXEC DBMS_STATS.GATHER_TABLE_STATS
步骤1:找到有问题的SQL_ID
sql
SELECT sql_id,
       elapsed_time/executions/1000 AS avg_ms,
       executions,
       sql_text
FROM v$sql
WHERE executions > 0
  AND last_active_time > SYSDATE - 1/24  -- 过去1小时
ORDER BY elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;
步骤2:获取执行计划
sql
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id'));
步骤3:分析执行计划问题
  • 大表上的
    TABLE ACCESS FULL
    → 缺失索引
  • 高基数的
    NESTED LOOPS
    → 连接方法错误
  • HASH JOIN OUTER
    → 考虑使用索引连接
步骤4:创建SQL调优任务
sql
DECLARE
  task_name VARCHAR2(30);
BEGIN
  task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
    sql_id => '&sql_id',
    task_name => 'tune_slow_query'
  );
  DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name);
END;
/

-- 获取调优建议
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tune_slow_query') FROM DUAL;
步骤5:执行修复
  • 建议:添加索引 → 创建索引
  • 建议:使用Hint → 测试Hint,然后配置SQL计划基线
  • 建议:收集统计信息 →
    EXEC DBMS_STATS.GATHER_TABLE_STATS

ADB-Specific Behaviors (OCI Gotchas)

ADB专属行为(OCI注意事项)

Auto-Scaling Limits

自动扩缩容限制

Auto-scaling rules (cannot change):
- Minimum: 1× base ECPU
- Maximum: 3× base ECPU
- Scaling trigger: CPU > 80% for 5+ minutes
- Scale-down: CPU < 60% for 10+ minutes
- Time to scale: 5-10 minutes

Example: Base 2 ECPU
- Can scale: 2 → 4 → 6 ECPU
- Cannot scale: Beyond 6 ECPU (hard limit)
- Cost: Pay for peak usage each hour
自动扩缩容规则(不可修改):
- 最小值:基准ECPU的1倍
- 最大值:基准ECPU的3倍
- 扩容触发条件:CPU使用率>80%持续5分钟以上
- 缩容触发条件:CPU使用率<60%持续10分钟以上
- 扩缩容耗时:5-10分钟

示例:基准2 ECPU
- 可扩容范围:2 → 4 → 6 ECPU
- 不可超过:6 ECPU(硬限制)
- 计费:按每小时的峰值使用量付费

ADMIN User Restrictions

ADMIN用户限制

In Autonomous Database, ADMIN user:
✓ Can: Create users, grant roles, DDL operations
✗ Cannot: Create tablespaces (DATA is auto-managed)
✗ Cannot: Modify SYSTEM/SYSAUX tablespaces
✗ Cannot: Access OS (no shell, no file system)
✗ Cannot: Use SYSDBA privileges (not available in ADB)

For applications:
- ADMIN: Only for database setup/maintenance
- App users: Create dedicated users with minimal grants
在Autonomous Database中,ADMIN用户:
✓ 可操作:创建用户、授予角色、DDL操作
✗ 不可操作:创建表空间(DATA由系统自动管理)
✗ 不可操作:修改SYSTEM/SYSAUX表空间
✗ 不可操作:访问操作系统(无Shell、无文件系统权限)
✗ 不可操作:使用SYSDBA权限(ADB中不提供该权限)

应用使用建议:
- ADMIN:仅用于数据库初始化/运维操作
- 应用用户:创建权限最小的专属用户

Service Name Performance Impact

服务名对性能的影响

ADB provides 3 service names per database:

| Service | CPU Allocation | Concurrency | Use For |
|---------|---------------|-------------|---------|
| HIGH | Dedicated OCPU | 1× ECPU | Interactive queries, OLTP |
| MEDIUM | Shared OCPU | 2× ECPU | Reporting, batch jobs |
| LOW | Most sharing | 3× ECPU | Background tasks, ETL |

Cost: All service names use same ECPU pool (no extra cost)
Performance: HIGH is faster but limits concurrency
Gotcha: Using HIGH for background jobs wastes resources
每个ADB提供3个服务名:

| 服务名 | CPU分配 | 并发数 | 适用场景 |
|---------|---------------|-------------|---------|
| HIGH | 专属OCPU | 1× ECPU | 交互式查询、OLTP |
| MEDIUM | 共享OCPU | 2× ECPU | 报表、批处理作业 |
| LOW | 最高共享度 | 3× ECPU | 后台任务、ETL |

成本:所有服务名使用同一个ECPU池(无额外成本)
性能:HIGH最快,但并发数有限
注意事项:将HIGH服务名用于后台任务会浪费资源

Backup Retention (Automatic vs Manual)

备份保留期(自动vs手动)

Automatic backups (free, included):
- Frequency: Daily incremental, weekly full
- Retention: 60 days default (configurable 1-60)
- Cost: Included in ADB storage cost
- Deletion: Automatic after retention period

Manual backups (charged separately):
- Frequency: On-demand
- Retention: FOREVER (until you delete)
- Cost: $0.025/GB/month
- Deletion: Manual only

Cost trap: 10 manual backups × 1TB × $0.025/GB/month = $250/month
Recommendation: Use automatic backups, manual only for long-term archival
自动备份(免费,包含在服务费中):
- 频率:每日增量备份,每周全量备份
- 保留期:默认60天(可配置1-60天)
- 成本:包含在ADB存储成本中
- 删除:保留期过后自动删除

手动备份(单独收费):
- 频率:按需触发
- 保留期:永久(直到你手动删除)
- 成本:0.025美元/GB/月
- 删除:仅支持手动删除

成本陷阱:10个1TB的手动备份 × 0.025美元/GB/月 = 每月250美元
建议:优先使用自动备份,手动备份仅用于长期归档

Version-Specific Features (Know Which ADB Version)

版本专属功能(明确你使用的ADB版本)

Feature19c21c23ai26aiWhen to Use
JSON Relational Duality--Modern apps (REST + SQL)
AI Vector Search--RAG, semantic search
JavaScript Stored Procs---Node.js developers
SELECT AI--Natural language → SQL
Property Graphs-Fraud detection, social
True Cache---Read-heavy workloads
Blockchain Tables-Immutable audit log
Upgrade path: 19c → 21c → 23ai → 26ai Downgrade: NOT supported (cannot go back) Recommendation: Test in clone before upgrading production
功能19c21c23ai26ai适用场景
JSON关系二元性--现代应用(REST + SQL)
AI向量搜索--RAG、语义搜索
JavaScript存储过程---Node.js开发者
SELECT AI--自然语言转SQL
属性图-欺诈检测、社交网络
True Cache---读密集型负载
区块链表-不可篡改审计日志
升级路径: 19c → 21c → 23ai → 26ai 降级: 不支持(无法回退) 建议: 升级生产环境前先在克隆实例上测试
undefined

Common ADB Errors Decoded

常见ADB错误解码

Error MessageActual CauseSolution
ORA-01017: invalid username/password
Wallet password wrong OR expired credentialsRe-download wallet, check password
ORA-12170: Connect timeout
Network issue OR wrong service nameCheck NSG rules, verify tnsnames.ora
ORA-00604: error at recursive SQL level 1
Automated task failed (stats gather, space mgmt)Check DBA_SCHEDULER_JOB_RUN_DETAILS
ORA-30036: unable to extend segment
Tablespace full (DATA auto-managed)ADB auto-extends, if error persists → contact support
ORA-01031: insufficient privileges
ADMIN user trying restricted operationUse ADMIN only for allowed operations (see restrictions)
错误信息实际原因解决方案
ORA-01017: invalid username/password
Wallet密码错误 或 凭证已过期重新下载Wallet,检查密码
ORA-12170: Connect timeout
网络问题 或 服务名错误检查NSG规则,验证tnsnames.ora配置
ORA-00604: error at recursive SQL level 1
自动化任务失败(统计信息收集、空间管理)检查DBA_SCHEDULER_JOB_RUN_DETAILS
ORA-30036: unable to extend segment
表空间已满(DATA由系统自动管理)ADB会自动扩容,如果错误持续存在 → 联系支持
ORA-01031: insufficient privileges
ADMIN用户尝试执行受限操作仅在允许的操作范围内使用ADMIN(参考限制说明)

Advanced Operations (Progressive Loading)

高级操作(渐进式加载)

SQLcl Direct Database Access

SQLcl直接访问数据库

WHEN TO LOAD
sqlcl-workflows.md
:
  • Need to execute SQL queries directly via Bash
  • Want to get execution plans, wait events, or active sessions
  • Performing SQL tuning tasks (DBMS_SQLTUNE)
  • Exporting/importing data with Data Pump
  • Generating DDL for schema objects
Example: Finding top SQL by elapsed time
bash
sql admin/password@adb_high <<EOF
SELECT sql_id, elapsed_time/executions/1000 AS avg_ms
FROM v\$sql WHERE executions > 0
ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
EXIT;
EOF
Do NOT load for:
  • Standard troubleshooting advice - covered in this skill's decision trees
  • Cost calculations - exact formulas provided above
  • Anti-patterns - NEVER list covers common mistakes

需要加载
sqlcl-workflows.md
的场景:
  • 需要通过Bash直接执行SQL查询
  • 需要获取执行计划、等待事件或活跃会话信息
  • 执行SQL调优任务(DBMS_SQLTUNE)
  • 使用Data Pump导出/导入数据
  • 为schema对象生成DDL
示例: 按执行耗时查询Top SQL
bash
sql admin/password@adb_high <<EOF
SELECT sql_id, elapsed_time/executions/1000 AS avg_ms
FROM v\$sql WHERE executions > 0
ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
EXIT;
EOF
不需要加载的场景:
  • 标准排查建议 - 本技能的决策树已覆盖
  • 成本计算 - 上文已提供精确公式
  • 反模式 - 禁止操作列表已覆盖常见错误

OCI CLI for ADB Management

用于ADB管理的OCI CLI

WHEN TO LOAD
oci-cli-adb.md
:
  • Need to provision, scale, or delete ADB instances
  • Creating backups or clones (full vs metadata)
  • Downloading wallet files
  • Changing configuration (auto-scaling, license type, version upgrades)
  • Batch operations across multiple ADBs
Example: Scale ADB from 2 to 4 ECPUs
bash
oci db autonomous-database update \
  --autonomous-database-id ocid1.autonomousdatabase.oc1..xxx \
  --cpu-core-count 4 \
  --wait-for-state AVAILABLE
Example: Create metadata clone (70% cheaper - schema only, no data)
bash
oci db autonomous-database create-from-clone \
  --source-id ocid1.autonomousdatabase.oc1..xxx \
  --display-name "dev-schema" \
  --db-name "DEVSCHEMA" \
  --clone-type METADATA \
  --wait-for-state AVAILABLE
Do NOT load for:
  • SQL operations (use SQLcl instead)
  • Performance analysis (v$sql queries covered in this skill)
  • Cost formulas (exact calculations provided above)

需要加载
oci-cli-adb.md
的场景:
  • 需要创建、扩容或删除ADB实例
  • 创建备份或克隆(全量vs元数据)
  • 下载Wallet文件
  • 修改配置(自动扩缩容、许可类型、版本升级)
  • 跨多个ADB执行批量操作
示例: 将ADB的ECPU从2扩容到4
bash
oci db autonomous-database update \
  --autonomous-database-id ocid1.autonomousdatabase.oc1..xxx \
  --cpu-core-count 4 \
  --wait-for-state AVAILABLE
示例: 创建元数据克隆(便宜70% - 仅schema,无数据)
bash
oci db autonomous-database create-from-clone \
  --source-id ocid1.autonomousdatabase.oc1..xxx \
  --display-name "dev-schema" \
  --db-name "DEVSCHEMA" \
  --clone-type METADATA \
  --wait-for-state AVAILABLE
不需要加载的场景:
  • SQL操作(使用SQLcl)
  • 性能分析(本技能已覆盖v$sql查询)
  • 成本公式(上文已提供精确计算方法)

OCI Autonomous Database Best Practices (Official Oracle Documentation)

OCI Autonomous Database最佳实践(Oracle官方文档)

WHEN TO LOAD
oci-adb-best-practices.md
:
  • Need comprehensive ADB architecture and design patterns
  • Understanding ADB workload types (ATP, ADW, APEX, JSON)
  • Implementing production-grade ADB deployments
  • Need official Oracle guidance on ADB features and limitations
  • Planning migrations to ADB from on-premises Oracle
Do NOT load for:
  • Quick SQL_ID debugging (workflow in this skill)
  • Cost calculations (exact formulas above)
  • Common gotchas (NEVER list covers them)

需要加载
oci-adb-best-practices.md
的场景:
  • 需要全面的ADB架构和设计模式
  • 了解ADB负载类型(ATP、ADW、APEX、JSON)
  • 实现生产级ADB部署
  • 需要Oracle官方关于ADB功能和限制的指导
  • 计划从本地Oracle迁移到ADB
不需要加载的场景:
  • 快速SQL_ID调试(本技能已提供工作流)
  • 成本计算(上文已提供精确公式)
  • 常见注意事项(禁止操作列表已覆盖)

When to Use This Skill

本技能适用场景

  • Performance issues: Slow queries, high CPU, scaling decisions
  • Cost optimization: ECPU sizing, stopped ADB charges, backup retention
  • Debugging: SQL_ID workflow, wait events, execution plans
  • Auto-scaling: When to enable, cost impact, limits
  • Version planning: Feature comparison (19c vs 26ai), upgrade timing
  • Security: ADMIN restrictions, user setup, service name selection
  • 性能问题:慢查询、高CPU、扩缩容决策
  • 成本优化:ECPU规格选型、停止ADB收费规则、备份保留期设置
  • 调试:SQL_ID工作流、等待事件、执行计划
  • 自动扩缩容:开启时机、成本影响、限制
  • 版本规划:功能对比(19c vs 26ai)、升级时机
  • 安全:ADMIN权限限制、用户创建、服务名选择