Oleh: denysutani | Juni 25, 2009

Data Movement Utilities

db2move

Data movement tool yang berguna untuk memindahkan table yang sangat banyak antar database DB2. Dapat menggunakan command EXPORT, IMPORT, LOAD dan COPY.

db2look
Tool yang dapat melakukan banyak hal
- membuat DDL dari object database
- membuat statement update untuk mengupdate database manager dan database configuration parameter
- membuat command db2set untuk membuat db2 profile registries
- mengekstrak dan membuat laporan statistikal database
- membuat statement update untuk mereplicate statistik pada objek database

Berikut contoh sederhananya
db2look -d sample -u 8sdeny -e -o alltables.sql
– Creating DDL for table(s)
– Output is sent to file: alltables.sql

Biasanya file akan berada di document and C:\Documents and Settings\Administrator> tergantung path di command prompt

db2batch
Merupakan tool untuk membenchmark SQL atau XQuery, mempersiapkan secara dinamis, menjelaskan statement dan mengembalikan laporan. Jika menggunakan option yang lebih lengkap maka dapat mengembalikan kebutuhan waktu eksekusi statement, penggunaan memori seperti bufferpool dan cache.

Contoh sederhananya

Sebelum menjalankan command dibawah, buatlah sebuah file bernama db2batch.sql di C:\Documents and Settings\Administrator berisi sebagai berikut.
– db2batch.sql
– ————
–#SET PERF_DETAIL 3
–#SET ROWS_OUT 5
– This query lists employees, the name of their department
– and the number of activities to which they are assigned for
– employees who are assigned to more than one activity less than
– full-time.
–#COMMENT Query 1
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1 group by lastname, firstnme, deptname having count(*) > 2;
–#SET PERF_DETAIL 1
–#SET ROWS_OUT 5
–#COMMENT Query 2
select lastname, firstnme,
deptname, count(*) as num_act
from employee, department, emp_act
where employee.workdept = department.deptno and
employee.empno = emp_act.empno and
emp_act.emptime < 1
group by lastname, firstnme, deptname
having count(*) <= 2;

Kemudian jalankan command berikut db2batch -d sample -f db2batch.sql
Perintah di atas akan menghasilkan laporan yang sangat panjang.
Berikut sedikit potongan dari laporan yang dihasilkan

LASTNAME FIRSTNME DEPTNAME NUM_ACT
————— ———— ———————————— ———–
GEYER JOHN SUPPORT SERVICES 2
GOUNOT JASON SOFTWARE SUPPORT 2
HAAS CHRISTINE SPIFFY COMPUTER SERVICE DIV. 2
JONES WILLIAM MANUFACTURING SYSTEMS 2
KWAN SALLY INFORMATION CENTER 2

* 8 row(s) fetched, 5 row(s) output.

* Elapsed Time is: 0.017340 seconds

* Summary Table:

Type Number Repetitions Total Time (s) Min Time (s) Max Time (s)
rithmetic Mean Geometric Mean Row(s) Fetched Row(s) Output
——— ———– ———– ————– ————– ————–
————– ————– ————– ————-
Statement 1 1 0.085676 0.085676 0.085676
0.085676 0.085676 5 5
Statement 2 1 0.017340 0.017340 0.017340
0.017340 0.017340 8 5

* Total Entries: 2
* Total Time: 0.103015 seconds
* Minimum Time: 0.017340 seconds
* Maximum Time: 0.085676 seconds
* Arithmetic Mean Time: 0.051508 seconds
* Geometric Mean Time: 0.038543 seconds
———————————————
* Timestamp: Tue Jun 09 2009 11:34:31 SE Asia Standard Time

Oleh: denysutani | Juni 24, 2009

DB2 Data Movement utilities (LOAD)

Ada 3 utiliti data movement di DB2
- EXPORT
- IMPORT
- LOAD

Untuk artikel ini kita khusus membahas mengenai load.

Beberapa file format yang dapat diimport
- Non-delimited or fixed-length ASCII (ASC)
- Delimited ASCII (DEL)
- PC version of the Integrated Exchange Format (PC/IXF)
- Cursor

