Thursday, February 19, 2009

Work on Shift

Hufff ... udah 4 bulan ngak pernah ngeblog lagi ... maklum lagi sibuk jadinya males buat tulisan-tulisan sendiri yang kayaknya ngak penting dan ngak pernah dibaca sama orang lain. Tapi malem ini lagi rada2 suntuk, abis sakit malah masuk malem...... mudah2an ngak jadi lagi ni sakitnya.

Sejak december 2008 kemaren, gw ditugaskan diunit DCO (Data Center Operation) yang tugasnya -sebetulnya sama-, cuma ada label CCC (Commite apa gitu gw lupa), jadi untuk promote aplikasi ke production harus melewati team gw... ini bisa dibilang beruntung atau ngak tapi masuk DCO itu ada hari dimana kita kerja pake shift. Masuk jam 14.30 pulang jam 11.00. Besoknya ? Ngarep libur ... jangan deh ... besok masuk pagi sama seperti biasa .... kerja yang sangat keras. Tapi enaknya dapet uang shift .. cihuyyyy .. lumayan sebulan dapet uang tambahan diluar gaji. Selain itu, DCO juga sering lembur jadi dapet lagi hehehe...

Tapi ada skenario yang sangat tidak menyenangkan untuk kerja dengan shift.. begini ... karena awalnya gw dapet shift itu hari jumat, besoknya libur dong .. wah enak banget tapi itu hanya berjalan 2 minggu karena temen minta dituker dari kamis ke jumat (katanya ada kerjaan pagi kalo kamis), yo wes gw sih ngalah aja dan nrimo2 aja. Kemudian minggu depannya gw mulai kerja shift setiap kamis, Kamis brangkat jam set 2 dan pulang sampe rumah jam 12, baru tidur jam 1 dan jam 6 udah harus bangun, mandi dan brangkat (karena jumat itu waktu masuk lebih cepet). abis itu, sering banget ada promosi aplikasi sampe malem itu hari jumat.. ya terpaksa pulang malem lagi... pernah waktu itu pulang jam jam 4 pagi .... wah langsung tepar besok nya...

But anyway, i'm really enjoy right now .. karena tiap kerja shift yang notabanennya "Bengong" (Cuma nungguin batch), bisa bekerja dengan ngerjain project luar .. hihihi .. jadi projectnya cepet kelar.... yah namanya juga hidup .. ada enak ada ngak enaknya ...ya enjoy aja :D

Thursday, November 6, 2008

ORACLE Here i come ...

hari jumat 7 November 2008, berhubung ngak terlalu sibuk dengan kerjaan gw nyoba untuk "mengenal" lebih dalam ORACLE Database. Kemaren juga gw udah nanya server mana yang bisa gw obok-obok buat belajar dan diberikan TNSnamesnya. Sebenernya dari kemaren udah pengen banget nyoba, tapi ngak bisa konek ke server. ngak tau masalahnya kenapa... mungkin VPNnya yang dodol.

Yang pertama gw liat adalah buku oracle disamping gw -hehehe, bekas peninggalan orang yang sekarang ada dimeja gw-. Gw baca2, trus gw implementasiin di Oracle. Gw konek ke Oraclenya pake TOAD. Hal pertama kali yang gw lakuin di ORACLE is create table. Well, i created two tables this morning. One is Employees and the other is Departments -gw liat dibuku latihan-.

Setelah gw coba, emang ngak sama banget sama SQL Server. Ada yang error, tapi gw cari solusinya diinternet ... ya ngak beda-beda jauh lah.

CREATE TABLE EMPLOYEES
(
employee_id INT NOT NULL PRIMARY KEY,
first_name VARCHAR(20) NULL,
last_name VARCHAR(20) NULL,
email VARCHAR(25) NULL,
phone_number VARCHAR(25) NULL,
hire_date date NOT NULL,
job_id VARCHAR(20) NULL,
salary DECIMAL(29,2) NULL
)

CREATE TABLE DEPARTMENTS
(
department_id INT NOT NULL PRIMARY KEY,
department_name VARCHAR(50) NULL,
manager_id INT NULL,
location_id INT NULL,
CONSTRAINT manger_id_fk FOREIGN KEY (manager_id) REFERENCES EMPLOYEES(employee_id)
)


Setelah gw buat table nya di ORACLE, kemudian gw buat SEQUENCE. kalo di SQL Server mungkin sama dengan IDENTITY. Tapi bedanya adalah, SEQUENCE dituliskan saat perintah INSERT sedangkan identity tidak. Selanjutnya adalah membuat data... hufffff ... ini nih yang paling sulit kalo buat database dari awal.

