search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
1 oy
574 gösterim
Selamlar,

Biz Oracle veritabanı üzerinde kod birden fazla ekip/insan çalıştığımız ve kodlarımız plsql de olduğu için sürekli kod ezilmeleri yaşıyoruz. Bunun önüne geçebilmek veya ezilen kodları kurtarmanın bir yolu var mı?

İyi çalışmalar.
Veri Tabanı kategorisinde 6.2k puan

1 cevap

2 oy

Bunun farklı yolları var, bu yolları yazılımcı kendi yöntemleriyle halledebileceği gibi, veritabanı yöneticisi de bir takım tedbirler alabilir. 

-Yazılımcı  içerisinde pl-sql bulunan prosedür'leri, fonksiyonları yenisi ile değiştirmeden, mevcutunun scriptini alıp, bir yerlerde saklayabilir. 

-yine yazılım tarafında bu tarz scriptleri sürüm olarak tutan uygulamalar var.  herkesin çok kullandığı TFS üzerinde veya SourceSafe üzerinde tutulabilir. bunlar haricinde farklı 3 party yazılımlar da mevcut. Tüm değişikler, sürüm numaralarıyla saklanabiliyor.

Yazılımcı haricinde veritabanı tarafında veritabanı yöneticisi de bazı önlemler alabilir. 

--Örneğin, Oracle'da bulunan datapump ile tüm veritabanının METADATA'sı export edilerek belirli süre(mesela 1 hafta) işletim sistemi üzerinde saklayabilir. ihtiyaç duyulduğu anda istenilen metadata'yı veritabanına import edebilir. Bunu DBA'den isteyebilirsiniz.

-Diğer bir seçenek ise; eğer veritabanında flashback aktif ise, ilgili metadatanın geçmiş hali çekilebilir. Tabiki bu süre kısıtlı ve veritabanındaki ayarlar dahilindedir.  

Yazılımcı olarak, eğer veritabanına bağlandığınız kullanıcının yetkisi var ise aşağıdaki örnekte yaptığım gibi procedure'lerinizi fonksiyonlarınızı, package'larınızı kurtarabilirsiniz.

Bir procedure olusturalım.

SQL> CREATE OR REPLACE PROCEDURE P_CUSTOMER
  2  AS
  3  BEGIN
  4     UPDATE customers
  5        SET city = 'Istanbul'
  6      WHERE city = 'ISTANBUL';
  7  END;
  8  /

Procedure created.

Procedure'ün scriptini select edelim.

SQL> SELECT TEXT
  2    FROM dba_source 
  3   WHERE NAME = 'P_CUSTOMER';

TEXT
------------------------------------------------------------------------------------------------------------------------------------------------------------------
PROCEDURE P_CUSTOMER
AS
BEGIN
   UPDATE customers
      SET city = '?stanbul'
    WHERE city = 'ISTANBUL';
END;

7 rows selected.

Saati kontrol ediyorum.

SQL> !date
Fri Feb 26 14:00:00 EET 2016

Procedure'ü değiştiriyorum.

SQL> CREATE OR REPLACE PROCEDURE P_CUSTOMER
  2  AS
  3  BEGIN
  4     UPDATE customers
  5        SET city = 'Istanbul-Avrupa'
  6      WHERE city = 'ISTANBUL';
  7  END;
  8  /

Procedure created.

Aşağıda görüldüğü gibi procedure değiştiği şekilde.

SQL> SELECT TEXT
  2    FROM dba_source 
  3   WHERE NAME = 'P_CUSTOMER';

TEXT
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
PROCEDURE P_CUSTOMER
AS
BEGIN
   UPDATE customers
      SET city = 'Istanbul-Avrupa'
    WHERE city = 'ISTANBUL';
END;

7 rows selected.

Şimdi procedure'un saat 14:00'daki halini çekelim. 


SQL> SELECT TEXT
  2    FROM dba_source AS OF TIMESTAMP TO_TIMESTAMP ('26-02-2016 14:00:00', 'DD-MM-YYYY hh24:MI:SS')
  3   WHERE NAME = 'P_CUSTOMER';

TEXT
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PROCEDURE P_CUSTOMER
AS
BEGIN
   UPDATE customers
      SET city = 'Istanbul'
    WHERE city = 'ISTANBUL';
END;

7 rows selected.

Yukarıda gördüğünüz gibi procedure'un öncekini haline ulaştık.

AS OF TIMESTAMP  kalıbını tablolar için de kullanabilir. tablonun birkaç saat öncesinde verisi nasıldı öğrenebiliriz mesela.  yanlışlıkla ezilen dataları kurtarmak için birebir :)

Bu Oracle'ın Flashback teknolojisinin sunduğu bir güzellik.  Daha sonra başka bir başlık altında daha detaylı  bilgi verebilirim.

604 puan

İlgili sorular

0 oy
1 cevap 378 gösterim
378 gösterim
Postgres'e consol üzerinden login olduktan sonra veritabanı listesini nasıl çekerim?
7 Aralık 2021 Veri Tabanı kategorisinde ŞEYMA 316 puan sordu
0 oy
1 cevap 582 gösterim
582 gösterim
Postgre Sql üzerinde elimdeki kullanıcıya bir veri tabanı üzerinde işlem yapma yetkisi vermek istiyorum. Nasıl yapabilirim?
27 Mayıs 2021 Veri Tabanı kategorisinde kenan 6.2k puan sordu
0 oy
1 cevap 318 gösterim
318 gösterim
veri tabanı için şema,tablo,viewlar, hatta tanım tabloları gibi veritabanı objeleri için versionlama yapılıyor mu? GIT ,bitbucket kullanabiliyor muyuz. Etkili olan yöntem tavsiyeleriniz nelerdir örneğin Oracle için mesela.
8 Haziran 2020 Genel Kavramlar kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
0 cevap 334 gösterim
334 gösterim
Oracle'da oluşturulmuş bir sequence'in mevcut değerini nasıl attırabilirim? Uygulama kaynaklı bir sorundan dolayı tüm sequence'lerin değerini %10 arttırmak istiyorum.
30 Kasım 2020 Veri Tabanı kategorisinde buzel 604 puan sordu
0 oy
0 cevap 630 gösterim
630 gösterim
Oracle DB'de TPS (Transaction Per Second) ne anlama geliyor? DB'deki TPS değerini nasıl görebiliriz?
30 Kasım 2020 Veri Tabanı kategorisinde buzel 604 puan sordu