Archive for February, 2006

Türkiye’nin “nükleer” serüveni..

Monday, February 27th, 2006

Nükleer santral için bugüne kadar üç kez ihaleye çıkıldı, hepsi sonuçsuz kaldı.
Yorumlar hükümetin bu işte çok kararlı olduğu yönünde, santral inşası için Sinop öne çıkıyor. http://www.ntvmsnbc.com/news/362997.asp

Bir tarafta, “Türkiye’nin nükleer enerjiye ihtiyacı yoktur. Bu tamamen nükleer lobilerin daralan pazarlarına yer açmak ve atıklarına çöp deposu aramak ihtiyacından kaynaklanmaktadır. Hükümetin bu günkü durumu “zengin meyve ve sebze bahçesi olan birinin milyarlarca para verip eczaneden vitamin hapı alması” örneğine denk düşmektedir. AB yeni teknolojilerin geliştirilmesine fon ayırıyor ve atık sorunu, işletme güvenliği gibi konuların çözüme kavuştuğu sistemler geliştirilene dek yeni sipariş vermiyor. ” gibi düşünceler..

Diğer tarafta, “Dünya Nükleer Birligi’ne (World Nuclear Association) göre, yükselen petrol fiyatları ve sera etkisinin kömür üzerinde yarattığı kısıtlayıcı etki nükleer enerjiyi yeniden gündeme taşıyacak. Bu alanda bağımlı olan ülkeleri ciddi sorunlar bekliyor.” gibi düşünceler..

Kıyaslamalı yaklaşımlar için, “Nükleer Enerji ile İlgili Olumlu/Olumsuz Görüşler Nelerdir?”;
http://www.taek.gov.tr/bilgi/sss/nok_olumlu_olumsuz.html

Ben hala böyle riskli ve yüksek teknoloji gerektiren bir yöntemin otuz yıllık boğaz köprülerinin bile bakımını kendisi yapamayan, yapmayan bir ülke olarak bizim için son seçim olmasından yanayım sanırım..

Dünya’da nükleer enerji; http://www.ntvmsnbc.com/news/362633.asp

 

2006 ARALIK GOREV 3

Monday, February 27th, 2006

..
Görev sys.all_objects görüntüsü verisini dbms_obfuscation_toolkit destek paketi ile sifreleyerek isletim sistemine text file olarak utl_file destek paketi ile yazan pl/sql paketinin ilgili moduller ile hazirlanmasi. Ve bu yazilan kodun dbms_job destek paketi ile her saat basi otomatik calismasini saglamalisiniz.

Kodu yazarken IDE olarak pl/sql developer indirip kullanmaya yavas yavas baslamanızı rica ediyorum; http://www.allroundautomations.nl
icindeki Beautifier ‘ın özelliklerini ayarlayarak standart, okunabilir bir kod hazırlamasını bekliyorum. Referans olması için bizim genel olarak veritabanı uygulaması geliştirirken uyguladigimiz kuralları da gonderiyorum; “ORACLE UYGULAMA GELİŞTİRME STANDARTLARI v1.doc”

Bazı dikkat edilmesi gereken noktalar sunlar;

- plsql sentaksı java sentaksından farklıdır, ornegin değişkenler ve işlev isimlerinde “_” ile ayırıyoruz, dbms_random oracle paketini plsql developer ile goruntuleyip inceleminizi oneririm.

- Hazirlanacak bu paket içinde commit kullanMAyın, bir standart olarak asla başkalarının çağırabileceği dış dünyaya açtığın uygulamalarda commit/rollback kullanMAmak gerekir, zira farkında olmayan çağırıcının tüm transaction mantığını yok eder bu yaklaşım. Dikkat..

- Benzer durum exceptionlar icin de gecerli, exception dondu ise cagiran handle etmeli. Transaction ve exception handling cagiricinin sorumlulugudur aksi belirtilmedi ise.

- Yine Spec kısmında sadece dışardan çağırılacak işlevleri belirtmek gerek. Diger body ‘deki islevleri boylece saklamis oluyoruz.

