Demo Kiểm Chứng Data Block Lưu Trữ Thông Tin Chưa Commit

Ở bài trước tôi đã chỉ các bạn cách xem thông tin một data block trong Oracle.
Hôm nay tôi sẽ sử dụng phương thức này để chứng minh Data File lưu trữ cả dữ liệu đã COMMIT và chưa COMMIT.
Phần lý thuyết khi COMMIT thì tiến trình nào được thực hiện, các thông tin được ghi như thê nào các bạn có thể xem tại các video mình đã chia sẻ trên youtube
Nếu bạn chưa biết cách xem thông tin 1 data block trong Oracle thì xem lại tại đây nhé!
Đọc thông tin trong data block

Tổng quan quá trình Demo

Phần Demo bao gồm các phần chính sau
Phần 1: Insert dữ liệu giả lập vào bảng Test_block, không thực hiện COMMIT transaction này.
Phần 2: Kiểm tra và thực hiện dump thông tin data block
Phần 3: Thực hiện đọc thông tin trong data block.
Phần 4: Toàn bộ file trace khi dump data block
Chúng ta cùng bắt đầu!

Bước 1: Giả lập transaction chưa COMMIT.

SQL>insert into test_block values(2000,’No Commit’);
1 row created.

SQL> insert into test_block values(2001,’No Commit2′);
1 row created.

SQL> select ROWID,id, name from test_block where id=1001;
ROWID ID NAME
—————— ———- ———-
AAASVxAAHAABJ1tAAC 1001 No Commit2

–Thực hiện checkpoint
SQL> alter system checkpoint;
System altered.

select DBMS_ROWID.ROWID_BLOCK_NUMBER(‘AAASVxAAHAABJ1tAAC’) “Block number” from DUAL;

SQL> select DBMS_ROWID.ROWID_BLOCK_NUMBER(‘AAASVxAAHAABJ1tAAC’) “Block number” from DUAL;
Block number
————
302445

Bước 2: Bây giờ chúng ta sẽ dump block 302445 để xem dữ liệu bên trong như thế nào

(Table test_block thuộc datafile 7 của tablespace USERS ở bài trước tôi dã đề cập)
SQL> alter session set tracefile_identifier =’CHECK_DATABLOCK_ROLLBACK’;
Session altered.

SQL> alter system dump datafile 7 block 302445;
System altered.

Bước 3: Kiểm tra trace file

(Cách xác định đường dẫn trace file mình đã nói ở bài trước)
Xem lại tại đây!
Các bạn có thể thấy trong block này đã chứa thông tin dữ liệu chưa COMMIT.
7FE6A1E30FC0 00000000 00000000 3C000000 C2030202 [………..<….] 7FE6A1E30FD0 4E0A020B 6F43206F 74696D6D 02023C32 […No Commit2<..] 7FE6A1E30FE0 0902C202 43206F4E 696D6D6F 02012C74 [….No Commit,..] 7FE6A1E30FF0 0804C102 6563694E 79614420 AAC00604 [….Nice Day….]

Như vậy tôi đã thực tiễn cho các bạn thấy việc:
– Cách xem thông tin 1 Data Block
– Chứng minh việc Data File lưu trữ cả dữ liệu đã commit và chưa commit.
– Chứng minh việc chúng ta có thể trích xuất thông tin từ datafile ở mức vật lý

Thông tin chi tiết của file trace.
[oracle@lab-oracle trace]$ more lab_ora_5358_BLOCK_NOTCOMMIT.trc
Trace file /u01/app/oracle/diag/rdbms/lab/lab/trace/lab_ora_5358_BLOCK_NOTCOMMIT.trc
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production
Build label: RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME: /u01/app/oracle/product/11.2.0/dbhome_1
System name: Linux
Node name: lab-oracle
Release: 4.1.12-37.4.1.el6uek.x86_64
Version: #2 SMP Tue May 17 07:23:38 PDT 2016
Machine: x86_64
Instance name: lab
Redo thread mounted by this instance: 1
Oracle process number: 49
Unix process pid: 5358, image: oracle@lab-oracle (TNS V1-V3)

*** 2020-04-04T10:24:06.619889+07:00
*** SESSION ID:(62.55627) 2020-04-04T10:24:06.619948+07:00
*** CLIENT ID:() 2020-04-04T10:24:06.619982+07:00
*** SERVICE NAME:(SYS$USERS) 2020-04-04T10:24:06.620013+07:00
*** MODULE NAME:(sqlplus@lab-oracle (TNS V1-V3)) 2020-04-04T10:24:06.620046+07:00
*** ACTION NAME:() 2020-04-04T10:24:06.620078+07:00
*** CLIENT DRIVER:(SQL*PLUS) 2020-04-04T10:24:06.620107+07:00

