Friday, December 12, 2008

Linux: Hard Disk เต็มทำไงดี

เนื่องจากวันนี้ Linux Server ที่เป็นตัว DB นิ่งไปโดยไม่มีสาเหตุ แล้วก็นั่งงงอยู่ตั้งนานจนถึงบางอ้อว่า Hdd เต็ม
แล้วเราจะรู้ได้ยังไงละว่า อะไรเต็ม หรือไฟล์ที่ไหนมันใหญ่หรือที่เป็นปัญหา
และแล้วก็ได้คำสั่งนี้เพิ่มตรวจสอบดูว่า top 10 อันดับแรกที่มีขนาดไฟล์ใหญ่สุดอยู่ที่ไหน

du -sk * | sort -nr | head



หลังจากทำการ run เรียบร้อยแล้ว จะแสดงผลประมาณนี้

300608 mysqld.log
10604 mysqld.trace
108 anaconda.syslog
64 scrollkeeper.log
64 anaconda.xlog
60 Xorg.0.log.old
60 Xorg.0.log
60 a
32 prelink.log
32 messages.4


จากการแสดงผล ไฟล์ log ของ mysqld.log ใหญ่ที่สุด หลังจากนั้นก็ทำการ ลบซะ

Monday, September 01, 2008

วิธีเคลียร์ session ที่ Lock Table ใน Oracle

ในกรณีที่เราทำการ update data ใน oracle แต่ยังไม่ทันจะ commit แล้วอยู่ดีๆ เนตเราก็ตัดซะงั้น
พอจะ update อีกที table ก็ถูก lock ไปแล้ว วิธีการแก้ไขคือทำการเคลียร์ session ที่เราทำซะ

SELECT l.inst_id,SUBSTR(L.ORACLE_USERNAME,1,8) ORA_USER, SUBSTR(L.SESSION_ID,1,3) SID,
S.serial#,
SUBSTR(O.OWNER||'.'||O.OBJECT_NAME,1,40) OBJECT, P.SPID OS_PID,
DECODE(L.LOCKED_MODE, 0,'NONE',
1,'NULL',
2,'ROW SHARE',
3,'ROW EXCLUSIVE',
4,'SHARE',
5,'SHARE ROW EXCLUSIVE',
6,'EXCLUSIVE',
NULL) LOCK_MODE
FROM sys.GV_$LOCKED_OBJECT L, DBA_OBJECTS O, sys.GV_$SESSION S, sys.GV_$PROCESS P
WHERE L.OBJECT_ID = O.OBJECT_ID
and l.inst_id = s.inst_id
AND L.SESSION_ID = S.SID
and s.inst_id = p.inst_id
AND S.PADDR = P.ADDR(+)
order by l.inst_id
;


หลังจาก query แล้วจะแสดงเลข sid และ serial ให้นำเลขทั้งสองนี้ไปใส่ในคำสั่งข้างล่างนี้

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;


เป็นอันเสร็จพิธี


ref University Software Development

Wednesday, July 09, 2008

วิธีเซต Oracle Instant Client ให้ใช้กับ pl/sql ได้

กันลืม(อีกแล้ว)
หลังจากลง Oracle Instant Client แล้วให้เซต Environment ของ window ดังนี้

LD_LIBRARY_PATH=C:\orahome
TNS_ADMIN=C:\orahome
ORACLE_HOME=C:\orahome

ถ้าข้อมูลที่เป็นภาษาไทยแล้วอ่านไม่ออกให้เพิ่ม
NLS_LANG=THAI_AMERICA.TH8TISASCII

Friday, February 08, 2008

วิธีการ Setup Swap บน Fedora Core

ช่วงก่อนได้เอา Fedora Core 5 ลงบนเครื่อง Server แล้วเอา Oracle มาลงต่อแต่ปรากฏว่าเนื้อที่สำหรับ swap ไม่พอ
ก็เลยไปค้นหาวิธีเพิ่ม swap ซึ่งมีสองวิธี
วิธีที่ 1 เพิ่ม hdd เข้าไป หรือแบ่ง partition ให้ใช้สำหรับ swap เพิ่ม
วิธีที่ 2 ทำการสร้างไฟล์สำหรับเป็นเนื้อที่ swap(วิธีนี้สำหรับคนมีเนื้อที่สำหรับ linux เพียง partition เดียว)

วิธีที่ 1
แก้ไขไฟล์ /etc/fstab แล้วเพิ่มข้อมูลดังข้างล่าง(จะ active หลัง reboot เครื่อง)
/dev/hda6 swap swap defaults 0 0

หรือถ้าต้องการ active แบบ manual ให้ใช้คำสั่งนี้
mkswap -f /dev/hda6
swapon /dev/hda6


วิธีที่ 2(มี partition เพียงอันเดียว)
สร้างไฟล์สำหรับทำเป็น swap ด้วยคำสั่ง
dd if=/dev/zero of=/var/my_swap bs=1024 count=131072

คำสั่งนี้จะทำการสร้างไฟล์ที่ /var/my_swap ขนาด 128 Mb(128 Mb => 128 x 1024 = 131072 )
แล้วทำการ ativate file ที่ต้องการให้เป็น swap ด้วยคำสั่ง
mkswap -f /var/my_swap
swapon /var/my_swap

ถ้าต้องการยกเลิก swap ก็ทำด้วยคำสั่ง
swapoff /var/my_swap
rm /var/my_swap

แค่นี้ก็เสร็จสิ้นกระบวนการ ^_^

ปล. ช่วงนี้มีแต่เขียนกันลืมแหะ
ref setting up swap space

Monday, January 07, 2008

คำสั่งในการ backup mysql ทั้งหมดในเครื่อง(กันลืม)

เนื่องจากต้อง backup db ทั้งเครื่องของ server แล้วย้ายไปอีก server หนึ่งเลยต้องทำการ backup db ทั้งหมด
คำสั่้งที่ใช้ในการ backup คือ

mysqldump --user=username --password=1234 --all-database --opt --quote-names --allow-keywords --complete-insert > backup.sql


ส่วนวิธีการ restore คือ

mysql --user=username --password < backup.sql



ถ้าต้องการ backup แค่ db ตัวเดียวก็ใช้คำสั่ง
mysqldump --user=username --password=1234 --databases my_db --opt --quote-names --allow-keywords --complete-insert > my_db.sql


และวิธีการ restore db ตัวเดียวคือ

mysql --user=username --password my_db < my_db.sql



ปล. add user ให้ก่อนการ backup โดยการ

mysql -u root mysql
mysql> grant all privileges on *.* to 'username'@'localhost' identified by 'password' with grant option;