- Hard-coding den kacinalim; mesela utl_file.fopen da file_name, path, open_mode ‘da degerler arguman olsun, statik olmasin. Hard coding ‘den olabildiğince kaçınmak lazım esnek bir uygulama olması ve tekrar tekrar kullanılabilmesi için.

- Aynı amaç için paket içinde bir isi yapan esnek alt moduller kullanmak gerek. Ornegin paketin icinde utl_file ile dosya acma islemini bir modul yapsin, yazma ve kapama islemlerini baska moduller yapsin gibi.

- Okunaklı bir kod olmasi cok onemli, aciklamalar olmali, bu uzun vadede başkalarının da uygulamana mudahele etmesini rahatlatacaktır, hatta bir-iki sene sonra kendi kodunu bile zor anliyor bu aciklayici satirlar olmayınca insan :)

- İncelemek isterseniz PL/SQL Developer alternatifi bazı IDE ler sunlar(google’da aratabilirsiniz); SQL Navigator(Quest), TOAD(Quest), SQL Developer(Oracle-ucretsiz), JDeveloper(Oracle-ucretsiz-UML

,XML,Java,SQL,PLSQL hepsini destekler).- Dbms_job alternatifi olarak dbms_scheduler de incelenebilir, bu ornek icin dbms_job yeterli dbms_scheduler daha karmaşık ihtiyaçlar için geliştirilmiş bir paket.all_objects : http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_2005.htm#sthref1427
dbms_obfuscation_toolkit : http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_obtool.htm
utl_file : http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/u_file.htm#sthref14093
dbms_job : http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_job.htm#sthref3477

Oracle® Database SQL Reference 10g Release 2 (10.2)

http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm

Oracle® Database PL/SQL User’s Guide and Reference 10g Release 2 (10.2)

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/toc.htm

Oracle® Database Application Developer’s Guide – Fundamentals 10g Release 2 (10.2)

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14251/toc.htm

Oracle® Database PL/SQL Packages and Types Reference 10g Release 2 (10.2)

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/toc.htm

OTN PL/SQL Sample Codes

http://www.oracle.com/technology/sample_code/tech/pl_sql/index.html

Best Practice PL/SQL with Steven Feuerstein

http://www.oracle.com/technology/pub/columns/plsql/index.html

OTN PL/SQL Homepage

http://www.oracle.com/technology/tech/pl_sql/index.html

Discussion Forums » Database » SQL and PL/SQL

http://forums.oracle.com/forums/forum.jspa?forumID=75

OTN Oracle Database Application Development Homepage

http://www.oracle.com/technology/products/database/application_development/index.html

uyari 1) utl_file hatasi ile ilgili;

Warning: Package Body created with compilation errors.

HR on 23/12/2006 13:26:30 at XE > sho err
Errors for PACKAGE …

LINE/COL ERROR
——– —————————————————-
2/12 PL/SQL: Item ignored
2/12 PLS-00201: identifier ‘UTL_FILE’ must be declared

– sys ile grant verip sorunu cozdum;

on 23/12/2006 13:28:54 at > conn sys/tonguc as sysdba
Connected.
SYS on 23/12/2006 at XE > grant all on utl_file to public ;

Grant succeeded.

Elapsed: 00:00:00.18
SYS on 23/12/2006 at XE > conn hr/hr
Connected.
HR on 23/12/2006 at XE > CREATE OR REPLACE PACKAGE BODY ….

uyari 2) Exception Handling konusu cok cok onemli;

Plsql soz konusu oldugunda tahiti belgeleri yaninda Steven Feuerstein yol gosterenimizdir bir sunumu paylasiyorum; www.quest.com/presentations/ExceptionHandling.pdf

Oracle® Database PL/SQL User’s Guide and Reference 10g Release 2 (10.2)
Chapter 10 Handling PL/SQL Errors

http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#LNPLS00702

uyari 3) bu gorevi yaparken bu belgeyi benden email ile istemelisiniz;

“ORACLE UYGULAMA GELİŞTİRME STANDARTLARI v1.doc”

..

EZCONNECT – Kolay bağlantı cümlesi (Easy Connect String) 10g

