Tampilkan postingan dengan label database. Tampilkan semua postingan
Tampilkan postingan dengan label database. Tampilkan semua postingan

2011-05-30

Menggunakan Mdbtools di debian / ubuntu

 

Mdbtools, aplikasi powerfull buat view dan export database Access di dalam Linux, kita bisa query, export, view tables, etc, sayang belum bisa modify databasenya...

 

 

Cara Install (di Debian / Ubuntu)

 

apt-get install mdbtools

 

atau kalau ingin install dari source / package lain bisa berkunjung ke

http://mdbtools.sourceforge.net/

 

setelah berhasil install akan ada file file berikut ini

 

mdb-array mdb-header mdb-parsecsv mdb-schema mdb-tables

mdb-export mdb-hexdump mdb-prop mdb-sql mdb-ver

 

berarti instalasi sukses...

 

Sekarang caranya menggunakan

 

Ambil salah satu contoh file MDB ( contoh database Espt )

kita taruh di /home/ayumi/Projects/espt Data.mdb

 

Untuk Menampilkan semua table

ayumi@kazumi ~/Projects/espt $ mdb-tables -1 Data.mdb

REF_SSP

REF_FKTR_PK

REF_FKTR_PM

REF_KPP

REF_LAMP

REF_TRANS

SETTING_TARIF

 

 

Untuk Menampilkan semua DDL ( schema database )

 

ayumi@kazumi ~/Projects/espt $ mdb-schema Data.mdb

-------------------------------------------------------------

-- MDB Tools - A library for reading MS Access database files

-- Copyright (C) 2000-2004 Brian Bruns

-- Files in libmdb are licensed under LGPL and the utilities under

-- the GPL, see COPYING.LIB and COPYING files respectively.

-- Check out http://mdbtools.sourceforge.net

-------------------------------------------------------------

DROP TABLE REF_SSP;

CREATE TABLE REF_SSP

(

KDMAP Text (510),

KD_JNS_BYR Text (510),

NMJNSBYR Text (510),

NMMAP Text (510)

);

-- CREATE ANY INDEXES ...

 

bla bla bla

 

 

 

 

Untuk Query data table tertentu

 

ayumi@kazumi ~/Projects/espt $ echo "select KD_KPP,NM_KPP from KPP "|mdb-sql Data.mdb

+----------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+

|KD_KPP |NM_KPP |

+----------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+

|058 |KPP PENANAMAN MODAL ASING LIMA |

 

Export table ke file CSV

 

 

ayumi@kazumi ~/Projects/espt $ mdb-export -d ";" -H -q "'" Data.mdb KPP > export.csv

 

Script di atas export data dari table KPP ke file export.csv dengan row delimiter “;” dan quote “ ' “ tanpa header row

 

 

Generate sql script untuk create table

ayumi@kazumi ~/Projects/espt $ mdb-schema Data.mdb > sql_script.sql

 

Generate sql script untuk create table dengan backend PostgreSQL

ayumi@kazumi ~/Projects/espt $ mdb-schema Data.mdb postgres > sql_script.sql

 

Generate sql script untuk create table dengan backend Oracle

ayumi@kazumi ~/Projects/espt $ mdb-schema Data.mdb postgres > sql_script.sql

 

 

 

2010-07-02

IredMail + Openfire

Lanjutan posting sebelumnya ... sekarang gua mau nambahkan OpenFire di Server IredMail gua ..  
Untuk debian Lenny ada sedikit tricky ... setelah install openfire.deb  .. install patchnya, bisa didapet disini  http://steffenzieger.de/index.php/2009/03/25/install-openfire-on-debian-lenny/

Di IredMail .. semua port kecuali email di blok... untuk aktifin XMPP tinggal edit di 
    sudo nano /etc/default/iptables

Unremark yang xmpp .. dan tambahin port 9090 (Untuk openfire Admin)
Setelah selesai , install plugin export/importnya .. kemudian tinggal nambahin user dan buddy list di openfire

caranya :
 
gua siapin data usernya nya dulu (ambil dari CSV untuk import ke IredMail). gua masukkin ke postgreSQL database  untuk manipulasi datanya. 
 
gua create database  dengan nama User_export_temp

create database user_export_temp;
create table export_user();
alter table  export_user add column domain_name varchar(30);
alter table  export_user add column usercode  varchar(30);
alter table  export_user add column userpassword varchar(30);
alter table  export_user add column username  varchar(30);
alter table  export_user add column groupuser varchar(30); 
/* Insert data dari CSV yang udah gua modif sesuai table diatas */

