web 2.0

IIS Loglarının SQL Server'a transferi

İlk önce veri tabanımıza yeni bir tablo oluşturuyoruz:

CREATE TABLE [dbo].[tablename] (
[date] [datetime] NULL,
[time] [datetime] NULL ,
[c-ip] [varchar] (50) NULL ,
[cs-method] [varchar] (50) NULL ,
[cs-uri-stem] [varchar] (255) NULL ,
[cs-uri-query] [varchar] (2048) NULL ,
[sc-status] [int] NULL ,
[sc-bytes] [int] NULL ,
[time-taken] [int] NULL ,
[cs(User-Agent)] [varchar] (255) NULL ,
[cs(Cookie)] [varchar] (2048) NULL ,
[cs(Referer)] [varchar] (2048) NULL 
)

 

ikinci olarak şu kodu çalıştırıyoruz.

BULK INSERT [dbo].[tablename] FROM 'c:\weblog.log'
WITH (
FIELDTERMINATOR = ' ',
ROWTERMINATOR = '\n'
)

 olay tamam , ISS Loglarımız veri tabanına atıldı , istediğimiz sorguyu rahatca çekebiliriz ;)

 Not:Bulk insert sırasında hata çıkarsa tablo daki alanların tipini nvarchar(MAX) olarak ayarlayıp tekrar deneyin

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Makale

Web Servis performans optimizasyonu yapılacaklar listesi

Tasarım Yaparken dikkat edilecekler:

    Açıklama
    Tasarımı küçük bölümler halinde parçalayın
    Mesaj tabanlı programlamayı uzaktan prosedür çağırmaya tercih edin.
    Parametre formatlarını aslına uygun biçimlendirin.
    Web servis parametreleri için temel tipleri kullandım.
    Çağrılar arasında sunucu durumuna müdahaleden kaçının.
    Giriş değerlerini yüksek veri yüklü fonksyonlar için kontrol edin, kullanıcıdan gelecek yüksek girdileri sınırlayın.
    Caching kullanma yaklaşımlarını kullanın.
    Yığın data transferinde ve dosya eklemelerinde yükleme yaklaşımlarına bakın.
    Local Web servis kullanımından kaçının.
Bağlantılar
    Açıklama

    maxconnection özelliğini ayarlayın.
    Ayrık Web servis bağlantılarını önceleliklendirme ve paylaştırma yapın .
    Dışarıya giden çağrılarda Tek ID kullanın.
    UnsafeAuthenticatedConnectionSharing Windows kimlik doğrulamasında göz önünde bulundurun.
    PreAuthenticate Temel kimlik doğrulamasında kullanın.
İş Parçalama
    Açıklama

    İş parçaları havuzunu optimize ederek , çarpışmaları önleyici formuller kullanın.
    minIoThreads ve minWorkerThreads işlem çökmesini  önlemek için göz önünde bulundurun.
Tek Yönlü iletişim
    Açıklama

    OneWay eğer cevap gerekmiyorsa bunu kullanabileceğinizi göz önünde bulundurun.
Asenkron Web Metodları
    Açıklama

    Giriş-Çıkış operasyonlarında Asenkron metodlar kullanın
    worker threads Web metodları Asenkron olarak kullanmayın .
Asenkron Yürütme
    Açıklama

    Paralel işlerde Web servislerini Asenkron olarak yürütmeyi göz önünde bulundurun.
    Çoklu bağımsız web servisleri çağırırken kullanmayı göz önünde bulundurun.
    Kullanıcı arayüzünde web servisleri asenkron olarak çağırın.
Zaman Aşımı
    Açıklama

    proxy zaman aşımını düzgün bir şekilde ayarlayın.
    ASP.NET zaman aşımını Web servis zaman aşımından yüksek bir değer ayarlayın.
    Web servis çağırmadan önce , ASP.NET sayfalarındaki bağlantıyı durdurun.
    responseDeadlockInterval Kullanmayı göz önünde bulundurun.
WebMetodları
    Açıklama

    Öncü parametre tiplerini tercih edin.
    Buffer kullanmayı göz önünde bulundurun.
    Caching kullanmayı göz önünde bulundurun.
    session state leri sadece Web metodlar ihtiyaç duyduğu zaman aktif hale getirin.
Serialization
    Açıklama

    XmlIgnore serialization kullanımını azaltın.
    Gidiş – dönüş azaltın.
    XML sıkıştırmayı göz önünde bulundurun
Caching
    Açıklama

    Az ve geçici veriler için output caching kullanmayı göz önünde bulundurun.
    İstemcileri Cach kullanmaları yönünde destekleyin.
    Genel perimer caching kullanmayı göz önünde bulundurun..