Monday, February 27th, 2006

“TNSNAMES.ORA” dosyasi içerdiği bilgiler nedeniyle her zaman saldırlara karşı bir giriş kapısı oldu.

Kahin 10g sürümü ile “SQLNET.ORA” dosyası içinde yapılacak basit bir tanım ile artık görünmesini istemediğiniz bağlantı bilgilerini saklı tutmanızı sağlayacak bir farklı seçim sunuyor.

kurulum örneği;

NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

örnek kullanım;

sqlplus username/password@ [//] hostname [:port] [/service_name]

 

Yürü be “Ntv”, sende olmasan..

Monday, February 27th, 2006

Perşembe akşamları belgesel dizileri devam ediyor, umarim hiç bitmesin. NTV’de Oscarlık ‘Sokak Kavgası’;

http://www.ntvmsnbc.com/news/363088.asp

 

Eğitim notları; “XE .NET Developer Guide(10.2)”, Gözde Ayrancı

Monday, February 27th, 2006

Maltepe plaza zemin kat bilgisayarlı eğitim odasında iki haftalık birer günlük Kahin eğitimlerine bugün Gözde ile başladık.

İlk eğitim olması nedeniyle Gözde daha şanssız olacak bizlere göre, katılımcı sayısı da oldukça azdı bugün. İlk hafta eğitimleri giriş seviyesinde, “XE” sürümü belgeleri içerik olarak hafif ama yan kaynaklar ile bu açığı kapamaya çalışıyor bu haftaki anlatıcı arkadaşlarım.

Kahin üzerinden “.Net” uygulama geliştirme konusunda http://otn.oracle.com/dotnet bağlantısından birçok belge ve bilgi edinmek mümkün. Eğitimden aklımda kalan, bir süre “Jdbc” uygulamaları yazmamdan dolayı sanırım, derleyicinin ve ortam parçacıklarının tanıdık ve kullanışlı görünmesi oldu. Giriş seviyesi için bence bu hissi yaratmak çok tatmin edici idi, Gözde özenli çalışmış ve içeriğe hazırdı.

Yarın benim “Htmldb” eğitimim olacak. Normal koşullarda sekiz kişi ile katılımı sınırlandırmış olsamda çağrıda şu ana kadar on sekiz kabul döndü. Aklıma ilk gelen dokuz kişilik, başvuru sırasına göre öncelik vererek iki grup oluşturmak ve ilk fırsatta eğitimi tekrarlamak. Bakalım yarın sabah kaç kişi gelicek ama belli ki son bir sene içinde “Htmldb” de Turkcell de doğru pazarlanıyor :)

Kahin yıllardır “Microsoft” ile arasındaki rekabeti kızıştırmak için elinden geleni yapıyor, Linux ve Java başta olmak üzere her türlü alternatifin en önemli destekçisi. Fakat kendi deyimleri ile “Windows” işletim sistemi üzerinde ve “.Net” uygulama geliştirme ortamında ki en iyi veritabanı olma durumu cidden çok ender rastlanan bir pazarlama taktiği bence :) Bu konuda da çok yol aldıkları ortada, en büyük koz ise “.NET” için özel geliştirilen Kahin Veri Sağlayıcısı(ODP.NET).

 

Yüzlerce kullanıma hazır paket, yeterki ne zaman hangisini kullanacağını bil :)

Friday, February 24th, 2006

Kahin(Oracle) yıllardır “Dbms” ve “Utl” paketlerini çeşitlendirmeye ve iyileştirmeye özen gösteriyor.

Tekerleği tekrar tekrar icat etmemek içinde bu paketleri yeni çıkan uyumlarla(versions) birlikte belgeleri(documentation) inceleyerek sınamak(testing) gerekli.

Sonuç olarak hangimizin hazırda var olan, parası ödenmiş ve Kahin gibi arkasında yılların deneyimi ve binlerce kişilik yazılım geliştirme ekibi tarafından sunulmuş bir yapıya seçenek yaratmaya zamanı, imkanı var ki..

