Home

Thursday, December 5, 2013

Service Level Agreement (SLA)

Apa seh SLA itu dan apa aja isi dai SLA ? . . . SLA adalah bagian dari perjanjian layanan secara keseluruhan antara 2 dua entitas untuk peningkatan kinerja atau waktu pengiriman harus di perbaiki selama masa kontrak. Dua entitas tersebut biasanya dikenal sebagai Service Provider dan Client, dan dapat melibatkan perjanjian secara hukum karena melibatkan uang, atau kontrak lebih informal antara unit-unit bisnis internal.


SLA ini biasanya terdiri dari beberapa bagian yang mendefinisikan tanggung jawab berbagai pihak, dimana layanan tersebut bekerja dan memberikan garansi, dimana jaminan tersebut bagian dari SLA memilikitingkat harapan yang disepakati, tetapi dalam SLA mungkin terdapat tingkat ketersediaan, kemudahan layanan, kinerja, operasi atau tingkat spesifikasi untuk layanan itu sendiri. Selain itu, Perjanjian Tingkat Layanan akan menentukan target yang ideal, serta minimum yang dapat diterima.


Lalu apa seh isi dari SLA itu biasanya ? . . . Berikut ini biasanya yang terdapat dalam SLA :
  1. Service Description 
  2. Hours of operation 
  3. User Response times 
  4. Incident Response times 
  5. Resolution times 
  6. Availability & Continuity targets 
  7. Customer Responsibilities 
  8. Critical operational periods 
  9. Change Response Times 

Kesembilan items tersebut harus sudah di sepakati oleh kedua belah pihak (Service Provider dan Client)

Performance Capture Database Oracle

Script ini berguna untuk mencapture performace database Oracle  pada level basic  , misalnya Ratio dari Buffer Cache ,Library Cache ,etc :


( Copyright (c) 2000-2007 The DBA Zone , www.dbazone.com )


SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY   off

PROMPT
PROMPT +-----------------------------------+
PROMPT | Database Startup Date/Time        |
PROMPT +-----------------------------------+
PROMPT

SELECT
    instance   "Instance Name"
  , open_time  "Open Date/Time"
FROM
  v$thread
/

PROMPT
PROMPT +-----------------------------------+
PROMPT | Buffer Cache Hit Ratio            |
PROMPT +-----------------------------------+
PROMPT

SELECT
  TRUNC( ( 1 - ( SUM(decode(name,'physical reads',value,0)) /
                 ( SUM(DECODE(name,'db block gets',value,0))
                   +
                   (SUM(DECODE(name,'consistent gets',value,0)))
                 )
               )
         ) * 100
       ) "Buffer Hit Ratio"
FROM v$sysstat
/

SELECT
    a.value + b.value                          "Logical reads"
  , c.value                                    "Physical Reads"
  , d.value                                    "Physical Writes"
  , ROUND (100 * ( (a.value+b.value)-c.value) / (a.value+b.value)
           )                                   "Buffer Hit Ratio"
  , ROUND(c.value * 100 / (a.value + b.value)) "% Missed"
FROM
    v$sysstat a
  , v$sysstat b
  , v$sysstat c
  , v$sysstat d
WHERE
      a.statistic#=37
  AND b.statistic#=38
  AND c.statistic#=39
  AND d.statistic#=40
/

PROMPT
PROMPT +-----------------------------------+
PROMPT | Data Dictionary Hit Ratio         |
PROMPT +-----------------------------------+
PROMPT

SELECT
    SUM(gets)                                 "Data Dict. Gets"
  , SUM(getmisses)                            "Data Dict. Cache Misses"
  , ROUND((1-(sum(getmisses)/SUM(gets)))*100) "Data Dict Cache Hit Ratio"
  , ROUND(SUM(getmisses)*100/SUM(gets))       "% Missed"
FROM
  v$rowcache
/

PROMPT
PROMPT +-----------------------------------+
PROMPT | Library Cache Miss Ratio          |
PROMPT +-----------------------------------+
PROMPT

SELECT
    SUM(pins)                               "Executions"
  , SUM(reloads)                            "Cache Misses"
  , ROUND((1-(SUM(reloads)/SUM(pins)))*100) "Library Cache Hit Ratio"
  , ROUND(SUM(reloads)*100/SUM(pins))       "% Missed"      
FROM
  v$librarycache