Untuk dapat melakukan operasi ini dibutuhkan hak akses seperti insert,delete, atau load, tergantung operasi yang dilakukan. Sama seperti EXPORT dan IMPORT, masalah LBAC harus diperhatikan. Ketika melakukan load, kita harus memiliki LBAC credential terhadap object yang kita modifikasi.

Berikut syntax untuk melakukan import
LOAD FROM input_source OF input_type
MESSAGES message_file
[ INSERT | REPLACE | TERMINATE | RESTART ]
INTO target_tablename

INSERT : menginsert data ke table. Table harus sudah ada
REPLACE : data yang ada di table akan dihapus terlebih dahulu, baru kemudian data diinsert
TERMINATE : menghentikan operasi load dan melakukan rollback ke point sebelum load dimulai
RESTART : untuk merestart operasi load yang gagal.

Berikut contoh sederhana melakukan load. Kita akan mengimport file hasil export yang telah kita buat di artikel sebelumnya.

db2 load from myfile.del of del messages msg.out REPLACE into deny_import

Jika import sukses maka akan menghasilkan output seperti berikut
Number of rows read         = 35
Number of rows skipped      = 0
Number of rows inserted     = 35
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 35

Namun jika kita menggunakan option TERMINATE / RESTART akan muncul error karena tidak ada operasi load sebelumnya yang gagal / tertunda.

Oleh: denysutani | Juni 22, 2009

DB2 Data Movement utilities (IMPORT) part 2

Kita sudah bisa melakukan operasi insert. Namun bagaimana jika data yang hendak diinsert sangat banyak. Secara default IMPORT commit hanya terjadi sekali yaitu pada saat operasi berakhir. Namun jika data yang diinsert sangat besar, maka hal ini akan menghasilkan transaction log yang besar pula. Oleh karena itu DB2 menyediakan option untuk melakukan commit setelah terjadi beberapa kali insert. Atau jika anda tidak ingin repot, maka dapat memilih option AUTOMATIC, maka DB2 akan melakukan commit pada saat diperlukan.

IMPORT FROM myfile.ixf OF IXF
COMMITCOUNT 500
MESSAGES msg.out
INSERT INTO newtable

Berikut contoh sederhana, jika kita ingin melakukan commit setelah 10 kali insert
db2 import from myfile.del of del commitcount 10 messages msg.out INSERT INTO deny_import
Berikut contoh sederhana, jika kita ingin melakukan commit secara otomatis
db2 import from myfile.del of del commitcount automatic messages msg.out REPLACE INTO deny_import

Misalkan kita hendak mengimport 100000 record dan ternyata operasi insert failed pada saat operasi berlangsung (terakhir commit di record ke 30000). Maka kita dapat menskip record yang sudah di commit dan melanjutkan dengan menginsert record selanjutnya.

Berikut contoh sederhana jika ingin memulai dari record ke 30000 dan menginsert 70000 record selanjutnya
db2 import from myfile.del of del commitcount 500 restartcount 30000 rowcount 70000 messages msg.out replace into deny_import

Number of rows read = 100000
Number of rows skipped = 30000
Number of rows inserted = 70000
Number of rows updated = 0
Number of rows rejected = 0
Number of rows committed = 100000

Secara default ketika melakukan operasi IMPORT, maka akan diberikan exclusive lock pada table yang bersangkutan. Hal ini merupakan option ALLOW NO ACCESS. Namun jika ingin agar user tetap dapat mengakses maka dapat digunakan ALLOW WRITE ACCESS. Namun option ini tidak berlaku untuk REPLACE, CREATE atau REPLACE_CREATE

Berikut contoh sederhananya
db2 import from myfile.del of del allow write access messages msg.out insert into deny_import

Oleh: denysutani | Juni 21, 2009

PDKK Fellowship @Puri Asih

Hari ini merupakan hari yang sudah gw tunggu2 sejak lama. Sejak sebelum gw masuk kerja ke tempat baru gw yg penuh kerjaan dan tantangan dan tentunya membuat stress ^^.

Diberitakan untuk kumpul jem 6 pagi di gereja, namun berkat pengalaman yang ud tinggi (wkwkw), gw tanya ke panitia jam yang tepatnya, ternyata jem 7. Gw pun dateng di tempat yg ditentukan 7 kurang 10 menit, dan puji Tuhan tanpa menunggu lama langsung naik ke bus. Ciakakak

