Showing posts with label IT Talks. Show all posts
Showing posts with label IT Talks. Show all posts

Sunday, August 29, 2010

mysqldump dengan nonaktifkan setting timezone

Bermula dari rencana untuk ngedump data database yang lama (misal 6 bulan yang lalu di dump), maka dicoba coba deh ngedump pake perintah “mysqldump”

Berikut contoh command dumpnya,

mysqldump -h<> -u -p -w"row_date BETWEEN '2010-05-05 00:00:00' AND '2010-05-05 23:59:59'" > test.sql

maksud dari perintah tersebut, ngedump data hanya untuk tanggal 5 mei 2010 ajah (mula 00:00:00 mpe 23:59:59)

Tapi ada yang aneh, record datetime hasil dump berbeda dengan data yang ada pada table sebenernya,

Contoh:

1. Record hasil dump

'2010-05-05 00:00:01'

2. Record pada table sebenernya

'2010-05-05 07:00:01'

Nah lho, ada perbedaan jam sebesar +7 jam, padahal maunya data yang didump dimulai dari jam 00:00:00

Setelah ngoprek tanpa hasil dari kemaren, barusan iseng ngeliatin header file hasil dump, header sbb:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

Yep, Indonesia khan timezonenya +7, jadi suspect utama ada di settingan timezonenya,

Langkah pertama, cek di mysql sendiri, apa bener udah pake timezone yang bener, dari output perintah select now(), udah ngasilin waktu yang sama dengan system.

Langkah kedua, googling pake keyword: mysqldump timezone

Ketemu URL: http://anothersysadmin.wordpress.com/2007/08/31/mysqldump-utc-timezone-workaround/

Jadi intinya, tambahin option --skip-tz-utc buat nonaktipin timezone

Jadi perintah lengkapnya jadi kek gini:

mysqldump --skip-tz-utc -h 10.1.103.200 -usms -psms123 cwc trans_mirror -w"row_date BETWEEN '2010-05-05 00:00:00' AND '2010-05-05 23:59:59'" > test.sql

Header file dump, jadi kek gini

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


Cross check dengan data di table sebenernya, viola !!! udah match :)

Friday, May 7, 2010

Mysqldump untuk range data tertentu dan setting timezone


Bermula dari rencana untuk ngedump data database yang lama (misal 6 bulan yang lalu di dump), maka dicoba coba deh ngedump pake perintah “mysqldump”

Berikut contoh command dumpnya,

mysqldump -h [ip address] -u[user] -p[password] [dbname] [tablename] -w"row_date BETWEEN '2010-05-05 00:00:00' AND '2010-05-05 23:59:59'" > test.sql

maksud dari perintah tersebut, ngedump data hanya untuk tanggal 5 mei 2010 ajah (mula 00:00:00 mpe 23:59:59)

Tapi ada yang aneh, record datetime hasil dump berbeda dengan data yang ada pada table sebenernya,

Contoh:

1.       Record hasil dump

'2010-05-05 00:00:01',


2.       Record pada table sebenernya

2010-05-05 07:00:01       

Nah lho, ada perbedaan jam sebesar +7 jam, padahal maunya data yang didump dimulai dari jam 00:00:00

Setelah ngoprek tanpa hasil dari kemaren, barusan iseng ngeliatin header file hasil dump, header sbb:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

Yep, Indonesia khan timezonenya +7, jadi suspect utama ada di settingan timezonenya,

Langkah pertama, cek di mysql sendiri, apa bener udah pake timezone yang bener, dari output perintah select now(), udah ngasilin waktu yang sama dengan system.

Langkah kedua, googling pake keyword: mysqldump timezone


Jadi intinya, tambahin option --skip-tz-utc buat nonaktipin timezone

Jadi perintah lengkapnya jadi kek gini:

mysqldump --skip-tz-utc -h [ip address] -u[user] -p[password] [dbname] [tablename] -w"row_date BETWEEN '2010-05-05 00:00:00' AND '2010-05-05 23:59:59'" > test.sql

Header file dump, jadi kek gini

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


Cross check dengan data di table sebenernya, viola !!! udah match  :)

Wednesday, November 11, 2009

Interkoneksi PERL dengan MS SQL Server di Ubuntu.


Interkoneksi PERL dengan MS SQL Server di Ubuntu.
Requirement:
1.       Update Module perl DBI
2.       Install FreeTDS
3.       Install Module perl DBD::Sybase

