in

WSS-ID Community

Indonesian IT-Pro Community discussing almost anything about Windows Server System.

fery.afrial

  • Index Maintenance di SQL Server 2005 dan Index Tool

    Desain database yang baik tentunya perlu memperhatikan juga index untuk table-table yang memerlukannya. Tidak semua table memerlukan index, namun untuk table-table transaksi, index mutlak diperlukan. Dengan menyediakan index yang tepat, pencarian data akan menjadi lebih cepat. Peran index sama halnya seperti index dari sebuah buku. Ketika kita mencari pembahasan tentang Left Join dalam buku SQL Server, maka akan jauh lebih mudah apabila kita mencari dulu kedalam index, mencari entry Left Join, mendapatkan nomor halamannya, lalu pergi ke halaman yang ditunjuk oleh index untuk mendapat penjelasan mengenai Left Join. Cara ini jauh lebih mudah daripada harus mencari satu per satu kata didalam buku tersebut. Kurang lebih seperti itulah peran index pada suatu table.

    Index yang tersusun dengan baik tentunya akan memudahkan pencarian. Namun ada kalanya terjadi fragmentasi pada index sehingga perlu dilakukan perawatan secara berkala agar performa tetap terjaga. Melakukan maintenance index tentunya adalah hal biasa yang dilakukan oleh para DBA. Umumnya kita membuat suatu job untuk melakukan maintenance index yang akan bekerja secara otomatis pada waktu yang dapat kita tentukan. Cara lainnya adalah membuat script T-SQL.

    Tindakan yang dapat dilakukan yaitu merebuild atau mereorganize index.  Untuk dapat menentukan tindakan mana yang perlu diambil, maka kita perlu menganalisa seberapa besar fragmentasi terjadi pada suatu index. Sebagai contoh, script berikut untuk menganalisa index dari table Orders di database Penjualan:

     

    declare @db_id tinyint

    declare @ob_id int

    set @db_id = db_id()

    set @ob_id = object_id('Orders')

    select a.index_id,b.name,index_type_desc,alloc_unit_type_desc,

    avg_fragmentation_in_percent,fragment_count,

    avg_fragment_size_in_pages from sys.dm_db_index_physical_stats(@db_id,@ob_id,null,null,'LIMITED') a

    inner join

    sys.indexes b on a.object_id = b.object_id and a.index_id = b.index_id

     

    Hasilnya sebagai berikut (beberapa kolom tidak ditampilkan):

    index_id

    name

    avg_fragmentation_in_percent

    1

    PK_Orders

    25

    2

    CustomerId

    66.6666666666667

     

    (cont)

    fragment_count

    avg_fragmentation_in_pages

    8

    2.5

    3

    1

     

    Sebagai acuan, kita bisa menggunakan panduan dari BOL:

    Nilai avg_fragmentation_in_percent

    Tindakan

    < = 30%

    ALTER INDEX namaindex ON namatable REORGANIZE

    > 30%

    ALTER INDEX namaindex ON namatable REBUILD

     

    Tabel ini punya dua index, index pertama PK_Orders terfragment 25% dan index kedua CustomerId terfragment 67%. Berdasarkan angka acuan, kita akan melakukan REBUILD index untuk index PK_Orders dan REORGANIZE untuk index CustomerId.

     

    ALTER INDEX PK_Orders ON Orders REBUILD

     

    ALTER INDEX CustomerId ON Orders REORGANIZE

     

    Hasilnya,

    index_id

    name

    avg_fragmentation_in_percent

    1

    PK_Orders

    0

    2

    CustomerId

    0

     

    (cont)

    fragment_count

    avg_fragmentation_in_pages

    1

    1

    1

    1

     

    Average fragmentation menunjukkan seberapa parah index tersebut teracak dalam database. Semakin rendah, berarti semakin tersusun baik index tersebut.

     

    Ada sebuah tool yang bisa digunakan untuk melakukan pekerjaan ini, yaitu IdxMtc yang penulis buat sendiri. Namun sayangnya baru ada untuk SQL Server 2005. Silahkan mendownloadnya disini secara gratis.

     

    Demikian, semoga bermanfaat.

     

    Share this post: | | | |
  • ASP.NET Runtime Error: Unrecognized configuration section

    Beberapa hari yang lalu, di acara TechNet Night Session di Microsoft, saya berkesempatan memperoleh CD VS2008 Team System Beta2 dari seorang rekan. Tak sabar saya coba di kantor untuk install. Karena hard disk penuh, maka instalasi saya arahkan ke drive D (non system). Proses instalasi lancer, dan selesai kurang lebih 40 menit (cuma install VB-nya aja).

    Setelah PC di-restart dan mulai buka VS 2008, sepintas tidak banyak perubahan, tampilan splash screen dominan biru, sekarang agak rounded sudutnya (hehe), dan tambahan "Beta2" L .

    Sayang, ketika memulai project WinApplication baru, VS tidak bisa menampilkan Form dalam mode design, dan mode coding pun gak jalan.

    Cape deeeh...

    Karena banyak kerjaan lain...hehehe...akhirnya saya putuskan untuk uninstall vs 2008 beta2.
    Kembali ke 2005, saya buka project ASP.NET saya dan .. o o W...di page Default.aspx pada bagian:

    <%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>

    muncul tanda error (garis biru) yang errornya kurang lebih:

    <projectpath\filename.aspx: ASP.NET Runtime Error: Unrecognized configuration section system.web/system.serviceModel.(C:\Windows\Microsoft.NET\Framework\CONFIG\machine.config Line nnn)

    CATATAN:
    nnn = line number di machine.config yang bermasalah
    Rupanya masih sisa-sisa peninggalan VS2008 yang bermasalah tadi! Untuk ngatasinnya, ga sulit.

    1. Ke Windows Explorer lalu bukalah directory yang disebutkan oleh pesan error tersebut.
        (dalam kasus saya di C:\Windows\Microsoft.NET\Framework\CONFIG\)
    2. Cari file machine.config, BACKUP dulu file ini (simpan di tempat lain).
    3. Bukalah file machine.config yang asli lalu cari bagian berikut:

    <system.serviceModel>

        <commonBehaviors>

          <endpointBehaviors>

          </endpointBehaviors>

          <serviceBehaviors>

          </serviceBehaviors>

        </commonBehaviors>

      </system.serviceModel>

     

    4. Hapus.
    5. Simpan.

    Alhamdulillah, file Default.aspx bisa kerja lagi.

    Moga manfaat.

    Share this post: | | | |
  • Meng-enkripsi Configuration Section menggunakan aspnet_regiis command-line utilty (3)

    Saat kita melakukan enkrip dekrip dengan RSA, kita perlu yang namanya Public Key (untuk enkrip) dan Private Key (untuk dekrip). Apa yang terjadi dalam kasus kita adalah, user ASPNET (Win XP) atau NT Authority\Network Service (Windows 2003 Server), tidak mendapat akses untuk membaca key container, berupa file yang berisi key untuk melakukan dekripsi. Biasanya ada di C:\Document and Settings\All Users\Application Data\Microsoft\Crypto.

     

    Yang perlu dilakukan sekarang berarti memberikan user hak akses untuk file tersebut. Namun ingat, JANGAN MENGUBAH (Edit, Hapus, Pindahin) file tersebut secara manual! Resikonya jauh lebih repot dari melakukannya. L

     

    Balik lagi ke command prompt.

    1.      Masih di command prompt webserver, tuliskan perintah

    > aspnet_regiis –pd “connectionStrings” –app “/testProtectConfig”

     

    Ini akan mengembalikan web.config ke format semula sebelum enkripsi. Hal ini dilakukan karena kita akan menambahkan section <configProtectedData> ke web.config sebelum tag <connectionStrings>.

     

    2.      Bukalah web.config menggunakan Notepad dan tambahkan section berikut sebelum <connectionStrings>:

     

    <configProtectedData >

        <providers>

          <add useMachineProtection="false" name="TesProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, processorArchitecture=MSIL" keyContainerName="TestKey"/>

        </providers>

      </configProtectedData>

     

    Perhatikan, kita berikan nama key container kita “TestKey”.  Simpan dan tutup file web.config.

     

    3.        Enkrip kembali <connectionStrings>

    >  aspnet_regiis –pe “connectionStrings” –app “/testProtectConfig”

    4.       Set hak akses untuk user NT Authority\Network Service (di Win XP usernya adalah ASPNET)

    >  aspnet_regiis –pa “TestKey” “NT Authority\Network Service”

     

     

    Jika berhasil anda akan melihat pesan:

    Adding ACL for access to the RSA Key container...

    Succeeded!

     

    Cobalah periksa file key yang ada di C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys, cari file dengan create date terbaru. Periksa Security Properties-nya. Kita bisa melihat sudah ada entry NETWORK SERVICE dengan hak akses Read.

     

    Cobalah kembali browse website anda, dan semua akan kembali bekerja.

    Kalo belum juga, berdoalah dan coba cari artikel lain..mungkin ane kurang jelas ya...Big Smile 

    Moga bermanfaat.

     

    Untuk pertanyaan, silahkan mengirimkan email ke fery.afrial@yahoo.co.id

     

    Warmest Regards.

    Share this post: | | | |
    Posted Nov 05 2007, 03:03 PM by fery.afrial with no comments
    Filed under:
  • Meng-enkripsi Configuration Section menggunakan aspnet_regiis command-line utilty (2)

    Mulai meng-enkrip

     

    Dalam case ini kita akan mengenkrip bagian <connectionStrings>  menggunakan RSADataProtectionProvider (ini setingan defaultnya aspnet_regiis).

     

    Langkah 1: Pindahlah ke web server.

     

    Langkah 2: Start – Run… tulis cmd, klik OK. Perintah ini akan membuka console command prompt. Ketik perintah berikut :

     

    > cd C:\Windows\Microsoft.net\Framework\v2.0.50727

     

    Perintah ini akan membawa anda ke lokasi default dimana aspnet_regiis berada.  Berikutnya tulis perintah berikut:

     

    > aspnet_regiis –pef “connectionStrings” C:\Inetpub\wwwroot\testProtectConfig

     

    Kita menggunakan parameter –pef yang berarti kita meminta aspnet_regiis untuk melakukan enkripsi di bagian “connectionStrings” untuk project kita yang berada di lokasi C:\Inetpub\wwwroot\testProtectConfig.

     

    Perhatikan: penulisan nama section adalah case-sensitive.

     

    Kita juga bisa menggunakan  nama aplikasi untuk mengganti penulisan lokasi project, perintahnya:

     

    > aspnet_regiis –pef “connectionStrings” –app “/testProjectConfig”

     

    “/testProjectConfig” mestilah nama virtual directory untuk project kita.

     

    Perintah ini akan memodifikasi bagian <connectionStrings> yang kita buat sebelumnya di web.config. Apabila berhasil, kita akan melihat statusnya:

    Encrypting configuration section…

    Succeeded!

     

     

     

    Sekarang, coba buka file web.config dan kita lihat di bagian <connec tionStrings> sudah ada modifikasi.

     

    <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">

       <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"

        xmlns="http://www.w3.org/2001/04/xmlenc#">

        <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />

          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">

            <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">

              <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />

              <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">

                <KeyName>Rsa Key</KeyName>

              </KeyInfo>

              <CipherData>            <CipherValue>lKwUSrgG3is3VjSyleYodfsQ+31c+UkPimp3e9ecEdD3dcFChmQxl95QCduaQllTFwRccKx84cAGNaJtij9g8TvvLGE/+qV97EYdgcpoWLDIGZTnb2er8unOkVA6AgIiuWTXOjnYNU0EScwepjxs0y0kfG9XCZJwXiE6Uz2Lsj4=</CipherValue>

              </CipherData>

            </EncryptedKey>

          </KeyInfo>

          <CipherData>        <CipherValue>IkRJR3M+WScGJE3GLwXy906XTZpBwO8cajIwAipPMaI8eo4QglCib2HnG3TCFSkTxE+HZSQj67VhFyuKdX1CbFb3vWD0nj91n5nw8ZeoP5wBNK9LGIrEfeAowZYk6u5A7k4wj24n6WjkQNIczMRpmduxE1YKj8hXWdsTR/VMYrxXxLGoVNI6lEdEYphQYO5QRM9eKQPkSoe9BehskCQm/lgK3LZV0z9vxJIZcQkaLM+xC+5vSQaIhnt29w6lf0locV1hKU25j7PAp/+MohUh05PutpLD83BA</CipherValue>

          </CipherData>

        </EncryptedData>

      </connectionStrings>

     

    Catatan:

    Untuk mengembalikan connection string ke clear text (decrypt), ketikkan perintah

    > aspnet_regiis –pd “connectionStrings” –app “/testProtectConfig”

     

    Langkah 3: Cobalah browse lagi.

    Jika masih tampil dengan baik, anda beruntung.

    Tapi kalau yang tampil error seperti berikut:

     

    Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: The RSA key container could not be opened.

     

    artinya: ternyata pekerjaan belum selesai…

    kayanya Microsoft di artikel tersebut kelupaan sesuatu yang penting, yaitu hak akses ke Key Container untuk mendekrip. Hmm…ada apa?

    Share this post: | | | |
    Posted Nov 05 2007, 03:00 PM by fery.afrial with no comments
    Filed under:
  • Meng-enkripsi Configuration Section menggunakan aspnet_regiis command-line utilty (1)

    Saat membuat aplikasi web menggunakan asp.net (dalam hal ini saya menggunakan asp.net 2.0) ada pengalaman menarik yang ingin saya bagi dalam kesempatan ini, yaitu bagaimana file web.config dapat menyimpan informasi atau setting aplikasi secara aman.

     

    Beruntung ternyata Microsoft menyediakan sebuah command-line utility yaitu aspnet_regiis (umumnya ada di C:\Windows\Microsoft.Net\Framework\<versi>\aspnet_regiis.exe).

    Penasaran dengan cara penggunaannya, saya coba pertama kali cari referensi di MSDN dan dapatlah artikel bagus dan perlu dicoba sebagai best practice (How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI)

     

    Di akhir artikel, disebutkan bahwa untuk keperluan web-farm, disarankan menggunakan RSAProtectionConfigurationProvider. Sebagai latihan, ini yang akan kita coba sekarang!

     

    Untuk persiapan, saya anggap anda sudah memiliki vs2005 atau Visual Web Developer Express. 

    Test ini akan lebih terasa ‘Aha!’-nya jika kita menggunakan 2 pc dalam satu Domain jaringan. Satu sebagai sebagai web server dimana kita akan mempublish aplikasi kita, dan satu lagi yang kita gunakan untuk membuat aplikasi (development).

     

    Membangun aplikasi

    Step 1: Buatlah satu web project dengan nama TestProtectConfig (pilihlah File System di bagian Location agar asp.net menggunakan virtual server).

     

    Step 2: Secara otomatis, kita akan punya halaman Default.aspx, web.config, dan folder App_Data

    Klik gandar file web.config, cari bagian <connectionStrings/>.

     

    Kita buat connection string dengan memodifikasi bagian tersebut menjadi kurang lebih seperti ini:

    <connectionStrings>

      <add name="TestConnectionString" connectionString="Data Source= IDJKT-DEV01;Initial Catalog=testdb;Integrated Security=True"

       providerName="System.Data.SqlClient" />

     </connectionStrings>

     

    Step 3: Buka halaman Default.aspx dan tulislah code berikut diantara tag <form></form>:

        <div>

            <span style="font-size: 14pt"><strong>Test protect configuration.<br />

            </strong></span><p />

            <span style="font-size: 10pt;font:tahoma;">Connection string:<br /><%=System.Configuration.ConfigurationManager.ConnectionStrings("TestConnectionString")%>

            </span>

            </div>

    Halaman ini akan menampilkan tulisan:

    Test protect configuration

    Connection string:

    Data Source= IDJKT-DEV01;Initial Catalog=testdb;Integrated Security=True

     

    Jangan lupa simpan project kita.