Oracle

我的 blob 儲存在哪裡?

  • July 16, 2013

使用甲骨文 11,

儘管已經寫了很多關於 blob 的文章,但有些東西對我來說還不是很清楚。

  1. 有人告訴我,如果 < 3900,預設情況下 blob 儲存在行中。這是否意味著對於單個表,一些 blob 將儲存在行中,而另一些則不會?
  2. 有沒有辦法檢查它們是否儲存在行中?
  3. 如果我設置ENABLE STORAGE IN ROW,這是否意味著無論 blob 的大小如何,它將與其他數據保存在同一段中?

甲骨文文件說:

“當儲存在給定行中的 LOB 的大小很小,大約 4000 字節或更少,並且您在創建表時顯式指定 ENABLE STORAGE IN ROW 或 LOB 儲存子句時,或者當您未指定此參數時 (這是預設值)。”

終於有東西了

在進一步閱讀文件並進行一些測試後:

  1. 是的,預設情況下,根據行的大小,一些 blob 將儲存在行中,而另一些則儲存在行外。
  2. 是的,在此之後,您應該能夠確定它:

當以下任何一種情況適用時,LOB 值將被離線儲存:

* 如果在創建表時為 LOB 儲存子句顯式指定 DISABLE STORAGE IN ROW。 * 如果 LOB 的大小大於大約 4000 字節(4000 減去系統控制資訊),則不管列的 LOB 儲存屬性如何。 * 如果您更新一個離線儲存的 LOB 並且生成的 LOB 小於大約 4000 字節,那麼它仍然是離線儲存的。 當以下任何條件適用時,LOB 值將內聯儲存:

* 當儲存在給定行中的 LOB 的大小很小(大約 4000 字節或更少)並且您在創建表時顯式指定 ENABLE STORAGE IN ROW 或 LOB 儲存子句時,或者當您未指定此參數時(是

預設值)。 * 當 LOB 值為 NULL 時(與列的 LOB 儲存屬性無關)。

  1. 不,這只是預設選項,當 blob 太大(arpox 3800)時,它將被儲存在行外

引用自:https://dba.stackexchange.com/questions/46419