Table Purge хийхэд lob нь устахгүй байгаа асуудал

lob агуулсан table - ээс delete хийхээр яг тэр table - ийн lob агуулсан tablespace - ийн хэмжээ нь багасахгүй байгаа юм. Одоог хүртэл доорхи зүйлсийг туршчихсан байгаа:

  1. Doc ID 386341.1
    select sum(dbms_lob.getlength ()) from <table_name>; гэдгээр яг ашиглагдаж байгаа хэмжээ нь бодит хэмжээнээсээ нилээн зөрүүүтэй байгаа мөртлөө.

Ямартай ч дээрхи doc - оор lob partition бүрийн хувьд доорхи unused_blocks = 0 гэх цэвэрлэх боломжгүй үр дүн гарж байгаа юм.
TOTAL_BLOCKS = 1853960
TOTAL_BYTES = 15187640320
UNUSED_BLOCKS = 0
UNUSED BYTES = 0
LAST_USED_EXTENT_FILE_ID = 122
LAST_USED_EXTENT_BLOCK_ID = 1057920
LAST_USED_BLOCK = 8192
PL/SQL procedure successfully completed.
SEGMENT_NAME = SYS_LOB0000150758C00007$$
Үр дүн нь fail :smile:
2. Table rename хийгээд, drop хийвэл - /lob нь арилна гэхдээ ариа болхи байгаа юм./
3. ? Арга туршлага байвал хуваалцааж

1 Like

Tablespace- н хэмжээ буцаж багасдаггүй биш билүү.

alter table T1 shrink space cascade; 

энэ коммандыг ажиллуулаад үздээ… Эсвэл

ALTER TABLE <table_name> MODIFY LOB (<lob_column>) (SHRINK SPACE);

alter table <table_name> shrink space нь Oracle 10g R1-д нэмэгдсэн боломж юм. Харин LOBs -ын SHRINK SPACE нь Oracle 10g R2 нэмэгдсэн боломж бөгөөд устсан LOB segment болон LOB index-г цэвэрлэж зай гаргахад зориулагдсан.

1 Like

Багасахгүй л байгаамда.

Би ойлгохдоо тухайн tablespace нь файл систем дээр их хэмжээ эзлээд байгаа, тэгээд tablespace доторхи мэдээллийг устгахад файл систем дээрхи tablespace-н хэмжээ дагаад буурахгүй байна гэж ойлгоод байгаа. Мөн үү?

tablespace usage - нь буурахгүй байгаа гэсэн үг. LOB нь цаанаа undo байдлаар үлдчихдэг юм шиг байлээ.

Аан би буруу ойлгож :sunglasses:

Doc ID 386341.1 - ын дагуу бол эхлээд unused block - оо тодорхойлсон юм. unused block байхгүй олдоогүй болхоор багасахгүй байгаа юм. Lob нь unused болдог юм болву эсвэл өөр undo гээд өөр төлөвт орчихдог юм болвуу л гэж кэкэ,

Би эсвэл будилаад байж магадгүйлдээ, хэрвээ өмнө нь table хугацааны purge хийгээд устсан мөрүүдийн харгалзах lob - уудыг tablespace - ээ цэвэрлэж байсан хүнээс л бэлэн будаа идэх санаатай :slight_smile:

@tumenjargal хүснэгтэнд мэдээлэл оруулахад үүссэн extent үүд арилахгүй байгаа учраас хэмжээ болохгүй байна. Уг extent үүд нь хүснэгтийг устгахад арилна. Мөн дээрх коммандуудын дагуу эхний ээлжинд HWM (High Water Mark) тодорхойлж (alter table mytable shrink compact;) дараагаар lob баганыг modify хийх (alter table mysql modify lob (mycolumn) (shrink space); ) зарчмаар хэрэглээний мэдээллийг засварлана. Үүний тулд tablespace нь ASSM (Automatic Segment Space Management) тохиргоотой байх шаардлагатай. SHRINK нь бидний windows OS дээр defragment гэх зүйл хийдэгтэй төстэй үйлдэл хийнэ.

баярлалаа :slight_smile:

(alter table mysql modify lob (mycolumn) (shrink space); хийхэд table Дээр lock үүсхүү? access - Гүй болох тохиолдол байхуу?

Online ажиллуулж болно. windows defragmentation тэй бараг л зарчим ижил дээ. мэдээж ачаалал багатай үедээ ажиллуулаарай. Бас нэг зүйл сануулахад LOB төрлийн дата өөр чигээ хэмжээ бүхий мэдээллийг redo log -т бичдэг.

lob - ыг нь цэвэрлэх үед бичдэг undo - л томрож магадгүй гэж төсөөлөөд байгаашд хө? (alter table mysql modify lob (mycolumn) (shrink space); хийхээр багассан хэмжээгээрээ archivelog үүснэ гэсэн үгүүү?

shrink коммандад архив лог үүсэхгүй ээ. харин бага зэрэг redolog үүсгэнэ. харин бусад энгийн үйлдлүүдийн хувьд (update,insert…) redo log дээр бичигддэг зүйлс бичигддэгээрээ бичигдэнэ. архивлог идэхвхтэй бол үүсдэгээрээ үүснэ. гол нь тэр үүсэж байгаа мэдээллүүд чинь лоб -ийн хэмжээтэй ижил байнаа гэсэн үг. Жишээ нь 2мб зураг гэж бодоход 2мб хэмжээгээр redolog -д бичигдэнэ гэсэн үг.

redolog чинь log switch хийхээр архив лог болно биздээ хө, тэгхээр shrink комманд архив лог үүсгэж байна гэсэн үг . заза 100G лоб цэвэрлхэд 100G redolog бичигдэх буюу 100G архив лог үүсхийм байна гэж ойлоо, би уул нь тэгэхгүй байгаасай гэж найдаж байсын :frowning: . Тусалсан баярлаа :slight_smile:

shrink хийхэд бага үүснэ. харин insert,update хийхэд тухайн хэмжээгээр үүснэ гэсэн үг. shrink хийхэд арай өөр зүйл дээр redo log үүсдэг бололтой. Олж мэдэхээрээ бичье.

1 Like

Баярлалаа :smiley:

Өчигдөр унтахаасаа өмнө жаал бодлоо. Мэдээж блокууд өөрчлөгдөж мэдээлэл өөрчлөгдөж байгаа тул data dictionary шинэчилэлт орно. Тэдгээрийн лог redolog -т бичигдэх бөгөөд мэдээж log switch хийгдэхэд архив лог идэхтэй бол үүснэ… тиймээс shrink үед нээх айхтар их хэмжээний лог биш бага зэрэг бичигдэх нь харагдаж байна… :stuck_out_tongue:

1 Like