Here's the script :

INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'RUDI','WIJAYA',
'rudi.wijaya@cne.com','0822882823','1 JANUARY 2001','ADM STAFF',2000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'PETER','PARKER',
'peter.parker@cne.com','08177237183','1 JANUARY 2001','ADM Manager',5000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'RAYMOND','BROWN',
'raymond.brown@cne.com','08177237183','18 MARCH 1998','Mkt Staff',2000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'CLARK','KENT',
'clark.kent@cne.com','08189137136','1 JANUARY 1996','Mkt Manager',5000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'SAM','WINCHESTER',
'sam.winchester@cne.com','0812123216','13 FEB 2000','Ship Staff',2000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'DEAN','WINCHESTER',
'dean.winchester@cne.com','0812123216','13 FEB 2000','Ship Manager',5000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'BRUCE','WAYNE',
'bruce.wayne@cne.com','0812123216','13 FEB 2000','IT Staff',2000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'JHON','WINCHESTER',
'jhon.winchester@cne.com','08151814714','4 July 2000','IT Manager',5000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'MARCELO','SALAS',
'marcelo.salas@cne.com','02199313718','4 July 2000','Sales Staff',2000000);


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'IVAN','ZAMORANO',
'ivan.zamorano@cne.com','0831736183','17 August 1988','Sales Manager',10000000)


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'DAVOR','SUKER',
'davor.suker@cne.com','08131316641','5 August 2000','Executive Staff',2000000)


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'ROBERTO','MANCINI',
'roberto.mancini@cne.com','0821863163','10 December 1998','Executive Manager',6000000)


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'GORAN','PANDEV',
'goran.pandev@cne.com','08227313516','15 December 2000','Accounting Staff',2000000)


INSERT INTO EMPLOYEES
VALUES (EMP_SEQUENCE.NEXTVAL,'MAURO','ZARATE',
'mauro.zarate@cne.com','08158731632','20 December 1998','Accounting Manager',5000000)


INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Administration',5,1700);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Marketing',7,1600);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Shipping',9,1500);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'IT',11,1400);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Sales',13,1300);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Executive',15,1200);

INSERT INTO DEPARTMENTS
VALUES (DEP_SEQUENCE.NEXTVAL,'Accounting',17,1100);



Masalah muncul disini... ketika gw mo insert semua datanya langsung... Error terus. Errornya : SQL command not properly ended. hehehehe, awalnya gw bingung banget.. trus gw tambahin titik koma diakhir, eh malah errornya berubah. Errornya : Invalid identifier. Waaaaks... kenapa ya ? ya udah gw tanya aja sama DBAnya.... eh jawabannya simple.. "Di Toad ngak bisa insert langsung banyak gitu, harus satu persatu" .... weks... tapi akhirnya dia ngasih tau cara cepet buat insert banyak pake toad, caranya adalah Execute Via SQL*Plus. hehehehe ...

Akhirnya database pertama gw jadi, tinggal belajar selanjutnya neh ..... Come on, Lets Go to Oracle DBA huahuahua !!! (I Hope)

Wednesday, November 5, 2008

Ibu

Renungan Hati

Disaat ibumu tidur, cuba kamu lihat matanya dan bayangkan matanya takkan terbuka untuk selamanya..tangannya tak dapat hapuskan airmata mu dan tiada lagi nasihat yang sering kita abaikan..bayangkan ibumu sudah tiada..apakah kamu cukup membahagiakannya..apakah kamu pernah berfikir bertapa besar pengorbanannya semenjak kamu berada di dalam perutnya...kirim message ini pada semua...itupun kalau kamu sayang ibumu dan mau mengingatkan teman2mu.


Semoga bisa menggugah hati kita semua ...

Testing Development Using Database Snapshot

