Ayam Pakai Bubur

image

Cuaca Bandung pagi ini terasa sejuk. Langit masih mendung sisa hujan semalam. Di depan gedung Plasa Telkom Lembong ada penjual bubur ayam. Bubur ayam merupakan salah satu menu sarapan khas Bandung. Buburnya enak, ayamnya banyak. Salah satu rekan menyebutnya “ayam pakai bubur” karena banyaknya suwiran daging ayam. Semangkok bubur ayam komplit dijual Rp13000,-. Komplit dengan hati, ampela, daging ayam, cakwe, dan emping. Terasa nikmat sekali makan bubur ayam di tengah sejuknya kota Bandung.

Instalasi Oracle Database 11g Pada Oracle Linux 6.5

Memasang aplikasi Oracle Database menurut saya gampang-gampang susah. Bisa dibilang gampang karena menu instalasinya menggunakan tampilan grafis (GUI=graphical user interface). Dengan tampilan grafis berarti kita tinggal klik Next Next saja. Bisa dibilang susah karena ada banyak persyaratan & persiapan yang harus dilakukan. Dari beberapa kesempatan memasang Oracle Database, hampir separuh lebih waktu dihabiskan untuk menyiapkan environment-nya. Apapun sistem operasi yang digunakan, entah Windows Server, Linux, Solaris, polanya hampir sama. Diperlukan beberapa persiapan pada level sistem operasi sebelum aplikasi Oracle Database dapat dipasangkan.

Beberapa hal yang perlu disiapkan sebagai prasyarat Oracle Database misalnya :

  1. Memasang semua paket yang diperlukan.
  2. Menambahkan user & group baru. Biasanya user Oracle Database diberi nama oracle & group-nya diberi nama dba.
  3. Memodifikasi parameter kernel OS.
  4. Menyiapkan storage untuk tempat instalasi aplikasi Oracle Database.
  5. Menyiapkan storage untuk tempat menyimpan Oracle DB File.
  6. Menyiapkan shell parameter seperti misalnya : $ORACLE_BASE, $ORACLE_HOME, $PATH.
  7. Menyiapkan network & akses grafis pada server, ini diperlukan untuk proses instalasi yang menggunakan GUI. Oracle Database sendiri menyiapkan proses instal otomatis berbasis teks (yang dikenal dengan silent installer).

Saya akan jabarkan di bawah ini, sebagai catatan beberapa bagian di atas saling bersinggungan satu sama lain. Dalam tulisan ini saya gunakan Oracle Linux 6.5 untuk contoh penjelasan masing-masing bagian.

Memodifikasi OS

Tiga prasyarat yang saya sudah sebut tadi dapat saya kategorikan sebagai modifikasi OS. Dimulai dengan memasang beberapa paket Linux yang diperlukan. Daftar paket yang diperlukan bisa dilihat pada contoh berikut ini :

[root@svn ~]# yum groupinstall -y "Compatibility libraries"
[root@svn ~]# yum groupinstall -y  "Development Tools"
[root@svn ~]# yum install oracle-rdbms-server-11gR2-preinstall.x86_64 libaio* libaio.i686 libaio-devel.x86_64 libaio-devel.i686 elfutils-libelf-devel ksh unixODBC-devel.i686 unixODBC-devel.x86_64 unixODBC.i686 unixODBC.x86_64 compat-libstdc++-33.i686 libstdc++-devel.i686 screen libXext.i686 libXext-devel.i686 libXext-devel.x86_6 mksh
[root@svn ~]#

Oracle Linux menyediakan paket oracle-rdbms-server-11gR2-preinstall untuk membantu menyiapkan beberapa hal sekaligus. Apa saja yang disiapkan oleh paket tadi, bisa kita lihat dari lewat perintah seperti berikut ini :

[oracle@svn grub]$ yum info oracle-rdbms-server-11gR2-preinstall.x86_64
Loaded plugins: security
Installed Packages
Name        : oracle-rdbms-server-11gR2-preinstall
Arch        : x86_64
Version     : 1.0
Release     : 7.el6
Size        : 32 k
Repo        : installed
From repo   : iso
Summary     : Sets the system for Oracle single instance and Real Application Cluster install for Oracle Linux 6
License     : GPL
Description : This package installs software packages and sets system parameters required for Oracle single instance and Real Application Cluster install for
            : Oracle Linux Release 6 Files affected: /etc/sysctl.conf, /etc/security/limits.conf, /boot/grub/menu.lst.

[oracle@svn grub]$ 

Dari informasi di atas kita bisa lihat bahwa paket oracle-rdbms-server-11gR2-preinstall melakukan beberapa tugas yang biasanya harus kita lakukan manual yaitu :

  1. membuat OS user dengan namaoracle.
  2. membuat OS group dengan nama dba.
  3. menambahkan beberapa parameter kernel. Semua parameter tersebut disimpan dalam berkas /etc/sysctl.conf. Berikut ini perbandingan berkas sysctl.conf sebelum dan sesudah modifikasi :
    [root@svn ~]# diff /etc/sysctl.conf.orabackup /etc/sysctl.conf
    37d36
    < kernel.shmmax = 68719476736
    40c39,74
    < kernel.shmall = 4294967296
    ---
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for fs.file-max is 6815744
    > fs.file-max = 6815744
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.sem is '250 32000 100 128'
    > kernel.sem = 250 32000 100 128
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmni is 4096
    > kernel.shmmni = 4096
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is 1073741824 on x86_64
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is 2097152 on i386
    > kernel.shmall = 1073741824
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is 4398046511104 on x86_64
    > # oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is 4294967295 on i386
    > kernel.shmmax = 4398046511104
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for net.core.rmem_default is 262144
    > net.core.rmem_default = 262144
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for net.core.rmem_max is 4194304
    > net.core.rmem_max = 4194304
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for net.core.wmem_default is 262144
    > net.core.wmem_default = 262144
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for net.core.wmem_max is 1048576
    > net.core.wmem_max = 1048576
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for fs.aio-max-nr is 1048576
    > fs.aio-max-nr = 1048576
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for net.ipv4.ip_local_port_range is 9000 65500
    > net.ipv4.ip_local_port_range = 9000 65500
    > 
    [root@svn ~]# 
    
  4. membatasi pemakaian resource (untuk user oracle) dengan memodifikasi berkas /etc/security/limit.conf. Berikut ini perbandingan berkas limit.conf sebelum dan sesudah modifikasi :
    [root@svn ~]# diff /etc/security/limits.conf.orabackup /etc/security/limits.conf
    4d3
    < #
    6d4
    < #
    14d11
    < #
    18d14
    < #
    38d33
    < #
    40d34
    < #
    49d42
    < 
    50a44,61
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for nofile soft limit is 1024
    > oracle   soft   nofile    1024
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for nofile hard limit is 65536
    > oracle   hard   nofile    65536
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for nproc soft limit is 2047
    > oracle   soft   nproc    2047
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for nproc hard limit is 16384
    > oracle   hard   nproc    16384
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for stack soft limit is 10240KB
    > oracle   soft   stack    10240
    > 
    > # oracle-rdbms-server-11gR2-preinstall setting for stack hard limit is 32768KB
    > oracle   hard   stack    32768
    [root@svn ~]# 
    
  5. menambahkan parameter pada berkas /boot/grub/menu.lst.

Karena user oracle sudah dibuat oleh paket oracle-rdbms-server-11gR2-preinstall, kita tinggal memberinya password sebelum mulai proses instalasi :

[root@svn ~]# passwd oracle
Changing password for user oracle.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@svn ~]# 

Karena ada perubahan parameter kernel, kita perlu me-restart server sebelum melanjutkan proses instalasi.

Menyiapkan Storage

Selanjutnya yang perlu disiapkan adalah lokasi tempat kita akan menginstal Oracle Database. Pada contoh ini saya menggunakan logical volume terpisah khusus dialokasikan untuk aplikasi Oracle Database. Saya siapkan pada direktori oracle sebagai mountpoint untuk logical volume /dev/mapper/vg_oracledb-lv_oracledb tersebut. Hasilnya terlihat seperti tampilan di bawah ini :

[root@svn ~]# df -h
Filesystem                           Size  Used Avail Use% Mounted on
/dev/mapper/vg_svn-lv_root          11G  6.1G  3.5G  64% /
/dev/sda1                            477M   55M  398M  13% /boot
/dev/mapper/vg_oracledb-lv_oracledb  9.9G  2.4G  7.1G  26% /oracle
[root@svn ~]# 

