oracle-dba
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOCI 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:
- Use exact CLI commands from this skill's references
- Do NOT guess OCI CLI syntax or parameters
- Do NOT assume API endpoint structures
- Load for ADB management operations
oci-cli-adb.md
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操作时:
- 使用本技能参考资料中给出的精确CLI命令
- 不要猜测OCI CLI语法或参数
- 不要假设API端点结构
- 加载获取ADB管理操作指南
oci-cli-adb.md
你已掌握的知识:
- 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 optimizedCost 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
undefinedWRONG - manual backup with no retention (kept forever)
错误用法 - 未设置保留期的手动备份会永久保留
oci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"
--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"
--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
--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 periodoci db autonomous-database-backup create
--autonomous-database-id $ADB_ID
--display-name "pre-upgrade-backup"
--retention-days 30
--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美元)
undefinedPerformance 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
- on large table → Missing index
TABLE ACCESS FULL - with high cardinality → Wrong join method
NESTED LOOPS - → Consider index join
HASH JOIN OUTER
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版本)
| Feature | 19c | 21c | 23ai | 26ai | When 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
| 功能 | 19c | 21c | 23ai | 26ai | 适用场景 |
|---|---|---|---|---|---|
| JSON关系二元性 | - | - | ✓ | ✓ | 现代应用(REST + SQL) |
| AI向量搜索 | - | - | ✓ | ✓ | RAG、语义搜索 |
| JavaScript存储过程 | - | - | - | ✓ | Node.js开发者 |
| SELECT AI | - | - | ✓ | ✓ | 自然语言转SQL |
| 属性图 | - | ✓ | ✓ | ✓ | 欺诈检测、社交网络 |
| True Cache | - | - | - | ✓ | 读密集型负载 |
| 区块链表 | - | ✓ | ✓ | ✓ | 不可篡改审计日志 |
升级路径: 19c → 21c → 23ai → 26ai
降级: 不支持(无法回退)
建议: 升级生产环境前先在克隆实例上测试
undefinedCommon ADB Errors Decoded
常见ADB错误解码
| Error Message | Actual Cause | Solution |
|---|---|---|
| Wallet password wrong OR expired credentials | Re-download wallet, check password |
| Network issue OR wrong service name | Check NSG rules, verify tnsnames.ora |
| Automated task failed (stats gather, space mgmt) | Check DBA_SCHEDULER_JOB_RUN_DETAILS |
| Tablespace full (DATA auto-managed) | ADB auto-extends, if error persists → contact support |
| ADMIN user trying restricted operation | Use ADMIN only for allowed operations (see restrictions) |
| 错误信息 | 实际原因 | 解决方案 |
|---|---|---|
| Wallet密码错误 或 凭证已过期 | 重新下载Wallet,检查密码 |
| 网络问题 或 服务名错误 | 检查NSG规则,验证tnsnames.ora配置 |
| 自动化任务失败(统计信息收集、空间管理) | 检查DBA_SCHEDULER_JOB_RUN_DETAILS |
| 表空间已满(DATA由系统自动管理) | ADB会自动扩容,如果错误持续存在 → 联系支持 |
| 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;
EOFDo 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 AVAILABLEExample: 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 AVAILABLEDo 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权限限制、用户创建、服务名选择