1 Son düzenleyen, aksamyeli (12.10.2006 16:57:52)

Konu: çok büyük bir DBFde....

Merhaba arkadaşlar, boyutu 2-3gb gibi büyük dbf dosyalarında kayıtları taramak silmek işlem yapmak için en hızlı şekilde nasıl yapabilirim. Ben tableda deleted yapıp pack komutunu kullanmadan bu işlemleri yapıyorum ve o anki kayıt silinmişse hiç işlem yapmadan atlıyorum yinede program acayip yavaş çalışıyor. Pack yazınca iki saatte anca kopyalıyor buda zamandan kayıp oluyor eskiden bazı programlar vardı veritabanına bakım yapılıyordu onlarda sanırım bu şekilde kayıtları siliyor ama fiziksel olarak dosyada hala o kayıt bulunuyordu. Benim sorum bu işlemi daha hızlı bir hale getirebilirmiyim? (Pack komutu dışında)

2

Re: çok büyük bir DBFde....

2-3 Gb dbf inandirici gelmedi bana. VFPnin herhangi bir dosya icin limiti 2Gb. Sorunun cevabi degil tabii.

O kadar buyuk dosyalara ihtiyacin varsa tavsiyem bir an once SQL servera gecmen. Gecmeden hizli calismanin yolu dogrudan degil OLEDB driver uzerinden parametrik erismen. Parametrik calismazsan SQL server, DB2, Oracle vs de yavas kalir.

3 Son düzenleyen, metin (17.10.2006 12:19:25)

Re: çok büyük bir DBFde....

ben hiçbir zaman PACK kullanmam.

Visual Fox Pro
index on silinenler tag delete()

diye bir indeks oluştur
dosyanı da tararken

Visual Fox Pro
scan for kod>kod1 and kod<kod2 and !delete()

gibi tararsan hızlı tarar.
veya

Visual Fox Pro
select * from mytable where kod>kod1 and kod<kod2 and !delete()

silinen kayıtlarını da yeni bir kayıt açacağın zaman yenden kullanabilirsin.


Visual Fox Pro
locate for delete()


ya da

Visual Fox Pro
set orde to silinenler

seek .t.

gibi

sonra da

Visual Fox Pro
recall

blank

diye tekrar kullanırsın. böylece PACK komutuna ihtiyacın olmaz.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

4

Re: çok büyük bir DBFde....

Metin Abi,

index on silinenler tag delete()

yaptığım zaman "Command contains unrecognized phrase/keyword" hata mesajını alıyorum burada bir terslik olabilirmi ?

5 Son düzenleyen, taRKan (17.10.2006 16:35:47)

Re: çok büyük bir DBFde....

Metin küçük bir yazım hatası yapmış;

Visual Fox Pro
Index On Deleted() Tag Silinen
/o---------------------o\
     www.haser.com
\o---------------------o/

6

Re: çok büyük bir DBFde....

Ben vfp den anlasamda çok iyi sayılmam yani SQL serverdan fazla anlamıyorum hatta SQL server nedir onu bile bilmiyorum smile belki biliyorum ama farkında değilim.... neyse lafı uzatmıyayım yavaş yavaş kendi çapımda birşeyler yapıyorum işte. Bu arada Metin abiye çok teşekkürler.

7

Re: çok büyük bir DBFde....

bişi diyil... smile

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

8

Re: çok büyük bir DBFde....

Arkadaşlar. SET DELETED ON / OFF diye bir komut olduğunu hatırlatmama gerek varmı! Eğer daha projenizin başında SET DELETED ON yapmışsanız kullandığınız tüm sorgu ve aramalarda silinenen kayıtlar otomatik olarak devre dışı bırakılacaktır. Oldukça zaman kazanırsınız. Ayrıca bakım için belirli periyodlarla silinen kayıtları PACK yapabilirsiniz. Benim Tavsiyem silinmiş olan kayıtları Yıl sonu devirlerinde PACK yapmanız olacaktır çünkü silinen kayıtlar zaman içerisinde çok gerekli olabiliyor ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

9

Re: çok büyük bir DBFde....

ugurlu2001 yazdı:

Arkadaşlar. SET DELETED ON / OFF diye bir komut olduğunu hatırlatmama gerek varmı! Eğer daha projenizin başında SET DELETED ON yapmışsanız kullandığınız tüm sorgu ve aramalarda silinenen kayıtlar otomatik olarak devre dışı bırakılacaktır. Oldukça zaman kazanırsınız. Ayrıca bakım için belirli periyodlarla silinen kayıtları PACK yapabilirsiniz. Benim Tavsiyem silinmiş olan kayıtları Yıl sonu devirlerinde PACK yapmanız olacaktır çünkü silinen kayıtlar zaman içerisinde çok gerekli olabiliyor ...


set deleted on ile silinen kayıtları atlarsın ama sorgularını hızlandırmaz. sorgularını hızlandırmak için deleted() üzerinden bir indeks yapman ve sorgularını select * from my_Table where !delete() şeklinde alman lazım.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com