Thursday, May 19, 2011

Oracle - move partitioned tables to another tablespace

Just few days ago I've got a task to move all data from a tablespace to another - disk replacement.
My thought was: "simple job, excepting partitioned tables."
No, you do not need to recreate the tables(with all corresponding indexes) and make insert into new_table select * from old_table. I have 700 tables, few of them near 10GB, but many around 1GB.

First code I managed looked like this:


declare
   stmt varchar(1000);
begin
   for k in 0..189
   loop
      stmt:='ALTER TABLE table_name MOVE PARTITION P'||to_char(add_months(to_date('201102','yyyymm'),k),'yyyymm')|| ' TABLESPACE NEW_TABLESPACE';
      execute immediate stmt;

      stmt:='ALTER TABLE table_name MODIFY PARTITION P'||to_char(add_months(to_date('201102','yyyymm'),k),'yyyymm') ||' REBUILD UNUSABLE LOCAL INDEXES TABLESPACE NEW_TABLESPACE';
      execute immediate stmt;
   end loop;
end;


for tables partitioned by range in a monthly manner.

Tuesday, May 17, 2011

miroase ca la munte

Maria, până sa implinească 3 ani, iarna asta.
Am luat un şampon diferit de cel cu care era/eram obişnuiţi.
Când îl folosim prima dată, Maria comentează: "Ăsta e ca la munte". Noi nu am înţeles nimic, evident. Nu scria pe el mountain, nu era cu cine ştie ce arome... ce vrea sa zică figurina asta de Maria?

Ne prindem noi după ceva timp cum stă treaba. Vara trecută, când am fost la munte, am luat la repezeală din supermarket un şampon de copii, pe care l-am folosit la munte. Era acelaşi şampon pe care il foloseam acum şi maria l-a recunoscut dupa... miros. Maria a asociat mirosul cu muntele sau... în sfârşit, şi-a adus aminte ceva cu şase luni în urmă. Pe atunci avea până în doi ani şi jumătate, şi intre timp nu am folosit un astfel de şampon.