Drop tablespace işleminde alınan ORA-14404 hatasının çözümü
Drop tablespace işleminde , eğer drop edilen tablo alanı , boş olmasına rağmen, herhangi bir partition için varsayılan depolama alanı ise , drop işlemi ORA-14404 hatasına sebep olacaktır ve drop edilmeyecektir.
İşlem sırasında aşağıdaki gibi hata oluşacaktır.
SQL> drop tablespace TABLO_ALANI including contents ; drop tablespace TABLO_ALANI including contents * ERROR at line 1: ORA-14404: partitioned table contains partitions in a different tablespace
Bu durumda ilgili partition’ı tespit edip, tablo alan bilgisini değiştirmek gerekmektedir.
Tablo alanını kullanan partition’ı tespit etmek için aşağıdaki sorguyu kullanabilirsiniz.
SELECT table_owner, table_name, partition_name, tablespace_name FROM dba_tab_partitions WHERE (table_owner, table_name) IN ( SELECT table_owner, table_name FROM dba_tab_partitions X WHERE x.tablespace_name = UPPER ('TABLO_ALANI') AND EXISTS (SELECT * FROM dba_tab_partitions Y WHERE x.table_owner = y.table_owner AND x.table_name = y.table_name AND y.tablespace_name <> UPPER ( 'TABLO_ALANI')) GROUP BY table_owner, table_name) ORDER BY 1, 2, partition_position;
Sorgudaki TABLO_ALANI yerine ilgili tablo alanının adı büyük harflerle olacak şekilde gelmelidir.
Partition tespitinden sonra aşağıdaki komut ile ilgili partittion’ın kullandığı tablo alanını değiştirebilirsiniz.
ALTER TABLE KULLANICI.TABLO MOVE PARTITION PARTITION_ADI TABLESPACE YENI_TABLO_ALANI NOLOGGING;
Sonrasında ilgili tablo alanı sorunsuz şekilde drop edilebilecektir.
SQL> DROP TABLESPACE TABLO_ALANI INCLUDING CONTENTS AND DATAFILES; Tablespace dropped.