/

SELECT
    namespace                 "Namespace"
  , TRUNC(gethitratio*100)    "Hit Ratio"
  , TRUNC(pinhitratio*100)    "Pin Hit Ratio"
  , reloads                   "Reloads"
  , invalidations             "Invalidations"
FROM
  v$librarycache
/

PROMPT
PROMPT +-----------------------------------+
PROMPT | Redo Log Buffer                   |
PROMPT +-----------------------------------+
PROMPT

SELECT
    SUBSTR(name,1,30)            "Name"
  , TO_CHAR(value, '999,999')    "Bytes"
FROM
    v$sysstat
WHERE
    name ='redo log space requests'
/

SELECT
    name                              "Name"
  , TO_CHAR(bytes, '999,999,999,999') "Bytes"
FROM
    v$sgastat
WHERE
    name ='free memory'
/

SELECT
    TO_CHAR(SUM(executions), '999,999,999,999,999,999')  "Tot SQL since startup"
  , TO_CHAR(SUM(users_executing), '999,999,999,999,999') "SQL executing now"
FROM
    v$sqlarea
/

PROMPT
PROMPT +--------------------------------------------------------+
PROMPT | If miss_ratio or immediate_miss_ratio > 1 then latch   |
PROMPT | contention exists, decrease LOG_SMALL_ENTRY_MAX_SIZE   |
PROMPT +--------------------------------------------------------+
PROMPT

SELECT
    SUBSTR(ln.name,1,30)                            "Name"
  , (misses/(gets+.001)) * 100                      "Miss Ratio"
  , (immediate_misses/(immediate_gets+.001)) * 100  "Immd. Miss Ratio"
FROM
    v$latch     l
  , v$latchname ln
WHERE
      l.latch# = ln.latch#
  AND ( (( misses / (gets+.001)) * 100 > .1 )
        OR
        (( immediate_misses / (immediate_gets+.001)) * 100 > .1)
      )
ORDER BY
  ln.name
/    

PROMPT
PROMPT +--------------------------------------------------------+
PROMPT | If these are < 1% of Total Number of requests for data |
PROMPT | then extra rollback segments are needed.               |
PROMPT +--------------------------------------------------------+
PROMPT

SELECT
    class    "Class"
  , count    "Count"
FROM
    v$waitstat
WHERE
  class IN (   'free list'
             , 'system undo header'
             , 'system undo block'
             , 'undo header'
             , 'undo block')
GROUP BY
    class
  , count
/

PROMPT
PROMPT +-----------------------------------+
PROMPT | Total Number of Requests for Data |
PROMPT +-----------------------------------+
PROMPT

SELECT  TO_CHAR(SUM(value), '999,999,999,999,999') "Total Requests"
FROM    v$sysstat
WHERE   name IN ('db block gets','consistent gets')
/

Menggunakan DBMS_SQLTUNE

Untuk melakukan tuning sebuah SQL Statement tools yang paling saya sukai adalah menggunakan DBMS_SQLTUNE, Berikut ini contoh penggunannya :

DECLARE
  l_sql               VARCHAR2(29000);
  l_sql_tune_task_id  VARCHAR2(100);
BEGIN
  l_sql := 'SELECT TO_CHAR(CALL_DATE_TIME,''YYYY-MM-DD HH24:MI:SS'') AS CALL_DATE_TIME,CDR_TYPE,CALL_TYPE,CALLING_PARTY_NO,CALLED_PARTY_NO,' ||
           'CALL_DURATION,CALL_CHARGE,PREVIOUS_BALANCE AS PREV_BALANCE,BALANCE_AFTER_CALL AS NEW_BALANCE ' ||
           'FROM TABLE_NAME '||
           'WHERE MSISDN=''628388001319'' ' ||
           'AND CDR_TYPE=''GPRS'' ' ||
           'AND CALL_DATE_TIME >= trunc(sysdate - 0) ' ||
           'and (substr(called_party_no,1,4) = ''NORF'' or call_charge < 0)';
         
l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
                          sql_text    => l_sql,
                          bind_list   => sql_binds(anydata.ConvertNumber(100)),
                          user_name   => 'IDA',
                          scope       => DBMS_SQLTUNE.scope_comprehensive,
                          time_limit  => 60,    ==>(Waktu yang di perlukan untuk analisa query,klo ada err INTERUPT perbesar nilai parameter ini)
                          task_name   => 'endera_tuning',
                          description => 'Tuning Query Improvement');
  DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;