copy user_export_temp from '/home/yoshizuki/myUser.csv' csv;  

kemudian gua create python script untuk retrieve data tersebut kemudian diproses sesuai dengan template import user dari Openfire. Untuk buddy list gua asumsikan semua user yang ada saling terhubung dan dipisahin berdasarkan group bagian aja.

#!/usr/bin/python

import psycopg2, sys,os

outp = file("user.xml","w")

conn = psycopg2.connect("\
dbname='testing'\
user='postgres'\
host='localhost'\
password='postgres' ");
d = conn.cursor()
d.execute (" select a.usercode , \
a.userpasswd,\
a.username ,\
a.usercode || '@' || a.domain_name \
    from tmp_data as a \
    order by a.usercode ")

c = conn.cursor()

records = d.fetchall()
outp.write ("<?xml version='1.0' encoding='UTF-8'?>\n")
outp.write ("<Openfire>\n")

for record in records:
        outp.write("\n<User>")
        outp.write("<Username>" +  record[0] +"</Username><Password/>\n")
        outp.write("<Email>" +  record[3] + "</Email>\n")
        outp.write("<Name>" +  record[2] + "</Name>\n")
        outp.write("<CreationDate>1277954250096</CreationDate>\n")
        outp.write("<ModifiedDate>1277954250096</ModifiedDate>\n")
        outp.write("<Roster>\n")
        
        c.execute("select a.usercode , \
   a.userpasswd, \
            a.username , \
            a.usercode || '@' || a.domainname , \
            b.usercode || '@' || b.domainname , \
            b.username , \
            b.groupname  \
            from export_user as a \
            inner join export_user as b on a.usercode <> b.usercode \
            where a.usercode = '%s' \
            order by a.usercode , b.usercode      " %record[0])
        records2 = c.fetchall()
        for record2 in records2:
            outp.write ('<Item jid="' + record2[4] + '"  askstatus="-1" recvstatus="-1" substatus="3" name="'+ record2[5] + '" >\n')
            outp.write ('<Group>' + record2[6] + '</Group></Item>\n')   
        outp.write("</Roster>\n")
        outp.write("</User>")
outp.write ("</Openfire>\n")        
outp.close()

script ini akan menghasilkan file user.xml, nah file ini yang akan gua upload melalui plugin import user di Openfire..

restart openfire 
sudo /etc/init.d/openfire restart

selesai... semua user  sudah terhubung lewat email dan XMPP ... 

 


2009-10-10

cron, crontab, backup

ada topik basi yg pasti dah pada jago.. cron :)

Apa itu cron?
cron adalah scheduler di unix-like dan merupakan singkatan dari chronograph

cron digunakan untuk mengatur skedul sehingga user dapat menjalankan perintah atau script pada waktu tertentu, biasanya digunakan untuk maintenance atau administrasi.

Apa yang bisa dilakukan cron?

Contoh2 yang bisa dilakukan dengan cron :
  • backup
    bisa backup database, backup data ato backup system
  • kirim email
    seumpama pengen kirim imil ke user jam 10 malem, tinggal diset gaksah balik kantor jam 10 malem :)
  • reboot server
  • dsb
di tempat gw, cron hanya digunakan untuk backup database dan tentu saja download scheduler kekekekek karena ga etis donlod file2 gede pas jam sibuk :P

cron merupakan daemon yang hanya perlu dijalankan sekali dan akan berjalan di background process. Pada kebanyakan distro, cron sudah terinstall secara ostosmastis dan di-load di startup, untuk melihatnya ketik

detanto@detantoCQ45:~$ ps aux | grep cron
root 3625 0.0 0.0 3480 1036 ? Ss 08:43 0:00 /usr/sbin/cron
detanto 11502 0.0 0.0 3340 816 pts/1 S+ 10:06 0:00 grep cron

Menggunakan cron

Ada beberapa cara untuk menggunakan cron, kalo diliat di /etc, akan ada beberapa file yang berbau cron

detanto@detantoCQ45:/etc$ ls -l | grep cron
drwxr-xr-x 2 root root 4096 2009-10-10 09:19 cron.daily
drwxr-xr-x 2 root root 4096 2009-08-30 22:48 cron.hourly
drwxr-xr-x 2 root root 4096 2009-10-05 10:45 cron.monthly
-rw-r--r-- 1 root root 724 2008-11-12 22:47 crontab
drwxr-xr-x 2 root root 4096 2009-08-30 22:48 cron.weekly
dari hasil ls, ada bberapa file yang berbau cron, apabila kita meletakkan script di dalam direktori cron.daily atau hourly, skedul akan dijalankan sesuai dengan nama direktorinya ..
kalo kita mau bikin skedul sendiri yang ga ngikut direktori2 itu, kita bisa edit lgsg ke file crontab. crontab adalah cron table; adalah sebuah file yang berisi skedul yang berisi job yang musti dilakukan pada waktu tertentu.

