Sql 存储在Oracle数据库中的合理消息长度

Sql 存储在Oracle数据库中的合理消息长度,sql,database,performance,oracle,memory-efficient,Sql,Database,Performance,Oracle,Memory Efficient,我有一个与多个系统交互的复杂过程 这些系统中的每一个都可能会产生错误消息,我希望将这些错误消息存储在Oracle数据库的表中(请注意,我有状态,但过程的性质是错误可能并不总是预定义的) 我们所说的是每天数十万笔交易,其中1%可能会导致各种错误 1) 想知道数据库字段的合理/可接受长度是多少,以及我应该存储多大的消息 2) 内存方面,在数据库中定义的字段有多大真的很重要吗 “合理”和“可接受”取决于应用。假设您希望将数据库列定义为VARCHAR2而不是CLOB,并且假设您没有使用12.1或更高版本

我有一个与多个系统交互的复杂过程

这些系统中的每一个都可能会产生错误消息,我希望将这些错误消息存储在Oracle数据库的表中(请注意,我有状态,但过程的性质是错误可能并不总是预定义的)

我们所说的是每天数十万笔交易,其中1%可能会导致各种错误

1) 想知道数据库字段的合理/可接受长度是多少,以及我应该存储多大的消息

2) 内存方面,在数据库中定义的字段有多大真的很重要吗

“合理”和“可接受”取决于应用。假设您希望将数据库列定义为
VARCHAR2
而不是
CLOB
,并且假设您没有使用12.1或更高版本,则可以将该列声明为最多可容纳4000字节。对于您需要支持的任何错误消息,这都足够了吗?您可以确定的错误消息长度是否有下限?如果您正在生成旨在向用户显示的错误消息,则可能会生成较短的消息。如果要生成和存储堆栈跟踪,可能需要将列声明为
CLOB
,因为4000字节可能不够


我们在谈论什么样的记忆?在磁盘上,
VARCHAR2
只分配存储数据实际需要的空间。当块被读入缓冲区缓存时,它也将只使用存储数据所需的空间。如果开始在PL/SQL中分配局部变量,根据字段的大小,Oracle可能会分配比存储该局部变量的特定数据所需的空间更多的空间,以避免在修改字符串时增加和缩小分配的成本。如果将数据返回到客户端应用程序(包括中间层应用程序服务器),该客户端可能会根据列的最大大小而不是数据的实际大小在内存中分配缓冲区。

使用
VARCHAR2
vs
CLOB
有什么好处。更多细节:我不打算查询这个领域。使用oracle 12及更高版本。4000字节将转换为多少个字符?我在想500多件事。我们说的是闪存。@otc-A
CLOB
处理的效率可能低于
VARCHAR2
,但允许您在一行中存储多PB的信息。如果您使用的是12.1或更高版本,则可以使数据库在
VARCHAR2
列中存储32000字节的信息。因为您担心磁盘上占用的空间,所以
VARCHAR2
只会使用所讨论的数据实际需要的空间。