Bu paketlerden biri dikkatimi çekti, geliştirme yaparken pek kullanmadığım, belki de kullanmayacağım bir tanesi “DBMS_UTILITY”.

Özellikle “comma_to_table” görevi(function) kullanışlı görünüyor ama :)

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    l_list1   VARCHAR2(50) := ‘A,B,C,D,E,F,G,H,I,J’;
  3    l_list2   VARCHAR2(50);
  4    l_tablen  BINARY_INTEGER;
  5    l_tab     DBMS_UTILITY.uncl_array;
  6  BEGIN
  7    DBMS_OUTPUT.put_line(‘l_list1 : ‘ || l_list1);
  8
  9    DBMS_UTILITY.comma_to_table (
 10       list   => l_list1,
 11       tablen => l_tablen,
 12       tab    => l_tab);
 13
 14    FOR i IN 1 .. l_tablen LOOP
 15      DBMS_OUTPUT.put_line(i || ‘ : ‘ || l_tab(i));
 16    END LOOP;
 17
 18    DBMS_UTILITY.table_to_comma (
 19       tab    => l_tab,
 20       tablen => l_tablen,
 21       list   => l_list2);
 22
 23    DBMS_OUTPUT.put_line(‘l_list2 : ‘ || l_list2);
 24  END;
 25  /
l_list1 : A,B,C,D,E,F,G,H,I,J
1 : A
2 : B
3 : C
4 : D
5 : E
6 : F
7 : G
8 : H
9 : I
10 : J
l_list2 : A,B,C,D,E,F,G,H,I,J

PL/SQL procedure successfully completed.

SQL> DECLARE
  2    l_instance_table  DBMS_UTILITY.instance_table;
  3    l_instance_count  NUMBER;
  4  BEGIN
  5    DBMS_UTILITY.active_instances (instance_table => l_instance_table,
  6                                   instance_count => l_instance_count);
  7
  8    IF l_instance_count > 0 THEN
  9      FOR i IN 1 .. l_instance_count LOOP
 10        DBMS_OUTPUT.put_line(l_instance_table(i).inst_number || ‘ = ‘ || l_instance_table(i).inst_name);
 11      END LOOP;
 12    END IF;
 13  END;
 14  /

PL/SQL procedure successfully completed.

SQL> SELECT DBMS_UTILITY.current_instance
  2  FROM   dual;

CURRENT_INSTANCE
—————-
               1

SQL> DECLARE
  2    l_version  VARCHAR2(100);
  3    l_compatibility  VARCHAR2(100);
  4  BEGIN
  5    DBMS_UTILITY.db_version (version       => l_version,
  6                             compatibility => l_compatibility);
  7    DBMS_OUTPUT.put_line(‘Version: ‘ || l_version || ‘  Compatibility: ‘ || l_compatibility);
  8  END;
  9  /
Version: 10.2.0.1.0  Compatibility: 10.2.0.1.0

PL/SQL procedure successfully completed.

SQL> SELECT DBMS_UTILITY.port_string
  2  FROM   dual;

PORT_STRING
——————————————————————————–

IBMPC/WIN_NT-8.1.0

SQL> BEGIN
  2    IF DBMS_UTILITY.is_cluster_database THEN
  3      DBMS_OUTPUT.put_line(‘Clustered’);
  4    ELSE
  5      DBMS_OUTPUT.put_line(‘Not Clustered’);
  6    END IF;
  7  END;
  8  /
Not Clustered

PL/SQL procedure successfully completed.

Bir veritabanı uygulamasına acı çektirmek istesem neler yapardım, kısa kısa..

