2014-03-24 60 views
0

我有一個與多個系統交互的複雜進程。要存儲在Oracle數據庫中的合理消息長度

這些系統中的每一個都可能產生我想要存儲在我的Oracle數據庫表中的錯誤消息(請注意,我有狀態,但過程的性質使得錯誤不一定會被預定義)。

我們每天談論數以百萬計的交易,其中1%可能導致各種錯誤。

1)想知道什麼是數據庫字段的合理/可接受的長度以及我應該存儲多大的消息?

2)記憶方面,數據庫中字段的大小有多大?

回答

1

「合理」和「可接受」取決於應用。假設您想要將數據庫列定義爲VARCHAR2而不是CLOB,並且假定您未使用12.1或更高版本,則可以聲明該列最多可容納4000個字節。這足以滿足您需要支持的任何錯誤消息嗎?您可以建立的錯誤消息的長度是否有下限?如果您生成的是旨在向用戶顯示的錯誤消息,那麼您可能會生成較短的消息。如果您正在生產和存儲堆棧跟蹤,則可能需要將該列聲明爲CLOB,因爲4000個字節可能不夠用。

我們在談論什麼類型的記憶?在磁盤上,VARCHAR2只會分配實際需要存儲數據的空間。當該塊被讀入緩衝區緩存時,它也將僅使用存儲數據所需的空間。如果您開始在PL/SQL中分配局部變量,根據字段的大小,Oracle可能會分配更多的空間來存儲該局部變量的特定數據,以避免增加和縮小分配的成本當你修改字符串。如果將數據返回給客戶端應用程序(包括中間層應用程序服務器),那麼客戶端可能會根據列的最大大小而不是基於數據的實際大小在內存中分配緩衝區。

+0

使用'VARCHAR2'和'CLOB'會有什麼好處。 更多詳細信息: 我不打算在這個領域進行查詢。 使用oracle 12及更高版本。 4000個字節會轉換爲多少個字符?我在想超過500個。 我們在談論閃存。 – otc

+1

@otc - 「CLOB」的處理效率可能低於「VARCHAR2」,但允許您將多個PB信息存儲在單個行中。如果使用12.1或更高版本,則可以使數據庫將32000字節的信息存儲在「VARCHAR2」列中。由於您擔心磁盤佔用的空間,「VARCHAR2」只會使用相關數據實際需要的空間。 –

相關問題