<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>dbs247 blog</title>
	<atom:link href="http://blog.dbs247.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.dbs247.com</link>
	<description>database specialist</description>
	<pubDate>Thu, 11 Mar 2010 05:18:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>grab awr report</title>
		<link>http://blog.dbs247.com/?p=29</link>
		<comments>http://blog.dbs247.com/?p=29#comments</comments>
		<pubDate>Thu, 11 Mar 2010 05:18:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://blog.dbs247.com/?p=29</guid>
		<description><![CDATA[sedikit automasi gather awr report dgn bantuan ksh&#8230;. cukup inputan jumlah hari saja, script ini akan mengambil semua awr report dari sysdate mundur sejumlah hari yg ditentukan&#8230;..
#!/bin/ksh
if [ $# -ne 5 ]
then
 echo &#8220;penggunaan awrsimple.sh &#60;jumlah hari&#62; &#60;lokasi directory awr&#62; &#60;nomor instance&#62; &#60;username&#62; &#60;tns alias&#62;&#8221;
 exit
fi
num_days=$1
awrloc=$2
instnum=$3
username=$4
tns=$5
exec 4&#62;/dev/tty
function getpass
{
        typeset prompt=$1
        typeset backspace=$(echo  \\b\\c)
        typeset enter=$(echo \\r\\c)
        typeset [...]]]></description>
			<content:encoded><![CDATA[<p>sedikit automasi gather awr report dgn bantuan ksh&#8230;. cukup inputan jumlah hari saja, script ini akan mengambil semua awr report dari sysdate mundur sejumlah hari yg ditentukan&#8230;..</p>
<p>#!/bin/ksh</p>
<p>if [ $# -ne 5 ]<br />
then<br />
 echo &#8220;penggunaan awrsimple.sh &lt;jumlah hari&gt; &lt;lokasi directory awr&gt; &lt;nomor instance&gt; &lt;username&gt; &lt;tns alias&gt;&#8221;<br />
 exit<br />
fi</p>
<p>num_days=$1<br />
awrloc=$2<br />
instnum=$3<br />
username=$4<br />
tns=$5</p>
<p>exec 4&gt;/dev/tty</p>
<p>function getpass<br />
{<br />
        typeset prompt=$1<br />
        typeset backspace=$(echo  <a href="file://\\b\\c">\\b\\c</a>)<br />
        typeset enter=$(echo <a href="file://\\r\\c">\\r\\c</a>)<br />
        typeset savesetting=$(stty -g)<br />
        typeset keystroke password n i reading result<br />
        n=0<br />
        echo &#8220;${prompt}&#8221;<a href="file://\\c">\\c</a> &gt;&amp;4<br />
        stty -echo -icrnl -icanon min 1 time 0<br />
        reading=1<br />
        while ((reading)) ; do<br />
                keystroke=$(dd bs=1 count=1 2&gt;/dev/null)<br />
                case $keystroke in<br />
                $enter)<br />
                        reading=0<br />
                        ;;<br />
                $backspace)<br />
                        if ((n)) ; then<br />
                                echo &#8220;${backspace} ${backspace}&#8221;<a href="file://\\c">\\c</a> &gt;&amp;4<br />
                                ((n=n-1))<br />
                        fi<br />
                        ;;<br />
                *)<br />
                        echo \*\\c &gt;&amp;4<br />
                        data[n]=$keystroke<br />
                        ((n=n+1))<br />
                esac<br />
        done<br />
        stty &#8220;$savesetting&#8221;<br />
        echo &gt;&amp;4<br />
        result=&#8221;"<br />
        i=0<br />
        while  ((i&lt;n)) ; do<br />
                result=&#8221;${result}${data[i]}&#8221;<br />
                ((i=i+1))<br />
        done<br />
        echo $result<br />
        return 0<br />
}<br />
passwd=$(getpass &#8220;password : &#8220;)</p>
<p>sqlplus -s <a href="mailto:$username/$passwd@$tns">$username/$passwd@$tns</a> as sysdba &lt;&lt;EOF &gt; log1.txt</p>
<p>set serveroutput on<br />
set lines 125<br />
set pages 1000<br />
set feedback off<br />
set echo off<br />
set ver off<br />
col report_name form a40<br />
col betime form a5<br />
col edtime form a5<br />
col instart_fmt form a20<br />
col snapdat form a20</p>
<p>spool awrsimple.sql</p>
<p>DECLARE<br />
 CURSOR c1 IS<br />
select to_char(s.startup_time,&#8217;dd Mon &#8220;at&#8221; HH24:mi:ss&#8217;)  instart_fmt<br />
     , di.instance_name                                  inst_name<br />
     , di.db_name                                        db_name<br />
     , s.snap_id                                         snap_id<br />
     , to_char(s.end_interval_time,&#8217;dd Mon YYYY HH24:mi&#8217;) snapdat<br />
     , to_char(s.end_interval_time,&#8217;DDmonRR&#8217;) repdate<br />
     , to_char(s.end_interval_time,&#8217;HH24&#8242;) snaphour<br />
     , s.snap_level                                      lvl<br />
  from dba_hist_snapshot s<br />
     , dba_hist_database_instance di<br />
     , v\$database da<br />
     , v\$instance ins<br />
 where s.dbid              = da.dbid<br />
   and di.dbid             = da.dbid<br />
   and s.instance_number   = ins.instance_number<br />
   and di.instance_number  = ins.instance_number<br />
   and ins.instance_number = $instnum<br />
   and di.dbid             = s.dbid<br />
   and di.instance_number  = s.instance_number<br />
   and di.startup_time     = s.startup_time<br />
   and s.end_interval_time &gt;= decode( $num_days<br />
                                   , 0   , to_date(&#8217;31-JAN-9999&#8242;,&#8217;DD-MON-YYYY&#8217;)<br />
                                   , 3.14, s.end_interval_time<br />
                                   , to_date((select to_char(max(end_interval_time),&#8217;dd/mm/yyyy&#8217;)<br />
       from dba_hist_snapshot),&#8217;dd/mm/yyyy&#8217;) - ($num_days-1))<br />
 order by di.db_name, di.instance_name, s.snap_id;</p>
<p>    v_report_name varchar2(100);<br />
    v_db_name     varchar2(30);<br />
    v_beid        varchar2(3);<br />
    v_snap_begin  number(8);<br />
    v_snapdate    varchar2(8);<br />
    v number(3) := 1;<br />
BEGIN<br />
    select name into v_db_name from v\$database;<br />
    FOR I IN C1 LOOP</p>
<p>      if v &gt; 1 then</p>
<p>        dbms_output.enable(1000000);<br />
        dbms_output.put_line(&#8217;define num_days=&#8217;||$num_days);<br />
        dbms_output.put_line(&#8217;define report_type=html&#8217;);<br />
        dbms_output.put_line(&#8217;define begin_snap=&#8217;||v_snap_begin);<br />
        dbms_output.put_line(&#8217;define end_snap=&#8217;||i.snap_id);<br />
        v_report_name:=&#8217;awr_&#8217;||lower(v_db_name)||&#8217;$instnum\_&#8217;||v_snapdate||&#8217;_'||v_beid||&#8217;-'||i.snaphour||&#8217;.html&#8217;;<br />
        dbms_output.put_line(&#8217;define report_name=$awrloc&#8217;||v_report_name);<br />
        dbms_output.put_line(<a href="mailto:'@?/rdbms/admin/awrrpt.sql'">&#8216;@?/rdbms/admin/awrrpt.sql&#8217;</a>);</p>
<p>      end if;<br />
      v := v + 1;<br />
      v_beid := i.snaphour;<br />
      v_snap_begin := i.snap_id;<br />
      v_snapdate := i.repdate;<br />
    END LOOP;<br />
END;<br />
/<br />
spool off</p>
<p>@awrsimple.sql</p>
<p>set echo on<br />
set feed on<br />
set ver on<br />
exit;<br />
EOF</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dbs247.com/?feed=rss2&amp;p=29</wfw:commentRss>
		</item>
		<item>
		<title>Menggunakan Oracle Streams untuk meminimalisir locking dan contention</title>
		<link>http://blog.dbs247.com/?p=26</link>
		<comments>http://blog.dbs247.com/?p=26#comments</comments>
		<pubDate>Mon, 25 Jan 2010 05:07:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://blog.dbs247.com/?p=26</guid>
		<description><![CDATA[Oracle streams adalah fitur oracle database yang diperkenalkan mulai versi 9i, namun demikian teknologi yang menjadi dasarnya sudah ada semenjak versi 8i yaitu advanced queueing. Pada umumnya oracle streams dipakai untuk &#8220;shared data&#8221;, dimana bisa dikonfigurasi, misalnya:
- replikasi data dari satu database ke database lain (Single Master, Satu Arah)
- replikasi data dari satu database ke [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle streams adalah fitur oracle database yang diperkenalkan mulai versi 9i, namun demikian teknologi yang menjadi dasarnya sudah ada semenjak versi 8i yaitu advanced queueing. Pada umumnya oracle streams dipakai untuk &#8220;shared data&#8221;, dimana bisa dikonfigurasi, misalnya:</p>
<p>- replikasi data dari satu database ke database lain (Single Master, Satu Arah)</p>
<p>- replikasi data dari satu database ke database lain juga sebaliknya (Multi Master, dua Arah).</p>
<p>namun demikian karena menurut dokumen oracle dan karena kebutuhan, dengan sedikit experiment, bisa dikembangkan untuk keperluan:</p>
<p>- Archiving data</p>
<p>- boos performance untuk menghindari locking dan contention</p>
<p>dua hal tersebut sudah dilakukan konfigurasi dan sedang ditest (load test), apakah janji manis advanced queueing tersebut benar ataukah cuma basa-basi <img src='http://blog.dbs247.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Untuk aplikasi transaksional, ada 1 table yang super sibuk, dan ada banyak proses yang hit table tersebut danprosesnya concurrent, parallel dan simultan, malah ada 1 proses yg membutuhkan response time &lt;20 detik dari keseluruhan system, dari database harus respon &lt;5 detik saja&#8230;.</p>
<p>akhirnya konfigurasi streams/AQ dilakukan, dimana table tersebut dipecah kedalam 3 table, process yg membutuhkan response time &lt;5 detik khusu pada table tersendiri (table OL), proces lainnya dipecah kedalam 2 table yang berbeda, 1 table untuk kebutuhan process transaksional, 1 table untuk kebutuhan selain transaksional juga sebagai data archiving.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dbs247.com/?feed=rss2&amp;p=26</wfw:commentRss>
		</item>
		<item>
		<title>NIC bonding rhel 5.4</title>
		<link>http://blog.dbs247.com/?p=22</link>
		<comments>http://blog.dbs247.com/?p=22#comments</comments>
		<pubDate>Mon, 11 Jan 2010 06:03:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://blog.dbs247.com/?p=22</guid>
		<description><![CDATA[konfigurasi nic bonding akan lumayan menyita tenaga, karena kadang-kadang kernel bonding rhel 5.4 tidak akan clear ketika linux di restart.
pengalaman ini ketka migrasi database server RAC dari 2node mesin lama menjadi 3 node mesin baru dari rhel4.4 ke rhel5.4.
konfigurasi nic bonding:
- baca bonding.txt (bonding kernel documentation)
- cek dependensi (kernel loadable module dah tersedia apa blm, [...]]]></description>
			<content:encoded><![CDATA[<p>konfigurasi nic bonding akan lumayan menyita tenaga, karena kadang-kadang kernel bonding rhel 5.4 tidak akan clear ketika linux di restart.</p>
<p>pengalaman ini ketka migrasi database server RAC dari 2node mesin lama menjadi 3 node mesin baru dari rhel4.4 ke rhel5.4.</p>
<p>konfigurasi nic bonding:</p>
<p>- baca bonding.txt (bonding kernel documentation)</p>
<p>- cek dependensi (kernel loadable module dah tersedia apa blm, di rhel5.4 semua sudah tinggal konfig aja)</p>
<p>- karena di rhel untuk oracle RAC, maka kemungkinan 3.2 dan 3.3 saja yg berlaku <img src='http://blog.dbs247.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- setelah kerasan dgn tmpxxxx ethernet pada konfigurasi 3.2, akhirnya saya pilih konfigurasi 3.3 &#8220;Configuring Bonding Manually with Ifenslave&#8221;</p>
<p>- entry pada /etc/rc.local</p>
<p>modprobe bonding mode=balance-alb miimon=100<br />
modprobe e100<br />
ifconfig bond0 11.11.11.x netmask 255.255.255.0 up<br />
ifenslave bond0 eth2<br />
ifenslave bond0 eth3</p>
<p>- that&#8217;s it, dan skr ndak pernah ngalami lagi itu device tmpxxxx ethernet eth&#8230; &#8230;.</p>
<p>- and then akhire, semua konfig ocfs2, ocr, voting disk dan bonding saya taro di /etc/rc.local, dimana lengkapnya spt ini:</p>
<p>touch /var/lock/subsys/local</p>
<p>insmod /lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko hangcheck_tick=30 hangcheck_margin=180</p>
<p>/sbin/ifconfig bond0 down<br />
/sbin/rmmod bonding</p>
<p>modprobe bonding mode=balance-alb miimon=100<br />
ifconfig bond0 11.11.11.7 netmask 255.255.255.0 up<br />
ifenslave bond0 eth2<br />
ifenslave bond0 eth3</p>
<p>/etc/init.d/o2cb start<br />
/etc/init.d/ocfs2 start</p>
<p>chown root:dba /dev/emcpowera1<br />
chown root:dba /dev/emcpowera2<br />
chown oracle:dba /dev/emcpowera3<br />
chown oracle:dba /dev/emcpowera5<br />
chown oracle:dba /dev/emcpowera6<br />
chown oracle:dba /dev/emcpowera7<br />
chown oracle:dba /dev/emcpowera8</p>
<p>oracle:dbs247.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dbs247.com/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>Migrasi data dari MySQL ke Oracle dengan Perl</title>
		<link>http://blog.dbs247.com/?p=19</link>
		<comments>http://blog.dbs247.com/?p=19#comments</comments>
		<pubDate>Tue, 03 Feb 2009 05:06:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[mysql]]></category>

		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://blog.dbs247.com/?p=19</guid>
		<description><![CDATA[Pada kali ini kita coba buat script migrasi dengan perl dari database mysql ke oracle, namun ada beberapa langkah awal yang harus diperhatikan, terutama masalah konektivitas perl ke dua database tersebut. Dengan menggunakan perl ini maka kita tidak perlu lagi men-dump table mysql ke file text dan kemudian diload ke oracle via sqlloader atau melalui [...]]]></description>
			<content:encoded><![CDATA[<p>Pada kali ini kita coba buat script migrasi dengan perl dari database mysql ke oracle, namun ada beberapa langkah awal yang harus diperhatikan, terutama masalah konektivitas perl ke dua database tersebut. Dengan menggunakan perl ini maka kita tidak perlu lagi men-dump table mysql ke file text dan kemudian diload ke oracle via sqlloader atau melalui sqlplus.</p>
<p>Mulai oracle 10.2 oracle sudah menyertakan perl 5 secara default, bisa dicek pada $ORACLE_HOME/perl, malah konektor ke database oracle sudah tersedia.</p>
<p>Jika kita melihat standard OS perl yang disertakan dimana lokasi perl interpreternya sendiri ada di /usr/bin/perl, ada sedikit masalah sewaktu kita akan menginstall konektor-konektor database.</p>
<p>untuk itu hal-hal ini perlu dilakukan:</p>
<p>- install perl dari source</p>
<p>- environment variable PERL5LIB dan PATH set ke lokasi perl yg barusan diinstall</p>
<p>- install DBI</p>
<p>- install DBD::Oracle</p>
<p>- install DBD::mysql</p>
<p> </p>
<p>contoh script:</p>
<p>#!/home/oracle/localperl/bin/perl</p>
<p>use DBI;</p>
<p># MYSQL CONFIG VARIABLES<br />
$host = &#8220;localhost&#8221;;<br />
$database = &#8220;mydb&#8221;;<br />
$user = &#8220;root&#8221;;<br />
$pw = &#8220;passwd&#8221;;</p>
<p># PERL CONNECT()<br />
#$connect = mysql-&gt;connect($host, $database, $user, $pw);<br />
$dbm = DBI-&gt;connect(&#8221;dbi:mysql:$database:$host&#8221;, $user, $pw);<br />
$dbo = DBI-&gt;connect(&#8221;dbi:Oracle:&#8221;,&#8221;mydb&#8221;,&#8221;mydb&#8221;, { ora_session_mode =&gt;<br />
2 })||die &#8220;%ERROR opening DB: $DBI::errstr&#8221;;</p>
<p>$lim1=0;<br />
for($i = 2000; $i &lt; 29827026; ) {<br />
$lim2=$i;<br />
$str_src = qq{select timestamp,&#8230;<br />
from audit_table order by timestamp limit $lim1,$lim2};<br />
$out1 = $dbm-&gt;prepare($str_src);<br />
$out1-&gt;execute;</p>
<p>$lim1=$lim2+1;</p>
<p>       while(my($timestamp,&#8230;)=$out1-&gt;fetchrow_array) {</p>
<p>       $ins_ora1 = qq{insert into mydb.AUDIT_TABLE(TIMESTAMP&#8230;)<br />
VALUES(to_date(&#8217;$timestamp&#8217;,'yyyy-mm-dd hh24:mi:ss&#8217;),&#8230;.)};<br />
       $out2 = $dbo-&gt;prepare($ins_ora1);<br />
       $out2-&gt;execute;</p>
<p>       }</p>
<p>$ins_ora4 = &#8220;commit&#8221;;<br />
$out3 = $dbo-&gt;prepare($ins_ora4);<br />
$out3-&gt;execute;</p>
<p>$i=$i+2000;<br />
}</p>
<p>undef $dbm;<br />
undef $dbo;</p>
<p> </p>
<p>set environment variable sebelum mengeksekusi script tsb:</p>
<p>export PERL5LIB=/home/oracle/localperl/lib:/home/oracle/localperl/lib/site_perl/5.10.0/i86pc-solaris:/home/oracle/localperl/lib/site_perl/5.10.0</p>
<p>export PATH=/home/oracle/localperl/bin:$PATH</p>
<p>export LD_LIBRARY_PATH=/apps/oracle/product/10.2/lib32:/apps/oracle/product/10.2/lib:/opt/mysql/mysql32/lib:/opt/mysql/mysql/lib</p>
<p>export ORACLE_HOME=ORACLE_HOME=/apps/oracle/product/10.2</p>
<p> </p>
<p>salam,</p>
<p>oracle@dbs247.com</p>
<p>mysql@dbs247.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dbs247.com/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
		<item>
		<title>Insert Performance Oracle 10.2</title>
		<link>http://blog.dbs247.com/?p=17</link>
		<comments>http://blog.dbs247.com/?p=17#comments</comments>
		<pubDate>Tue, 03 Feb 2009 04:53:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://blog.dbs247.com/?p=17</guid>
		<description><![CDATA[Pada aplikasi yang melakukan banyak aktifitas INSERT, atau bulk load insert, ada beberapa hal yang harus diperhatikan dari sisi performance.
Dikarenakan oracle secara arsitektur ACID compliance dan ful MVCC, dimana mau tidak mau harus melakukan write ahead logging, maka performance INSERT pun dipengaruhi oleh keadaan tersebut:
Issue yang bakal muncul secara wait event adalah sebagai berikut:
- log [...]]]></description>
			<content:encoded><![CDATA[<p>Pada aplikasi yang melakukan banyak aktifitas INSERT, atau bulk load insert, ada beberapa hal yang harus diperhatikan dari sisi performance.</p>
<p>Dikarenakan oracle secara arsitektur ACID compliance dan ful MVCC, dimana mau tidak mau harus melakukan write ahead logging, maka performance INSERT pun dipengaruhi oleh keadaan tersebut:</p>
<p>Issue yang bakal muncul secara wait event adalah sebagai berikut:</p>
<p>- log file sync issue, dimana frekuensi commit melebihi kapasitas IOPS</p>
<p>- log buffer space issue, ini berhubungan dengan parameter log_buffer</p>
<p>- free buffer waits, wait event ini bisa disebabkan karena IO bottleneck, ataupun oracle buffer cache yang terlalu kecil. sehingga dbwr tidak cukup waktu untuk menulis dirty buffer dari SGA ke disk</p>
<p>- buffer busy waits, wait event ini berelasi dengan konkurensi dan terjadinya transaksi pada level table even block yang sama. misalnya setelah INSERT dilakukan, aplikasi langsung SELECT pada data-data atau row-row yang barusan diinsert. fakta lain wait event ini bisa timbul karena ada masalah dengan index</p>
<p>Jika dilakukan dengan metode &#8220;direct path insert&#8221;, beberapa wait event diatas bisa dihindari khusunya yang berhubungan dgn buffer cache nya oracle, misalnya; free buffer waits, buffer busy waits. Tapi wait event yang berhubungan dengan konsep &#8220;write ahead logging&#8221; masih tetep ada.</p>
<p>Pada oracle 10.2 ada feature &#8220;asynchronous commit&#8221;,  dimana ketergantungan penulisan log terlebih dahulu akan diabaikan dan oracle secara asynchronously menulis redo data dari log_buffer ke redo log files.</p>
<p>ada beberapa trik, agar insert performance ini bisa di-enhance lagi.</p>
<p> </p>
<p>oracle@dbs247.com</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dbs247.com/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
	</channel>
</rss>