1.       Update Module perl DBI
Ada dua opsi untuk melakukan update, yaitu dengan melakukan instalasi manual (compile dari source) dan instalasi melalui CPAN Console).
-          Instalasi melalui source
Install module tersebut sesuai dengan panduan yang ada di README

-          Instalasi melalui CPAN Console
Jalankan command ini sebagai root

perl -MCPAN -e shell
http://:untuk setting ftp_proxy dan http_proxy>
Jika prompt sudah menunjukkan “cpan>” jalankan command

install DBI

System akan melakukan update module DBI. Jika prompt “cpan>” muncul kembali, jalankan command install DBI, jika outputnya “DBI is up to date.” Maka module DBI sudah terupdate.

2.       Install FreeTDS.
-          Upload file source di /usr/local/src
-          Jalankan command berikut

tar xzvf freetds-stable.tgz
cd freetds-0.82
./configure --with-tdsver=7.0 --prefix=/usr/local/freetds
make
make install

-          Set environment variable sebagai berikut
export export SYBASE=/usr/local/freetds
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/freetds/lib

-          Tambahkan dua baris tersebut pada file /etc/profile, agar variable tersebut bisa tetap ada pada saat mesin restart


Notes: Jika ada error compiler belum diinstall, maka terlebih dahulu install paket “build-essential” dengan command: apt-get install build-essential
3.       Install Module perl DBD::Sybase
-          Upload file source di /usr/local/src
-          Jalankan command berikut

tar xzvf DBD-Sybase-1.07.tar.gz
cd DBD-Sybase-1.07
perl Makefile.PL


-          Setelah proses selesai, edit file “dbdimp.c” yaitu tambahkan code berikut diatas fungsi “void syb_init(dbistate)”

#undef CS_VERSION_150
#undef CS_VERSION_125
#undef CS_VERSION_120
#undef CS_DATE_TYPE
#undef CS_BIGINT_TYPE

-          Setelah pengeditan selesai, jalankan command berikut

make
 make install








Testing Script.

1.       Untuk melakukan testing koneksi dengan MS SQL Server

#!/usr/bin/perl


use DBI;

my $user   = "user";
my $passwd = "password";

my $dbh = DBI->connect("DBI:Sybase:server=", $user, $passwd, {PrintError => 0});

unless ($dbh) {
    die "Unable for connect to server $DBI::errstr";
}

my $sth;

$sth = $dbh->prepare("select \@\@servername");

if ($sth->execute) {
    while(@dat = $sth->fetchrow) {
      print "SERVER IS: @dat\n";
    }
}

exit(0);

Output:

ipunk@xxx:~/sql_server$ perl query.pl
SERVER IS: MSSQLSERVER
ipunk@xxx:~/sql_server$

2.       Melakukan query di database

#!/usr/bin/perl

#
# test the db2 dbi driver
#

use DBI ;

our $tbl_interaction; our $tbl_participant; our $sql_nice;

our $rsConnect;our @datatampil;


my $user   = "user";
my $passwd = "password";

my $dbh = DBI->connect("DBI:Sybase:server=", $user, $passwd, {PrintError => 0});

$dbh->do("dbase name");
                       
$tbl_interaction = tblInteraction . "01";
$tbl_participant = tblParticipant . "01";
                       
                        $sql_nice = "select DISTINCT(a.dtInteractionLocalStartTime) as StartTime,a.dtInteractionLocalStopTime as ".           
            "StopTime, b.nvcPhoneNumber as MSISDN,b.nvcAgentID as ".
            "LoginID FROM tblInteraction01 a, tblParticipant01 b ".
                                                                        "WHERE a.iInteractionID=b.iInteractionID ".
                                               
                                                                        "and a.dtInteractionLocalStartTime between '2009-03-01 00:00:00' and '2009-03-31 23:59:59' ";


 $rsConnect = $dbh->prepare($sql_nice)
                                                                                                                                   or die "Couldn't prepare statement: $sql_nice -->" . $dbh->errstr;
                                                                                                                       
                                                                                                                        # execute sql source
                                                                                                                        $rsConnect->execute
                                                                                                                                  or die "Couldn't execute statement: $sql_nice -->" . $rsConnect->errstr;        
                                                                                                                                                                         
                                                                                                                                                                         
                                                @datatampil = $rsConnect->fetchrow_array();            
                                               
                                                while(@datatampil = $rsConnect->fetchrow_array())
                                                {
                                                 print "Starttime : @datatampil[0]";
                                                 print "Stoptime  : @datatampil[1]";
                                                 print "Connected Number : @datatampil[2]";
                                                 print "LoginID : @datatampil[3]";
                                                }


Sumber: