我们正在为基于Oracle 11gR1的新系统设计数据库架构。我们已经确定了一个主模式,它将有近100个表,这些表将从前端Java应用程序访问。
我们要求审核近50个表中已更改的值,这必须在每一行进行。
这意味着,对于MYSYS.T1
中的单行,MYSYS_AUDIT.T1_AUD
表中可能有50行(或更多甚至更少,但最少1行)。我们可能会使用T1
中的每个列条目和新值的旧值。
DBA给出了一个观察,建议反对这种方法,因为他说,单独的模式意味着每个操作的额外I / O 。基本上,AUDIT模式仅用于进行一些分析并输入值(因此SELECT
和INSERT
)。
“单独的架构意味着额外的I / O”是真的吗?我找不到理由。
对我来说这似乎是合乎逻辑的,因为AUDIT数据不应该被篡改,所以单独的架构。
此外,我们设计了一个单独的架构,用于归档MYSYS
中的一些表。从MYSYS_ARC
开始,表可能会备份到磁带中或在足够的时间后删除。
很少有统计数据:
MYSYS
模式中很少有表(接近20,30)可以增长到大约50M行。
我们要求总磁盘空间为4 TB。
MYSYS_AUDIT
架构可能是MYSYS
的10倍,但我们不会超过3个月。
MYSYS中的少数表将具有以下事务/分钟。
INSERT
中的MYSYS
意味着MYSYS_AUDIT
表中的插入次数相同。UPDATE
表中的MYSYS
表示MYSYS_ADIT
表中的插入次数相同。 问题:
鉴于所有这些,你能否建议我做出任何改进?
图:
+-------------------+ +-------------------+
| MYSYS | | MYSYS_AUDIT |
| | | |
| 1. T1 | | 1. T1_AUD |
| 2. T2 | | 2. T2_AUD |
| 3. T3 |--------->| 3. T3_AUD |
| 4. T4 |(SELECT, | 4. T4_AUD |
| . | INSERT) | . |
| . | | . |
| . | | . |
| 100. T100 | | 50. T50_AUD |
+-------------------+ +-------------------+
|
|
|
|
|(INSERT)
|
|
|
*
+-------------------+
| MYSYS_ARC |
| |
| 1. T1_ARC |
| 2. T2_ARC |
| 3. T3_ARC |
| 4. T4_ARC |
| . |
| . |
| . |
| 100. T100_ARC |
+-------------------+
除此之外,我们还有两个只有只读权限的模式,但主要是出于特殊目的,我们不介意它们的性能。
建议:
有几个建议。我们同意以下内容。
TRIGGER
用于将数据插入AUDIT表。_AUD
。 :)ARCHIVE
架构表的过程。我们正在分析......
在接受APC或dpbradely解决方案之前,仍有待进一步提出建议的问题。
答案 0 :(得分:3)
将对象放在单独的模式中不会导致额外的I / O - 可能存在误解,DBA的意思是说审计的存在会导致额外的I / O,这当然是真的无论你如何实现它。
答案 1 :(得分:3)
拥有单独的架构绝对是可行的方法。除了其他任何内容,这意味着您可以使用相同的表名 - MYSYS.T1
和MYSYS_AUDIT.T1
- 如果您有长名称的表(> 25个字符),这将非常有用。
但是,单独模式的主要优点是审计表可以防止意外或恶作剧的篡改。
从触发器插入审计行的影响仍然存在,无论谁拥有表。
一般表格设计建议
最好为审计表提供与主表相同的结构。因此,如果您有审计所需的元数据列(例如修订号),请将它们包含在主表中。此外,使用新值填充审计表,而不是旧值。也就是说,当将新记录插入MYSYS.T1
时,将匹配的记录插入MYSYS_AUDIT.T1
;当现有记录更新为MYSYS.T1
时,将新记录插入MYSYS_AUDIT.T1
。如果审计表的最新记录与主表中的当前记录相同,则更容易验证和报告审计表。
使用触发器
审计不需要复杂。我们所需要的只是before insert or update or delete trigger
中的插入语句。这些很容易从数据字典视图USER_TAB_COLUMNS生成。
答案 2 :(得分:1)
查看审计数据的范围分区。您可能希望将审计数据发送到较便宜的存储。分区使得将数据(例如一个月的数据)发送到另一台服务器变得容易。或删除超过一个月的自动记录。
答案 3 :(得分:1)
除了APC的回答。
可以查看Workspace Manager,可能比触发更好,因为它们可能会失败或被禁用等。
答案 4 :(得分:1)
此外,如果您有钱,请查看Oracle的Total Recall