Oracle Study之案例--Oracle 数据块地址(Block Address) Oracle访问数据是以block为单位,本文简单介绍了如何通过Block Address在内存中获取所需要的block。 DBA(data block address): A DBA is the address of an oracle data block for access purposes
Oracle Study之案例--Oracle 数据块地址(Block Address)
Oracle访问数据是以block为单位,本文简单介绍了如何通过Block Address在内存中获取所需要的block。
DBA(data block address):
A DBA is the address of an oracle data block for access purposes.
RDBA (Tablespace relative database block address):
RDBA 是相对数据块地址,是数据所在的地址,rdba可就是rowid 中rfile#+block#
ROWID:
Oracle在通过Index访问时,通过rowid确定row的位置;我们都知道rowid表示一行的物理地址,一行唯一确定一个rowid,并且在使用中一般不会改变,除非rowid之后在行的物理位置发生改变的情况下才会发生变化。需要注意的是rowid并不会真正存在于表的data block中,但是他会存在于index当中,用来通过rowid来寻找表中的行数据。
Oracle8以前一个rowid占用6个字节大小的存储空间(10bit file#+22bit block#+16bit row#),那么oracle 8以后这个rowid的存储空间扩大到了10个字节(32bit object#+10bit rfile#+22bit block#+16bit row#),所以数据库中数据库文件个数的限制从整个数据库最多只能有的2^10-1个数据文件,变为了每个表空间中可以最多有2^10-1个数据文件。
(需要注意的是:local index中存储的rowid是6个字节,而global index中存储的rowid是10个字节)
那么增加的32bit object#这个前缀主要就是用来定位表空间的,同时这个object#其实对应的就是data_object_id,由于一个段对象只能属于一个表空间,同时data_object_id就是标识了一个段的物理存储id.因此object#+rfile#就可以唯一定位当前的rowid是在那个数据文件上了。
我们可以通过dbms_rowid这个包来转换我们的rowid成不同组成部分:
dbms_rowid.rowid_object(rowid) ---> 32bit object#dbms_rowid.rowid_relative_fno(rowid) ---> 10bit rfile#dbms_rowid.rowid_block_number(rowid) ---> 22bit block#dbms_rowid.rowid_row_number(rowid) ---> 16bit row#
案例分析:
1、通过dbms_utility转换地址
10:33:59 SYS@ test1 >desc dbms_utility FUNCTION DATA_BLOCK_ADDRESS_BLOCK RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- DBA NUMBER IN FUNCTION DATA_BLOCK_ADDRESS_FILE RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- DBA NUMBER IN FUNCTION MAKE_DATA_BLOCK_ADDRESS RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- FILE NUMBER IN BLOCK NUMBER IN
2、通过rowid获取RDBA
11:14:36 SYS@ test1 >conn scott/tiger Connected. 11:14:39 SCOTT@ test1 >select rowid,ename from emp where rownum=1; ROWID ENAME ------------------ ---------- AAAESjAAEAAAACVAAA SMITH 11:15:05 SCOTT@ test1 >select dbms_rowid.ROWID_RELATIVE_FNO(rowid) ,dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from emp where rownum=1; DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ------------------------------------ ------------------------------------ 4 149
3、通过Dump获取block信息
11:42:16 SYS@ test1 >alter system dump datafile 4 block 149;
System altered.
Block dump
from
cache:
Dump of buffer cache
at
level
4
for
tsn=
4
, rdba=
16777365
Block dump
from
disk:
buffer tsn:
4
rdba:
0x01000095
(
4
/
149
)
scn:
0x0000.
009722f6 seq:
0x01
flg:
0x04
tail:
0x22f60601
frmt:
0x02
chkval:
0x52a5
type:
0x06
=trans data
Hex dump of block: st=
0
, typ_found=
1
Dump of memory
from
0x008E8200
to
0x008EA200
8E8200
0000A206
01000095
009722F6
04010000
[........."......]
......
Block header dump:
0x01000095
Object id
on
Block? Y
seg/obj:
0x44a3
csc:
0x00.
9722f6 itc:
2
flg: E typ:
1
- DATA
brn:
0
bdba:
0x1000090
ver:
0x01
opc:
0
inc:
0
exflg:
0
Itl Xid Uba Flag Lck Scn/Fsc
0x01
0x001b.
01f.0000007a
0x01c01c55.
0121.23
C-U-
0
scn
0x0000.
00971d50
0x02
0x0000.
000.00000000
0x00000000.
0000.00
----
0
fsc
0x0000.
00000000
bdba:
0x01000095
data_block_dump,data header
at
0x8e8264
......
block_row_dump:
tab
0
, row
0
, @
0x1f72
tl:
38
fb: --H-FL-- lb:
0x0
cc:
8
col
0
: [
3
] c2 4a
46
col
1
: [
5
]
53
4d
49
54
48
col
2
: [
5
]
43
4c
45
52
4b
col
3
: [
3
] c2
50
03
col
4

mysqloffersvariouscharactersetsforstringdatatypes : 1) latin1forwesterneuropeanlanguages, 2) utf8formultulaultualsupport, 3) UTF8MB4F orextendedUnicodeincludeemojis, 4) UCS2Forfixed-widTheNcoding 및 5) asciiforbasiclatin.ChoingTherightSetensuresDatainTegrity

스트리밍 블로브는 메모리 사용량을 줄이고 성능을 향상시키기 때문에 직접 저장보다 더 좋습니다. 1) 파일을 점차적으로 읽고 처리함으로써 데이터베이스 팽창 및 성능 저하를 피합니다. 2) 스트리밍에는 더 복잡한 코드 로직이 필요하며 I/O 작업 수를 증가시킬 수 있습니다.

mysqlStringTypESmpactStorageAndperformanceAsfollows : 1) charisfixed, adlaysamestoragespace.

mysqlstringtypesincludevarchar, text, char, enum, and set.1) varcharisversatileforvariable-lengthstringsupciedlimit.2) textisidealforlargetextStorage whithoudfinedlength.3) charisfixed, witableforconsistentDatalikecodes.4)

mysqloffersvariousstringdatatatypes : 1) charfixed-lengthstrings, 2) varcharforvariable-lengthtext, 3) binaryandvarbinaryforbinarydata, 4) blobandtextforlargedata 및 5) enumandsetforcontrolledInput.achtolledinput.CheachorciCificusessandperististicatististicatististics

ToadDuserSinMySqleFeffectially, 다음에 따르면, 다음 사항을 따르십시오

toaddanewuser와 함께 complexpermissionsinmysql, followthesesteps : 1) createShereuser'NewUser '@'localhost'Identifiedby'pa ssword ';. 2) grantreadaccesstoalltablesin'mydatabase'withgrantselectonmydatabase.to'newuser'@'localhost';. 3) GrantWriteAccessto '


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경