Friday, February 24th, 2006
  • Soru işareti otoritelere sorgusuz inanırdım (“ben denedim hocam, cok yavas o”, “yok abi o batirir hissediyorum”, “idda ediyorum bu daha hizli” vs.. gibi cumleleri dikkate alır ve onemli tasarım kararlarını bu yonde verirdim – test edip sayilarin konusmasina izin vermem, bunları yapanlara kulaklarımı kapar ve elestirilere, yeni dusuncelere kesinlikle kapali olurdum)
  • Dokuman okumazdım, kolaylıkla erisilebilicek bilgiyi kesinlikle dikkate almazdım
    Şema tasarımı ve veri ile referans bütünlük (referential integrity) konularına zaman ayırmaz, özen göstermez, önemsemezdim(date veya number olmasi gereken alanları char tutma, foreign key kullanmama, normalize etmeme, her ihtiyaca karsi tek tablo ve index tipi kullanma gibi)
  • Oracle veritabanı bağlama(Bind) değişkeni kullanmaz, paylaşılabilir kod geliştirmezdim
  • Test ortamı hazırlamaz, elimden geldiğince testi atlatmaya calisirdim
  • Biçim (configuration) ve uyum (version) yönetimi yapmazdım
  • Veritabanı özgürlüğü ve kara-kutu sendromu pesinde “ben herseyin kendim en iyisini yazarım” der, tekerleği durmadan baştan icat ederdim (sequence’i, foreign key’i, audit’i, queue mantigini uygulama icinde yazmak gibi)

Alla allaaa bir yerlerde, birileri yoksa böyle şeyler mi yapıyorlar, çık çık çık.. :)

 

Oracle 10g DBMS_FILE_TRANSFER Paketi, binary dosyalar itina ile taşınır :)

Friday, February 24th, 2006

DBMS_FILE_TRANSFER paketi 2 terabite kadar 512 bitin katlari büyüklükteki binary dosyaların veritabanı serverları arasında taşınması için bir API.

Aktarımlar işlemsel (transactional) değil, ve kopyalama V$SESSION_LONGOPS görüntüsünden takip edilebiliniyor.

Basit bir kopyalama örneği;

CREATE OR REPLACE DIRECTORY db_files_dir1 AS ‘/u01/oradata/DB10G/’;
CREATE OR REPLACE DIRECTORY db_files_dir2 AS ‘/u02/oradata/DB10G/’;

ALTER TABLESPACE users READ ONLY;

BEGIN
  DBMS_FILE_TRANSFER.COPY_FILE(
   source_directory_object      => ‘DB_FILES_DIR1′,
   source_file_name             => ‘USERS01.DBF’,
   destination_directory_object => ‘DB_FILES_DIR2′,
   destination_file_name        => ‘USERS01.DBF’);
END;
/

ALTER TABLESPACE users READ WRITE;

 

‘Darwin’in Kâbusu’ ndan ‘Türkiye’nin Kâbusu’ na..

Friday, February 24th, 2006

Öğle arasında 2005 staj döneminden bir grup arkadaşımla geleneksel Maltepe Karfur Saray ziyaretimizi yaptık.

Özlem dolu konuşmalar sonrasında laf dün akşam ki belgesele geldi.

Zengin doğal kaynakları ile koskoca bir kıta nasıl bu kadar çaresiz duruma gelmiş, getirilmiş..

Yüzyılların batı sömürü düşüncesinin tipik bir örneği idi belgesel evet, sonlarına doğru iyice insanın yüzüne vuruyor gerçekleri.

Uçaklar balıkları avrupaya taşırken bu zavallı insanlara fakirlik, hastalıklar yetmiyormuş gibi birbirlerini öldürmeleri için silah taşıyorlar.

Benim aklıma hemen Kurtuluş Savaşı’mız ve Sevr ile topraklarımızı hemencecik paylaşmış aynı aktörler geliyor.

Insan belgeseli seyrederken daha iyi anlıyor ne büyüklükte bir savaş kazanıldığını.

Günümüz Irak’ında farklı bir durum mu yaşanıyor, dğnyanın en zengin petrol kaynaklarının bulunduğu bu coğrafya insanı günde 3 saat elektrik ile yaşıyor ve tabiiki müthiş demokratik oluyor gün geçtikçe evet..

Laf bir şekilde döndü dolaştı güncel bir konu olan Hamas ziyaretine geldi :)

Kendi düşüncelerimi ifade ederken dile bile getirmekten korktuğum senaryoyu konuşurken bulduk kendimizi.