Butuh waktu sangat lama untuk mencapai tujuan. Letaknya di Puri Asih, tidak jauh dari pintu tol keluar Ciawi. Namun karena macet, untuk sampai kesana dibutuhkan 3 jam.

Acara dimulai dengan makan sarapan (pdhl jem sudah menunjukkan pk 11 siang), kemudian dilanjutkan dengan misa. Setelah misa ada makanan ringan berupa bubur kacang ijo. (tp jem menunjukkan pk 1 siang). Bener2 salah jem makan. Hehe. Acara yang dinantikan pun dimulai. Banyak acara2 yg sangat lucu, ditambah memang pesertanya rada2 sarap juga.

Gw seneng banget bisa ketawa seharian penuh. Gw seneng bisa mengekpresikan diri gw. Ikut narsis di photo maksudnya :D . Gw juga seneng akhirnya bs melepaskan stress di kantor selama 6 minggu ini. Bahagia memiliki teman2 seperti kalian guys. Semoga hubungan kita semua semakin akrab ^^

Oleh: denysutani | Juni 20, 2009

DB2 Data Movement utilities (IMPORT)

Ada 3 utiliti data movement di DB2
- EXPORT
- IMPORT
- LOAD

Untuk artikel ini kita khusus membahas mengenai import.

Beberapa file format yang dapat diimport
- Non-delimited or fixed-length ASCII (ASC)
- Delimited ASCII (DEL)
- PC version of the Integrated Exchange Format (PC/IXF)
- Worksheet Format (WSF)

Untuk dapat melakukan operasi ini dibutuhkan hak akses seperti select, insert, control atau createtab tergantung operasi yang dilakukan. Sama seperti EXPORT, masalah LBAC harus diperhatikan. Ketika melakukan import, kita harus memiliki LBAC credential terhadap object yang kita modifikasi.

Berikut syntax untuk melakukan import
IMPORT FROM file_name OF file_type
MESSAGES message_file
[ INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE |
CREATE ]
INTO target_table_name

INSERT : menginsert data ke table. Table harus sudah ada
INSERT_UPDATE : sama dengan INSERT, namun jika terdapat data dengan primary key yang sama, maka akan diupdate
REPLACE : data yang ada di table akan dihapus terlebih dahulu, baru kemudian data diinsert
REPLACE_CREATE : sama dengan REPLACE, namun jika table tidak ada maka table dan index akan dibuat terlebih dahulu sebelum data diinsert. Input file harus dalam format PC/IXF
CREATE : table dan index akan dibuat terlebih dahulu sebelum data diinsert. Input file harus dalam format PC/IXF

Berikut contoh sederhana melakukan import. Kita akan mengimport file hasil export yang telah kita buat di artikel sebelumnya.

db2 import from myfile.del of del messages msg.out INSERT INTO deny_import

Setelah menjalankan perintah diatas maka akan terjadi error karena table deny_import belum ada, maka table tersebut harus dibuat terlebih dahulu
db2 create table deny_import (nama char(20))

Jika import sukses maka akan menghasilkan output seperti berikut
Number of rows read         = 35
Number of rows skipped      = 0
Number of rows inserted     = 35
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 35

Oleh: denysutani | Juni 4, 2009

DB2 Data Movement utilities (EXPORT)

Ada 3 utiliti data movement di DB2
- EXPORT
- IMPORT
- LOAD

Untuk artikel ini kita khusus membahas mengenai export.

Beberapa file format yang didukung
- Non-delimited or fixed-length ASCII (ASC)
- Delimited ASCII (DEL)
- PC version of the Integrated Exchange Format (PC/IXF)
- Worksheet Format (WSF)
- Cursor

Untuk melakukan operasi export maka dibutuhkan hak akses minimal select terhadap tabel atau view yang hendak di export. Dalam melakukan export, kita perlu memberikan perhatian khusus terhadap LBAC (label based access control). LBAC ini dapat membatasi akses kita terhadap sebuah row atau column dari sebuah table. Jika LBAC melakukan blok terhadap row, maka operasi export dapat berjalan dengan lancar, namun row yang diblok tersebut tidak akan ikut, namun jika blok terhadap column maka operasi export akan gagal.