Script di atas akan menmberikan output berupa rekomendasi yang harus di lakukan terhadap query statements  :)

Merubah hostname di Solaris 10

Berikut ini langkah-langkah untuk merubah hostname di Solaris 10 :

  1. Ubah nama di file /etc/nodename.
  2. Ubah nama di file /etc/hostname.xl0 (dimana xl0 adalah nama network interface anda )
  3. Ubah nama di file /etc/hosts.
  4. Run  command: hostname new_hostname
Note : Lakukan test terlebih dahulu di mesin development  :)

Logical Backup Informix Database menggunakan Shell Scripts

Dibawah ini contoh sederhana membuat backup menu menggunakan Shell Scripts , sebagai contoh scripts di bawah ini di gunakan untuk membackup data logical Informix Database (Versi 10) ke dalam Tape :

Informix Dynamic Servers Logical Backup 
-----------------------------------------------
trap '' 2
TRUE=1
FALSE=0

TEST=$TRUE

wait_running()
{
        printf "process still shutting down please wait ."
        while [ 1 ];
        do
                TAPE_RUN=`ps -ef | grep "ontape"`
                F_CHECK=`echo $TAPE_RUN | grep "ontape -c"`
                if [ "$F_CHECK" = "" ];then
                        echo
                        echo "process is shutdown ...."
                        break
                fi
                printf "."
                sleep 2
        done
}

running()
{
        IS_FOUND=`ps -ef | grep "ontape"`
        SD_CHECK=`echo $IS_FOUND | grep "ontape -c"`
        if [ "$SD_CHECK" != "" ];then
                echo "-----------------------------------------------"
                echo "STATUS: Logical Backup Is Currently Enabled...."
                echo "-----------------------------------------------"
        else
                echo "------------------------------------------------"
                echo "STATUS: Logical Backup Is Currently Disabled...."
                echo "------------------------------------------------"
        fi
        echo "What would you like to do ......"
}


clear
while [ $TEST ];
do
        echo "*-------------------------------------------"
        echo "*  \033[5m   Logical Backup Menu  \033[0m   *"
        echo "*------------------------------------------*"
        echo "*                                          *"
        echo "*  \033[5m1. Enable Logical Backup  \033[0m              *"
        echo "*  \033[5m2. Disable Logical Backup \033[0m              *"
        echo "*  \033[5m3. Quit                   \033[0m              *"
        echo "*                                          *"
        echo "*-------------------------------------------"
        running
        printf "logback >>: "
        read OPT

        if [ "$OPT" = "1" ];then
                clear
                echo "\033[1m  \033[31m   READ MESSAGE BELOW TO SEE RESULT OF SCRIPT \033[0m \033[0m"
                sudo su - endbbkp
                echo "\033[1m  \033[31m   OPTION [1] SELECTED ... backup enabled & will start on the next cron job \033[0m \0