Durum Yönetimi
    Açıklama

    Session State’i sadece gerektiği durumlarda kullanın.
    Sunucu benzeşmesinden kaçının.
Eklentiler
    Açıklama

    Base64 kodlama tercih edin Direct Internet Message Encapsulation (DIME) , Web Services Enhancements (WSE)’i destekler.
COM Interop
    Açıklama

    Tek işlem  (STA) COM nesnelerini kullanmaktan kaçının.


1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Makale

Oracle PL-SQL Cursor,Object ve Diziler

Oracle Cursor’larda satırların içinde tek tek dolaşabilmek için fetch komutunu kullanırız. Bu komutla Cursor’un içine attığımız tabloların kolon adlarıyla içindeki veriye ulaşır ve satır satır işlem yapabiliriz.

Örnek Kod;

 

DECLARE

  CURSOR cur_cust IS

    SELECT customer_id, cust_last_name, cust_email

    FROM customers

    WHERE credit_limit = 1200;

  v_cust_record    cur_cust%ROWTYPE;

BEGIN

  OPEN cur_cust;

  LOOP

    FETCH cur_cust INTO v_cust_record;   

...

Parametre alan cursor tanımlamak;

CREATE OR REPLACE PROCEDURE cust_pack

 (p_crd_limit_in NUMBER, p_acct_mgr_in NUMBER)

IS

  v_credit_limit NUMBER := 1500;

   CURSOR cur_cust

           (p_crd_limit NUMBER, p_acct_mgr NUMBER)

     IS

     SELECT customer_id, cust_last_name, cust_email

     FROM customers

     WHERE credit_limit = p_crd_limit

     AND   account_mgr_id = p_acct_mgr;

   cust_record    cur_cust%ROWTYPE;

BEGIN

   OPEN cur_cust(p_crd_limit_in, p_acct_mgr_in);

...

   CLOSE cur_cust;

...

   OPEN cur_cust(v_credit_limit, 145);

...

END;

 

Oracle da Objectler;

Oracle object’ler değişken şablonları olarak kullanılır.  Büyük bir projede yüzlerce değişkenin tanımlandığını düşünürsek objectler’in oldukça kullanışlı olduğunu görebiliriz.

CREATE [OR REPLACE] TYPE type_name

  AS OBJECT

    ( attribute1 datatype,

      attribute2 datatype,

      ...

    );

Örnek olarak;

CREATE TYPE cust_address_typ

  AS OBJECT

    ( street_address     VARCHAR2(40)

    , postal_code        VARCHAR2(10)

    , city               VARCHAR2(30)

    , state_province     VARCHAR2(10)

    , country_id         CHAR(2)

    );

/

Örnek Kullanım;

