誤操作制御の一時停止と状態チェックをマスターしよう!
Oracleで業務データを守るために活用されるトリガー(Trigger)。
しかし、開発やメンテナンス中に一時的に無効化したい場面もあります。
本記事では、トリガーの無効化・再有効化の方法に加え、有効/無効の状態確認方法(DBA_TRIGGERSビュー)まで詳しく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ 記事の構成
- 準備:ユーザー・テーブル・トリガー作成
- トリガーの無効化 / 有効化方法
DBA_TRIGGERSビューで状態を確認する方法- テーブル単位で一括制御
- 注意点とまとめ
🏗️準備:検証用のスキーマとトリガーを作成
DBAユーザーでUSER_Aを作成
CREATE USER user_a IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
GRANT CONNECT, RESOURCE TO user_a;
USER_Aでテーブルとトリガーを作成
CONNECT user_a/password
CREATE TABLE emp (
empno NUMBER PRIMARY KEY,
ename VARCHAR2(100)
);
CREATE OR REPLACE TRIGGER trg_block_delete_emp
BEFORE DELETE ON emp
BEGIN
RAISE_APPLICATION_ERROR(-20001, 'EMP表のDELETEは禁止されています。');
END;
/
❌ トリガーの無効化
ALTER TRIGGER trg_block_delete_emp DISABLE;
➡ このコマンドを実行することで、trg_block_delete_empは無効化され、DELETE操作をブロックしなくなります。
✅ トリガーの再有効化
ALTER TRIGGER trg_block_delete_emp ENABLE;
🔍 トリガーの有効/無効を確認する方法(DBA_TRIGGERS)
DBA権限を持つユーザーで以下を実行:
-- DBAユーザーで
SELECT trigger_name, table_name, status
FROM dba_triggers
WHERE owner = 'USER_A';
もしくは、一般ユーザー自身の情報を確認するには:
-- USER_Aで
SELECT trigger_name, table_name, status
FROM user_triggers;
➡出力例(無効化後):
TRIGGER_NAME TABLE_NAME STATUS
--------------------- ----------- --------
TRG_BLOCK_DELETE_EMP EMP DISABLED
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
➡出力例(有効化後):
TRIGGER_NAME TABLE_NAME STATUS
--------------------- ----------- --------
TRG_BLOCK_DELETE_EMP EMP ENABLED
🧩 テーブル単位ですべてのトリガーを制御する
すべてのトリガーを無効化
ALTER TABLE emp DISABLE ALL TRIGGERS;
すべてのトリガーを有効化
ALTER TABLE emp ENABLE ALL TRIGGERS;
⚠ 注意点
| 項目 | 内容 |
|---|---|
| 無効化しても削除されない | トリガーはデータディクショナリに残る(DBA_TRIGGERSなどで確認可能) |
| 運用時の復元忘れに注意 | メンテナンス後に有効化を忘れたまま本番運用に移行すると、意図しない動作になる |
| 本番環境では慎重に | トリガーに依存する処理がある場合、無効化による副作用に注意する必要あり |
✅まとめ
ALTER TRIGGERでトリガーの有効/無効を柔軟に操作可能DBA_TRIGGERSやUSER_TRIGGERSで状態を確実に確認できる- テーブル単位での一括操作にも対応
- 本番環境では有効化忘れに注意!




コメント