Isi dari crontab :

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Syntax crontab :

.---------------- menit
| .------------- jam
| | .---------- hdb
| | | .------- bulan (1 - 12) ato jan,feb,mar,apr ...
| | | | .---- hdm (0 - 6)
| | | | |
* * * * * user cmd

menit perintah akan dijalankan pada menit keberapa, nilai :'0' and '59'
jam perintah akan dijalankan pada jam keberapa, nilai : 0-23, 0 adalah tengah malam
hdb (hari dalam sebulan) perintah akan dijalankan pada hari keberapa dalam sebulan, misal kita mo jalankan perintah pada hari ke 13 setiap bulam , hdb akan mempunyai nilai 13
bulan perintah akan dijalankan pada bulan keberapa dalam setahun, nilai : 1-12 atau nama bulan dalam bhs inggris
hdm perintah akan dijalankan pada hari keberapa dalam seminggu, nilai : 0-6 atau nama hari dalam bhs inggris ((Minggu=0 or 7) ato sun,mon,tue,wed,thu,fri,sat )
user user yang akan menjalankan
cmd perintah yang mau dijalankan
contoh script yang gw masukkin di /etc/crontab

00 23 * * * root mysqldump --user root --password=apaya hrd > /home/detanto/backup_mysql/hrd_`date '+\%Y\%m\%d_\%H\%M\%S'`.sql
Script di atas akan melakukan script backup mysql spesifik ke database hrd tiap jam 11 malem dengan format file :
hrd_`date '+\%Y\%m\%d_\%H\%M\%S'`.sql
di direktori /home/detanto/backup_mysql/

ini gw share script yang menarik, dia nge-backup semua database yang ada di mysql, sebetulnya bisa menggunakan option --all-database, tapi afaik hasilnya jadi satu dalam satu file. Script yang gw buat ini akan membackup satu2 ke dalam file berformat gz .. jd irit :P

#!/bin/bash

dbUSRNM="root" # user database
dbPASSW="qqwwee" # password database
dbHOSTS="localhost" # host database

# path perintah linux
cmMYSQL="$(which mysql)"
cmDUMPS="$(which mysqldump)"
cmGZIP="$(which gzip)"

vrFILE=""
#lokasi backup
vrDESTI="/home/detanto/backup_mysql"
#hostname dari server yg akan dibackup
vrHOSTS="$(hostname)"
#tanggal
vrDATES="$(date +"%Y-%m-%d_%H%M%S")"
#array database yang tidak dibackup
arNOBCK=("mysql" "test" "sample" "information_schema")
#array database yang ada di server
arDBASE="$($cmMYSQL -u $dbUSRNM -h $dbHOSTS -p$dbPASSW -Bse 'show databases')"
#looping semua database yang sudah diisi arraynya di arDBASE
for db in $arDBASE
do
lewat=-1
if [ "$arNOBCK" != "" ];
then
for i in ${arNOBCK[@]}
do
[ "$db" == "$i" ] && lewat=1 || :
done
fi

if [ "$lewat" == "-1" ] ; then
#nama file
vrFILE="$vrDESTI/$db.$vrHOSTS.$vrDATES.gz"
#menjalankan perintah mysqldump dan lgsg di zip ke format gz
$cmDUMPS -u $dbUSRNM -h $dbHOSTS -p$dbPASSW $db | $cmGZIP -9 > $vrFILE
fi
done
simpan script ini, tambahkan permission untuk diexecute trus dipasang deh ke /etc/crontab


sumber2:
http://en.wikipedia.org/wiki/Cron
http://www.tech-recipes.com/category/computer-programming/unix-shell-scripting/bourne-shell-scripting/




2009-02-05

Date in Java

Setelah buka buka program Openfire yang berbasis Java, gua nemuin script yang aneh. Dia selalu menyimpan format tanggal dalam bentuk bigint di database (PostgreSQL).

setelah ubek ubek di website Openfire-nya, dia tulis kl tanggal menggunakan fungsi

long currentDate = new Date().getTime();

jadinya 1233804487

Nyari info sana sini ternyata format yang dipakai adalah format Unix Timestamp, dengan starting date 1900-01-01 yang equal dengan nilai int 86400. http://en.wikipedia.org/wiki/Epoch_(reference_date) .