CREATE TABLE customers

    ( customer_id        NUMBER(6)    ...   

    , cust_first_name    VARCHAR2(20) ...

    , cust_last_name     VARCHAR2(20) ...

    , cust_address       cust_address_typ

    ...

DESCRIBE customers

Name                         Null?    Type

---------------------------- -------- ----------

CUSTOMER_ID                  NOT NULL NUMBER(6)

CUST_FIRST_NAME              NOT NULL VARCHAR2(20)

CUST_LAST_NAME               NOT NULL VARCHAR2(20)

CUST_ADDRESS                          CUST_ADDRESS_TYP

...

Yada insert cümlesinde;

 

INSERT INTO CUSTOMERS (customer_id, cust_first_name,

                       cust_last_name, cust_address)

VALUES (1000, 'John', 'Smith',

  cust_address_typ ( '285 Derby Street'

                  , '02465'                 

                  , 'Boston'

                  , 'MA'

                  , 'US'));

Oracle’da Dizi kullanımı

Oracle da dizileri kullanırken dikkatli olmanız gerekiyor. Dizilerin bazı türlerini .NET tarafından gönderirken sorun yaşayabilirsiniz. Ama yinede bilindik diziler işinizi kolaylaştıracaktır.

TYPE type_name IS TABLE OF element_datatype             

[NOT NULL];

TYPE type_name IS VARRAY  (max_elements) OF            

element_datatype [NOT NULL];

CREATE OR REPLACE PACKAGE manage_dept_proj AS

  TYPE typ_proj_details IS TABLE OF typ_Project;

  ...

  PROCEDURE allocate_proj

    (propose_proj IN typ_proj_details);

  FUNCTION top_project (n NUMBER)

     RETURN typ_proj_details;

  ...

Dizilerle ilgili metodlar;

       EXISTS

       COUNT

       LIMIT

       FIRST and LAST

       PRIOR and NEXT

       EXTEND

       TRIM

       DELETE

Dizi elemanlarına ulaşmak;

DECLARE

  i INTEGER;

  v_accounting_project typ_ProjectList;

BEGIN

  v_accounting_project := typ_ProjectList(

    typ_Project (1,'Dsgn New Expense Rpt', 3250),

    typ_Project (2, 'Outsource Payroll', 12350),

    typ_Project (3, 'Audit Accounts Payable',1425));

  i := v_accounting_project.FIRST ;

  WHILE i IS NOT NULL LOOP

    IF v_accounting_project(i).cost > 10000 then

      DBMS_OUTPUT.PUT_LINE('Project too expensive: '

                      || v_accounting_project(i).title);

    END IF;

    i := v_accounting_project.NEXT (i);

  END LOOP;

END;

/

 

 

 

 

 

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

Makale | Oracle PL-SQL

Oracle PL-SQL Fonksyon , paket,prosedürler ve hata yakalama

Merhaba, Oracle PL-SQL Kodlarını baştan sona inceleyeceğim ve pl-sql dilinin yazım kurallarını anlatacağım referans niteliğinde bir yazı dizisi oluşturmaya karar verdim. Bu bölümde fonksyon,paket, cursor kavramını ve hata yakalama kodlarını vereceğim.

Genel Tanımlar blok yapısı:

Prosedür Tanımlama Syntax yapısı: 

CREATE [OR REPLACE] PROCEDURE procedure_name

 [(parameter1 [mode] datatype1,

   parameter2 [mode] datatype2, ...)]

IS|AS

  [local_variable_declarations; …]

BEGIN
  -- actions;

END [procedure_name];

 

Fonksyonların Syntax yapısı;

CREATE [OR REPLACE] FUNCTION function_name
 
[(parameter1 [mode1] datatype1, ...)]

RETURN datatype IS|AS

 [local_variable_declarations; …]

BEGIN
  -- actions;

  RETURN expression;

END [function_name];

 

Örnek bir Fonksyon;

 

CREATE OR REPLACE FUNCTION get_credit

 (v_id customers.customer_id%TYPE) RETURN NUMBER IS

  v_credit customers.credit_limit%TYPE := 0;

BEGIN

  SELECT credit_limit

  INTO   v_credit

  FROM   customers        

  WHERE  customer_id = v_id;

  RETURN v_credit;

END get_credit;

/

 

 

Bu örnek fonksyonu çalıştırmak için ;

 

EXECUTE dbms_output.put_line(get_credit(101))

Package Oluşturmak;

Ilk once Package’n spec kısmı;

CREATE [OR REPLACE] PACKAGE package_name IS|AS

    public type and variable declarations

    subprogram specifications

END [package_name];

 

Body kısmı;

 

CREATE [OR REPLACE] PACKAGE BODY package_name IS|AS

    private type and variable declarations

    subprogram bodies

[BEGIN initialization statements]

END [package_name];

Oracle Cursor’lar

Oracle Cursorların 4 temel özniteliği vardır.

      cursor_name%FOUND

      cursor_name%ISOPEN

      cursor_name%NOTFOUND

      cursor_name%ROWCOUNT

Cursor Kullanımı için Syntax yapısı;

FOR record_name IN cursor_name LOOP  

  statement1;

  statement2;

  . . .

END LOOP;

Örnek Cursor Kullanımı;

SET SERVEROUTPUT ON

DECLARE

  CURSOR cur_cust IS

   SELECT cust_first_name, credit_limit

   FROM customers

   WHERE credit_limit > 4000;

BEGIN

  

    LOOP

     DBMS_OUTPUT.PUT_LINE

     (                              ||' '||

                                  );  

    END LOOP;

END;

/

 

Hata Yakalama;

 

DECLARE

  v_lname VARCHAR2(15);

BEGIN

  SELECT cust_last_name INTO v_lname FROM customers

  WHERE cust_first_name='Ally';

  DBMS_OUTPUT.PUT_LINE ('Ally''s last name is : '
                 ||v_lname);

EXCEPTION

  WHEN TOO_MANY_ROWS THEN

  DBMS_OUTPUT.PUT_LINE (' Your select statement
  retrieved multiple rows. Consider using a
  cursor.');

 

END;

/

Oracle Hata Tipleri;

     NO_DATA_FOUND

     TOO_MANY_ROWS

     INVALID_CURSOR

     ZERO_DIVIDE

     DUP_VAL_ON_INDEX

Hata Fırlatma ;

raise_application_error (error_number,

       message[, {TRUE | FALSE}]);

 

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

Makale | Oracle PL-SQL