Start dump data blocks tsn: 4 file#:7 minblk 302445 maxblk 302445
Block dump from cache:
Dump of buffer cache at level 4 for pdb=0 tsn=4 rdba=29662573
BH (0x69bd5b38) file#: 7 rdba: 0x01c49d6d (7/302445) class: 1 ba: 0x69858000
set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0
dbwrid: 0 obj: 75121 objn: 75120 tsn: [0/4] afn: 7 hint: f
hash: [0x64696e80,0x64696e80] lru: [0x69bd5d78,0x69bd5ab8] obj-flags: object_ckpt_list
ckptq: [0x803fb838,0x6aff0418] fileq: [0x640ecd50,0x640ecd50] objq: [0x749f76d8,0x749f76d8] objaq: [0x69bd5db0,0x69bd5af0] st: XCURRENT md: NULL fpin: ‘ktspbwh2: ktspfmdb’ fscn: 0x6d9ad0 tch: 9
flags: buffer_dirty block_written_once
LRBA: [0x2d.5904.0] LSCN: [0x6dab8a] HSCN: [0x6dab8a] HSUB: [1] Printing buffer operation history (latest change first):
cnt: 13
01. sid:05 L065:cmt_main:clr:flg 02. sid:05 L922:klbc:sw:cq
03. sid:05 L616:b_cmt_mn:bis:FBD 04. sid:05 L781:cmt_mn:bis:FMS
05. sid:14 L238:post_apl:bic:FEN 06. sid:14 L786:pre_apl:bis:FMS
07. sid:14 L803:pre_apl:bis:FPB 08. sid:14 L353:gcur:set:MEXCL
09. sid:02 L192:kcbbic2:bic:FBD 10. sid:02 L191:kcbbic2:bic:FBW
11. sid:02 L602:bic1_int:bis:FWC 12. sid:02 L822:bic1_int:ent:rtn
13. sid:02 L832:oswmqbg1:clr:WRT 14. sid:02 L930:kubc:sw:mq
15. sid:02 L913:bxsv:sw:objq 16. sid:02 L608:bxsv:bis:FBW
Block dump from disk:
buffer tsn: 4 rdba: 0x01c49d6d (7/302445)
scn: 0x6daac0 seq: 0x04 flg: 0x04 tail: 0xaac00604
frmt: 0x02 chkval: 0x6226 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00007FE6A1E2F000 to 0x00007FE6A1E31000
7FE6A1E2F000 0000A206 01C49D6D 006DAAC0 04040000 [….m…..m…..] 7FE6A1E2F010 00006226 00000001 00012571 006D9AD0 [&b……q%….m.] 7FE6A1E2F020 00008000 00320002 01C49D68 00040005 [……2.h…….] 7FE6A1E2F030 00001B76 01004C06 001D0207 00002001 [v….L……. ..] 7FE6A1E2F040 006D9AD2 00000000 00000000 00000000 [..m………….] 7FE6A1E2F050 00000000 00000000 00000000 00000000 […………….] 7FE6A1E2F060 00000000 00030100 00180001 1F711F67 […………g.q.] 7FE6A1E2F070 00001F71 1F890003 FFFF0002 00000000 [q……………] 7FE6A1E2F080 00000000 00000000 00000000 00000000 […………….] Repeat 499 times
7FE6A1E30FC0 00000000 00000000 3C000000 C2030202 [………..<….] 7FE6A1E30FD0 4E0A020B 6F43206F 74696D6D 02023C32 […No Commit2<..] 7FE6A1E30FE0 0902C202 43206F4E 696D6D6F 02012C74 [….No Commit,..] 7FE6A1E30FF0 0804C102 6563694E 79614420 AAC00604 [….Nice Day….] Block header dump: 0x01c49d6d
Object id on Block? Y
seg/obj: 0x12571 csc: 0x00000000006d9ad0 itc: 2 flg: E typ: 1 – DATA
brn: 0 bdba: 0x1c49d68 ver: 0x01 opc: 0
inc: 0 exflg: 0

Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0005.004.00001b76 0x01004c06.0207.1d –U- 1 fsc 0x0000.006d9ad2
0x02 0x0000.000.00000000 0x00000000.0000.00 —- 0 fsc 0x0000.00000000
bdba: 0x01c49d6d
data_block_dump,data header at 0x7fe6a1e2f064
===============
tsiz: 0x1f98
hsiz: 0x18
pbl: 0x7fe6a1e2f064
76543210
flag=——–
ntab=1
nrow=3
frre=1
fsbo=0x18
fseo=0x1f67
avsp=0x1f71
tosp=0x1f71
0xe:pti[0] nrow=3 offs=0
0x12:pri[0] offs=0x1f89
0x14:pri[1] sfll=2
0x16:pri[2] sfll=-1
block_row_dump:
tab 0, row 0, @0x1f89
tl: 15 fb: –H-FL– lb: 0x1 cc: 2
col 0: [ 2] c1 04
col 1: [ 8] 4e 69 63 65 20 44 61 79
end_of_block_dump
End dump data blocks tsn: 4 file#: 7 minblk 302445 maxblk 302445


Để trở thành Oracle DBA, bạn không thể bỏ qua video này!
Đào tạo nội bộ cho nhân viên Wecommit
Tôi sẽ giải đáp mọi câu hỏi tại:
https://www.facebook.com/groups/oracledbahanoi/
https://www.facebook.com/ora.huytran/

Đồng hành cùng doanh nghiệp vượt qua khó khăn giai đoạn Covid-19, chúng tôi tặng bạn Voucher giảm giá 60% dịch vụ kiểm tra sức khỏe cơ sở dữ liệu toàn diện, dịch vụ Database Health Check giúp CSDL của bạn luôn khỏe mạnh!
Chi tiết xem tại đây!

Leave a Reply

avatar
  Subscribe  
Notify of