Berikut syntax dasar EXPORT

EXPORT TO file_name OF file_type
MODIFIED BY file_type_modifiers
MESSAGES message_file
select_statement

Contoh sederhana untuk export nama dari table staff dan disimpan ke myfile.del
db2 export to myfile.del of del message msg.out select name from staff

Jika merasa kesulitan dengan menggunakan command prompt, DB2 telah menyediakan DB2 Control Center. Anda tinggal mencari table yang ingin diexport,klik kanan kemudian pilih export. Disana berbagai macam option telah tersedia seperti export LOB dan XML dll.

Semoga bermanfaat.

Oleh: denysutani | Juni 3, 2009

DB2 Index part 1

Index merupakan komponen penting dari database. Meskipun model relasional tidak membutuhkan index untuk menjalankan query atau menghitung result, index akan mempercepat jika digunakan pada table table yang sering digunakan.

Index merupakan objek fisikal yang diasosiasikan dengan tabel individual. Tabel permanen atau temporary dapat memiliki beberapa index, namun view tidak dapat memiliki index. Index ini diatur secara otomatis oleh DB2 ketika data di insert, update dan delete.

Alasan menggunakan index adalah
- untuk menjamin keunikan data
- meningkatkan query performance

Bagaimana cara membuat index harus direncanakan dengan baik. Index sendiri akan menghabiskan storage di database. Kemudian index tidak terlalu berguna jika digunakan pada tabel yang hanya berisi data yang sedikit. Index juga dapat memperlambat kinerja karena ketika kita melakukan modifikasi database seperti insert, update, dan delete, index akan diupdate.

Berikut cara meletakkan lokasi index ketika membuat table
CREATE TABLE TEST (
column 1 definition, column 2 definition, …
) IN <tablespace name> INDEX IN <index space name>

Jika table telah dibuat, index tidak bisa dipindahkan ke tablespace lainnya.

Setelah menentukan lokasi index, maka kita dapat membuat index yang kita inginkan.
Berikut syntaxnya
CREATE <UNIQUE> INDEX <index name> ON <table name>
(
column 1 <ASC | DESC> ,
column 2 <ASC | DESC> …
)

Oleh: denysutani | Juni 2, 2009

DB2 Constraint

Constraint merupakan sebuah aturan untuk mengecek validitas data. Ada beberapa macam contraint yang telah sering kita gunakan, namun mungkin tidak kita sadari kalau itu merupakan sebuah contraint.
1. data type contraint, misalnya kita memasukkan “deny” ke dalam kolom yang bertipe INT, maka akan di reject
2. primary key contraint
3. unique contraint
4. foreign key contraint
5. check contraint, ini merupakan contraint yang di definisikan sendiri oleh user.

Berikut contoh command create table dengan 2 constraint