Şimdi Türkiye’nin dört büyük uluslararası sorunu var; AB süreci, Kıbrıs sorunu, Kürt sorunu ve Ermeni sorunu.

Nasıl bir aklı selim bu dördü ile bu kadar yoğun uğraşırken beşinci bir sorunu başımıza musallat edebilir ki, kesinlikle göremediğimiz birşeyler, çıkarlar olmalı din ve tarihsel yakınlık dışında.

Kim çözebilmiş ayrıca bu İsrail-Filistin sorununu ki Türkiye çözsün diyesi geliyor insanın, ki burdan İrana geçen aynı heyetin yaptığı açıklamalar da ortada :)

Korkulan senaryo ise şu, bu ve benzeri süreçlerin içine çekilen Türkiye’nin Atatürk ile başlayan batıya yöneliminin, barışcı rotasının yavaş yavaş değiştiriliyor olması.

Ama biz kimiz ki bunları öngörebilelim di mi :)

Neden bilmem aklıma Fransızların kaliteli kurbağa bacağı yeme çalışmalarında uyguladıkları deneysel yöntem geliyor,

Kurbağaların tatlarında bozulma olmaması için ölmeden pişirilmeleri uygun, ama canlı kurbağa da sıcak suda durmuyo doğal olarak.

Çözüm basit, hatta belki de farkında değiller ama yüzyılların ata mirası biraz da içgüdüsel olabilir, kurbağaları ılık suya koyup altını yavaş yavaş ısıtıyorlar..

Kurbağa ne yazık ki piştiğinin farkına bile varamıyor, hatta ılık suya konduğunda büyük bir keyifle yüzmeye çalışıyor..

Hakkımızda hayırlısı olsun, politik olmayı ve konuşmayı sevmiyorum, bu sevgisizlik inanıyorum ki yazıya da dökülmüştür şimdiden okuyuculardan peşinen affola :)

Oscar’ın güçlü adayı ‘Darwin’in Kâbusu’ hakkında detaylı bilgi için; http://www.ntvmsnbc.com/news/362129.asp

Oracle 10g UTL_COMPRESS, veritabanı icinde zip bir nevi :)

Friday, February 24th, 2006

UTL_COMPRESS paketi binary data tiplerini(RAW, BLOB ve BFILE gibi) compression ve decompression yapiyor.

UTL_COMPRESS gzip gibi Lempel-Ziv compression algoritmasını kullanıyor.

Basit bir ornek script;

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    l_original_blob      BLOB;
  3    l_compressed_blob    BLOB;
  4    l_uncompressed_blob  BLOB;
  5  BEGIN
  6    — Initialize both BLOBs to something.
  7    l_original_blob     := TO_BLOB(UTL_RAW.CAST_TO_RAW(‘123456789012345678901
2345678901234567890′));
  8    l_compressed_blob   := TO_BLOB(‘1′);
  9    l_uncompressed_blob := TO_BLOB(‘1′);
 10
 11    — Compress the data.
 12    UTL_COMPRESS.lz_compress (src => l_original_blob,
 13                              dst => l_compressed_blob);
 14
 15    — Uncompress the data.
 16    UTL_COMPRESS.lz_uncompress (src => l_compressed_blob,
 17                                dst => l_uncompressed_blob);
 18
 19    — Display lengths.
 20    DBMS_OUTPUT.put_line(‘Original Length    : ‘ || LENGTH(l_original_blob));
 21    DBMS_OUTPUT.put_line(‘Compressed Length  : ‘ || LENGTH(l_compressed_blob));
 22    DBMS_OUTPUT.put_line(‘Uncompressed Length: ‘ || LENGTH(l_uncompressed_blob));
 23
 24    — Free temporary BLOBs.
 25    DBMS_LOB.FREETEMPORARY(l_original_blob);
 26    DBMS_LOB.FREETEMPORARY(l_compressed_blob);
 27    DBMS_LOB.FREETEMPORARY(l_uncompressed_blob);
 28  END;
 29  /

Original Length    : 40
Compressed Length  : 33
Uncompressed Length: 40

PL/SQL procedure successfully completed.