33[0m"
        elif [ "$OPT" = "2" ];then

                clear
                echo "\033[1m  \033[31m   READ MESSAGE BELOW TO SEE RESULT OF SCRIPT \033[0m \033[0m"
                sudo su - disdbbkp
                echo "please wait ..... "
                wait_running
                echo "\033[1m  \033[31m   OPTION [2] SELECTED ... Please Select an option from below \033[0m \033[0m"
        elif [ "$OPT" = "3" ];then

                echo "Thankyou for using the system ...."
                echo "exiting ...."
                exit
        else
                clear
                echo "--------------------------------------------"
                echo "your option is not valid please select again"
                echo "--------------------------------------------"
        fi
done

Penggunaan Command Sed dan Awk

Berikut ini beberapa contoh dari penggunaan perintah Sed dan Awk :

File latihan.txt :
---------------------
John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkas, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA


Mengganti kata list menjadi Daftar di file latihan.txt
sed 's/list/Daftar/' latihan.txt >latihan.txt

Menggabung beberapa perintah 
---------------------------------------------------
sed 's/ List/, Daftar/; s/ list/, daftar/' latihan.txt

sed -e 's/ MA/, Massachusetts/' -e 's/ PA/,
Pennsylvania/' list

sed '
s/ MA/, Massachusetts/
s/ PA/, Pennsylvania/
s/ CA/, California/' list


$ cat test1
first:second
one:two

sed 's/\(.*\):\(.*\)/\2:\1/' test1


Perintah Sed dan awk
---------------------------------
$ cat nameState
s/ CA/, California/
s/ MA/, Massachusetts/
s/ OK/, Oklahoma/
s/ PA/, Pennsylvania/
s/ VA/, Virginia/

sed -f nameState latihan.txt | awk -F, '{ print $4 }'

sed -f namestate latihan.txt | awk -F, '{ print $4 ", " $0 }'


Menggunakan perintah Awk
-----------------------------
awk '{ print $1 }' latihan.txt

awk '/MA/' latihan.txt

awk '/MA/ { print $1 }' latihan.txt

awk -F, '/MA/ { print $1 }' latihan.txt

awk -F, '{ print $1; print $2; print $3 }' latihan.txt


Data Sample   BBS-list
-------------------------------
aardvark 555-5553 1200/300 B
alpo-net 555-3412 2400/1200/300 A
barfly 555-7685 1200/300 A
bites 555-1675 2400/1200/300 A
camelot 555-0542 300 C
core 555-2912 1200/300 C
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sdace 555-3430 2400/1200/300 A
sabafoo 555-2127 1200/300 C


Data Sample  inventory-shipped
------------------------------------
Jan 13 25 15 115
Feb 15 32 24 226
Mar 15 24 34 228
Apr 31 52 63 420
May 16 34 29 208
Jun 31 42 75 492
Jul 24 34 67 436
Aug 15 34 47 316
Sep 13 55 37 277
Oct 29 54 68 525
Nov 20 87 82 577
Dec 17 35 61 401
Jan 21 36 64 620
Feb 26 58 80 652
Mar 24 75 70 495
Apr 21 70 74 514


awk '/foo/ { print $0 }' BBS-list

awk '/12/ { print $0 }
/21/ { print $0 }' BBS-list inventory-shipped


ls -l | awk '$5 == "Nov" { sum += $4 }
END { print sum }'

ls -l | awk '$5 == "May" { sum += $4 } END { print sum }'

awk '{ print $(2*2) }' BBS-list

awk '{ $3 = $2 - 10; print $2, $3 }' inventory-shipped


awk '{ $2 = $2 - 10; print $0 }' inventory-shipped

awk '{ $6 = ($5 + $4 + $3 + $2) ; print $6 }' inventory-shipped


echo aaaabcd | awk '{ sub(/a+/, "<A>"); print }'


awk 'BEGIN { RS = "/" } { print $0 }' BBS-list

awk '{ print $0 }' RS="/" BBS-list

awk '/foo/ { print $1, $NF }' BBS-list

awk 'BEGIN {
ORS = "\nOUCH!\n"; OFS = "+"
msg = "Dont Panic!"
printf "%s\n", msg
}'


awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list

awk '{ printf "%-10s %d %s\n", $1, $2,$3 }' BBS-list

awk '{ print $2 > "phone-list"
print $1 > "name-list" }' BBS-list