Tentu ini adalah masalah pilihan, saya pikir tidak masalah bila Anda ingin menyimpan instalasi Oracle Database dalam partisi root selama ada cukup ruang kosong.

Hal yang sering mengganggu proses instalasi Oracle Database adalah masalah ukuran storage & permission setting. Dalam contoh ini saya hanya ingin membuat database untuk keperluan belajar saja, oleh karenanya saya cukup menyiapkan storage dengan ukuran 10GB. Tentu ini sangat bergantung pada kebutuhan database-nya itu sendiri; untuk keperluan production mungkin dibutuhkan ruang harddisk ratusan GigaByte bahkan beberapa TeraByte.

Untuk masalah permission, saya perlu mengatur supaya direktori /oracle tersebut dimiliki oleh user oracle & group dba. Cukup gunakan perintah chown seperti berikut ini :

[root@svn ~]# chown -R oracle:dba /oracle

Mengunduh Berkas Instalasi

Material instalasi aplikasi Oracle Database dapat diunduh secara gratis dari web Oracle. Pada contoh ini saya menggunakan Oracle Database 11g. Ada 2 berkas yang harus diunduh :

  • linux.x64_11gR2_database_1of2.zip
  • linux.x64_11gR2_database_2of2.zip

Kedua berkas tersebut harus diekstrak ke dalam direktori yang sama. Saya ekstrak kedua berkas tadi dalam direktori /oracle/oracle11g-linux_x64.

[oracle@svn ~]$ cd /oracle/
[oracle@svn oracle]$ mkdir oracle11g-linux_x64
[oracle@svn oracle]$ 
[oracle@svn oracle]$ tar xf linux.x64_11gR2_database_1of2.zip -C oracle11g-linux_x64 
[oracle@svn oracle]$ tar xf linux.x64_11gR2_database_2of2.zip -C oracle11g-linux_x64 
[oracle@svn oracle]$ 
[oracle@svn oracle]$ ls oracle11g-linux_x64
doc  install  response  rpm  runInstaller  sshsetup  stage  welcome.html
[oracle@svn oracle]$ 

Menyiapkan Shell Parameter

Langkah penting lain sebelum mulai menginstal database adalah menyiapkan parameter shell untuk user oracle. Dalam contoh ini user oracle menggunakan shell Bash, oleh karenanya kita menambahkan parameter ke dalam berkas ~oracle/.bash_profile. Berikut adalah beberapa parameter yang sudah saya siapkan pada berkas ~oracle/.bash_profile :

