1. What is an Oracle Database Event Trigger?
An event trigger (also called a system trigger) is a trigger that fires automatically in response to specific database or system events, rather than DML operations (INSERT, UPDATE, DELETE).
These events include:
- Database startup/shutdown
- User logon/logoff
- DDL statements (CREATE, ALTER, DROP)
- Server errors
2. What are the types of database event triggers?
Oracle supports:
Database-Level Triggers
Fire for events affecting the
whole database.
Examples:
- AFTER STARTUP
- BEFORE SHUTDOWN
- AFTER LOGON ON DATABASE
- AFTER DDL ON DATABASE
- AFTER SERVERERROR ON DATABASE
Schema-Level Triggers
Fire for events affecting a
specific schema.
Example:
- AFTER DDL ON schema_name.SCHEMA
3. How is an event trigger different from a DML trigger?
|
Feature |
Event Trigger |
DML Trigger |
|
Fires on |
System/DDL events |
INSERT/UPDATE/DELETE |
|
Scope |
Database or Schema |
Table or View |
|
Example |
Log user logins |
Audit row changes |
4. How do you create a database event trigger?
Example: Log every user login.
CREATE OR REPLACE TRIGGER logon_audit
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO audit_log (username, logon_time)
VALUES (USER, SYSDATE);
END;
/
5. What privileges are required to create event triggers?
To create a database-level trigger, you need:
- ADMINISTER DATABASE TRIGGER privilege
For schema-level triggers:
- CREATE TRIGGER privilege
6. What events can be used with database triggers?
Common events include:
- AFTER STARTUP
- BEFORE SHUTDOWN
- AFTER LOGON
- BEFORE LOGOFF
- AFTER DDL
- AFTER SERVERERROR
- AFTER SUSPEND
7. How can event triggers be used?
Common use cases:
- Auditing DDL changes
- Tracking user sessions
- Blocking specific users
- Enforcing naming conventions
- Logging database errors
- Restricting schema changes
8. Can event triggers prevent actions?
Yes.
For example, to prevent DROP operations:
CREATE OR REPLACE TRIGGER prevent_drop
BEFORE DROP ON DATABASE
BEGIN
RAISE_APPLICATION_ERROR(-20000, 'DROP is not allowed!');
END;
/
9. How do you disable or drop an event trigger?
Disable:
ALTER TRIGGER trigger_name DISABLE;
Enable:
ALTER TRIGGER trigger_name ENABLE;
Drop:
DROP TRIGGER trigger_name;
10. Where are event trigger definitions stored?
They are stored in the data dictionary views such as:
- DBA_TRIGGERS
- ALL_TRIGGERS
- USER_TRIGGERS
11. Are event triggers performance-intensive?
Usually lightweight, but:
- Poorly written triggers can impact login performance.
- Avoid heavy processing inside AFTER LOGON triggers.
- Keep logic simple and efficient.
12. What are common mistakes?
- Forgetting required privileges
- Causing recursive DDL loops
- Blocking SYS users unintentionally
- Not handling exceptions properly
- Committing inside triggers unnecessarily
13. Can you audit DDL statements using event triggers?
Yes. Example:
CREATE OR REPLACE TRIGGER ddl_audit
AFTER DDL ON DATABASE
BEGIN
INSERT INTO ddl_log
VALUES (ORA_SYSEVENT, ORA_DICT_OBJ_NAME, USER, SYSDATE);
END;
/
Oracle provides built-in functions like:
- ORA_SYSEVENT
- ORA_DICT_OBJ_NAME
- ORA_LOGIN_USER
14. Can event triggers fire for specific objects only?
At schema level, yes.
At database level, you must filter inside the trigger using:
IF ORA_DICT_OBJ_TYPE = 'TABLE' THEN
-- logic
END IF;
15. Are event triggers available in all Oracle versions?
Database event triggers are supported in most modern versions of Oracle Database (8i and later), with enhancements in newer releases.
No comments:
Post a Comment