awk '{ printf "%-10s ", $1, $2 }
{ printf "%-10s %s\n", $3, $4 }' BBS-list



Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s %s %s\n", $1, $2,$3 }' BBS-list
aardvark   555-5553 1200/300
alpo-net   555-3412 2400/1200/300
barfly     555-7685 1200/300
bites      555-1675 2400/1200/300
camelot    555-0542 300
core       555-2912 1200/300
fooey      555-1234 2400/1200/300
foot       555-6699 1200/300
macfoo     555-6480 1200/300
sdace      555-3430 2400/1200/300
sabafoo    555-2127 1200/300

Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s %s %s %s\n", $1, $2,$3,$4 }' BBS-list
aardvark   555-5553 1200/300 B
alpo-net   555-3412 2400/1200/300 A
barfly     555-7685 1200/300 A
bites      555-1675 2400/1200/300 A
camelot    555-0542 300 C
core       555-2912 1200/300 C
fooey      555-1234 2400/1200/300 B
foot       555-6699 1200/300 B
macfoo     555-6480 1200/300 A
sdace      555-3430 2400/1200/300 A
sabafoo    555-2127 1200/300 C

Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s %s %-10s %s\n", $1, $2,$3,$4 }' BBS-list
aardvark   555-5553 1200/300   B
alpo-net   555-3412 2400/1200/300 A
barfly     555-7685 1200/300   A
bites      555-1675 2400/1200/300 A
camelot    555-0542 300        C
core       555-2912 1200/300   C
fooey      555-1234 2400/1200/300 B
foot       555-6699 1200/300   B
macfoo     555-6480 1200/300   A
sdace      555-3430 2400/1200/300 A
sabafoo    555-2127 1200/300   C

Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s %s %-20s %s\n", $1, $2,$3,$4 }' BBS-list
aardvark   555-5553 1200/300             B
alpo-net   555-3412 2400/1200/300        A
barfly     555-7685 1200/300             A
bites      555-1675 2400/1200/300        A
camelot    555-0542 300                  C
core       555-2912 1200/300             C
fooey      555-1234 2400/1200/300        B
foot       555-6699 1200/300             B
macfoo     555-6480 1200/300             A
sdace      555-3430 2400/1200/300        A
sabafoo    555-2127 1200/300             C

Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s  %-20s  %-20s %s\n", $1, $2,$3,$4 }' BBS-list
aardvark    555-5553              1200/300             B
alpo-net    555-3412              2400/1200/300        A
barfly      555-7685              1200/300             A
bites       555-1675              2400/1200/300        A
camelot     555-0542              300                  C
core        555-2912              1200/300             C
fooey       555-1234              2400/1200/300        B
foot        555-6699              1200/300             B
macfoo      555-6480              1200/300             A
sdace       555-3430              2400/1200/300        A
sabafoo     555-2127              1200/300             C


Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk '{ printf "%-10s  %-10s  %-20s %s\n", $1, $2,$3,$4 }' BBS-list
aardvark    555-5553    1200/300             B
alpo-net    555-3412    2400/1200/300        A
barfly      555-7685    1200/300             A
bites       555-1675    2400/1200/300        A
camelot     555-0542    300                  C
core        555-2912    1200/300             C
fooey       555-1234    2400/1200/300        B
foot        555-6699    1200/300             B
macfoo      555-6480    1200/300             A
sdace       555-3430    2400/1200/300        A
sabafoo     555-2127    1200/300             C


awk 'BEGIN { printf "%-10s %s\n", "Name", "Number"
printf "%-10s %s\n", "----", "------" }
{ printf "%-10s %s\n", $1, $2 }' BBS-list

Ida.Bagus@NTS-N9ABM1 ~/shellscripts/latihan_awk
$ awk 'BEGIN { printf "%-10s %s\n", "Name", "Number"
> printf "%-10s %s\n", "----", "------" }
> { printf "%-10s %s\n", $1, $2 }' BBS-list
Name       Number
----       ------
aardvark   555-5553
alpo-net   555-3412
barfly     555-7685
bites      555-1675
camelot    555-0542
core       555-2912
fooey      555-1234
foot       555-6699
macfoo     555-6480
sdace      555-3430
sabafoo    555-2127



File Email
-------------------
Jane Doe
123 Main Street
Anywhere, SE 12345-6789
John Smith
456 Tree-lined Avenue
Smallville, MW 98765-4321

Program untuk mengkonversi email
-------------------------------------
# addrs.awk --- simple mailing list program
# Records are separated by blank lines.
# Each line is one field.
BEGIN { RS = "" ; FS = "\n" }
{
print "Name is:", $1
print "Address is:", $2
print "City and State are:", $3
print ""
}


Execute Program
--------------------
awk -f addrs.awk addresses

Wednesday, December 4, 2013

Instalasi RPM menggunakan tools PIRUT

Terkadang dalam instalasi sebuah aplikasi di linux environment memerlukan package-package linux di mana package-paclake tersebut di luar dari package default pada saat instalasi. sehingga agar aplikasi yang kita install bisa running properly maka kita harus menambahkan paket-paket tersebut OS yang sudah di install.

Salah satu cara yang paling mudah dan aman adalh menggunakan tools yang bernama pirut . pirut ini adalah tolls GUI yang bisa kita gunakan untuk menginstall packages yang kita perlukan

Beriktu ini step-stepnya :

Login sebagai root users dan ketik

      #pirut  => untuk jalanin installation manager / package manager

Lalu ketik pada box package dengan source DVD linux , misalanya :

       file:///media/RHEL_5.4 x86_64 DVD/Server


Setelah itu pilih package-package yang kita inginkan

Done :)