Terus ubek ubek diinternet gimana balikin fungsi datenya di PostgreSQL.
dapet di http://www.epochconverter.com/

Ini buat convert EPOCH ke Standar timestamp

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + epoch * INTERVAL '1 second';

Ini buat convert Standar timestamp ke EPOCH

SELECT extract(epoch FROM date('2000-01-01 12:34'));

or
SELECT extract(epoch FROM now());

Di Java

EPOCH 2 Standar Timestamp

String date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));

2008-06-02

Install Oracle XE di ubuntu

hmmm .. setelah banyak di admin dan tetek bengek lainnya, mari kita mulai berkutak-kutik di programming. setelah bunny nulis tentang java, netbeans dan teman2nya, aku coba bahas ttg orekel, database yang mgkin dah ga aku pegang selama hampir 5 tahun :D.

1. Download orekel XE (gratisan) di www.oracle.com, pilih yang paket untuk ubuntu atau debian, dengan extension deb. Kira2 gedenya 200MB-an

2. Setelah selesei, ketik :
sudo dpkg -i oracle-xe_10.2.0.1-1.0_i386.deb
[sudo] password for detanto:
Selecting previously deselected package oracle-xe.
(Reading database ... 132138 files and directories currently installed.)
Unpacking oracle-xe (from oracle-xe_10.2.0.1-1.0_i386.deb) ...
This system does not meet the minimum requirements for swap space. Based on
the amount of physical memory available on the system, Oracle Database 10g
Express Edition requires 1024 MB of swap space. This system has 949 MB
of swap space. Configure more swap space on the system and retry the installation.

Dari error diatas didapat bahwa ternyata untuk instalasi orekel, kita membutuhkan minimal 1024MB swap memory. Emang di komputerku aku cuman kasi ga sampe 1G meski memoriku 2G, ini gara2 aku baca di internet ttg rumus yang baik untuk swap memory :D di sini. Pas install orekel ini jadi bingung sendiri, gmana caranya increase swap. Ada banyak resource di internet untuk ini tinggal tanya paman gugel. Ada yang jawabannya harus liwat LiveCD untuk membesarkan swap dsb dsb. Wah kalo musti pake LiveCD sih asik2 aja, cuman CD-ku ada di kantor, dipinjem sama si bunny, brarti opsi ini dah gagal krn aku ga sabar utk nyobain orekel. JAdi aku pake opsi yang lain yaitu melebarkan swap dengan membuat file extra-swap.

Pertama kita cek swap kita dengan printah

detanto@detantonux:~/Documents/downloads$ swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 971892 0 -1

Kmudian kita buat file-nya dengan printah :

sudo dd if=/dev/zero of=/extra-swap bs=1M count=512

Perintah diatas memberitahu linux untuk membuat file sebesar 512MB, kmudian tinggal kita bilangin untuk membuat direktori itu menjadi swap

detanto@detantonux:~/Documents/downloads$ sudo mkswap /extra-swap
Setting up swapspace version 1, size = 536866 kB
no label, UUID=0207958d-a828-46e3-a207-3a535d2fcde0

Trus jalanin lagi

