Zaman zaman database’ de tablolara yüklü miktarda insert işlemleri olur. Özellikle bahsettiğimiz bir raporlama database’ ise bu işlem kaçınılmaz olur ve yapılan işlemin boyutu undo tablespace’ inizin boyutundan fazla olduğunda (undo tbs autoextend olmadığını varsayarsak) “ORA-30036: unable to extend segment by 8 in undo tablespace ‘UNDOTBS2’” hatasını almanız kaçınılmaz olacaktır. Ora-30036 hatasının önüne geçmek için yapılan insert işlemini parçalamak ve daha ufak bölümlerde yapmak sizin için kaçınılmaz bir çözüm olacaktır. Bu işlemi de yaparken tablo içerisindeki bir alana göre bir den fazla where conditionı ile sorgu yazmak yerine tek sorgu ile ama belirli sayıda data üzerinde sırayla işlem yaparak undo’ ya fazla yüklenmeden tabiri caizse patlatmadan işleminizi gerçekleştirebilirsiniz. Örnek olması açısından şöyle bir bilgi verebilirim, raporlama database’ lerimizden birinde yer alan 54 gb bir datayı farklı bir schema altına aşağıdaki script ile yaklaşık 1 saat gibi bir sürede taşımıştım. (Aşağıda belirtmiş olduğum tuning yöntemlerinden hiçbirini kullanmadan) Tabi bu süreyi etkileyen diğer faktörleride göz önünde bulundurmak lazım. (işlemin yapıldığı andaki database deki yoğunluk, kullanılan server’ ın kapasitesi, taşınan tablespace’ lere ait dbf’ ler üzerindeki o anki i/o durumu vs.)
Continue reading