Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brisanje ogromne kolicine podataka

[es] :: Oracle :: Brisanje ogromne kolicine podataka

[ Pregleda: 2650 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

HrCorpsegrinder
Technical consultant / developer
Zagreb

Član broj: 176034
Poruke: 2
77.237.115.*



Profil

icon Brisanje ogromne kolicine podataka17.03.2008. u 14:35 - pre 194 meseci
Pozdravljeni,



Zanima me koji je najbolji nacin da se obrisu goleme kolicine podataka iz tabele/tabela? Govorim ovdje o brisanju 30-ak milijuna u tablici koja sadrzi ~ 100 milijuna.

Problem je sto DELETE SQL statement nije od neke pomoci. Pustio sam brisanje preko 3 dana i nista pametno.

Pokusali smo brisati preko PL/SQL procedura (commit odjednom ili svakih 10000) - ukratko - beskonacno sporo.

Pokusao sam i ugurati hintove za koristenje index-a u DELETE DML (jer brisem po indeksiranom polju) i poboljsanje se vidi tek na nekim manjim tablicama.

Primjetio sam da me najvise muce constraint-i, medjutim kao zaposlenik u 'velikoj firmi' sa DBA smo na 'Vi' sto ce reci da imamo minimalne privilegije - postoji li nacin kako izvuci i disable-ati sve constrainte koji pokazuju na tablicu iz koje brisem?

Naime, onaj tko je razvijao model podataka, osmislio ga je tako da je vecina constraint-a postavljena na tablice koje ja sa svojim privilegijama ne mogu ni vidjeti. U tim doticnim tablicama garantirano nema 'child' zapisa, dakle Oracle dzabe provjerava child recorde i trosi vrijeme i resurse.

Mozda postoji koji hint koji ce reci Oracle-u da ignorira constraint-e?


Unaprijed hvala.



LP
Oracle OCA - PL/SQL developer
 
Odgovor na temu

suadhm
Suad Adrović
Podgorica

Član broj: 90644
Poruke: 339
*.crnagora.net.



Profil

icon Re: Brisanje ogromne kolicine podataka19.03.2008. u 13:19 - pre 194 meseci
Sve podatke o constraint-ima vezanih za tvoju shema-u možeš naći u view-u:

user_constraints

Tu pronadji one constraint-e koji su ti vezani za problematičnu tabelu i disable-uj ih dok ne pobrišeš podatke, a onda ih enable-uj.

Pozdrav.
 
Odgovor na temu

brzak

Član broj: 66407
Poruke: 126



+5 Profil

icon Re: Brisanje ogromne kolicine podataka24.04.2008. u 11:43 - pre 193 meseci
Koristi TRUNCATE TABLE
 
Odgovor na temu

HrCorpsegrinder
Technical consultant / developer
Zagreb

Član broj: 176034
Poruke: 2
*.dsl.iskon.hr.



Profil

icon Re: Brisanje ogromne kolicine podataka24.04.2008. u 18:59 - pre 193 meseci
Da sam tak pametan vec bi odavno otkaz dobio.

Procitaj moj prvi post jos jednom, pa onda jos jednom ako ne skuzis zasto TRUNCATE nije pogodan.


@suadhm:
Tnx, napisao sam si odlican generator i rastura. Budem pejstao ovdje kada ga malo generaliziram.
Oracle OCA - PL/SQL developer
 
Odgovor na temu

Raspucin

Moderator
Član broj: 20699
Poruke: 216
*.sonydadc.com.

ICQ: 244452581


+3 Profil

icon Re: Brisanje ogromne kolicine podataka25.04.2008. u 13:45 - pre 193 meseci
Za ovakav problem postoji jedna prečica koja se dosta često koristi kod brisanja mnogo miliona podataka.

Postupak je sledeći:

1. Kreira se nova tabela koja sadrži samo one podatke koji ti trebaju:

CREATE TABLE new_table AS SELECT * FROM old_table WHERE ......

u WHERE klauzulu ubaci uslov koji ti treba da izvučeš samo one podatke koji ti trebaju i koje bi imao u tabeli posle ovog velikog brisanja.


2. Obrišeš staru tabelu DROP TABLE old_table;

3. Promeniš ime stare tabele RENAME new_table TO old_table;

4. Potrebno je da se ponovo rekreiraju svi indeksi koje si imao na staroj tabeli.


Da bi ovo mogao da izvedeš ipak su ti potrebne neke privilegije nad tim objektima u bazi, ne znam da li će ovo da ti pomogne ali ovo je jedan od najbržih načina.

Postoji još par trikova ali opet ti trebaju privilegije. Pretpostavljam da je takva tabela particionisana, pa možeš da ubaciš sve podatke koje treba da obrišeš u jednu posebnu particiju.
Posle toga uradiš DROP te particije i na taj način rešiš problem, isto ultra brzo rešenje.


Naravno treba da vodiš rašuna i o constraint-ima i da vidiš da li možda imaš kaskadno brisanje u bazi pa da nenamerno napraviš veću štetu.....


Pozdrav
 
Odgovor na temu

[es] :: Oracle :: Brisanje ogromne kolicine podataka

[ Pregleda: 2650 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.