在创建一个新的 Oracle 数据库时,系统会自动创建几个默认的表空间。这些表空间对于数据库的正常运行至关重要,因为它们包含了数据库的基本结构和元数据。以下是在标准的 Oracle 数据库安装过程中自动创建的主要表空间:
-
SYSTEM 表空间:
- 这是最重要的表空间之一,用于存储数据字典信息,包括所有用户定义的对象的元数据(如表、索引、视图等)。
- SYSTEM 表空间还包含一些系统管理对象,如回滚段等。
-
SYSAUX 表空间:
- SYSAUX 表空间用于存储辅助系统信息,例如临时表、外部表的元数据、Job Scheduler 元数据、统计信息等。
- 它与 SYSTEM 表空间一起构成了系统全局区域 (SGA) 的一部分。
-
UNDO 表空间:
- UNDO 表空间用于存储事务处理期间的撤销数据,以便支持事务的回滚操作。
- 一个数据库可以有多个 UNDO 表空间,但是至少需要一个。
-
TEMP 表空间:
- TEMP 表空间用于存储临时表和临时段,例如排序操作、临时表等所需的临时数据。
- 临时表空间中的数据在会话结束时会被自动清除。
-
USERS 表空间:
- USERS 表空间通常用于存储普通用户的对象,如表、索引等。
- 这是一个可选的表空间,但大多数数据库都会创建它作为用户的默认表空间。
-
在 Oracle 数据库中,直接查看谁增加了某条记录并不是数据库本身的默认功能。Oracle 数据库不会自动记录每条记录的插入者信息。不过,您可以采用几种方法来实现这一需求:
-
使用触发器
您可以在表上创建一个 INSERT 触发器来记录插入操作的相关信息。触发器可以在每次 INSERT 操作发生时执行,从而记录插入操作的详细情况。例如,可以记录当前用户、插入时间等信息。
示例代码:
CREATE OR REPLACE TRIGGER trg_insert_log
BEFORE INSERT ON your_table
FOR EACH ROW
DECLARE
BEGIN
:new.inserted_by := USER; – 当前用户名
:new.inserted_at := SYSDATE; – 插入的时间
END;
/
在此示例中,假设 your_table 中有两个字段 inserted_by 和 inserted_at 分别用于记录插入操作的用户名和时间戳。
- 使用审计 (AUDIT)
Oracle 提供了审计功能,可以用来记录特定 SQL 语句的操作。但是,审计主要用于记录 SQL 语句级别的活动,而不是单条记录的插入。
示例命令:
AUDIT SELECT, INSERT, UPDATE, DELETE ON your_table BY ACCESS;
此命令将审计所有对 your_table 的 SELECT、INSERT、UPDATE 和 DELETE 操作。
- 使用细粒度审计 (Fine-Grained Auditing, FGA)
细粒度审计允许您记录特定表上的特定列的变化。FGA 需要配置并启用,并且可以根据需要选择性地记录数据。
示例命令:
CREATE AUDIT POLICY my_policy INSERT ON your_table COLUMNS (column_name);
AUDIT POLICY my_policy;
这将记录所有在 your_table 上的 INSERT 操作,并关注特定的列。
-
使用数据库审计选项 (Database Audit Option)
Oracle 的数据库审计选项提供了一种更高级的方式来记录数据库活动,包括 SQL 语句和数据访问。这通常用于安全性和合规性目的。 -
使用应用级逻辑
在应用程序级别记录谁插入了数据也是一种常见做法。例如,可以在应用程序中维护一个日志表,记录每个用户的操作。
注意事项
使用触发器和审计功能可能会对性能产生影响。
审计数据可能会占用大量存储空间。
应该定期审查和清理审计记录,以避免不必要的开销。