db2 create table deny (empno int not nul
l primary key, job varchar(10) constraint check_job check (job in (’sales’,'mana
ger’,'bos’)), age int constraint cek_umur check (age in(17,18,19,20)))

Kemudian jika kita melakukan command seperti
db2 insert into deny values (’001′,’sales’,18) -> error karena data type contraint
db2 insert into deny values (1,’sales’,18)
db2 insert into deny values (2,’dokter’,18) -> error karena check constraint check_job
db2 insert into deny values (2,’manager’,18)
db2 insert into deny values (2,’sales’,18) -> error karena primary key constraint

Menggunakan constraint dapat memastikan validitas data, namun tentunya akan menurunkan performa jika data yang diinsert / update sangat banyak. Untuk mengatasi ini, DB2 mempunyai alternatif yaitu informational constraint. Dengan informational constraint ini DB2 akan mengecek format data namun tidak dilakukan ketika insert / update.

Berikut contoh command create table dengan information constraint

db2 create table empdata(empno int not null, gender char (1) not null constraint check_gender check (gender in(’M',’F'))
not enforced enable query optimization)

Namun informational constraint memiliki kekurangan. Karena constraint ini hanya mengecek format data, maka kadang- kadang akan terjadi data yang aneh. Misalnya kita melakukan command insert sebagai berikut
db2 insert into empdata values (1,’M')
db2 insert into empdata values (2,’M')
db2 insert into empdata values (3,’F')
db2 insert into empdata values (4,’A')
db2 insert into empdata values (5,’F')

Command diatas akan berjalan tanpa error, namun tentunya command ke 4 merupakan inputan yang salah. Informational constraint cocok digunakan jika aplikasi end user yang digunakan dapat menjamin data yang di insert/update benar.

Semoga bermanfaat.

Sumber
DB2 9 DBA exam 731 preparation

Oleh: denysutani | Mei 23, 2009

DB2 Recovery part 1

Walaupun disebut database recovery, namun di DB2 kita menggunakan utiliti bernama RESTORE. Untuk dapat melakukan restore diperlukan autorisasi SYSADM, SYSCTRL, SYSMAINT.

Berikut ini adalah syntax untuk melakukan restore
RESTORE DATABASE source-database-alias { restore-options | CONTINUE
| ABORT }
restore-options:
[USER username [USING password]]
[REBUILD WITH [ALL TABLESPACES IN DATABASE | ALL TABLESPACES IN
IMAGE]
[EXCEPT rebuild-tablespace-clause] [rebuild-tablespace-clause]
[{TABLESPACE [ONLINE] | TABLESPACE (tblspace-name [ {,tblspace-name}
.. ]) [ONLINE] |
HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC | ABORT]]
[{USE {TSM | XBSA} [OPEN num-sess SESSIONS] |
FROM dir/dev [ {,dir/dev} ... ] | LOAD shared-lib
[OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO
target-directory]
[INTO target-database-alias] [NEWLOGPATH directory] [LOGS FROM
directory]
[LOGTARGET directory]
[WITH num-buff BUFFERS] [BUFFER buffer-size]
[DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n]
[WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Rebuild-tablespace-clause:
[TABLESPACE (tblspace-name [ {,tblspace-name} ... ])

Sama seperti ketika melakukan backup, anda tidak perlu menggunakan semua option diatas. Jika ragu lebih baik menggunakan setting default dari DB2. Namun berbeda dengan backup, di restore harus dilakukan dalam mode offline

Restore dapat dilakukan secara incremental, untuk melakukan ini diperlukan option INCREMENTAL pada saat melakukan restore. Restore harus dilakukan secara berurutan. Hal ini tentunya mempunyai tingkat kesalahan yang lumayan dan cukup sulit. Oleh karena itu dapat menggunakan option INCREMENTAL AUTOMATIC, selanjutnya utiliti restore akan mengurus selanjutnya.

Berikut commandnya
restore db mydb incremental automatic taken at (Fri)

Atau jika anda ingin merestore menjadi database lain dapat menggunakan command berikut
restore database sample from “c:” taken at 20090518100346 to “c:” into newdb

Jika tidak ingin menghapalkan command- command diatas, anda dapat melakukan restore database melalui control center.

Sumber
-DB2 9 DBA exam 731 preparation

Oleh: denysutani | Mei 22, 2009

DB2 Backup part 2

Artikel ini merupakan lanjutan dari artikel DB2 Backup part 1.

Ada 2 macam incremental backup
- incremental
DB2 membackup semua data yang telah berubah sejak full database backup terakhir kalinya.
- delta
DB2 hanya membackup data yang berubah sejak full, incremental atau delta backup

Kelebihan dan kekurangan masing- masing teknik
Incremental
+ proses restore lebih cepat karena jika terjadi crash, maka cukup merestore dari full database backup ditambah backup incremental terakhir
- proses backupnya lebih lama

Delta
+ proses backup lebih cepat karena hanya membackup perubahan yang terjadi
- proses restore lebih lama karena jika terjadi crash, maka harus merestore dari full database backup ditambah semua backup perubahan sebelum terjadi crash.

Aturan penamaan untuk file backup

alias instance year day sequence
| | | | |
SAMPLE.0.DB2.NODE0000.CATN0000.20090518100346.001
| | | | |
tipe node catalog node month hour minute second

Untuk tipe ada beberapa jenis
0 = full database
3 = tablespace backup
4 = copy dari LOAD
Untuk node akan selalu berisi NODE0000 jika databasenya single partition
Untuk catalog node akan selalu berisi CATN0000 jika databasenya single partition

Sumber
DB2 9 DBA exam 731 preparation

Tulisan Sebelumnya »

Kategori