sudo dpkg -i oracle-xe_10.2.0.1-1.0_i386.deb
(Reading database ...
dpkg: serious warning: files list file for package `oracle-xe' missing, assuming package has no files currently installed.
132138 files and directories currently installed.)
Preparing to replace oracle-xe 10.2.0.1-1.0 (using oracle-xe_10.2.0.1-1.0_i386.deb) ...
Unpacking replacement oracle-xe ...
dpkg: dependency problems prevent configuration of oracle-xe:
oracle-xe depends on libaio (>= 0.3.96) | libaio1 (>= 0.3.96); however:
Package libaio is not installed.
Package libaio1 is not installed.
dpkg: error processing oracle-xe (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
oracle-xe

weh error lagi, skarang paketnya ada yang blun keinstall, ya enaknya ubuntu tinggal apt-get install libaio1, selesei dah

tinggal ketik lagi

sudo dpkg -i oracle-xe_10.2.0.1-1.0_i386.deb
(Reading database ... 134527 files and directories currently installed.)
Preparing to replace oracle-xe 10.2.0.1-1.0 (using oracle-xe_10.2.0.1-1.0_i386.deb) ...
Unpacking replacement oracle-xe ...
Setting up oracle-xe (10.2.0.1-1.0) ...
Executing Post-install steps...
-e You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

Hasilnya ngga ada error, cuman musti ngejalanin command yang diatas

sudo /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:2702 --> default port aku rubah karena port 8080 dipake sama tomcat

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts. Note that the same
password will be used for SYS and SYSTEM. Oracle recommends the use of
different passwords for each database account. This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:y

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:2702/apex"

Udah deh selese instalasinya, gampang yak? hasilnya bisa kita lihat






Ingat, user default dari orekel setelah instalasi awal adalah SYS dan SYSTEM, jadi login dengan user itu dan password yang sudah diset didepan, setelah login kita bs ngutak-atik databasenya.



Gile, instalasinya gampang banget. seinget aku dulu itu install orekel itu audzubillah bin zalik susahnya; setting TNS lah, SID, dsb2, sekarang tinggal pake wizard, dulu meski dah pake wizard, aku msh puyeng haheuaheuhae.. hidup kemajuan!!

2008-05-23

PostgreSQL : Unique database type

Geometric Types
point
line
lseg
box
path
polygon
Circle


Network Address Type

inet : cth ( { 192.168.1.1}
cidr : cth ( { 192.168.1.0/32 })
macaddr

Format penulisannnya bisa dilihat di manual postgresql (pgadmin3)

PostgreSQL : Store Procedure Lanjutan

Di postgreSQL jika kita mau membuat store procedure yang merefer ke
field field tertentu bisa dideklarasikan tipe data field tersebut.. jadi
sewaktu2x field tersebut berubah datatypenya .. storeprocedurenya tetap ikut

Contoh :

create table trade.tbl_Sample (
comp_name varchar(20) ,
comp_inet inet
);

create or replace function trade.tbl_Sample_getIt( i_comp_name
trade.tbl_Sample.com_Name%TYPE)
return void
as
$$
DECLARE
com_IPAddress trade.tbl_Sample.com_inet%TYPE;
BEGIN
select com_IPAddress = comp_inet from trade.tbl_sample
where comp_nane =$1;
END;
$$language 'plpgsql';

2008-05-22

CREATING ENTERPRISE SYSTEM USING POSTGRESQL (part 2)

Create function and store procedure using PL/pgsql

create function

create function trade.f_login( u varchar(20) , p varchar(20) ) returns
varchar(20)
as
$$
DECLARE
temp1 varchar(20) ;
BEGIN
select temp1 = usr_name || usr_Section from trade.t_m_user
where usr_Code = $1 and usr_password = $2;
return temp1 ;
END ;
$$language 'plpgsql';
select trade.f_login( 'Kebo','Uler' );


create Procedure

create function trade.In_tm_Code ( u varchar(20) , p varchar(20) )
as
$$
BEGIN
insert into trade.t_m_code values( $1 , $2);

END ;

$$language 'plpgsql';

perform trade.In_tm_Code( 'Kebo','Uler' );

2008-05-21

CREATING ENTERPRISE SYSTEM USING POSTGRESQL (part 1)

Changing postgres user password

/#> psql -Upostgres -D template1/

/>ALTER USER postgres WITH password '[password]';/

/ alter role
/

Creating User in Postgresql

create user trade with password 'trade';

Create Database in Postgresql

create database tradeERP with owner 'trade';

create schema in Postgresql

create schema it with owner 'trade' ;
create schema trade with owner 'trade' ;
create schema hr with owner 'hr' ;

create table in Postgresql

create table [schema_Name].m_user();

or

create table "trade".m_user();

alter table m_user add column usr_Code varchar(10) not null ;

alter table m_user add column usr_name varchar(10) not null
default('noname');

alter table m_user add column usr_type smallint(10) not null defaut(1);

alter table m_user add column usr_pass varchar(20) not null defaut(1);

alter table m_user add primary key(usr_Code);

2008-05-15

Transfer from MSSQL to PostgreSQL

Dari MSSQL


1. generate create table dari SQL menggunakan Enterprise manager.
2. Replace tanda '[' dan ']'
3. hilangkan kata CLUSTERED
4. Ganti GO dengan ';'
5. Ganti datetime / smalldatetime dengan timestamp
6. Ganti tinyInt dengan smallint
7. Ganti Bit dengan boolean
8. Ganti nVarchar dengan varchar
9. ganti smallmoney/money dengan numeric(12,4)
10. Bikin Bulk Copy data dari table ke csv , dengan delimiter ';' dan quote '"'


Di PgSQL


1. create login user trade
2. create database dengan user owner trade
3. create schema "trade" dengan user trade
4. jalankan script conversi dari MSSQL diatas
5. copy csv data ke dalam database dengan perintah

     copy "trade".tableName from '/home/hamdan/SQL/data.csv' delimiter ';' csv ;

6. Selesai.. . data dari mssql sudah di transfer ke PGSQL beserta structure tablenya