[20171218]varchar2(4000)如何儲存.txt
[20171218]varchar2(4000)如何儲存.txt
--//以前寫的,不知道為什麼被刪除了,現在補上.
如果一行能被儲存於一個資料塊(data block)中,那麼其行頭(row header)所需容量將不少於 3 位元組(byte)。在行頭資訊之後依次
儲存的是各列的列長(column length)及列值(column value)。列長儲存於列值之前,如列值不超過250 位元組,那麼 Oracle使用1位元組存
儲其列長;如列值超過 250 位元組,則使用 3 位元組儲存其列長。列資料(column data)所需的儲存空間取決於此列的資料型別(datatype)。
如果某列的資料型別為變長(variable length)的,那麼儲存此列值所需的空間可能會隨著資料更新而增長或縮小。
--//測試看看oracle如何儲存列值超過250位元組的.
1.建立測試:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> create table t1(v1 varchar2(4000));
Table created.
insert into t1 values(rpad('1',250,'A'));
insert into t1 values(rpad('2',251,'B'));
insert into t1 values(rpad('2',4000,'C'));
commit ;
SCOTT@book> select rowid,substr(v1,1,2) from t1;
ROWID SUBS
------------------ ----
AAAWJvAAEAAAAIkAAA 1A
AAAWJvAAEAAAAIkAAB 2B
AAAWJvAAEAAAAIkAAC 2C
SCOTT@book> @ &r/rowid AAAWJvAAEAAAAIkAAA
OBJECT FILE BLOCK ROW ROWID_DBA DBA TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
90735 4 548 0 0x1000224 4,548 alter system dump datafile 4 block 548 ;
SCOTT@book> alter system checkpoint;
System altered.
2.使用bbed檢視:
BBED> set dba 4,548
DBA 0x01000224 (16777764 4,548)
BBED> x /rc *kdbr[0]
rowdata[4263] @7934
-------------
flag@7934: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7935: 0x01
cols@7936: 1
col 0[250] @7937: 1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...(太長,截去)
BBED> dump /v count 64
File: /mnt/ramdisk/book/users01.dbf (4)
Block: 548 Offsets: 7934 to 7997 Dba:0x01000224
-----------------------------------------------------------------------------------------------------------
2c0101fa 31414141 41414141 41414141 41414141 41414141 41414141 41414141 l ,...1AAAAAAAAAAAAAAAAAAAAAAAAAAA
41414141 41414141 41414141 41414141 41414141 41414141 41414141 41414141 l AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<32 bytes per line>
--//2c 表示flag,01 表示lock ,01 表示 cols. 0xfa= 250.長度<=250,Oracle使用1位元組儲存其列長.繼續看下面的記錄:
BBED> x /rc *kdbr[1]
rowdata[4006] @7677
-------------
flag@7677: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7678: 0x01
cols@7679: 1
col 0[251] @7680: 2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ...(snip..)
BBED> dump /v count 64
File: /mnt/ramdisk/book/users01.dbf (4)
Block: 548 Offsets: 7677 to 7740 Dba:0x01000224
-----------------------------------------------------------------------------------------------------------
2c0101fe fb003242 42424242 42424242 42424242 42424242 42424242 42424242 l ,.....2BBBBBBBBBBBBBBBBBBBBBBBBB
42424242 42424242 42424242 42424242 42424242 42424242 42424242 42424242 l BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
<32 bytes per line>
--//前面2c0101 不再描述.0xfe=254 ,使用fe表示超過長度250. 後面0x00fb(倒過來)=251表示字串長度.繼續看:
BBED> x /rc *kdbr[2]
rowdata[0] @3671
----------
flag@3671: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@3672: 0x01
cols@3673: 1
col 0[4000] @3674: 2CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.... (snip)
BBED> dump /v count 64
File: /mnt/ramdisk/book/users01.dbf (4)
Block: 548 Offsets: 3671 to 3734 Dba:0x01000224
-----------------------------------------------------------------------------------------------------------
2c0101fe a00f3243 43434343 43434343 43434343 43434343 43434343 43434343 l ,.....2CCCCCCCCCCCCCCCCCCCCCCCCC
43434343 43434343 43434343 43434343 43434343 43434343 43434343 43434343 l CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<32 bytes per line>
--//0xfe=254 ,使用fe表示超過長度250. 後面0x0fa0(倒過來)=4000,表示字串長度.
SCOTT@book> @ &r/16to10 0fa0
16 to 10 DEC
------------
4000
總結:
1.如果列值長度小於等於250位元組,Oracle使用1位元組儲存其列長.內容為欄位的長度.
2.如果列值長度超過250位元組,則使用3位元組儲存其列長。前面1個位元組使用0xfe(表示超過250),後面2個位元組表示列值長度.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2148818/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DS4000系列儲存配置storage manager介紹
- JDBC記憶體管理—varchar2(4000)的影響JDBC記憶體
- [20171218]修改AWR snapshot 設定.txt
- [20171218]欄位命名與oracle關鍵字.txtOracle
- linux 主機掛接EVA 4000儲存的操作步驟Linux
- Android儲存讀取txt檔案Android
- oracle 19c varchar2超過4000位元組處理Oracle
- oracle儲存過程procedure_輸入引數varchar2與char報錯Oracle儲存過程
- [20150414]oracle日期儲存.txtOracle
- 區塊鏈資訊儲存是如何實現安全儲存區塊鏈
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-1 TXT文字儲存Python爬蟲
- iOS如何本地儲存PHAssetiOS
- python如何儲存.npyPython
- Postgres如何儲存行? - Ketan
- 如何儲存玫瑰花
- Matlab將.mat檔案儲存為.txt檔案Matlab
- [20140515]解密儲存過程.txt解密儲存過程
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- Android資料儲存之SharedPreferences及如何安全儲存Android
- 塊儲存 檔案儲存 物件儲存物件
- [20171214]慎用toad儲存口令功能.txt
- 國產儲存晶片現狀如何?晶片
- mysql如何呼叫儲存過程MySql儲存過程
- NAS中如何建立儲存池
- 安防監控如何儲存?
- 如何安全的儲存密碼密碼
- 【儲存】如何計算IOPS ?
- nas網路儲存如何配置
- 儲存卡變為RAW,如何進行儲存卡資料救援
- WordPress如何使用騰訊雲物件儲存COS儲存媒體庫附件物件
- 如何延長儲存伺服器上資料的儲存時間?伺服器
- [20151209]man文件儲存文字.txt
- C++(2) 從yml或者txt讀取和儲存資料C++
- c++ (2-0) 從txt讀取和儲存資料C++
- 行式儲存 列式儲存
- 儲存—物件儲存_Minio物件
- vertica 如何實現儲存過程?儲存過程
- MySQL如何有效的儲存IP地址MySql