Veritabanı Tasarımı Tablo Değiştirme
Konular Tabloyu değiştirme neden önemlidir açıklama ALTER, DROP, RENAME ve TRUNCATE DDL komutlarının etkisini tablolar ve sütunlar üzerinde görme ALTER TABLE komutlarıadd, MODIFY ve DROP ile sorgulama yapma Tabloda FLASHBACK QUERY yapma ve açıklama FLASHBACK tablo işlemleri yapma ve açıklama 2
Konular Bir zaman süresi üzerinden veri değişikliklerini izlemek DELETE e karşı TRUNCATE kullanımı gerekçesini tablolar için açıklamak COMMENT ON TABLE komutu kullanarak bir tabloya yorum eklemek Bir sütunu değiştirmek için yapılabilir ve yapılamaz değişiklikleri belirtmek SET UNUSED komutu ne zaman ve niçin avantajlıdır açıklamak 3
Amaç Değişiklik dışında hiçbir şey kalıcı değildir. ifadesini hatırlayın. Hiç hata yapmasak ya da değişikliğe ihtiyaç duymasak güzel olmaz mıydı? Veritabanının dinamik varlıklar olduğunu öğrendiniz. Değişmez olsalardı kullanışlı da olmazlardı. Bu zamana kadar tablolar oluşturdunuz ve tablolar içindeki satır verilerinde değişiklik yaptık. Fakat tabloların kendisinde nasıl değişiklik yapabiliriz? 4
ALTER TABLE ALTER TABLE komutu şu amaçlar için kullanılır: Yeni bir sütun eklemek Var olan sütunu güncellemek Bir sütun için varsayılan bir değer tanımlamak Sütunu kaldırmak 5
ALTER TABLE Tablo üzerinde bir sütun ekleyebilir ya da kaldırabiliriz. Fakat sütunun nerede görüneceğini belirtemezsiniz. Yeni eklenen sütun her zaman tablonun son sütunu olacaktır. Ayrıca tablonuzda hali hazırda satır verileri var ve siz tabloya yeni bir sütun eklerseniz, yeni sütun başlangıçta tüm önceki sütunlar için NULL olacaktır. 6
ALTER TABLE: Sütun Ekleme Yeni bir sütun eklemek için SQL sözdizimi: ALTER TABLE tabloadı ADD (sütun adı veri_tipi [DEFAULT ifade], sütun adı veri_tipi [DEFAULT ifade],... Örneğin: 7
ALTER TABLE: Sütun Değiştirme Bir sütun değiştirme sütunun veri tipi, büyüklüğü ve varsayılan değerindeki bir değişiklik olabilir. Kural ve kısıtlar şu şekildedir: Sayısal bir sütunun genişliği ya da hassasiyeti artırabilir. Bir karakter sütunun genişliği artırabilir. Tablonun sütunu yalnızca null değerleri içeriyorsa ya da satır içermiyorsa sütun karakter genişliği azaltabilir. Değer içeren satırlar varsa, genişlik sütunda yer alan en büyük değere azaltılabilir. 8
ALTER TABLE: Sütun Değiştirme Eğer sütun null değerler içeriyorsa veri tipi değiştirilebilir. Sütun null değerler içeriyorsa ya da sütundaki herhangi bir değerden daha küçük bir değere değiştirilmiyorsa CHAR sütun tipi VARCHAR2 ye ya da VARCHAR2 sütun tipi CHAR a dönüştürülebilir. Sütunun varsayılan değerindeki değişiklik tabloya ekleme yapıldıktan sonra yansır. 9
ALTER TABLE: Sütun Değiştirme Örnek: Bir tablo iki sütunla oluşturulur: Hangi değişikliklere izin verilir, hangilerine verilmez? 10
ALTER TABLE: Sütun Kaldırma Sütun kaldırırken şu kurallar uygulanır: Veri içeren sütunlar kaldırılabilir. Aynı anda sadece bir sütun kaldırılabilir. Tablodaki tüm sütunları kaldıramazsınız, en azından bir sütun kalmalı. Bir sütun kaldırıldığında içindeki veriler kurtarılamaz. 11
ALTER TABLE: Sütun Kaldırma SQL sözdizimi: ALTER TABLE tabloadı DROP COLUMN sütun_adı; Örnek: 12
Kullanılmayan Sütunları Ayarlama Büyük bir tablodan bir sütunu kaldırmak uzun bir zaman alabilir. Hızlı alternatif sütunu kullanılamaz olarak işaretlemektir. Sütun değerleri, veri tabanında kalır, ancak herhangi bir şekilde erişilemez, bu yüzden etkisi sütun kaldırmak ile aynıdır. Gerçekte kullanılmayan sütun ile aynı isimle yeni bir sütun ekleye bilirsiniz. Kullanılmayan sütunlar oradadır fakat görünmez. Sözdizimi: ALTER TABLE tablo_adı SET UNUSED (sütun_adı); 13
Kullanılmayan Sütunları Ayarlama Bu tablo ALTER TABLE komutunu özetler: 14 Sözdizimi Çıktılar Kaygılar ALTER TABLE tabloadıadd (sütun_adıveritipi[default ifade], sütun_adıveritipi [DEFAULT ifade], ALTER TABLE tabloadımodify (sütun_adıveritipi[default ifade], sütun_adıveritipi, ALTER TABLE tabloadıdrop COLUMN sütun_adı; ALTER TABLE tabloadı SET UNUSED (sütun_adı); ALTER TABLE tabloadıdrop UNUSED COLUMNS Tabloya yeni bir sütun ekler. Sütunun veri tipini,boyutunu ve varsayılan değerini değiştirmek için kullanılır. Tablodan sütun kaldırmak için kullanılır. Bir veya daha çok tabloyu daha sonra kaldırmak üzere işaretleme Kullanılmaz olarak işaretlenmiş tüm tablo sütunları silinir Sütunun tablodanerede gözükeceği seçilemez. Son sütun olur. Sütunun varsayılan değer değişimi tabloya sonraki eklemeden sonra yansır. Tabloda en az bir sütun kalmalıdır. Kaldırılan sütun geri alınamaz. Disk alanı geri gelmez. Sütunlar kaldırılmıştır. Bir kere kullanılmaz diye işaretlenirse bu sütunlara erişim sağlanamaz. Kalıcı olarak kaldırılır.
DROP TABLE DROP TABLE komutu Oracle tablosunun tanımını kaldırır. Veritabanı tablodaki tüm verileri ve onunla ilişkili tüm indeksleri kaybeder. DROP TABLE çalıştırıldığında: Tablodan tüm veriler silinir. Tablo açıklaması veri sözlüğünden kaldırılır. Oracle Sunucusu kararınızı sorgulamaz ve tablo kalıcı olarak kaldırılır. Sonraki sayfada kaldırılan tablonun garanti edilmese de nasıl kurtarılabileceği açıklanmaktadır. 15
DROP TABLE Sadece tablonun oluşturanı ya da DROP ANY TABLE yetkisi olan bir tabloyu kaldırabilir. Sözdizimi: DROP TABLE tablo_adı; Örnek: 16
FLASHBACK TABLE Bir tabloyu hata ile kaldırırsanız bu tabloyu ve verilerini getirebilirsiniz. Her veritabanı kullanıcısı kaldırılan nesnelerin taşındığı bir dönüşüm kutusuna sahiptir. FLASHBACK TABLE komutu ile geri döndürebilirler. Bu komut hata ile silinen bir tabloyu, görünümü ya da indeksi kurtarmak için kullanılabilir. Sözdizimi: FLASHBACK TABLE tablo_adı TO BEFORE DROP; 17
FLASHBACK TABLE Örneğin EMPLOYEES tablosu hata ile kaldırılırsa şu komutları yazarak kurtarabilirsiniz: Bir tablonun sahibi olarak geri alma komutunu çalıştırabilir ve kurtarmaya çalıştığınız tablo indekse sahipse bunlarda kurtarılmış olur. Hangi nesnelerin kurtarılabileceğini sorgulamak için veri sözüğü görünümü USER_RECYCLEBIN kullanılır. 18
FLASHBACK TABLE USER_RECYCLEBIN görünümü diğer veri sözlükleri gibi sorgulanabilir. Bir tablo FLASHBACK TABLE komutu ile kurtarılırsa USER_RECYCLEBIN görünümünde görünmez. İndekslerde kurtarılır. 19
RENAME Tablonun adını değiştirmek için RENAME komutu kullanılır. Bu işlem nesnenin sahibi ya da veritabanı yöneticisi tarafından yapılır. Sözdizimi: RENAME eski_adı to yeni_adı; Örnek: Daha sonra görünüm, sıralama ve eşanlam gibi nesnelerin nasıl tekrar isimlendirileceğini göreceğiz. 20
TRUNCATE Bir tablo kesmek bir tablodan tüm satırları kaldırır ve bu tablo tarafından kullanılan depolama alanı iade edilir. TRUNCATE TABLE komutu ne zaman kullanılır: Satır silimi geri alınamaz. Tablonun sahibi ya da DROP ANY TABLE sistem yetkisine sahip olmanız gerekir. Sözdizimi: TRUNCATE TABLE tablo_adı; DELETE komutu da tablodan satırları siler fakat bellekteki yeri iade etmez. TRUNCATE daha hızlıdır çünkü geri alma bilgisi yoktur. 21
TABLO YORUMU COMMENT komutu kullanarak bir tablo, sütun ya da görünüm ile ilgili 2000 karaktere kadar yorum ekleyebilirsiniz. Söz dizimi: COMMENT ON TABLE tablo_adı COLUMN tablo.sütun IS yorumunuzu buraya ekleyin'; Örnek: 22
TABLO YORUMU Veri sözlüğünde tablo yorumlarına bakmak için: Daha önce yapılan yorumu kaldırmak isterseniz boş katar kullanabilirsiniz. 23
Sorguyu Geri Alma Bir tablodaki uygunsuz şekilde değiştirilmiş verileri keşfetmiş olabilirsiniz. Neyse ki, Oracle da zaman içinde belirli noktalarda satır veri görüntülemenize olanak sağlayan bir kolaylık bulunmaktadır. Böylece zamanla bir satırın farklı sürümlerini karşılaştırabilirsiniz. Bu kolaylık çok yararlıdır. Birisi kazara bir tabloda bazı DML komutu çalıştırır ve daha sonra bu değişiklikleri COMMIT ile yürütür. Oracle Application Express, otomatik olarak onaylar ve böylece hatalar kolayca yapılır. 24
Sorguyu Geri Alma FLASHBACK QUERY kolaylığı değişiklikler onaylanmadan satırların nasıl göründüğünü belirler. Oracle veriyi değiştirdiği zaman değişiklik yapılmadan önceki halinin kopyasını tutar. Sütun güncellemesi için eski sütun değerinin kopyasını tutar, silme için tüm satırı tutar ve ekleme komutu için hiçbir şey tutmaz. Bu eski kopyalar UNDO tablosu adı verilen yerde tutulur. Kullanıcılar bu özel veritabanı alanına geri alma sorgusu ile erişebilir. 25
Sorguyu Geri Alma SELECT komutunda VERSIONS deyimi kullanarak eski veri versiyonları görüntülenebilir. SCN numarası istem değişiklik numarasıdır. Veritabanında zaman bağlı bir belirleyicidir. Arttırılan sıralı bir numaradır ve veritabanının kendisi tarafından kontrol edilir. 26
Sorguyu Geri Alma FLASHBACK QUERY oluşturmak için en iyi yol örneklemedir. Çalışan tablosunda çalışan numarası 1 için içerik şu şekildedir: Çalışanı oluşturduktan sonra: 27
Sorguyu Geri Alma 28
Sorguyu Geri Alma Daha sonra satırı güncelleyebilirsiniz: 29
Sorguyu Geri Alma Daha sonra satırı silebilirsiniz: 30
Sorguyu Geri Alma Son sorgulamanın sonuçları sadece geri alma sorgusu kullanıldığı zaman mümkündür. employee_id =1 kullanarak silme komutunda sonra normal arama yapılmak istenirse veri yok diye hata alırsınız. 31