oracle について
oracle は、Oracle Database を扱う開発者やデータベース担当者向けのスキルです。SQL、PL/SQL、性能、安全性、バックアップ、高度な機能を、用途別の案内とリファレンスで整理しています。
主な機能
- 01Oracle SQLの構文と関数
- 02PL/SQLのプロシージャとトリガー
- 03実行計画と性能チューニング
- 04バックアップ、リカバリ、Data Guard
- 05セキュリティ、パーティション、Flashback
活用シーン
- 01OracleクエリやPL/SQLの作成
- 02遅いクエリの実行計画の調査
- 03データベースのバックアップや復旧の計画
- 04パーティションやセキュリティ手法の参照
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ database-skills --skill oracleインストール後、Claude Code で/oracleを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSE.txtagents/openai.yamlexamples/01-plsql-procedure.md02-awr-analysis.md03-rman-backup.md04-dataguard-setup.mdreferences/01-functions-string.md02-functions-date.md03-analytic-functions.md04-plsql-guide.md05-performance-tuning.md06-backup-recovery.md07-dataguard-rac.md08-security.md09-sql-syntax.md10-features.md詳細
Oracle Database — エンタープライズ向けリレーショナルデータベース
Oracle Database は、世界をリードするエンタープライズ向けリレーショナルデータベース管理システムです。高可用性、高性能、強固なセキュリティ、そして豊富な機能(RAC、Data Guard、Flashback、高度なパーティショニング、マテリアライズドビューなど)で知られています。
ワークフロー — 使用判断ツリー
遇到 Oracle 相关需求时,按以下顺序决策:
Step 1: 明确场景
├── 编写 SQL 查询/DDL/DML? → references/09-sql-syntax.md
├── 使用内置函数? → 字符串/日期/聚合 → references/01-functions-string.md / 02-functions-date.md
├── 窗口/分析函数? → references/03-analytic-functions.md
├── 编写 PL/SQL? → references/04-plsql-guide.md
├── 性能调优/执行计划? → references/05-performance-tuning.md
├── 备份恢复? → references/06-backup-recovery.md
├── Data Guard / RAC? → references/07-dataguard-rac.md
├── 安全/权限/审计? → references/08-security.md
└── 分区/物化视图/Flashback/AQ? → references/10-features.md
Step 2: 选择工具
├── 交互式查询 → SQL*Plus / SQL Developer / DBeaver
├── 批量脚本 → SQL*Plus 静默模式
├── PL/SQL 调试 → SQL Developer / TOAD / PL/SQL Developer
└── 自动化运维 → OEM / 脚本
Step 3: 确定环境
├── 版本 → 19c (LTS), 21c/23c (最新)
├── 架构 → 单实例 / RAC / Data Guard / RAC+DG
├── CDB/PDB? → 12c+ 多租户
└── 字符集 → AL32UTF8, ZHS16GBK
使用する場合/使用しない場合
| ✅ 使用する場合 | ❌ 使用しない場合 |
|---|---|
| エンタープライズ向けトランザクション処理(ACID を厳格に保証) | 単純なキー値キャッシュ(Redis を使用) |
| 複雑な SQL、複数テーブルの JOIN、レポート分析 | ドキュメントストレージ(MongoDB を使用) |
| PL/SQL のストアドプロシージャ/パッケージ/トリガー | 全文検索が中心(Elasticsearch を使用) |
| 大量データのパーティショニング(TB/PB 規模) | リアルタイムのインメモリ計算(Redis/Spark を使用) |
| 高可用性(RAC/Data Guard) | 軽量な組み込み用途(SQLite を使用) |
| データウェアハウス/OLAP 分析 | 時系列データ(InfluxDB/TimescaleDB を使用) |
| データセキュリティと監査(TDE/FGA/VPD) | シンプルな CRUD の迅速な開発(PostgreSQL を使用) |
| 大規模な OLTP トランザクションシステム | ドキュメント形式の階層データのみが必要(PostgreSQL JSONB を使用) |
対応範囲 — 機能の境界
| ✅ 完全に適している | ⚠️ 条件付きで適している | ❌ 適していない |
|---|---|---|
| OLTP/OLAP 混合ワークロード | 大量の非構造化データ(オブジェクトストレージを使用) | Redis の代わりにインメモリキャッシュとして使う |
| 複雑なトランザクションとデータ整合性 | 異種データベース間の統合(GoldenGate/DB Link) | リアルタイムストリーム処理(Kafka/Storm) |
| PL/SQL によるビジネスロジックのカプセル化 | マルチライター構成(RAC の共有ストレージへの書き込み) | シンプルな CRUD プロトタイプの迅速な反復開発 |
| データのパーティショニングとマテリアライズドビュー | 地理的に分散したマルチアクティブ構成(GoldenGate を使用) | 複数モデルのデータを一元管理する |
| RAC クラスターによる高可用性 | 超低レイテンシー(<100μs)のクエリ | 全文検索エンジンの代わりに全文検索に使う |
| きめ細かなセキュリティ監査 | ドキュメントデータベースとして大量の JSON を保存する | オブジェクトストレージの代わりに使う |
範囲外の場合は、PostgreSQL(オープンソースのリレーショナルデータベース)、MongoDB(ドキュメントデータベース)、Redis(キャッシュ)、Elasticsearch(全文検索)、MySQL(軽量な Web 用)を検討してください。
SQL 構文クイックリファレンス
Oracle の SQL の違いは、主に以下の点にあります。詳細は references/09-sql-syntax.md を参照してください。
| 特性 | 説明 | 参照ファイル |
|---|---|---|
| データ型 | VARCHAR2, NUMBER, CLOB, BLOB, TIMESTAMP, INTERVAL | references/09-sql-syntax.md |
| シーケンス | AUTO_INCREMENT の代わりに CREATE SEQUENCE を使用 | references/09-sql-syntax.md |
| MERGE | UPSERT(存在する場合は更新し、存在しない場合は挿入) | references/09-sql-syntax.md |
| INSERT ALL | 複数テーブルへの条件付き挿入 | references/09-sql-syntax.md |
| CONNECT BY | 階層クエリ(組織ツリー) | references/09-sql-syntax.md |
| PIVOT/UNPIVOT | 行から列/列から行への変換 | references/09-sql-syntax.md |
| LISTAGG | 列を文字列に集約 | references/09-sql-syntax.md |
| MODEL 句 | スプレッドシート形式の行間計算 | references/09-sql-syntax.md |
| MATCH_RECOGNIZE | パターンマッチング(12c+) | references/09-sql-syntax.md |
| FLASHBACK QUERY | フラッシュバックによる履歴データのクエリ | references/09-sql-syntax.md |
| WITH (CTE)/再帰 CTE | 共通テーブル式 | references/09-sql-syntax.md |
| 疑似列 | ROWNUM, ROWID, LEVEL, ORA_ROWSCN | references/09-sql-syntax.md |
| 集合演算 | UNION, INTERSECT, MINUS(Oracle の差集合演算) | references/09-sql-syntax.md |
関数クイックリファレンス
| カテゴリ | 主な関数 | 参照ファイル |
|---|---|---|
| 文字列 | SUBSTR, INSTR, REPLACE, REGEXP_LIKE/SUBSTR/REPLACE, TRANSLATE, LISTAGG | references/01-functions-string.md |
| 数値 | ROUND, TRUNC, MOD, CEIL, FLOOR, POWER, GREATEST/LEAST | references/01-functions-string.md |
| 日付 | SYSDATE, EXTRACT, TO_DATE/TO_CHAR, ADD_MONTHS, MONTHS_BETWEEN, LAST_DAY, NEXT_DAY, TRUNC(日付版) | references/02-functions-date.md |
| 変換 | TO_CHAR/TO_NUMBER/TO_DATE, CAST, CONVERT, SCN_TO_TIMESTAMP | references/02-functions-date.md |
| NULL 処理 | NVL, NVL2, COALESCE, NULLIF, LNNVL | references/01-functions-string.md |
| 集計 | COUNT, SUM, AVG, MEDIAN, STATS_MODE, ROLLUP/CUBE, GROUPING | references/03-analytic-functions.md |
| 分析/ウィンドウ | ROW_NUMBER, RANK, DENSE_RANK, NTILE, LAG/LEAD, FIRST_VALUE/LAST_VALUE, RATIO_TO_REPORT | references/03-analytic-functions.md |
高度な機能の一覧
| 機能 | 説明 | 参照ファイル |
|---|---|---|
| PL/SQL ブロック構造 | DECLARE/BEGIN/EXCEPTION/END | references/04-plsql-guide.md |
| カーソル(Cursor) | 明示的/暗黙的/REF CURSOR/SYS_REFCURSOR | references/04-plsql-guide.md |
| ストアドプロシージャ/関数 | CREATE OR REPLACE PROCEDURE/FUNCTION | references/04-plsql-guide.md |
| パッケージ(Package) | 仕様部+本体、カプセル化/オーバーロード/グローバル変数 | references/04-plsql-guide.md |
| トリガー(Trigger) | DML/INSTEAD OF/DDL/システムイベント | references/04-plsql-guide.md |
| コレクション型 | 連想配列/ネストした表/VARRAY | references/04-plsql-guide.md |
| 動的 SQL | EXECUTE IMMEDIATE / DBMS_SQL / FORALL / BULK COLLECT | references/04-plsql-guide.md |
| 例外処理 | 定義済み/ユーザー定義/RAISE_APPLICATION_ERROR | references/04-plsql-guide.md |
| EXPLAIN PLAN / DBMS_XPLAN | 実行計画の確認と分析 | references/05-performance-tuning.md |
| AWR/ASH/ADDM | パフォーマンス履歴/アクティブセッション/自動診断 | references/05-performance-tuning.md |
| SQL Tuning Advisor | SQL の自動最適化に関する推奨事項 | references/05-performance-tuning.md |
| DBMS_STATS | 統計情報の収集と管理 | references/05-performance-tuning.md |
| SPM (SQL Plan Management) | 実行計画ベースラインの管理 | references/05-performance-tuning.md |
| RMAN | データベース全体/増分バックアップとリカバリ | references/06-backup-recovery.md |
| EXPDP/IMPDP | 論理バックアップのインポート/エクスポート | references/06-backup-recovery.md |
| アーカイブログモード | ARCHIVELOG / NOARCHIVELOG | references/06-backup-recovery.md |
| Data Guard | 物理スタンバイ/論理スタンバイ/Switchover/Failover | references/07-dataguard-rac.md |
| RAC | クラスター/シーケンス構成/グローバル待機 | references/07-dataguard-rac.md |
| ユーザー/ロール/権限 | システム権限/オブジェクト権限/Profile | references/08-security.md |
| FGA(きめ細かな監査) | 条件に基づく SQL 監査 | references/08-security.md |
| VPD(仮想プライベートデータベース) | 行レベルのセキュリティポリシー | references/08-security.md |
| データリダクション(Data Redaction) | 動的なデータマスキング | references/08-security.md |
| TDE(透過的データ暗号化) | 列レベル/表領域レベルの暗号化 | references/08-security.md |
| 表領域とデータファイル | CREATE/ALTER TABLESPACE | references/10-features.md |
| パーティション表 | RANGE/LIST/HASH/複合/インターバルパーティション | references/10-features.md |
| インデックス | B-Tree/ビットマップ/関数/ドメインインデックス | references/10-features.md |
| マテリアライズドビュー | クエリ書き換え/高速リフレッシュ/ON COMMIT | references/10-features.md |
| Flashback | フラッシュバッククエリ/表/削除/データベース | references/10-features.md |
| AQ(アドバンストキューイング) | メッセージキュー | references/10-features.md |
Gotchas — よくある落とし穴
| # | 問題 | リスク | 解決策 |
|---|---|---|---|
| 1 | ROWNUM と ORDER BY の順序が誤っている | Top-N にならない | サブクエリでソートするか、FETCH FIRST(12c+)を使用 |
| 2 | 暗黙的な型変換によるインデックスの無効化 | 全表スキャン | WHERE hire_date = TO_DATE('2024-01-15','YYYY-MM-DD') |
| 3 | NOT IN サブクエリに NULL が含まれると結果が空になる | データ損失 | NOT EXISTS に置き換える |
| 4 | SELECT INTO でデータがない場合、NO_DATA_FOUND が発生する | プロシージャの終了 | 事前に確認するか、EXCEPTION で捕捉する |
| 5 | バインド変数のピーキング | 実行計画の偏り | ACS / SQL Profile を使用 |
| 6 | 統計情報が古すぎる | オプティマイザーが誤った計画を選択する | DBMS_STATS で定期的に収集する |
| 7 | OLTP でビットマップインデックスを使用する | 行ロックによるブロック | OLTP では B-Tree インデックスを使用 |
| 8 | 大量の行を UPDATE する際に FORALL を使用しない | パフォーマンスが極めて低い | FORALL で DML を一括処理する |
| 9 | パーティションプルーニングを無視する | 全パーティションをスキャンする | WHERE 条件にパーティションキーを含める |
| 10 | トリガーの再帰/変異表(ORA-04091) | トリガーの失敗 | 複合トリガー/自律型トランザクション/文レベルのトリガー |
| 11 | ビュー/プロシージャ内で SELECT * を使用する | 構造変更後に動作が異常になる | 列名を明示する |
| 12 | 大量の DISTINCT で不適切な JOIN を覆い隠す | 大きなパフォーマンスコスト | JOIN 条件を確認する |
| 13 | マテリアライズドビューの ON COMMIT リフレッシュが DML のパフォーマンスに影響する | 書き込み操作が遅くなる | ログを作成し、ON DEMAND で定期的にリフレッシュする |
| 14 | WHERE 句で列に関数を適用する | インデックスの無効化 | 範囲検索に書き換える |
| 15 | DBMS_OUTPUT で大量のデータを出力する | バッファーのオーバーフロー | デバッグ専用とし、本番環境ではログテーブルを使用する |
FAQ
Q1: VARCHAR2 と NVARCHAR2 の違いは何ですか? VARCHAR2 はデータベース文字セット(AL32UTF8/ZHS16GBK)を使用し、NVARCHAR2 は各国語文字セット(AL16UTF16)を使用します。一般的な用途には VARCHAR2、多言語対応には NVARCHAR2 を推奨します。
Q2: ROWNUM と ROW_NUMBER() の違いは何ですか? ROWNUM は疑似列(先に割り当ててから並べ替え)で、ROW_NUMBER() は分析関数(並べ替えてから番号を割り当て)です。
Q3: Oracle と PostgreSQL の主な違いは何ですか?
| 特性 | Oracle | PostgreSQL |
|---|---|---|
| 自動採番 | SEQUENCE / IDENTITY (12c+) | SERIAL / GENERATED AS IDENTITY |
| 文字列 | VARCHAR2 | VARCHAR / TEXT |
| 空文字列 | '' = NULL | '' ≠ NULL |
| 再帰 | CONNECT BY / WITH RECURSIVE | WITH RECURSIVE |
| ページネーション | ROWNUM / FETCH FIRST | LIMIT/OFFSET |
| UPSERT | MERGE | INSERT...ON CONFLICT |
| 表領域 | あり | なし |
Q4: UNDO と REDO の違いは何ですか? REDO は変更を記録し(再実行/リカバリ)、UNDO は変更前のデータを記録します(ロールバック/一貫性読み取り/フラッシュバック)。
Q5: マテリアライズドビューはどのような場合に使用しますか? 大規模な集計クエリで遅延を許容できる場合、基表の変更頻度が低い場合、データベース間のキャッシュが必要な場合、クエリの書き換えが必要な場合です。
Q6: パーティション表でよくある誤解は何ですか? パーティション化してもクエリが必ず高速化されるわけではありません(パーティションキーが必要です)。あらゆる大規模表の問題を解決できるわけではなく、パーティション数は多いほどよいわけでもありません。また、OLTP にもパーティションは適しています。
Q7: 読み取り一貫性とは何ですか? Oracle は UNDO を使用して、SELECT がロックを取得せず、書き込みによってブロックされることもなく実行できるようにします。クエリ開始時の SCN を使用して、一貫性のあるバージョンを読み取ります。
Q8: デッドロックにはどのように対処しますか? Oracle は 3 秒以内に自動検出し、犠牲となる文をロールバックして ORA-00060 を発生させます。ベストプラクティスは、アクセス順序を統一し、トランザクションを短くすることです。
Q9: CDB と PDB とは何ですか? 12c 以降のマルチテナント環境では、CDB はコンテナデータベース、PDB はプラガブルデータベースです。1 つの CDB には最大 4096 個の PDB を含められます。
Q10: KILL SESSION の後も接続が切断されないのはなぜですか?
KILLED としてマークされ、次に SQL を実行したときに切断されます。KILL SESSION 'sid,serial#' IMMEDIATE を実行すると、すぐに切断できます。
Q11: REDO ログの切り替え頻度が高すぎる場合はどうすればよいですか? REDO ログのサイズを大きくし(切り替えは 15~30 分ごとを推奨)、ロググループ数を増やします(少なくとも 3~4 グループ)。
Q12: ORA-01555 "Snapshot Too Old" とは何ですか? UNDO データが上書きされています。UNDO 表領域を拡大し、UNDO_RETENTION を短縮し、長時間実行されるクエリを最適化してください。
Q13: Oracle でページネーションを実装するにはどうすればよいですか?
SELECT * FROM (SELECT t.*, ROWNUM AS rn FROM (SELECT ... ORDER BY col) t) WHERE rn BETWEEN 11 AND 20 または 12c 以降では OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY を使用します。
Q14: FORCE LOGGING とは何ですか? NOLOGGING 操作であっても、すべての DML で REDO を書き込むよう強制します。Data Guard 環境では有効にする必要があります。
Q15: 現在のデータベースバージョンを確認するにはどうすればよいですか?
SELECT * FROM v$version; または SELECT banner FROM v$version WHERE banner LIKE 'Oracle%'; を実行します。
Keywords
oracle, Oracle Database, PL/SQL, SQL*Plus, RAC, Data Guard, ADG, RMAN, expdp, impdp, flashback, AWR, ASH, ADDM, DBMS_XPLAN, VARCHAR2, NUMBER, CLOB, SEQUENCE, SYNONYM, CONNECT BY, PIVOT, LISTAGG, MERGE, INSERT ALL, MODEL, MATCH_RECOGNIZE, 分析関数, ウィンドウ関数, ROW_NUMBER, RANK, LAG, LEAD, ストアドプロシージャ, パッケージ, トリガー, カーソル, REF CURSOR, 動的 SQL, FORALL, BULK COLLECT, パーティション表, マテリアライズドビュー, ビットマップインデックス, 表領域, TDE, FGA, VPD, DBMS_STATS, SPM, CDB, PDB, マルチテナント, UNDO, REDO, 読み取り一貫性, ORA-01555
References
references/01-functions-string.md— 文字列/数値/NULL 処理関数references/02-functions-date.md— 日付/変換関数references/03-analytic-functions.md— 分析関数(ウィンドウ関数)+集計references/04-plsql-guide.md— PL/SQL の詳細references/05-performance-tuning.md— パフォーマンスチューニングreferences/06-backup-recovery.md— バックアップとリカバリreferences/07-dataguard-rac.md— Data Guard / RACreferences/08-security.md— セキュリティと権限references/09-sql-syntax.md— SQL 構文の詳細references/10-features.md— 独自機能(パーティション/マテリアライズドビュー/Flashback/AQ)examples/01-plsql-procedure.md— PL/SQL ストアドプロシージャの例examples/02-awr-analysis.md— AWR パフォーマンス分析の例examples/03-rman-backup.md— RMAN バックアップの例examples/04-dataguard-setup.md— Data Guard 構築の例- Oracle 19c 公式ドキュメント
- Oracle Live SQL(オンライン演習)