Sekitar bulan maret-april 2008 kemaren waktu gw masih kerja di JATIS, gw ada tugas penting untuk project UGETS di UFINANCE. waktu itu ada permintaan untuk melakukan tuning aplikasi pada End Of Day Batch, karena dirasa End Of Day-nya berjalan sangat lambat. Berhubung gw diproject itu sebagai Database Specialist dan juga End Of Day Developer, udah pasti tugas itu kena pada gw... hehehe (tapi ada team dibelakang layar yang bantuin - Thank's to Arief and "Suhu" Welly for your help-.

Waktu udah berjalan, dan tuning query untuk End Of Day Batch sudah dilakukan, tibalah saatnya untuk melakukan SIT (System Integration Testing). Untuk lebih memastikan query yang dituning tersebut sesuai dengan data yang sebenarnya, maka gw putusin untuk menggunakan data yang sebenernya. Waktu itu database UGETS sebesar 90GBan... tapi permasalahannya adalah waktu restorenya... butuh 3 sampe 4 jam. Waaaaaakkks, lama banget, udah gitu kalo salah musti direstore ulang 3 sampe 4 jam.. bisa-bisa seharian ngak ada hasilnya. Masalah yang kedua adalah Spacenya terlalu kecil, jika mo restore, maka DB yang akan diresotre harus ditaro di servernya, kemudian baru direstore. But i only got 160GB.... ngak cukup banget....

Think and read, akhirnya gw dapet ilmu canggih dari MSDN.. hihihi... gw sih ngak tau itu biasa bagi orang lain atau malah bisa dibilang cupu, tapi bagi gw, gw udah bisa "bernapas" lagi saat itu. apakah ilmu canggih itu... yap.. it's a database snapshot. Apa sih sebenernya database snapshot itu ? Database snapshot merupakan fitur baru yang ada pada SQL Server 2005, dimana database yang dicreate yang hanya bisa untuk dibaca. tidak bisa diinsert maupun diupdate. Saat pertama kali database snapshot dibuat, filegroupnya tidak akan ada datanya karena datanya masih disimpen pada Source DB. selama data tidak berubah maka jika kita membaca database snapshot maka SQL Server akan tetap membaca pada Source DBnya. Kemudian jika kita melakukan update data, maka SQL Server akan mengirimkan file ke filegroup Database Snapshot berupa data sebelum diubah. Ini dinamakan dengan Sparse file. Jika kita kemudian melakukan query ke database snapshot yang datanya telah diupdate, maka SQL Server akan membaca dari database snapshot pada sparse file tersebut.

Kemudian gw nyoba untuk mengimplementasikan database snapshot tersebut.

Here's the Script for creating database snapshot:
USE [master]
GO

CREATE DATABASE [UGETS_TEST_SNAPSHOT_2] ON
( NAME = N'SYSTEM_DATA_01',

FILENAME = N'F:\Snapshot\SYSTEM_DATA_011.ss' ),
( NAME = N'SYSTEM_DATA_02',

FILENAME = N'F:\Snapshot\SYSTEM_DATA_021.ss' ),
( NAME = N'SYSTEM_DATA_03',

FILENAME = N'F:\Snapshot\SYSTEM_DATA_031.ss' ),
( NAME = N'SYSTEM_DATA_04',

FILENAME = N'F:\Snapshot\SYSTEM_DATA_041.ss' ),
( NAME = N'R05G01_01',

FILENAME = N'F:\Snapshot\R05G01_011.ss' ),
( NAME = N'R05G01_02',

FILENAME = N'F:\Snapshot\R05G01_021.ss' ),
( NAME = N'R05G01_03',

FILENAME = N'F:\Snapshot\R05G01_031.ss' ),
( NAME = N'R05G01_04',

FILENAME = N'F:\Snapshot\R05G01_041.ss' ),
( NAME = N'R05G01idx_01',

FILENAME = N'F:\Snapshot\R05G01idx_011.ss' ),
( NAME = N'R05G01idx_02',

FILENAME = N'F:\Snapshot\R05G01idx_021.ss' ),
( NAME = N'R05G02_01',

FILENAME = N'F:\Snapshot\R05G02_011.ss' ),
( NAME = N'R05G02_02',

FILENAME = N'F:\Snapshot\R05G02_021.ss' ),
( NAME = N'R05G02_03',

FILENAME = N'F:\Snapshot\R05G02_031.ss' ),
( NAME = N'R05G02_04',

FILENAME = N'F:\Snapshot\R05G02_041.ss' ),
( NAME = N'R05G02idx_01',

FILENAME = N'F:\Snapshot\R05G02idx_011.ss' ),
( NAME = N'R05G02idx_02',

FILENAME = N'F:\Snapshot\R05G02idx_021.ss' ),
( NAME = N'R10G01_01',

FILENAME = N'F:\Snapshot\R10G01_011.ss' ),
( NAME = N'R10G01_02',

FILENAME = N'F:\Snapshot\R10G01_021.ss' ),
( NAME = N'R10G01_03',

FILENAME = N'F:\Snapshot\R10G01_031.ss' ),
( NAME = N'R10G01_04',

FILENAME = N'F:\Snapshot\R10G01_041.ss' ),
( NAME = N'R10G01idx_01',

FILENAME = N'F:\Snapshot\R10G01idx_011.ss' ),
( NAME = N'R10G01idx_02',

FILENAME = N'F:\Snapshot\R10G01idx_021.ss' ),
( NAME = N'R10G01idx_03',

FILENAME = N'F:\Snapshot\R10G01idx_031.ss' ),
( NAME = N'R10G01idx_04',

FILENAME = N'F:\Snapshot\R10G01idx_041.ss' )
AS SNAPSHOT OF [UGETS_TEST]

Berapa banyak filegroup yang harus kita buat ? mudah saja, kita membuat filegroup tersebut sebanyak filegroup pada Source DB. Hanya saja kita tidak perlu untuk membuat filegroup log pada database snapshot. Dan hasilnya, gw hanya perlu melakukan restore 7-10 menit doang ... hehehe... bagaimana cara melakukan restorenya ? Pada database snapshot, kita bisa melakukan restore database dengan menggunakan revert.

Berikut adalah syntaxnya :

RESTORE DATABASE UGETS_TEST FROM
DATABASE_SNAPSHOT = 'UGETS_TEST_SNAPSHOT_2'


Database snapshot mungkin bisa sangat berguna untuk database development, karena kita bisa mengganti-ganti environtment tanpa harus melakukan restore database terlebih dahulu. tetapi untuk production, mungkin harus sedikit berhati2 dalam pemakaian, karena akan mengurangi performance dari database. karena database snapshot akan dibuat pada server yang sama, artinya akan mengurangi I/O pada Server. Apa lagi jika banyak user yang mengaksesnya.

Thursday, October 30, 2008

Every dream has a beginning Motto

Every Dream has a beginning...

Gw dapet kata-kata itu dari sebuah film yang berjudul GOAL. Dimana terdapat seseorang yang bernama santiago munez, yang sangat mahir dalam bermain sepak bola. Karena dari kecil terus dan terus berlatih. Saat bertanding ditempat tinggalnya, kemudian ada seorang agent dari salah satu klub di Inggris yaitu Newcastle yang berminat kepadanya. Dan kemudian diakhir cerita, munez masuk menjadi salah satu bagian dari pemain Newcastle bersama dengan Alan Sherer. Lantas apa yang mendasari suatu kata "Every Dream has a beginning" ? Mungkin untuk menjadi pemain sepak bola saat ini adalah impian semua. Bergaji besar dan tenar layaknya selebritis. Nah untuk menjadi seorang pemain sepak bola seperti sekarang semacam CR7, Kaka, dan lain-lain butuh sebuah perjuangan berat yang awalnya mungkin hanya sebuah mimpi yang ingin digapai.

Menurut gw, kata-kata itu sangat bagus dan COOOOLLLLL...... sesuatu yang kayaknya gw pikir imposibble, atau hanya CUMI (Cuma Mimpi) saat ini, mungkin bisa menjadi kenyataan dikemudian hari dengan adanya ikhtiar tentunya. Contohnya adalah menjadi sebuah programmer. Dulu, waktu kuliah, belajar bahasa pemrograman adalah hal yang sangat sulit bagi gw -mungkin bukan cuma gw aja yang susah bahkan ada yang kuliah IT tapi kerjanya NON IT karena stress menghadapi kerasnya menjadi programmer-, secara gw baru bisa mengoperasikan computer saat kuliah itu. Tetapi sekarang ?, alhamdulillah... meski gw ngak jago-jago amat toh ada juga yang minta belajar sama gw dan pengetauan gw tentang dunia pemrogramman ngak cetek-cetek amat.

So, sekarang mungkin gw masih ada misi lain dalam beberapa taun kedepan. Secara gw lebih suka di database environment, saat ini adalah mungkin gw ingin jadi seorang DBA (Database Administor) diperusahaan gw sekarang. Emang gw belom tau banget soal system UNIX dan Oracle yang dipake di BNI. Tapi seiring berjalannya waktu, gw harap bisa belajar dan terus belajar untuk menjadi DBA yang handal.

Mimpi itu boleh dan kalo boleh jujur, bisa setinggi-tingginya. Tetapi kita harus bertekad dan memiliki keinginan kuat untuk belajar demi mencapai mimpi itu agar menjadi kenyataan. Mudah-mudahan gw bisa menjadi "munez" yang telah berhasil mencapai mimpinya.