[oracle@svn ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
ORACLE_BASE=/oracle/database
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/11.2.0/server
export ORACLE_HOME
ORACLE_SID=SVN
export ORACLE_SID
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export PATH
[oracle@svn ~]$

Ada 4 parameter yang saya tambahkan :

  1. $ORACLE_BASE : ini menjadi direktori utama tempat semua instalasi aplikasi Oracle diletakkan. Saya buat direktori baru dalam /oracle.[oracle@svn ~]$ mkdir -p /oracle/database
  2. $ORACLE_HOME : ini adalah tempat saya memasang Oracle Database 11g.[oracle@svn ~]$ mkdir -p $ORACLE_BASE/11.2.0/server
  3. $ORACLE_SID : ini adalah nama instance Oracle.
  4. $PATH : saya perlu menambahkan direktori $ORACLE_HOME/bin ke dalam default $PATH. Ini maksudnya supaya user oracle bisa langsung mengakses semua executable binary hasil instalasi Oracle Database.

Setelah menambahkan shell parameter tersebut, user oracle harus logout terlebih dahulu supaya parameter tadi menjadi aktif.

Menyiapkan Network & Tampilan Grafis

Proses instalasi Oracle Database menggunakan aplikasi yang disebut Oracle Universal Installer (OUI). Proses menginstal Oracle Database ini terbagi menjadi 3 tahapan :

  • menginstal aplikasi Oracle Databasenya.
  • membuat database-nya, ini sifatnya opsional. Kita bisa membuat database secara manual tanpa perlu menggunakan OUI.
  • mengatur Oracle Database Listener. Ini juga bisa diatur manual dengan membuat berkas listener.ora atau dengan menggunakan program netca.

Berkaitan dengan OUI, persiapan lain yang harus dilakukan adalah mendaftarkan alamat IP server ke dalam berkas /etc/hosts

[root@svn ~]# hostname
svn
[root@svn ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:49:df:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.57.53/24 brd 192.168.57.255 scope global eth0
    inet6 fe80::a00:27ff:fe49:df4e/64 scope link 
       valid_lft forever preferred_lft forever
[root@svn ~]#
[root@svn ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.57.53     svn
[root@svn ~]# 

Bila OUI (Oracle Universal Installer) tidak menemukan alamat IP pada berkas /etc/hosts akan muncul error seperti tampilan berikut ini :

Aplikasi OUI memerlukan tampilan grafis. Server harus memiliki X server sendiri untuk menampilkan menu-menu instalasinya OUI. Saya bisa menggunakan VNC Server untuk mengakses tampilan OUI. Saya pernah tulis cara memasang VNC Server di sini. Alternatif lain saya dapat menggunakan SSH X Forwarding. Pada contoh ini saya menggunakan opsi kedua saja X Forwarding. Di Mac saya tinggal mengakses server dengan perintah ssh -X lalu menjalankan aplikasi runInstaller.

ttirtawi@macbookpro:~$ ssh -X oracle@192.168.57.53
oracle@192.168.57.53's password: 
Last login: Sat Oct 11 14:32:32 2014 from 192.168.57.1
[oracle@svn ~]$ /oracle/oracle11g-linux_x64-disk1/runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 2416 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 1227 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2014-10-11_02-32-54PM. Please wait ...[oracle@svn ~]$ 

Tanpa adanya X Server & tanpa SSH X Forwarding, aplikasi runInstaller akan mengeluarkan error seperti ini :

[oracle@svn ~]$ /oracle/oracle11g-linux_x64-disk1/runInstaller 
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 1611 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 1227 MB    Passed
Checking monitor: must be configured to display at least 256 colors
    >>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set.    Failed <<<<

Some requirement checks failed. You must fulfill these requirements before

continuing with the installation,

Continue? (y/n) [n] 

Pada contoh saya tadi, tampilan OUI akan langsung muncul di layar Macbook saya. Jangan lupa sebelum menjalankan perintah runInstaller tadi, semua shell parameter yang saya jelaskan di atas harus sudah aktif. Kita bisa cek dengan perintah env untuk memastikan semua shell parameter sudah siap.

Oracle Database menyediakan alternatif instalasi tanpa tampilan GUI. Metode tersebut disebut dengan silent installer. Tulisan ini tidak membahas silent installer.

Proses Instalasi

Berikut ini adalah contoh langkah-langkah menggunakan OUI untuk membuat sebuah database sederhana.

  • Ini adalah contoh tampilan pertama setelah kita menjalankan OUI dengan perintah runInstaller :
  • Menu yang muncul pertama kali adalah tentang My Oracle Support. Bila kita punya akun My Oracle Support kita bisa mendaftarkan alamat email pada menu ini.Klik Next untuk lanjut ke langkah berikutnya.
  • Saya memilih untuk mengabaikan menu ini cukup dengan untick pilihan “I wish to receive…..” :Klik Next untuk lanjut ke langkah berikutnya.
  • Akan muncul peringatan seperti tampilan di bawah ini. Kita dapat mengabaikannya kembali dengan klik tombol Yes.Klik Next untuk lanjut ke langkah berikutnya.
  • Pada menu selanjutnya kita bisa memilih untuk hanya memasang aplikasi Oracle Database saja, atau sekaligus membuat database, atau kita bisa memilih untuk melakukan upgrade. Pada contoh ini saya pilih untuk memasang & membuat database-nya sekalian.Klik Next untuk lanjut ke langkah berikutnya.
  • OUI akan menampilkan 2 pilihan kategori database yang ingin kita buat. “Desktop Class” artinya OUI akan menggunakan konfigurasi sederhana saat menyiapkan database. Sebaliknya konfigurasi yang lebih kompleks untuk “Server Class”. Untuk keperluan testing ini saya pilih “Desktop Class” saja.Klik Next untuk lanjut ke langkah berikutnya.
  • Tampilan berikutnya adalah konfigurasi yang menurut saya penting untuk diperhatikan. Bila kita sudah menyiapkan shell parameter dengan benar (bila $ORACLE_BASE, $ORACLE_HOME, $ORACLE_SID sudah benar), OUI akan otomatis mengisikan kolom-kolom tersebut tepat seperti yang sudah kita siapkan pada berkas ~oracle/.bash_profile.Klik Next untuk lanjut ke langkah berikutnya.
  • Akan muncul peringatan seperti tampilan di bawah ini bila :
    • Tidak ada cukup ruang kosong untuk memasang Oracle Database.
    • Password yang kita masukkan tidak cukup kompleks.

    Kita harus memperbaiki 2 kesalahan tadi sebelum bisa melanjutkan proses instalasi. Klik Next untuk lanjut ke langkah berikutnya.

  • OUI lalu akan menjalankan beberapa validasi seperti misalnya memeriksa paket-paket yang dibutuhkan, memeriksa ketersediaan memori & swap, memeriksa parameter kernel.Hasilnya seperti tampilan berikut ini :

    Pada contoh di atas OUI melaporkan beberapa paket yang diperlukan belum terpasang & ukuran swap tidak memenuhi persyaratan.

  • Beberapa kali saya menemukan kasus OUI gagal menemukan paket karena versi paket yang terpasang lebih baru daripada yang dibutuhkan. Misalnya OUI melaporkan paket libaio-devel-0.3.105 tidak tersedia, padahal bila saya cek manual paket libaio-devel sudah terpasang; hanya saja versi yang terpasang adalah versi 0.3.107.
    [oracle@svn ~]$ rpm -qa | grep libaio-devel
    libaio-devel-0.3.107-10.el6.x86_64
    libaio-devel-0.3.107-10.el6.i686
    [oracle@svn ~]$ 
    

    Pada contoh ini saya yakin semua paket yang diperlukan sudah terpasang. OUI mencari versi paket yang lebih tua, sementara saya hanya punya versi yang lebih baru. Karena saya yakin semua paket sudah tersedia, saya bisa mengabaikan hasil validasi ini dengan tick pilihan “Ignore All”.

    Perlu diingat baik-baik, bila versi paket yang terpasang lebih tua daripada yang diminta oleh OUI kita tidak bisa begitu saja mengabaikan peringatan tersebut. Kita harus upgrade paket-paket tersebut supaya versinya paling tidak sama dengan yang dimibutuhkan oleh OUI.

    Klik Next untuk lanjut ke langkah berikutnya.

  • Sampai tahap ini OUI akan menampilkan ringkasan konfigurasi yang sudah kita pilih, contohnya seperti berikut ini :Pada tahap ini kita bisa memeriksa ulang konfigurasinya untuk antisipasi ada konfigurasi yang salah. Bila semua sudah benar, klik Finish untuk lanjut ke langkah berikutnya.
  • OUI segera memulai proses instalasi :
  • Karena tadi di awal saya memilih untuk membuat sebuah database baru, OUI akan otomatis melanjutkan proses pembuatan database baru seperti terlihat pada tampilan berikut ini :Sebenarnya bukan OUI sendiri yang membuat database melainkan aplikasi lain bernama DBCA (Data Base Configuration Assistant).
  • Proses pembuatan database baru ini akan berlangsung cukup lama, bila sudah selesai kita akan mendapati tampilan seperti contoh berikut ini :
  • Menjelang akhir proses instalasi, OUI akan meminta kita menjalankan 2 buah script : orainstRoot.sh & root.sh. Kedua script ini harus dijalankan oleh user root.
    [root@svn ~]# /oracle/oraInventory/orainstRoot.sh 
    Changing permissions of /oracle/oraInventory.
    Adding read,write permissions for group.
    Removing read,write,execute permissions for world.
    
    Changing groupname of /oracle/oraInventory to oinstall.
    The execution of the script is complete.
    [root@svn ~]# /oracle/database/11.2.0/server/root.sh 
    Running Oracle 11g root.sh script...
    
    The following environment variables are set as:
        ORACLE_OWNER= oracle
        ORACLE_HOME=  /oracle/database/11.2.0/server
    
    Enter the full pathname of the local bin directory: [/usr/local/bin]: 
       Copying dbhome to /usr/local/bin ...
       Copying oraenv to /usr/local/bin ...
       Copying coraenv to /usr/local/bin ...
    
    
    Creating /etc/oratab file...
    Entries will be added to the /etc/oratab file as needed by
    Database Configuration Assistant when a database is created
    Finished running generic part of root.sh script.
    Now product-specific root actions will be performed.
    Finished product-specific root actions.
    [root@svn ~]# 
    

    Saat sudah selesai menjalankan 2 buah script tadi kita tinggal klik tombol Ok pada menu sebelumnya.

  • Berikut ini adalah tampilan akhir OUI setelah proses instalasi selesai.

Setelah proses instalasi Oracle Database selesai & database sudah aktif, kita dapat memeriksanya dengan menggunakan sqlplus seperti tampilan di bawah ini :

[oracle@svn ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sun Oct 12 13:56:13 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>     

Untuk memeriksa nama database & jumlah memori yang digunakan saya bisa gunakan perintah berikut ini :

SQL> show parameter db_name

NAME    TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name      string SVN
SQL> show sga

Total System Global Area 1653518336 bytes
Fixed Size    2213896 bytes
Variable Size  956303352 bytes
Database Buffers  687865856 bytes
Redo Buffers    7135232 bytes
SQL> 

Atau misalnya saya ingin memeriksa DB File yang digunakan oleh database baru ini, saya bisa gunakan perintah berikut ini :

SQL> SELECT NAME FROM V$CONTROLFILE;

NAME
--------------------------------------------------------------------------------
/oracle/database/oradata/SVN/control01.ctl
/oracle/database/flash_recovery_area/SVN/control02.ctl

SQL> 
SQL> SELECT NAME FROM V$DATAFILE;

NAME
--------------------------------------------------------------------------------
/oracle/database/oradata/SVN/system01.dbf
/oracle/database/oradata/SVN/sysaux01.dbf
/oracle/database/oradata/SVN/undotbs01.dbf
/oracle/database/oradata/SVN/users01.dbf
/oracle/database/oradata/SVN/example01.dbf

SQL> 

Dari semua langkah di atas bisa dilihat bahwa sukses tidaknya instalasi Oracle Database sangat bergantung pada tahap persiapannya. Tampilan OUI sendiri sangat mudah untuk diikuti, tinggal Next Next saja. Jadi bilamana ada error saat menggunakan menu OUI, hampir dapat dipastikan ada langkah persiapan yang kurang lengkap atau tidak memenuhi persyaratan.

Mengubah Huruf Besar/Kecil Pada VI

Ini adalah catatan singkat saya tentang cara mengubah huruf besar/huruf kecil dengan menggunakan teks editor vi. Misalnya saya punya teks tampilan di gambar di bawah ini. Semua teksnya menggunakan huruf besar :

Untuk mengubah semua teks dalam sebuah dokumen menjadi huruf kecil, saya bisa menggunakan perintah :

:%s/.*/\L&/

\L berarti lower case (huruf kecil). Dengan perintah tersebut, vi akan segera mengubah semua teks menjadi huruf kecil seperti tampak pada gambar di bawah ini :

Sebaliknya bila saya ingin mengubah semua teks menjadi huruf besar, maka saya bisa gunakan perintah :

:%s/.*/\U&/

\U berarti upper case (huruf kecil). Dengan perintah tersebut, vi akan segera mengubah semua teks menjadi huruf besar seperti tampak pada gambar di bawah ini :

Dua perintah tadi bisa digunakan pada vi maupun vim (versi yang lebih canggih dari vi).

SSH Reverse Proxy

VirtualBox menyediakan beberapa tipe network adapter yang bisa dipakai oleh setiap Virtual Machinenya. Salah satu jenis network adapter yang tersedia adalah NAT. Secara default, VM yang menggunakan NAT network adapter dan VM akan otomatis mendapatkan IP 10.0.2.15 (tentu bila VM diset menggunakan DHCP). Dengan IP NAT ini, VM bisa mengakses jaringan lokal & juga Internet melalui gateway IP 10.0.2.2. Akan tetapi kelemahan sistem NAT ini adalah, Host tidak bisa mengakses VM tersebut secara langsung. Misalnya pada Macbook saya punya VM Linux (hostname = svn). Meskipun VM tersebut memiliki SSH Server, saya tidak bisa mengakses SSH server tersebut dari Terminal-nya Mac.

Salah satu alternatif cara yang bisa saya gunakan untuk mengakses Virtual Machine yang menggunakan NAT Adapter adalah dengan Reverse SSH.

Dari dalam VM saya lakukan SSH ke Host dengan perintah berikut ini :

[oracle@svn ~]$ ssh -R 8080:localhost:22 ttirtawi@10.0.2.2
Password:
Last login: Mon Oct 13 11:49:32 2014 from localhost
ttirtawi@macbookpro:~$ 

Opsi -R 8080:localhost:22 dapat dibaca seperti ini : buatlah sebuah “tunnel” dari port 8080 milik Host (10.0.2.2) ke port 22 milik VM ‘SVN’. Dengan adanya tunnel tersebut setiap kali Host membuka koneksi SSH ke port 8080 miliknya sendiri, request SSH tersebut akan diteruskan ke port 22 milik VM ‘SVN’ tersebut. Pemilihan port 8080 sifatnya bebas, selama port tersebut aktif digunakan oleh Host. Sementara 22 adalah port SSH server milik VM.

Nah dari Host, saya tinggal lakukan SSH ke localhost port 8080 seperti contoh berikut ini :

ttirtawi@macbookpro:~$ ssh -p 8080 oracle@localhost
oracle@localhost's password: 
Last login: Mon Oct 13 03:49:03 2014 from localhost
[oracle@svn ~]$ 
[oracle@svn ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:49:df:4e brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
    inet6 fe80::a00:27ff:fe49:df4e/64 scope link 
       valid_lft forever preferred_lft forever
[oracle@svn ~]$ 
[oracle@svn ~]$ hostname
svn
[oracle@svn ~]$ 

Otomatis saya akan langsung terhubung ke VM tersebut. Ini tangkapan layar dari langkah-langkah tadi :

Memindahkan Oracle DB File

Salah satu komponen dari Oracle Database adalah “datafile”. Pengertian sederhana dari datafile adalah kumpulan berkas tempat menyimpan semua database object. Contoh database object antara lain adalah tables, indexes, constraints, packages, sequences, dsb. Ada juga yang menyebut datafile sebagai “DB File”. Datafile umumnya menggunakan file extension *.dbf, seperti contoh berikut ini :

[oracle@svn ~]$ ls -tlr /oracle/database/oradata/SVN/*dbf
-rw-r----- 1 oracle oinstall  30416896 Oct 12 02:05 /oracle/database/oradata/SVN/temp01.dbf
-rw-r----- 1 oracle oinstall   5251072 Oct 12 02:06 /oracle/database/oradata/SVN/users01.dbf
-rw-r----- 1 oracle oinstall 104865792 Oct 12 02:06 /oracle/database/oradata/SVN/example01.dbf
-rw-r----- 1 oracle oinstall 713039872 Oct 12 02:07 /oracle/database/oradata/SVN/system01.dbf
-rw-r----- 1 oracle oinstall 104865792 Oct 12 02:07 /oracle/database/oradata/SVN/undotbs01.dbf
-rw-r----- 1 oracle oinstall 524296192 Oct 12 02:07 /oracle/database/oradata/SVN/sysaux01.dbf
[oracle@svn ~]$ 

Meskipun demikian Oracle Database tidak serta merta menulis data ke dalam datafile. Semua datafile tersebut disusun secara logical dalam bentuk tablespace. Sebuah tablespace dapat tersusun dari beberapa datafile sekaligus. Bila tablespace sudah kehabisan ruang kosong, kita bisa menambahkan datafile yang baru untuk memperluas tablespace. Di dalam tablespace inilah semua database object disimpan. Komponen Oracle Database lainnya adalah controlfile. Kalau datafile digunakan untuk menyimpan data, controlfile bertugas menyimpan informasi struktur fisik database. Misalnya database name, lokasi datafile, lokasi dari redolog, dsb.

Selain datafile & controlfile, Oracle Database memiliki komponen penting lainnya yaitu initialization parameters file. Saat pertama kali dihidupkan, Oracle Database akan membaca parameter-parameter yang disimpan oleh initialization parameters file tersebut. Salah satu parameter yang dibaca adalah lokasi tempat controlfile berada. Oracle Database memiliki 2 jenis initialization parameters file : SPFILE atau PFILE. PFILE adalah berkas teks biasa yang bisa dimodifikasi dengan editor teks seperti vi atau Notepad (di Windows). Sementara SPFILE adalah berkas binary yang hanya bisa dimodifikasi oleh Oracle Database melalui perintah SQL. Baik SPFILE maupun PFILE biasanya disimpan dalam direktori $ORACLE_HOME/dbs.

Relasi antara initialization parameters file, datafile, dan controlfile gampangnya seperti ini :

  • Oracle DB membaca SID (System ID) dari environment variable.
  • Oracle DB mencari PFILE/SPFILE yang bersesuaian dengan SID tadi. Biasanya nama berkas PFILE & SPFILE adalah init<SID>.ora atau spfile<SID>.ora (contoh : misalnya SID = ORCL, maka PFILE akan menggunakan nama initORCL.ora).
  • Oracle DB membaca PFILE (atau SPFILE) tersebut untuk mengetahui lokasi controlfile.
  • Oracle DB lalu membaca controlfile untuk mengetahui datafile mana saja yang menyusun database.
  • Barulah Oracle DB bisa mengakses semua datafile dan menyiapkan semua database object.

Berikut ini adalah catatan pribadi saya tentang cara memindahkan datafile & controlfile ke lokasi yang baru :

  1. Pertama saya mencari tahu dulu di mana datafile & controlfile yang digunakan oleh database. Cara paling mudah adalah dengan melihat tabel v$controlfile & v$datafile seperti contoh berikut ini :
    [oracle@svn ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on Sun Oct 12 02:08:23 2014
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> COLUMN NAME FORMAT A60
    SQL> SELECT NAME FROM V$CONTROLFILE;
    
    NAME
    ------------------------------------------------------------
    /oracle/database/oradata/SVN/control01.ctl
    /oracle/database/flash_recovery_area/SVN/control02.ctl
    
    SQL> SELECT NAME FROM V$DATAFILE;
    
    NAME
    ------------------------------------------------------------
    /oracle/database/oradata/SVN/system01.dbf
    /oracle/database/oradata/SVN/sysaux01.dbf
    /oracle/database/oradata/SVN/undotbs01.dbf
    /oracle/database/oradata/SVN/users01.dbf
    /oracle/database/oradata/SVN/example01.dbf
    
    SQL> 
    

    Dari hasil perintah SQL tersebut saya paham ada beberapa berkas pada 3 direktori yang perlu dipindahkan :

    • /oracle/database/oradata/SVN : berisi controlfile #1.
    • /oracle/database/flash_recovery_area/SVN : berisi controlfile #2.
    • /oracle/database/oradata/SVN/ : berisi datafile.
  2. Untuk memeriksa initialization parameters file yang sedang digunakan oleh Oracle Database saya bisa menggunakan perintah berikut ini :
    SQL> SHOW PARAMETER SPFILE
    
    NAME                     TYPE    VALUE
    ------------------------------------ ----------- ------------------------------
    spfile                   string  /oracle/database/11.2.0/server
                             /dbs/spfileSVN.ora
    SQL> 
    

    Dalam contoh ini database saya menggunakan berkas /oracle/database/11.2.0/server/dbs/spfileSVN.ora sebagai initialization file-nya.

  3. Sebelum mulai memindahkan datafile & controlfile saya siapkan dulu direktori baru untuk menyimpan berkas-berkas tadi. Misalnya saya ingin pindahkan semua datafile dan controlfile ke dalam direktori /oracle/database/oradata_NEW/SVN :
    [oracle@svn ~]$ cd /oracle/database
    [oracle@svn ~]$ mkdir -p oradata_NEW/SVN
    [oracle@svn ~]$ chown -R oracle:oinstall oradata_NEW
    [oracle@svn ~]$ 
    
  4. Berikutnya saya perlu mengatur ulang database untuk memindahkan controlfile. Karena database-nya menggunakan SPFILE, saya perlu memodifikasi berkas SPFILE dengan perintah ALTER SYSTEM seperti berikut ini :
    SQL> ALTER SYSTEM SET CONTROL_FILES='/oracle/database/oradata_NEW/SVN/control01.ctl','/oracle/database/oradata_NEW/SVN/control02.ctl' SCOPE=SPFILE;
    
    System altered.
    
    SQL> 
    

    Hal tersebut berbeda bila database menggunakan PFILE. Bila database menggunakan PFILE & kita mencoba mengubah lokasi controlfile dengan perintah di atas akan muncul error seperti ini :

    SQL> ALTER SYSTEM SET CONTROL_FILES='/oracle/database/oradata_NEW/SVN/control01.ctl','/oracle/database/oradata_NEW/SVN/control02.ctl';
    ALTER SYSTEM SET CONTROL_FILES='/oracle/database/oradata_NEW/SVN/control01.ctl','/oracle/database/oradata_NEW/SVN/control02.ctl'
                     *
    ERROR at line 1:
    ORA-02095: specified initialization parameter cannot be modified
    
    
    SQL> 
    

    Bila database kita menggunakan PFILE, maka cukup edit berkas init.ora untuk memodifikasi parameter control_files seperti contoh berikut ini :

    [oracle@svn dbs]$ grep -i control initSVN.ora
    *.control_files='/oracle/database/oradata_NEW/SVN/control01.ctl','/oracle/database/oradata_NEW/SVN/control02.ctl'
    [oracle@svn dbs]$ 
    
  5. Setelah itu saya perlu mematikan database terlebih dulu :
    SQL> SHUTDOWN IMMEDIATE;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> 
    
  6. Pada tahap ini saya bisa memindahkan semua berkas datafile & controlfile :
    [oracle@svn ~]$ mv /oracle/database/oradata/SVN/control01.ctl /oracle/database/oradata_NEW/SVN/
    [oracle@svn ~]$ mv /oracle/database/flash_recovery_area/SVN/control02.ctl /oracle/database/oradata_NEW/SVN/
    [oracle@svn ~]$ mv /oracle/database/oradata/SVN/*dbf  /oracle/database/oradata_NEW/SVN/
    [oracle@svn ~]$     
    
  7. Setelah semua berkas sukses dipindahkan, berikutnya saya bisa menyalakan kembali database. Pada tahap ini saya harus menyalakan database dengan mode mount saja.
    [oracle@svn ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.1.0 Production on Sun Oct 12 02:19:03 2014
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> STARTUP MOUNT;
    ORACLE instance started.
    
    Total System Global Area 1653518336 bytes
    Fixed Size          2213896 bytes
    Variable Size         973080568 bytes
    Database Buffers      671088640 bytes
    Redo Buffers            7135232 bytes
    Database mounted.
    SQL> 
    
  8. Setelah database sudah dalam status mounted, sekarang saya perlu mengatur ulang database untuk mengganti nama setiap datafile dengan perintah “ALTER DATABASE RENAME FILE” seperti contoh berikut ini :
    SQL> ALTER DATABASE RENAME FILE '/oracle/database/oradata/SVN/system01.dbf' TO '/oracle/database/oradata_NEW/SVN/system01.dbf';
    
    Database altered.
    
    SQL> ALTER DATABASE RENAME FILE '/oracle/database/oradata/SVN/sysaux01.dbf' TO '/oracle/database/oradata_NEW/SVN/sysaux01.dbf';
    
    Database altered.
    
    SQL> ALTER DATABASE RENAME FILE '/oracle/database/oradata/SVN/undotbs01.dbf' TO '/oracle/database/oradata_NEW/SVN/undotbs01.dbf';
    
    Database altered.
    
    SQL> ALTER DATABASE RENAME FILE '/oracle/database/oradata/SVN/users01.dbf' TO '/oracle/database/oradata_NEW/SVN/users01.dbf';
    
    Database altered.
    
    SQL> ALTER DATABASE RENAME FILE '/oracle/database/oradata/SVN/example01.dbf' TO '/oracle/database/oradata_NEW/SVN/example01.dbf';
    
    Database altered.
    
    SQL> 
    

    Untuk memastikan semua controlfile & datafile pada lokasi yang baru, saya bisa memeriksanya dengan perintah berikut ini :

    SQL> SELECT NAME FROM V$CONTROLFILE;
    
    NAME
    --------------------------------------------------------------------------------
    /oracle/database/oradata_NEW/SVN/control01.ctl
    /oracle/database/oradata_NEW/SVN/control02.ctl
    
    SQL> SELECT NAME FROM V$DATAFILE;
    
    NAME
    --------------------------------------------------------------------------------
    /oracle/database/oradata_NEW/SVN/system01.dbf
    /oracle/database/oradata_NEW/SVN/sysaux01.dbf
    /oracle/database/oradata_NEW/SVN/undotbs01.dbf
    /oracle/database/oradata_NEW/SVN/users01.dbf
    /oracle/database/oradata_NEW/SVN/example01.dbf
    
    SQL> 
    
  9. Setelah itu barulah kita bisa mengganti mode database ke mode open (mode open maksudnya semua isi datafile bisa diakses kembali oleh user). Untuk memindahkan mode database dari mode mount ke open saya gunakan perintah berikut ini ;
    SQL> ALTER DATABASE OPEN;
    
    Database altered.
    
    SQL> 
    

Begitu kira-kira langkah yang saya gunakan untuk memindahkan datafile dan controlfile Oracle Database. Saya menggunakan Oracle Database 11g (Enterprise Edition Release 11.2.0.1.0) untuk membuat contoh langkah-langkah di atas. Oracle Database tersebut terpasang pada Oracle Linux 6.5. Semoga bermanfaat.

Sunflower Garden Changi Aiport

Tanggal 16 Agustus 2014 lalu saya pulang dari Manila dengan menumpang Singapore Airlines (SQ917). Pesawat harusnya berangkat dari Manila pukul 14.15 (waktu Manila lebih cepat 1 jam dari Jakarta). Saat itu saya juga sudah memegang tiket lanjutan dari Singapura ke Jakarta pukul 18.40 menggunakan SQ966. Waktu transit di Singapore sangat singkat. Ternyata penerbangan saya dari Manila delay sehingga baru berangkat sekitar pukul setengah 3 lebih. Saya was-was khawatir tidak dapat mengejar pesawat lanjutan ke Jakarta. Di layar monitor pesawat ini saya bisa melihat gate kedatangan berada dekat dengan gate tempat pesawat saya ke Jakarta. Informasi yang cukup melegakan karena saya tinggal berjalan beberapa gate saja.

Ternyata pesawat baru mendarat di Singapore pukul 18.25. Dalam hati saya masih berharap bisa berlari ke gate berikutnya. Ternyata setelah pesawat berhenti pun, pintu tidak kunjung dibuka. Akhirnya sebelum pintu pesawat dibuka, pramugari mengumumkan penumpang penerbangan lanjutan harus melapor kepada petugas. Itu termasuk para penumpang SQ966 ke Jakarta. Begitu turun pesawat beberapa kru Singapore Airlines sudah menunggu, kami diminta menukarkan boarding pass karena pesawat SQ966 sudah tutup boarding-nya. Saya mendapat pesawat pengganti SQ968 yang dijadwalkan terbang ke Jakarta pukul 9 malam. Pihak Singapore Airlines memberikan kupon makan sebagai complimentary.

Saya punya waktu cukup lama untuk berjalan-jalan di Terminal 2 Changi. Saya ingat ada taman bunga yang belum pernah saya kunjungi di Terminal 2. Taman bunga tersebut terletak di lantai 2 Terminal 2 Changi Airport. Untuk menuju ke taman tadi, saya perlu ke lantai 2 melewati hotel, game center, bioskop, dan kemudian keluar dari pintu bertuliskan “Sunflower Garden”. Ya betul, objek utama taman ini adalah bunga matahari. Meskipun demikian taman ini memiliki beberapa jenis tanaman bunga lainnya.

Saya kagum melihat tanaman bunga matahari yang besar-besar, berada di balkon bangunan bandara berlatar belakang pesawat berlalu-lalang. Saat itu waktu hampir menunjukkan pukul 7 malam, tapi karena Singapore 1 jam lebih cepat dari Jakarta langit masih cerah & sinar matahari masih cukup untuk memotret. Segera saya memotret dengan kamera Fuji X100s yang selama di Manila belum pernah saya pakai memotret. Ini beberapa foto yang saya dapat dari Sunflower Garden :




Belum puas memotret Fuji X100s saya kehabisan batere. Akhirnya saya beralih memotret dengan menggunakan kamera ponsel saja.


Tidak heran bila Changi Airport (kode : SIN) beberapa kali menjadi langganan The Best Airport in The World. Bandara ini benar-benar memanjakan penumpang yang singgah ke Singapore. Menikmati taman bunga ini cukup mengurangi kekesalan saya ketinggalan pesawat. Setelah puas menikmati taman ini, saya pergi makan malam. Di kupon makan yang saya dapat tercantum beberapa nama restoran, tapi cuma satu yang menarik untuk dikunjungi; Hard Rock cafe yang berada di Terminal 3 Changi. Bertambah kagum saya dengan Changi Aiport, bagaimana tidak kagum bandar udara ini memiliki Hard Rock cafe sendiri. Selesai makan di Hard Rock saya baru tahu kalau kupon makan tadi hanya bernilai SGD $20. Sisa tagihannya saya bayar sendiri. Bolak-balik dari Terminal 2 ke Terminal 3 sangat mudah, tinggal menggunakan SkyTrain saja. SkyTrain ini juga salah satu hal yang saya kagumi dari Changi Airport. Begitu kira-kira pengalaman saya “berwisata” singkat di Changi.

Mengganti Ethernet Instance Number – RHEL 6

Di Linux, network interface card (NIC) Ethernet dikenali dengan simbol eth. Masing-masing interface punya nomor yang unik. Misalnya bila cuma ada 1 interface maka namanya adalah eth0. Bila ada 2, maka kita bisa lihat akan ada 2 interface : eth0 dan eth1. Penomoran ini diatur udev (Dynamic Device Management). Saat proses booting, udev akan mencocokan data perangkat yang aktif dengan aturan yang sudah ada sebelumnya. Misalnya untuk NIC, udev menyimpan aturan (rule) penomoran NIC dalam berkas /etc/udev/rules.d/70-persistent-net.rules seperti contoh berikut ini.

root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
root@rhel6:~# 

Pada contoh di atas ada 2 NIC yang terdaftar. Ethernet dengan MAC address “08:00:27:d9:19:33” akan selalu diberi nama eth0 sedangkan NIC dengan MAC Address “08:00:27:14:05:a7” akan diberi nama eth1. Misalnya ada penambahan NIC baru pada komputer, udev akan otomatis menambahkan 1 nomor sehingga NIC tersebut akan dikenali sebagai eth2.

Selain rule untuk perangkat jaringan di atas, udev juga memiliki beberapa berkas lain seperti misalnya :

[root@dummyuim rules.d]# ll
total 36
-rw-r--r--. 1 root root 1652 Nov 20  2010 60-fprint-autosuspend.rules
-rw-r--r--. 1 root root  153 Oct 10  2013 60-ipath.rules
-rw-r--r--. 1 root root 1060 Jul 25  2010 60-pcmcia.rules
-rw-r--r--. 1 root root  316 Oct 12  2013 60-raw.rules
-rw-r--r--. 1 root root  530 Oct  1 22:43 70-persistent-cd.rules
-rw-r--r--. 1 root root  585 Oct  2 07:50 70-persistent-net.rules
-rw-r--r--. 1 root root  320 Dec 20  2012 90-alsa.rules
-rw-r--r--. 1 root root   83 May 21  2011 90-hal.rules
-rw-r--r--. 1 root root  292 Nov 18  2013 98-kexec.rules
[root@dummyuim rules.d]# 

Proses udev akan melakukan scanning pada semua perangkat yang terdeteksi oleh kernel Linux saat proses booting berlangsung. Tidak cuma mengatur penomoran masing-masing perangkat, udev juga bertanggung jawab untuk menjalankan program yang diperlukan untuk mengaktifkan perangkat. Misalnya dengan udev kita bisa menentukan driver module mana yang diperlukan oleh sebuah perangkat (udev akan memanggil program modprobe untuk mengaktifkan driver tersebut).

Kembali ke soal penamaan network interface tadi, biasanya penomoran Ethernet akan relatif statis tidak pernah berubah-ubah. Penomoran Ethernet akan berubah pada kasus tertentu saja; misalnya ada penggantian NIC yang rusak. Tentu hal semacam itu relatif jarang terjadi. Berbeda halnya saat saya menggunakan VirtualBox, saya bisa dengan mudah menggonta-ganti NIC & MAC Address-nya dengan mudah. Gambar berikut adalah contoh cara mengganti MAC Address pada sebuah virtual machine (VirtualBox akan otomatis menghasilkan MAC Address baru):

Misalnya VM RedHat Linux saya awalnya memiliki 1 buah NIC dengan MAC Address “08:00:27:d9:19:33”. NIC tersebut dikenali oleh Linux sebagai eth0. Lalu saya sengaja mengganti MAC Address-nya “08:00:27:14:05:a7”. Karena pada contoh ini saya menggunakan Network Manager & DHCP, Network Manager akan otomatis mengaktifkan NIC tersebut. Akibatnya saya mendapati NIC saya berubah menjadi eth1 seperti contoh berikut ini :

root@rhel6:ttirtawi# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:14:05:a7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1
    inet6 fe80::a00:27ff:fe14:5a7/64 scope link
       valid_lft forever preferred_lft forever
root@rhel6:ttirtawi# 

Bila saya cek udev rule saya mendapati 2 baris yang mengatur Ethernet seperti ini :

root@rhel6:~# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:d9:19:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
root@rhel6:~# 

Bila saya ingin mengembalikan nama eth0 pada NIC tersebut saya bisa memodifikasi berkas 70-persistent-net.rules tadi menjadi seperti ini :

root@rhel6:~# vi /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.


# PCI device 0x8086:0x100e (e1000)


# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:14:05:a7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
root@rhel6:~# 

Saya hapus saja baris yang masih mengatur NIC eth0 & MAC Address lama (“08:00:27:d9:19:33”). Lalu saya ubah baris berisi eth1 menjadi eth0 (untuk baris berisi MAC Address “08:00:27:14:05:a7”). Untuk mengaktifkan rule baru tersebut, cara paling mudah adalah dengan me-restart VM ini. Bila saya perlu melakukannya tanpa me-restart mesin, saya bisa menggunakan perintah udevadm.

Jadi setelah mengubah berkas 70-persistent-net.rules tadi, saya perlu menonaktifkan interface eth1 terlebih dulu seperti contoh berikut ini :

root@rhel6:~# ifconfig eth1 down

Barulah saya bisa menggunakan perintah udevadm seperti berikut ini :

root@rhel6:~# udevadm trigger --attr-match=subsystem=net

Perintah tersebut “memaksa” proses udev untuk membaca ulang rules yang dimilikinya & mengatur ulang penomoran Ethernet. Dengan begitu NIC yang awalnya menggunakan nama eth1 sekarang otomatis berubah menjadi eth0.

root@rhel6:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:14:05:A7 
          inet addr:192.168.56.2  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe14:5a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1180 (1.1 KiB)  TX bytes:2482 (2.4 KiB)


lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:757 errors:0 dropped:0 overruns:0 frame:0
          TX packets:757 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:65098 (63.5 KiB)  TX bytes:65098 (63.5 KiB)


root@rhel6:~# 

Kira-kira begitu catatan saya untuk mengubah penamaan network interface Ethernet pada RedHat Linux.

Upgrade SSD Macbook Air

Macbook Air saya cuma punya SSD berukuran 128GB. Ruang sebesar 128GB ini hampir seluruhnya terisi dengan data-data pekerjaan saya. Praktis tidak ada berkas musik, foto, atau film yang bisa saya simpan di dalam Macbook Air. Bahkan untuk menyimpan berkas virtual harddisk-nya VirtualBox, saya cuma bisa menyimpan 1 berkas VDI saja. Akibatnya, saya jadi kurang leluasa bekerja dengan beberapa virtual machine. Saya memutuskan untuk melakukan upgrade media penyimpanan SSD ini. Setahu saya agak sulit menemukan SSD untuk Macbook Air di Jakarta.

Dari pengalaman upgrade SSD Mac Mini, saya tahu kalau web Other World Computing menjual SSD untuk Macbook Air. Dulu saya membeli OWC Data Doubler untuk tambahan harddisk Mac Mini. OWC menjual berbagai macam komponen Mac termasuk SSD untuk Macbook Air. Setelah browsing-browsing sebentar, saya pilih SSD OWC 480GB Aura. SSD berukuran 480GB ini dibanderol dengan harga USD$409 . Harga ini sudah termasuk sebuah casing untuk SSD asli Macbook Air (Envoy USB 2.0/3.0 Enclosure).

Dulu waktu membeli OWC Data Doubler, saya menggunakan jasa pengiriman US Postal Service. Kali ini saya agak ragu untuk menggunakan jasa pengiriman yang sama mengingat harga SSD tadi cukup mahal. Karena khawatir SSD pesanan saya akan hilang saat proses pengiriman, saya memilih jasa pengiriman DHL. Ongkos pengiriman dengan DHL sebesar $24.11 (sekitar Rp270.000,- dengan kurs Rp11500,-). Jadi total biaya yang harus saya bayar ke OWC adalah USD$433.11.

Sebenarnya saya agak ragu menggunakan jasa DHL karena beberapa cerita di Internet tentang aneka pungutan yang dibebankan pada penerima paket. Beberapa cerita tentang bagaimana paket ditahan oleh pihak jasa pengiriman sebelum penerima membayar sejumlah tagihan. Tapi saya nekat saja memilih DHL. Saya siap dengan resiko membayar pajak atau pungutan lain-lainnya. DHL menyediakan sistem tracking online, fasilitas ini memudahkan saya mengetahui sudah sampai mana pengiriman paket saya dari Amerika. Ternyata paket ini sempat singgah ke Hongkong dan Taiwan terlebih dulu sebelum akhirnya sampai di Indonesia. Paket saya diperkirakan sampai pada tanggal 4 Agustus. Ternyata meleset 1 hari, saya baru menerima paketnya hari Selasa 5 Agustus 2014.

Saya sempat heran juga saat menerima paket, DHL tidak memberikan tagihan apa-apa. Ternyata keesokan harinya petugas DHL yang sama datang lagi membawa lembar invoice bernilai total Rp1.460.000,-. Saya sedikit curiga mengapa tagihan pajak ini datang terlambat, dalam hati saya mempertanyakan keaslian tagihan itu. Petugas DHL tersebut beralasan tagihan telat karena kemarin printer di kantor bermasalah. Alasan macam ini makin membuat saya curiga. Saya minta si bapak kembali lagi esok harinya. Saya ingin crosscheck dulu keaslian tagihan pajak DHL tersebut. Seorang teman yang pernah punya pengalaman buruk dengan DHL menyarankan saya untuk tidak membayar tagihan tersebut. Tapi karena komitmen awal untuk siap dengan aneka tagihan DHL, singkat cerita akhirnya saya bayar lunas tagihan tersebut. Saya sempat telepon kantor DHL Jakarta untuk meminta perincian pajak. Tapi sampai tulisan ini dibuat DHL belum mengirimkan email perincian pajak yang saya minta.

Proses Pasang SSD

Kemasan paket SSD OWC 480GB Aura terlihat seperti berikut ini :

Dalam paket ini disertakan juga 2 buah obeng Torx.

SSDnya sendiri dibungkus lagi dalam kemasan plastik kaku seperti ini :

Bentuk SSD untuk Macbook sekilas mirip seperti memori komputer desktop.

OWC menyediakan petunjuk lengkap cara memasang SSD Macbook Air. Saya tonton dulu video instruksinya dari URL ini. Pertama yang harus dilakukan adalah melepas tutup belakang Macbook Air. Ada 10 sekrup yang memegang tutup belakang ini ke body Macbook Air. Ini tampilan belakang Macbook Air setelah saya melepas tutupnya.

Mengikuti instruksi yang diberikan, selanjutnya saya melepas konektor batere. Konektor ini bentuknya seperti IC dan ukurannya cukup kecil. Untung saya masih menyimpan plastik pencongkel yang dulu saya dapat saat membeli OWC Data Doubler.

SSD bawaan Macbook Air hanya dikencangkan dengan 1 sekrup saja. Setelah sekrup dilepas, SSD sangat mudah dilepaskan. Cukup angkat ujung kanannya sedikit lalu menariknya keluar (pada foto terlihat ke arah kanan)

Lalu saya segera pasang OWC Aura 480GB ke posisi yang sama.

Ternyata SSD ini ukurannya lebih panjang, bagian ujung SSD tidak bisa masuk ke ceruk tempat SSD. Ada sedikit kelebihan plastik PCBnya (bagian yang berwarna kekuningan). Saya sempat kuatir karena bukan hal yang mudah menukar SSD ini ke penjualnya.

Ini tampilan lebih dekat hasil cropping foto :

Saya putuskan untuk mengamplas saja bagian ujung plastik SSD tersebut. Sayangnya saya tidak menemukan kertas amplas. Nekat saja saya ambil pisau cutter untuk mengikis sedikit-sedikit bagian plastik PCB tersebut. Perlu beberapa kali percobaan sampai akhirnya SSD tadi bisa ditempatkan dengan sempurna.

Proses Restore Data

Setelah SSD terpasang, saya segera boot Macbook Air ini dengan USB berisi OSX Maverick. Saya bukan ingin melakukan fresh install tapi ingin melakukan restore dari Time Machine. Setelah sukses boot dari USB, saya buka aplikasi Disk Utility. SSD OWC tadi terdeteksi dengan baik.

Segera saya buat 1 partisi baru dengan filesystem jenis Mac OS Extended (journaled). Saya beri nama volume ini “MacOSX”.

Setelah menutup aplikasi Disk Utility saya kembali ke menu utama, saya pilih menu Restore :

Sebelumnya saya sudah memasangkan USB External Disk tempat saya menaruh backup Time Machine. Harddisk eksternal tersebut saya namai TIMEMACHINE_MBA.

Saya tinggal pilih backup file terakhir yang ada dalam harddisk eksternal tadi.

Lalu saya diminta untuk menentukan tujuan restore. Saya pilih harddisk dengan nama MacOSX.

Berikutnya muncul peringatan bahwa proses restore akan menghapus semua data yang ada dalam target harddisk.

Saya hitung proses restore ini berlangsung kurang lebih 1 jam.

Setelah proses restore selesai saya bisa langsung boot Macbook Air ini seperti biasanya dari SSD. Saat saya ukur kecepatan baca tulis SSD baru ini dengan aplikasi BlackMagic, saya mendapati hasil seperti ini :

Hasilnya masih kalah dengan kecepatan baca tulis SSD asli bawaan Macbook Air :

Tapi saat dipakai sehari-hari saya belum menemukan perbedaan & penurunan performa SSD baru ini. Yang jelas saya sekarang bisa leluasa menyimpan banyak file dengan SSD besar ini.

Enclosure

SSD lama bawaan Macbook Air saya pasangkan pada enclosure Envoy. Enclosure ini menyulap SSD 128GB tadi menjadi harddisk eksternal dengan tampilan yang keren. Enclosure-nya terbuat dari bahan alumunium, bahan & bentuknya pun senada dengan body Macbook Air.

Di dalamnya ada konektor SSD tempat saya meletakkan SSD bawaan tadi.

Enclosure ini dilengkapi dengan port USB 3, jadi sudah cukup kencang untuk dipakai mentransfer data ke Mac.

Saat dihubungkan dengan Mac, ada lampu indikator berwarna biru yang menyala. Bila sedang terjadi proses transfer data, lampu indikator tersebut akan terus berkedip.

Saya beberapa kali mengalami SSD eksternal ini tidak dikenali oleh komputer (baik itu Mac maupun PC). Sepertinya konektor bagian dalam enclosure ini mudah tergoyang. Biasanya saya coba ketuk-ketukan enclosure ini di bagian tempat konektor SSD berada (dengan harapan SSD & konektornya kembali ke posisi yang benar). Dan cara bodoh-bodohan tadi biasanya berhasil, setelah diketuk-ketuk SSD bisa dibaca lagi oleh komputer.

Lalu Lintas & Taksi Di Manila

Minggu lalu saya pergi ke Manila untuk urusan pekerjaan. Ini kali kedua saya pergi Manila setelah kunjungan kali pertama tahun 2011 lalu. Bagi saya Manila banyak miripnya dengan Jakarta, terutama dalam urusan lalu lintas & macetnya. Perbedaan paling mencolok menurut saya cuma posisi berkendara di sebelah kanan (setir mobil ada di sisi kiri). Bepergian dengan taksi yang dikemudikan di sisi kiri, bagi saya membuat pusing.

Di sepanjang jalan kota Manila saya bisa lihat mayoritas tipe mobil hampir sama dengan Jakarta. Misalnya Toyota Vios, Avanza, Innova banyak sekali di Manila. Saya juga amati cukup banyak juga mobil jenis pickup seperti Toyota Hilux atau Mitsubishi Strada. Kendaraan unik yang menurut saya bisa dibilang sebagai maskotnya Filipina adalah Jeepney (dibaca “jip-ni”). Jeepney ini adalah kendaraan hasil modifikasi mobil jip menjadi semacam bus kecil. Jeep lama seperti ini kalau di Indonesia sering dipakai sebagai kendaraan offroad. Anda yang pernah ke Bromo pasti pernah melihat (atau pernah menggunakan jeep) untuk naik ke puncak Bromo . Entah bagaimana persisnya mereka melakukan modifikasi, yang jelas chassis mobil jip ini diperpanjang sehingga bisa menampung penumpang dalam jumlah banyak.

jeepney

Jeepney sebagai angkutan umum punya banyak kemiripan dengan angkot di Indonesia. Penumpang Jeepney duduk dalam 2 baris saling berhadap-hadapan. Bedanya dengan angkot yang umumnya memiliki pintu di sisi mobil, penumpang Jeepney masuk dari bagian belakang mobil. Mudah sekali menjumpai Jeepney di jalanan Manila. Beberapa kali saya juga menjumpai pangkalannya dengan Jeepney yang terpakir sangat banyak. Meskipun menggunakan mesin mobil tua, saya beberapa kali melihat supir Jeepney mengemudikan kendaraannya cukup kencang di jalanan yang lowong. Dari hasil obrolan dengan supir taksi katanya ongkos naik Jeepney ditentukan berdasar jarak, lagi-lagi mirip angkot di Indonesia. Hal lain yang menurut saya mirip dengan angkot adalah budaya menggunakan soundsystem yang diputar dengan kencang. Tiap-tiap Jeepney dihias sedemikian rupa dengan cat dan gambar-gambar yang mencolok.

Sejauh ini bagi saya yang paling menyebalkan dari transportasi di Manila bukan soal macetnya. Bagi saya taksi Manila lebih menyebalkan dari macetnya sendiri. Macetnya Manila menurut saya masih kalah dengan macetnya Jakarta. Macet di sana lebih banyak karena lampu merah. Kalaupun lalu lintas padat, kendaraan masih bergerak pelan-pelan. Entah mungkin karena saya belum terlalu lama berada di Manila, saya belum menjumpai macet horor seperti di Jakarta saat kendaraan berhenti bergerak untuk waktu yang cukup lama.

Kebanyakan taksi yang lalu lalang di Manila menggunakan sedan Toyota Vios. Lucunya hampir di semua taksi yang saya jumpai, nama pengemudi dicat di pintu mobilnya. Saya cukup heran mengapa cat yang digunakan untuk menuliskan informasi pada badan taksi itu hanya cat biasa. Kalau diamati dari dekat seperti dicat dengan kuas secara manual. Tadinya saya pikir itu hanya dilakukan oleh taksi-taksi tua yang sudah tidak terawat. Tapi saya pun menjumpai mobil baru dengan cara pengecatan seperti itu.

manila-taxi

Bagi saya lucu melihat hampir semua taksi bertuliskan “Air Con”. Seolah-olah AC mobil adalah hal istimewa tersendiri bagi taksi tersebut. Saya mendapati pengalaman yang kurang menyenangkan dengan taksi di Manila. Dari dua kali kunjungan ke Manila, saya belum sekalipun menjumpai pengemudi taksi umum yang mengemudikan taksinya dengan nyaman. Saya senang memperhatikan gaya mengemudi supir taksi khususnya di Jakarta. Di Jakarta pengemudi taksi BlueBird/SilverBird yang menurut saya mengemudikan mobilnya dengan baik (cukup nyaman bagi penumpang). Meskipun demikian taksi lain pun relatif masih OK. Apa sih ukuran nyamannya? Gampang, amati saja mulai dari gaya memindahkan gigi persneling, cara menginjak pedal gas, cara menyalip mobil, cara berpindah jalur, dan yang paling penting cara mengerem. Di Manila tidak satupun yang nyaman. Seburuk-buruknya supir taksi di Jakarta, menurut saya masih jauh lebih baik dari supir taksi di Manila.

Pengalaman kedua saya dapatkan pada trip kemarin. Saya menginap di Holiday Inn Makati. Makati ini pusat kota dan juga business district, anggap saja kawasan Sudirman-Thamrin atau Mega Kuningan-nya Jakarta. Saya harus mengunjungi client yang kantornya terletak di kawasan Pasig City. Letaknya sekitar 10–15km dari hotel tempat saya menginap. Selain jauh lokasinya melewati daerah pusat kemacetan. Berangkat ke sana tidak terlalu menjadi soal karena ada pangkalan taksi di lobi hotel. Pulangnya yang repot. Sekitar pukul setengah 8 malam saya mulai menunggu taksi di pinggir jalan. Setidaknya ada 5 taksi yang menolak untuk membawa saya ke Makati. Masih cukup bersabar saya menunggu taksi, dengan plan B saya akan menelepon hotel minta dijemput saja.

Setelah 1 jam menunggu akhirnya saya berhasil juga mendapat taksi yang bersedia membawa saya kembali ke hotel. Dari Makati sampai Pasig City biaya taksinya antara 300–400 Peso. Saya tidak tahu berapa normalnya, kabarnya sudah umum argometer taksi di sana tidak pernah akurat alias argo siluman. Mulai hari kedua saya sudah kapok menggunakan taksi umum. Saya pilih menggunakan taksi hotel saja. Sekali jalan saya harus membayar 900 Peso. Relatif mahal dari taksi biasa. Tapi kalau saya hitung-hitung ongkosnya mirip dengan menggunakan SilverBird di Jakarta. Nilai tukar Phillipine Peso itu sekitar Rp250,-.

Dari Google saya jadi tahu tidak sedikit cerita pengalaman orang tentang taksi di Manila. Kurang lebih sama dengan pengalaman saya tadi. Untuk urusan kenyamanan berkendara dengan taksi, saya masih lebih menjagokan Jakarta. Kira-kira begitu sedikit cerita tentang taksi dan lalu lintas di Manila.

Sekilas Tentang VirtualBox Shared Folder

VirtualBox Shared Folder adalah salah satu fitur VirtualBox yang memungkinkan kita berbagi data antara komputer host dengan setiap VirtualBox guest (virtual machine). Istilah komputer host & guest pernah saya tulis di tulisan sebelumya tentang virtualisasi. Syarat untuk bisa menggunakan VirtualBox Shared Folder ini adalah guest OS harus sudah dilengkapi dengan VirtualBox Guest Addition driver.

Tulisan ini adalah dokumentasi pribadi saya tentang langkah menggunakan VirtualBox Shared Folder (VBox SF) di Mac OSX 10.9. MacMini menjadi komputer sehari-hari saya untuk urusan pekerjaan & pribadi. Semua data saya ada di home directory-nya MacMini. Ada kalanya saya perlu menggunakan VirtualBox untuk menjalankan Linux (Ubuntu). Misalnya saat saya ingin terhubung dengan jaringan VPN kantor tanpa perlu menggangu koneksi LAN & aktivitas internet saya lainnya. Saat menggunakan virtual machine seperti ini, saya perlu juga mengakses data-data saya yang ada di Mac. Di sinilah saya perlu menggunakan VBox SF supaya Ubuntu saya bisa mengakses semua data yang ada di Mac. Ini langkah-langkah yang saya lakukan untuk mengijinkan Ubuntu mengakses folder Mac saya : Continue reading