วันพุธที่ 22 กรกฎาคม พ.ศ. 2563

ปัญหาค่า Lab Hosxp ไม่ตรง



ตรวจสอบที่
1. ตรวจสอบที่ กลุ่ม Lab




2.  ถ้าเป็นราย ITeme  ให้ตรวจสอบเป็นราย Itemp  ที่รายการ Lab


3. 


วันเสาร์ที่ 11 กุมภาพันธ์ พ.ศ. 2560

โปรแกรม HRD Free สำหรับหน่วยงานภาครัฐ

ซอฟแวร์ดี หรือจะสู้นโยบายที่ดี
โปรแกรมระบบข้อมูลบุคลากรของโรงพยาบาลฯ  ระยะเวลากว่า 3 ปี ที่ตั้งต้นเดินให้เป็นระบบ
เพราะต้องเกี่ยวข้องกับคนมากมาย กระทบกับบุคลากรของหน่วยงานทั้งหมด
จำนวนบุคลากรของโรงพยาบาลเพิ่มขึ้นแบบก้าวกระโดด คนเข้าคนออกแทบจะไม่รู้จักกัน
องค์กรคนเพิ่มขึ้น  ภาระงานเพิ่มขึ้นงานบุคลากรเวลาขอข้อมูลการลาครั้งหนึ่งต้องใช้เวลาทั้งอาทิตย์ในการรวบรวมการลา การฝึกอบรม
ตรวจสอบการลา การผึกอบรม จากที่คุยกันถ้าภาระงานขนาดนี้ เพิ่มคนอีก 5 คนก็ทำงานไม่ได้ไหว   จำเร่งด่วนที่จัดทำปัจจุบันรพ.จิตเวชเลยฯผลักดันให้มีการใช้งานเต็มระบบ  คีย์ลาผ่านระบบ online
แต่ยังคงต้องอนุมัติในเอกสารเหมือนเดิม  หน่วยงานใหนสนใจนำไปใช้สามารถนำไปใช้ได้ครับ  แต่ต้องขึ้นอยู่กับบริบทและนโยบายภายในหน่วยงานเพราะโปรแกรมบางครั้งไม่สามารถสนองตอบต่อเราได้ถ้าบริบทการทำงานที่ไม่เหมือนกัน
ดาวน์โหลดตามนี้ครับ   https://www.facebook.com/groups/1682089378699345/

วันจันทร์ที่ 16 มกราคม พ.ศ. 2560

รวมรวมคำสั่ง mysql ที่ใช้บ่อย

รวมคำสั่ง mysql ใช้บ่อย
UPDATE mngrisk set mng_status='N' where user_edit is null  อัพเดทค่า ตาราง mngrisk ฟิลล์ mng_status ให้เป็นเป็น หาก user_edit เป็นค่าว่าง

คำสั่ง group
select vn,hn,group_concat(icode)as ds from opitemrece where vn =''

วันจันทร์ที่ 9 มกราคม พ.ศ. 2560

รายละเอียด การ Config mysql สำหรับ config my.cnf ครับ เก็บไว้อ่าน

รายละเอียด การ Config mysql

ภาคที่1
MySQL นับว่าเป็นหัวใจของ Web Server อีกตัวหนึ่งเลยก็ว่าได้เพราะว่า MySQL นั้นเป็นแหล่งข้อมูลที่สามารถเรียกใช้งานได้อย่างรวดเร็ว วันนี้ผมจะเอาประสบการณ์เกี่ยวกับการ Config MySQL มาให้อ่านกัน
ผมอิงตามรุ่น 4.1 โดยใช้กับ Server ที่ใช้ tis620 เป็น Default นะครับ
เริ่มต้นที่การ Compile PHP ให้สนับสนุน MySQL
ปกติแล้วสามารถ Compile PHP ให้สนับสนุน MySQL ด้วยการใช้ –with-mysql วิธีการนี้จะเป็นการใช้ MySQL Lib Client ที่ Bundle มากับ PHP ครับ ซึ่งเป็น Version เก่า นอกจากนี้ยังมี Extension ใหม่ชื่อ MySQLi ซึ่งถ้าจะใช้ MySQLi จะไม่สามารถใช้ MySQL Lib Client ที่ Bungle มาด้วยได้ มันจะตีกัน ดังนั้นเริ่มต้นผมแนะนำให้คุณ Compile PHP ด้วย –with-mysql=/usr/local/mysql (หรือถ้า mysql อยู่ที่อื่นก็ใช้ path อื่นแล้วกันครับ)
เพื่อความสะดวกในการใช้งานภาษาไทย มักจะ setup ใน my.cnf ว่า default-character-set = tis620 วิธีการนี้จะทำให้ MySQL ทำงานช้าลงไปประมาณ 20 – 30% แต่ไม่เป็นไรครับ เพราะว่ายังไงผมก็ต้องใช้ภาษาไทยอยู่แล้ว
หลังจากใส่คำสั่งว่า default-character-set = tis620 ลงไปใน my.cnf แล้ว ผมที่ได้คือ MySQL Client มันต๊องครับ เพราะว่า Charset ของ Server เป็น tis620 แต่ของ Client เป็น Latin ครับ ดังนั้นต้อง setup เพิ่มอีกตัวหนึ่งคือ skip-character-set-client-handshake ใส่ส่วน my.cnf ครับ วิธีการนี้จะทำให้ Client ทำงานที่ Charset เดียวกับ Server เลยครับ
skip-locking – อันนี้ถ้าจำไม่ผิดเขาเปลี่ยนชื่อเป็น skip-external-locking เกี่ยวกับการทำ Repicate MySQL Server ผมไม่แน่ใจว่าถ้ามี Server เดียวจะช่วยเพิ่มประสิทธิภาพอะไรได้หรือเปล่า แต่ใส่ไว้ก็ไม่เสียหายครับ
skip-thread-priority – เป็นการกำหนดครับว่าไม่ต้องให้ thread แซงคิวกันได้ MySQL จะให้ QUERY แต่ละแบบมีความสำคัญไม่เท่ากัน ผมจำไม่ได้ว่าอะไรมากกว่าอะไร แต่การเอาหัวข้อนี้ออกทำให้ระบบ queue ของ MySQL ไม่ต้องมายุ่งยากกับการจัดคิวและทำงานเป็น FIFO แทนครับ
skip-bdb – ไม่ได้ใช้ก็ข้ามไปครับ ถ้าใช้ bdb ก็ Comment บรรทัดนี้ซะ สำหรับผมแล้วผมใช้แค่ MYISAM กับ INNODB ครับ
skip-networking – อันนี้เป็นการบอก MySQL Server ว่าไม่ต้อง Listen ที่ INET SOCKET ครับ ให้ Listen ที่ UNIX SOCKET อย่างเดียวพอ อันนี้ไม่ได้เพิ่มความเร็วมากนัก แต่ลดโอกาสการโดนโจมตีได้ครับ
log-slow-queries – อันนี้ใช้เฉพาะเวลาที่ต้องการดูว่า Query อันไหนทำงานช้า จะได้มาปรับแต่งได้ครับ
ภาคที่ 2
การบริหาร Thread – ตัวแปรเกี่ยวกับ Thread ที่สำคัญของ MySQL คือ thread_cache ตัวแปรนี้จะเป็นการไม่ทำลาย thread ของ MySQL ให้ต่ำกว่าเลขนี้ครับ ปกติก็เดาไปเรื่อยๆ ครับ โดยดูจาก Status ของ MySQL ผมแนะนำให้ดูจาก phpMyAdmin ครับ สะดวกดี จะมีค่าเกี่ยวกับ thread คือ
Threads cached 143
Threads connected 7
Threads created 532
Threads running 1
Threads cached – คือจำนวน threads ที่อยู่ในโปรแกรม MySQL ตอนนี้ จะเห็นได้ว่ามี 143 threads
Threads connected – คือจำนวน threads ที่ใช้งานจริงๆ ครับ
Threads running – คือ threads ที่กำลังหาผลการ Query อยู่ครับ
Threads created – คือจำนวน threads ที่สร้างใหม่ตั้งแต่เริ่ม Server มาครับ ถ้าค่านี้เพิ่มเร็วเกินไป ให้เพิ่มจำนวน Thread_cache ครับ ผลที่ได้คือ MySQL จะทำงานเร็วขึ้นนิดหน่อยเพราะว่าจะไม่ต้องเสียเวลา สร้างและทำลาย Threads บ่อยๆ ครับ
ภาคที่ 3
MYISAM กับหน่วยความจำ ตัวแปรที่เราสนใจคือ
key_buffer=32M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M
– Key Buffer คือพื้นที่สำหรับ Cache ค่า Key ของแต่ละ Table ครับ โดยที่ Key ของ MySQL มี 3 ตัวคือ PRIMARY, INDEX และ UNIQUE ครับ ปกติถ้ามีการใช้ Table MyISAM มากๆ ค่านี้ควรจะมากๆ ครับ ของผมมีใช้ไม่มากเลยไม่ต้องใช้ค่า Key_Buffer มาก แนะนำ 16MB สำหรับแรม 256 และเพิ่มมากขึ้นเมื่อแรมมากขึ้น
– Sort Buffer คือหน่วยความจำที่ MySQSL แต่ละ Connection จะจองเพิ่ม เพื่อทำ Table Scan ครับ ปกติถ้าคุณจะ Sort Field ที่ไม่ใช่ Key จะต้องใช้หน่วยความจำส่วนนี้เสมอ ให้ Setup เริ่มต้นตั้งแต่ 512K ขึ้นไป เนื่องจากเป็นหน่วยความจำที่จะมีการจองเพิ่มต่อ Connection ดังนั้นจะไม่ควรจะ Setup ให้สูงเกินเพราะว่าจะทำให้ MySQL ทำงานจนหน่วยความจำหมด
– Read Buffer คือหน่วยความจำที่ MySQL จะใช้ในการเก็บค่าที่อ่านจากตารางแบบต่อเนื่อง (คือไม่ได้ Sort) ไม่จำเป็นต้องมากนักก็ได้ เพราะว่าปกติเราจะมีการทำ LIMIT ในการอ่านค่ามาแสดงบนเว็บอยู่แล้ว
– Read-Random Buffer Size คือหร่วมความจำที่ MySQL จะใช้เก็บค่าจากตารางแบบไม่ต่อเนื่อง (เช่นผลการ Sort) ควรจะใหญ่กว่า Read Buffer
ของผมไม่ค่อยได้ใช้ MyISAM ค่าต่างๆ นี้เลยไม่ได้ Set เอาไว้มากนัก ครับ เดี๋ยวไปต่อภาค 4 เรื่องของ tmp_table ครับ
ภาคที่ 4
ในภาดนี้เราจะพูดถึง tmp_table ปกติแล้วในการ Complex Query นั้น MySQL จะทำการสร้างตารางผลลัทธ์ขึ้นมาในหน่วยความจำเป็น เป็น TABLE แบบ HEAP แต่ถ้าตารางมีขนาดใหญ่กว่าค่าค่าหนึ่ง MySQL จะคัดลอกตารางนั้นลง Disk เป็น MyISAM TABLE ครับ เราจะมาดูค่าค่านั้นกันครับ
ก่อนที่จะไปไกลกว่านั้น เรามาพูดถึง Complex Query ก่อนครับ โดยมากเราจะพูดถึง Query ที่มีการใช้ GROUP BY, UNIQUE, LIKE และที่ไม่แน่ใจคือ SUB SELECT ครับ
วิธีการดูว่ามีการ Swap ลงหน่วยความจำมากน้อยแค่ไหน สามารถดูได้จาก
Created tmp disk tables 14652
Created tmp tables 222220
โดยเมื่อมีการสร้าง tmp_table MySQL จะเพิ่มค่า Created tmp tables ครับ และถ้ามีการ Swap ลง Disk จะเพิ่มค่า Created tmp disk tables ปกติ ถ้านำสองค่านี้มาหารกัน คูณ ร้อย ไม่ควรจะเกิน 5-10% ครับ ขึ้นอยู่กับว่าตารางที่คุณใช้ใหญ่เล็กอย่างไร มีความซับซ้อนมากแค่ไหน
ตัวแปรที่จะควบคุมการ Swap จะมี 2 ตัวคือ
tmp_table_size=32M
max_tmp_tables=32
โดยถ้า tmp_table ใหญ่กว่า tmp_table_size จะ Swap ลง Disk ครับ หรือถ้ามีจำนวน tmp_table มากกว่า max_tmp_tables ก็จะ Swap ลง Disk เช่นกันครับ
ค่า tmp_table_size ปกติเป็น 32M และ max_tmp_tables จะเป็น 32 ครับ คุณไม่ควร Setup ให้สูงกว่า 2 เท่าของค่าปกติ แต่แนะนำให้ลองไปตรวจสอบครับว่าโปรแกรมของคุณมีทางที่จะ Optimize Query ได้มากแค่ไหน หรือ จะใช้วิธีการ Cache ผมลัพธ์ของหน้าเว็บเข้ามาช่วยก็ได้ครับ
ภาคที่ 5 – Key Buffer แบบเชิงลึก
Key Buffer คือหน่วยความจำที่ MySQL จองไว้หนเดียว แล้วใช้งานแชร์กันทุกๆ Process (ดังที่ได้พูดไว้ก่อนหน้านี้ครับ)
แต่เราจะมาพูดถึงประสิทธิภาพของ Key กันครับ ค่าที่น่าสนใจคือ
Key blocks unused 27683
Key blocks used 1312
Key read requests 1318393
Key reads 1344
คู่แรกจะบอกว่า Key Buffer ของคุณใช้งานไปมากน้อยแค่ใด ปกติแล้ว Key Blocks Unused จะไม่มากครับหรือเป็น 0 เลยก็ได้ อย่างตัวอย่างแสดงว่าเรากำหนดค่า Key_Buffer มากเกินไปครับ
คู่ที่สองถ้าเอา (Key read requests – Key reads) * 100 / Key read requests เราจะเรียกว่า Key Hits Rate ครับ อย่างตัวอย่างคือ 99.9 ครับ แสดงว่า Key Hits Rate ดีมากครับ ปกติแล้วจะอยู่ที่ประมาณ 95 – 99% ครับ ถ้าน้อยกว่านี้แนะนำให้เพิ่ม Key_Buffer ครับ สำหรับ Key Hits Rate นั้นจะต้องคิดเมื่อทำงาน MySQL ไปแล้วสักพักนะครับ อาจจะ 2-3 วัน ครับ
ภาคที่ 6 – Table Cache
สำหรับ Table Cache นั้นเป็นการเปิด Handle ของ Table ทิ้งเอาไว้ครับ เพื่อการเข้าถึงข้อมูลใน Table ได้อย่างรวดเร็วครับ แต่ถ้าคุณเพิ่มค่านี้มากๆ คุณอาจจะเกิดปัญหาว่า File Descriptor ไม่พอครับ ถ้าผมจำไม่ผิดแนะนำให้เพิ่ม File Descriptor ได้จากการแก้ไขตัวแปร Kernel ที่ /proc/sys/fs/file-max ครับโดยการใช้คำสั่ง
echo 392604 > /proc/sys/fs/file-max
ผมไม่แน่ใจว่าการใช้คำสั่ง ulimit จะได้ผลเหมือนกันหรือไม่
กลับมาต่อที่ table_cache ปกติแล้วถ้าในระบบที่มีตารางมากๆ table_cache ควรจะครอบคลุมตารางพื้นฐานทั้งหมด และอีกประมาณ 50% ของตารางที่เหลือ แต่ถ้าเป็นไปได้จะครอบคลุมทั้งหมดเลยก็ไม่ผิดแต่อย่างใด อย่างของผมเอง set ไว้ที่ 1024 เลยครับ
วิธีการจะดูว่า set ไว้น้อยเกินไปหรือเปล่า ให้ดูที่
Open tables 1024
Opened tables 1120
โดย Open tables คือจำนวน Table ที่เปิดอยู่ขณะนี้ และ Opened tables คือจำนวน Table ที่เปิดมาทั้งหมด นับตั้งแต่เริ่ม MySQL Server มา โดยถ้าค่าของ Opened tables เพิ่มเร็วเกินไป แนะนำให้เพิ่มค่า table_cache ครับ
วิธีการปรับค่า table cache ทำได้โดย เพิ่มบรรทัดนี้ใน my.cnf
table_cache=1024
ภาคที่ 7 Query Cache
Query Cache นั้นเป็นคุณสมบัติใหม่ที่มีใน MySQL รุ่นที่ 4.x ขึ้นมาครับ
Query Cache ทำงานง่ายๆ คือ ถ้ามี Query เหมือนเดิม MySQL จะเรียกจาก Cache แทนที่จะไป Query ใหม่ครับ
แต่ Query Cache ไม่ได้มีประโยชน์กับทุก Database Structure นะครับ Query Cache เหมาะกับ Table ที่ไม่ค่อยได้ Update แต่มีจำนวน Records เป็นจำนวนมาก เช่น 50,000 records ขึ้นไป Query Cache จะใช้กับ Select เท่านั้นครับ ถ้าระบบของคุณแตกต่างจากนี้การใช้ Query Cache อาจจะทำให้ได้ผลตรงกันข้ามก็ได้ครับ
วิธีการเปิดใช้งาน Query Cache ให้ใส่บรรทัดนี้ลงใน my.cnf ครับ
query_cache_type=1
query_cache_size=32M
query_cache_type จะมีได้ 3 ค่าคือ
0 – ปิด Query Cache
1 – เปิด Query Cache คุณสามารถสั่งให้ไม่ต้อง Cache ได้โดยการใช้ “SELECT SQL_NO_CACHE”
2 – แบบ On Demand คุณสามารถสั่งให้ MySQL Cache โดยการใช้ “SELECT SQL_CACHE”
ปกติแล้วถ้า Table มีการ Update แล้ว MySQL จะลบ Cache ของ Table นั้นๆ ทั้งหมดทันที และ Query Cache นั้นเป็น Case Sensitive ครับ ดังนั้น
SELECT * FROM a WHERE b=1
กับ
select * from a where b=1
จะไม่เหมือนกันนะครับ ถ้าเราเรียกตัวแรกแล้วเรียกตัวที่ 2 ตัวที่ 2 จะไม่ได้เรียกจาก Cache
ดังนั้นถ้า
1. ในระบบของคุณมีการเขียน SQL แบบไม่ได้วางแผนเรืองตัวใหญ่ตัวเล็ก คุณจะได้รับประโยชน์จาก Query Cache น้อยลง
2. ถ้า Table หลักๆ ของคุณมีการ Update ตลอดเวลา คุณจะได้รับประโยชน์จาก Query Cache น้อยลง
3. ถ้า Table หลักๆ ของคุณไม่ได้มีจำนวน Records มากคุณก็แทบจะไม่ได้รับประโยชน์จาก Query Cache เลยครับ
แหล่งที่มา
http://www.thaiadmin.org/board/index.php?topic=18693.new

วันอังคารที่ 5 พฤษภาคม พ.ศ. 2558

บันทึกประวัติการอบรมภายนอกหน่วยงาน


ระบบบันทึกประวัติการอบรมภายนอกหน่วยงาน โจทย์ปัญหาที่ดูเหมือนง่ายแต่ไม่ง่าย  
เดิมระบบนี้หน่วยงานได้คิด  ว่าบุคลากรแต่ละคนที่ไปอบรมคีย์ข้อมูลของใครของมันเลย  ใครไปที่ใหนก็คีย์เอา
แต่มีคำถามต่อมาคืV

  1.     กรณีไปมากกว่า 1 คนในโครงการเดียว  เราจะรู้ว่าโครงการนี้ไปกี่คนได้อย่างไร 
  2.      กรณีไปหลายๆ คนในโครงการเดียวกันจะลดภาระการคีย์ข้อมูลได้อย่างไร 2 -3 คนพอไหว  บางโครงการไป 5-6 คนจะทำอย่างไร่
  3.   แน่ใจได้อย่างไรว่าแต่ละคนที่ไปโครงการนั้นๆ คีย์ข้อมูลถูก

เป็นโจทย์ให้ทีมสารสนเทศต้องคิดในการออกแบบข้อมูลในการคีย์ครั้งนี้

    จึงได้ศึกษาตามกระบวนการทำงานเก่า  ของ HRD  ที่ทำอยู่ปัจจุบัน  พบว่า  ก่อนที่บุคลากรจะไปฝึกอบรม ต้องมีการขออนุมัติทุกครั้งผ่าน HRD อยู่แล้วจึงให้นำข้อมูลการขออนุมัตินั้นมาคีย์ข้อมูลก่อน

กระบวนการจึงเป็นดังนี้

1.  ให้ HRD  คีย์ข้อมูลรายละเอียดโครงการที่ไปฝึกอบรมก่อน
2.  เมื่อ ผู้ใช้ไปอบรมเสร็จแล้วมาคีย์รายละเอียดการฝึกอบรมในโปรแกรมโดยเลือกตามชื่อโครงการที่ไป




วันจันทร์ที่ 27 เมษายน พ.ศ. 2558

โปรแกรมบริหารความเสี่ยง

     ระบบความเสี่ยงเป็นระบบหนึ่งที่สำคัญในระบบคุณภาพ  ซึ่งแต่ละหน่วยงานก็แสวงหาโปรแกรมนำมาใช้ในหน่วยงานเพื่อให้สามารถตอบสนองตัวต่อความต้องการของหน่วยงาน  และเพื่อใช้ในการตอบโจทย์ของอาจารย์ HA เป็นหลัก  อาจารย์ถามอะไรมาเราก็เก็บไว้  และนำมาพัฒนา  ตอบโจทย์ผิดบ้างถูกบ้างก็ว่ากันไป
   โปรแกรมใหนคิดว่าใช้ได้  ก็แสวงหากันมาใช้   เมื่อโปรแกรมที่นำมาใช้ยังไม่ได้ตอบสนองความต้องการของผู้ใช้ภายในหน่วยงานในบางจุด   ทางทีมจึงมีการเริ่มวิเคราะห์แต่ละโปรแกรม หาข้อดึและข้อเสียของแต่ละโปรแกรมแล้วนำมาต่อยอด
    โชคดีที่ทางทีมมีเครือข่ายที่ใจดี  คือรพ.จิตเวชสระแก้วฯ  นำโดย น้องไปร์ ใจดี  ทศพรรษ  แพรสุวรรณ     แจกโปรแกรมความเสี่ยงที่ได้พัฒนาโปรแกรมความเสี่ยง  ของโรงพยาบาลจิตเวชสระแก้วฯ  นำมาให้ทดสอบการใช้งาน     จากที่คุยกับความเสี่ยงคือระบบของรพ.สระแก้วฯ ดีมาก  แต่ยังต้องมีการปรับบางจุดให้เข้ากับหน่วยงาน  
             เช่น 
              -   ระดับของผู้ใช้ แบ่ง เป็น 3 ระดับ
              -   มีการกรองข้อความก่อนส่งไปยังหน่วยงาน
              -  ผังการส่งข้อมูลปรับใหม่
             -  สิทธิการใช้  การเห็นข้อมูล
              - ระบบรายงาน  

         และเป็นช่วงที่หน่วยงานได้รับน้องว่านเข้ามาทำงานใหม่    เห็นมีแววในเรื่องการเขียนโปรแกรม PHP  จึงได้ให้ทดสอบในการปรับแก้ดู
          ใช้เวลาหลายเดือนในการปรับแก้ เนื่องจากต้อง   ทำแต่ละจุดและต้องคุยกับทีมความเสี่ยง ถึงความต้องการ  เพื่อให้ได้ระบบเป็นกลาง  กว่าจะได้ระบบที่ใช้ในหน่วยงานจริง  ต้องคุยกันหลายรอบ  จนระบบที่ใช้งานได้ในหน่วยงานและ  เริ่มอบรมผู้ใช้งาน  

ตัวอย่างหน้าตาโปรแกรม


หน้าเมื่อ Login  

หน้าจอส่วนของ การ Login ด้วยUser ผู้ดูแล



     สำหรับผู้สนใจในตัวโปรแกรมความเสี่ยง  สามารถเข้าไปไปศึกษาและดาวน์โหลดได้ในกลุ่มนี่ Facebook ตามลิ้งค์นี้ครับ   https://www.facebook.com/groups/1682089378699345/




วันศุกร์ที่ 24 เมษายน พ.ศ. 2558

การออกแบบระบบการฝึกอบรมภายในหน่วยงาน

   การเก็บประวัติการฝึกอบรบภายในหน่วยงานนั้นเป็นโจทย์หนึ่งที่หน่วยงานคิดแก้ปัญหาในการคีย์ข้อมูลที่ซ้ำซ้อนอย่างไร  ลดการคีย์ข้อมูลอย่างไร  

- เงื่อนไขคือ 1 โครงการสามารถมีคนเข้าได้หลายคน
-  ในหนึ่งโครงการสามารถจัดได้หลายวัน  1 คนอาจเข้าร่วมโครงการจำนวนชั่วโมงได้ไม่เท่ากัน

การออกแบบการจัดเก็บ  จึงใช้แนวคิดในการ
1. สร้างตารางสำหรับจัดเก็บข้อมูลของโครงการ
2. สร้างตารางการฝึกอบรมของบุคลากร  โดยเชื่อมโยงข้อมูลระหว่างตาราง โดยใช้รหัสโครงการเป็นตัวเชื่อม

การใชังาน
1. บันทึกรายละเอียดของโครงการที่จัดก่อน
2. เลือกบันทึกบุคลากรที่เข้าอบรบ  โดยเงื่อนไข  สามารถแก้ไขวัน  และแก้ไขเวลาที่เข้าได้


1. บันทึกรายละเอียดโครงการ



2.  ค้นหาโครงการเพื่อบันทึกข้อมูลบุคลากร


3.บันทึกผู้เข้าร่วมโครงการ

         ผังการทำงานช่วงต้นจะฝ่าย HRD  เป็นผู้คีย์ข้อมูลก่อนเนื่องจากปัจจุบันเป็นงานที่ต้องทำอยู่แล้ว
เป้าหมายถัดไปคีย์ให้ผู้จัดโครงการเป็นผู้คีย์ข้อมูล

       หน้าการจัดอาจจะไม่ซับซ้อนมากนัก  ทางทีมพยายามคิดเพื่อหาทางแก้ไขปัญหาเพื่อลดการซ้ำซ้อนของการคีย์ข้อมูล ท่านใดสนใจเมื่อโปรแกรมเสร็จแล้ว จะแจกเหมือนเดิมครับ

เพราะมีคนเคยสอนผมว่า  "การได้รับอาจจะมีความสุข  แต่การได้ให้มีความสุขยิ่งกว่าครับ"



วันอาทิตย์ที่ 22 กุมภาพันธ์ พ.ศ. 2558

คำสั่ง Select ซ้อน SELECT คำสั่งในการหาข้อมูลการลาแยกประเภท



SELECT a.empno as empno,a.firstname as fistname ,a.lastname as lastname ,d.depName as dep,po.posname as posname,
(select sum(amount) FROM WORK WHERE a.empno=enpid and typela = 1) t1,
(select sum(amount) FROM WORK WHERE a.empno=enpid and typela = 2) t2 ,
(select sum(amount) from WORK where a.empno=enpid and typela = 3) t3 ,
(select sum(amount) from WORK where a.empno=enpid and typela = 4) t4 ,
(select sum(amount) from WORK where a.empno=enpid and typela = 5) t5 ,
(select sum(amount) from WORK where a.empno=enpid and typela = 6) t6 ,
(select sum(amount) from WORK where a.empno=enpid and typela = 7) t7 ,
(select count(typela) from WORK where a.empno=enpid and typela=1) l1 ,
(select count(typela) from WORK where a.empno=enpid and typela=2) l2 ,
(select count(typela) from WORK where a.empno=enpid and typela=3) l3 ,
(select count(typela) from WORK where a.empno=enpid and typela=4) l4 ,
(select count(typela) from WORK where a.empno=enpid and typela=5) l5 ,
(select count(typela) from WORK where a.empno=enpid and typela=6) l6 ,
(select count(typela) from WORK where a.empno=enpid and typela=7) l7 ,
(select sum(total) from timela where a.empno=empno ) time1 ,
(select count(*) from timela where a.empno=empno ) time2
from emppersonal a
left outer join department d on d.depid=a.depId
left outer join posid po on po.posId=a.posid  
LEFT OUTER JOIN work w on w.enpid=a.empno
GROUP BY a.empno




วันพฤหัสบดีที่ 23 ตุลาคม พ.ศ. 2557

คำสั่งในการตรวจสอบไฟล์ กรณีไม่สามารถออกใบเสร็จรับเงิน กรณีผู้ป่วยค้างชำระไม่ได้


เนื่องจากพบปัญหาว่า  มีการอัพเกรดโปรแกรม Hosxp 3.57.8.22   เป็นต้นมาแล้วการเงินไม่สามารถ ออกใบเสร็จรับเงินกรณีผู้ป่วยค้างชำระได้   ซึ่งปัญหาเกิดจากได้มีการลงค้างชำระในโปรแกรมเวอร์ชั่นเก่า  ทำให้ข้อมูลบางตัวหายไป 
ใช้คำสั่ง ต่อไปนี้ Run ที่รูปสายฟ้า ของ Hosxp  แล้วตรวจสอบข้อมูลฟิลล์ ตามภาพ  

select ra.*, rad.*
from rcpt_arrear ra
join rcpt_arrear_detail rad on rad.arrear_id=ra.arrear_id

(เครดิตพี่โก้ อุดมโชค  สมหวัง  ครับ)


วันจันทร์ที่ 20 ตุลาคม พ.ศ. 2557

การตั้งค่า อัพเกรดเครื่องลูก Hosxp อัตโนมัติ

วิธีการติดตั้ง Hosxp ให้สามารถอัพเกรด เครื่องลูกข่ายอัตโนมัติ
1.  ติดตั้งเครื่อง SERVER หรือเครื่อง PC  สำหรับฝากไฟล์  โดยจำลองให้เป็นเว็บ SERVER  เพื่อสามารถดาวนโหลดข้อมูลได้
2. นำโปรแกรม Hosxp ที่ดาวน์โหลดมาใส่ไว้ในเครื่อง web server  กำหนดชื่อให้จำง่าย
3. เข้าโปรแกรม Hosxp  เข้ารูปสายฟ้า   แก้ไข ตาราง Patch ตามรูป  กำหนดเวอร์ชั่น กำหนดแหล่งข้อมูล  ตามภาพ แล้วกด Update


4. เข้าไป เข้ากำหนดใน System setting  แล้วกดบันทึก


ข้อมูลอาจไม่สมบูรณ์หน่อยครับเพราะส่วนมากผมเขียนไว้เป็นบันทึกกันลืมของผมเองครับ

วันอังคารที่ 16 กันยายน พ.ศ. 2557

วันจันทร์ที่ 8 กันยายน พ.ศ. 2557

CentOS and RHEL 7: Install Linux, Apache, MariaDB, PHP (LAMP) Stack

entOS and RHEL 7: Install Linux, Apache, MariaDB, PHP (LAMP) Stack

by  on JUNE 23, 2014 · 10 COMMENTS· LAST UPDATED JUNE 27, 2014
Iam new Red Hat Enterprise Linux version 7 user/sysadmin/developer. This version made the big number change for RHEL 7/CentOS 7. How can I install LAMP (Linux, Apache, MariaDB, PHP) stack on a RHEL version 7 or CentOS Linux version 7 using CLI or over ssh based session?

Tutorial details
DifficultyEasy (rss)
Root privilegesYes
RequirementsCentOS/RHEL v7.x
Estimated completion time20m
RHEL 7 has been released and CentOS Linux 7 is on its way with many notable changes. This guide explains how to install LAMP server.

More about LAMP

LAMP is nothing but a software bundle or a platform consisting of Linux operating system, Apache web-server, MySQL database server and PHP (or Perl/Python)scripting language. The LAMP stack is used for building heavy-duty dynamic web sites entirely out of free and open-source software. In this tutorial, I'm going to explain how to Linux, Apache, MySQL/MariaDB (drop in replacement for MySQL), PHP (LAMP) stack On CentOS 7 or RHEL 7.

Assumptions

  • I'm assuming that you've installed basic RHEL 7 or CentOS 7 server. Open the Terminal app and type the following command as root user.
  • You must be familiar with the yum command
  • You must know your Server's IP address. Use the following command to find your server's ip address for eth0 interface:

    ifconfig eth0
    OR
    ip a show eth0
    OR
    ip addr list eth0 | awk '/inet /{sub(/\/[0-9]+/,"",$2); print $2}'
    OR
    ifconfig eth0 | awk '/inet /{print $2}'
    10.41.143.156
  • I'm going to use IP address 10.41.143.156 for testing purpose. Feel free to replace this IP address with your actual private or public IP address.
Enough talk, let's set up LAMP stack.

Step #1: Install Apache on a CentOS 7 / RHEL 7 server

Type the following yum command to install Apache web-server:
sudo yum install httpd
Sample outputs:
Loaded plugins: amazon-id, rhui-lb
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-17.el7 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-17.el7 for package: httpd-2.4.6-17.el7.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-17.el7.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-17.el7 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
======================================================================================================
 Package            Arch          Version               Repository                               Size
======================================================================================================
Installing:
 httpd              x86_64        2.4.6-17.el7          rhui-REGION-rhel-server-releases        1.2 M
Installing for dependencies:
 httpd-tools        x86_64        2.4.6-17.el7          rhui-REGION-rhel-server-releases         77 k
 mailcap            noarch        2.1.41-2.el7          rhui-REGION-rhel-server-releases         31 k
 
Transaction Summary
======================================================================================================
Install  1 Package (+2 Dependent packages)
 
Total download size: 1.3 M
Installed size: 3.9 M
Is this ok [y/d/N]: y
Downloading packages:
(1/3): httpd-tools-2.4.6-17.el7.x86_64.rpm                                     |  77 kB  00:00:00
(2/3): httpd-2.4.6-17.el7.x86_64.rpm                                           | 1.2 MB  00:00:00
(3/3): mailcap-2.1.41-2.el7.noarch.rpm                                         |  31 kB  00:00:00
------------------------------------------------------------------------------------------------------
Total                                                                 2.0 MB/s | 1.3 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : httpd-tools-2.4.6-17.el7.x86_64                                                    1/3
  Installing : mailcap-2.1.41-2.el7.noarch                                                        2/3
  Installing : httpd-2.4.6-17.el7.x86_64                                                          3/3
  Verifying  : mailcap-2.1.41-2.el7.noarch                                                        1/3
  Verifying  : httpd-tools-2.4.6-17.el7.x86_64                                                    2/3
  Verifying  : httpd-2.4.6-17.el7.x86_64                                                          3/3
 
Installed:
  httpd.x86_64 0:2.4.6-17.el7
 
Dependency Installed:
  httpd-tools.x86_64 0:2.4.6-17.el7                   mailcap.noarch 0:2.1.41-2.el7
 
Complete!
 

Enable the httpd service at boot time

To make sure the httpd service start automatically at the boot time, enter:
sudo systemctl enable httpd.service
Sample outputs:
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
The following command will disable the httpd service at the boot time:
sudo systemctl disable httpd.service
Sample outputs:
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

Start the httpd service on a CentOS/RHEL v7.x

sudo systemctl start httpd.service
At this stage, you can point your web-browser to your server's IP address such as http://10.41.143.156). The following page should display on screen:
Fig.01: Check if Apache is Running on CentOS/RHEL 7 server
Fig.01: Check if Apache is Running on CentOS/RHEL 7 server

Stop the httpd service on a CentOS/RHEL v7.x

sudo systemctl stop httpd.service

Restart the httpd service on a CentOS/RHEL v7.x

sudo systemctl restart httpd.service

Finding the httpd service status on a CentOS/RHEL v7.x

To verify that the httpd service is running, enter:
systemctl is-active httpd.service
Sample outputs:
active

Gracefully restart the httpd service on a CentOS/RHEL v7.x

sudo apachectl graceful

Test httpd/Apache configuration file for errors on a CentOS/RHEL v7.x

sudo apachectl configtest
Sample outputs:
Syntax OK

httpd service default configuration

  1. Default config file: /etc/httpd/conf/httpd.conf
  2. Configuration files which load modules : /etc/httpd/conf.modules.d/ directory (e.g. PHP)
  3. Select MPMs (Processing Model) as loadable modules [worker, prefork (default)] and event:/etc/httpd/conf.modules.d/00-mpm.conf
  4. Default ports: 80 and 443 (SSL)
  5. Default log files: /var/log/httpd/{access_log,error_log}

Step #2: Install MariaDB on a CentOS 7 / RHEL 7 server

MariaDB An enhanced, drop-in replacement for MySQL server. RHEL/CentOS v7.x shifts from MySQL to MariaDB for its database management system needs. Type the following yum command to install MariaDB server:
sudo yum install mariadb-server mariadb
To start mariadb, type:
sudo systemctl start mariadb.service
To make sure the mariadb service start automatically at the boot time, enter:
sudo systemctl enable mariadb.service
Sample outputs:
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
To stop/restart and disable mariadb service use the following commands:
sudo systemctl stop mariadb.service #<-- Stop mariadb server
sudo systemctl restart mariadb.service #<-- Restart mariadb server
sudo systemctl disable mariadb.service #<-- Disable mariadb server
sudo systemctl is-active mariadb.service   #<-- Is mariadb server running?

Securing MariaDB

Type the following command:
sudo /usr/bin/mysql_secure_installation
Sample outputs:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): PRESS-ENTER-KEY
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password: YOUR-NEW-PASSWORD-HERE
Re-enter new password: YOUR-NEW-PASSWORD-HERE
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
 ... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

Test MariaDB installation

Type the following command
mysql -u root -p
Sample outputs:
Fig.02: Mariadb test connection on a CentOS / RHEL Linux v7.x
Fig.02: Mariadb test connection on a CentOS / RHEL Linux v7.x

Step #3: Install PHP on a CentOS/RHEL v7.x

To install PHP and modules such as gd/msyql type the following yum command:
sudo yum install php php-mysql php-gd php-pear
You must restart the httpd (Apache) service, enter:
sudo systemctl restart httpd.service
To search all other php modules, type:
sudo yum search php-
Sample outputs:
php-cli.x86_64 : Command-line interface for PHP
php-common.x86_64 : Common files for PHP
php-gd.x86_64 : A module for PHP applications for using the gd graphics library
php-ldap.x86_64 : A module for PHP applications that use LDAP
php-mysql.x86_64 : A module for PHP applications that use MySQL databases
php-odbc.x86_64 : A module for PHP applications that use ODBC databases
php-pdo.x86_64 : A database access abstraction module for PHP applications
php-pear.noarch : PHP Extension and Application Repository framework
php-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon
php-pgsql.x86_64 : A PostgreSQL database module for PHP
php-process.x86_64 : Modules for PHP script using system process interfaces
php-recode.x86_64 : A module for PHP applications for using the recode library
php-soap.x86_64 : A module for PHP applications that use the SOAP protocol
php-xml.x86_64 : A module for PHP applications which use XML
php-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol
To find more info about a module type:
sudo yum info php-pgsql
To install php module called php-pgsql type:
sudo yum install php-pgsql

Test PHP on your server

Create a file called /var/www/html/test.php as follows:
sudo vi /var/www/html/test.php
Append the following code:
 
<?php
   phpinfo(INFO_GENERAL);
?>
 
Save and close the file. Point your web-browser to your server's IP address such as http://10.41.143.156/test.php (feel free to replace the 10.41.143.156 with your actual IP address):
http://10.41.143.156/test.php
Sample outputs:
Fig.03: Test Apache+PHP with phpinfo() On a CentOS/RHEL v7.x server
Fig.03: Test Apache+PHP with phpinfo() On a CentOS/RHEL v7.x server
In next part, I will cover the following topics (rss feed for RHEL7 or rss for CentOS7 tutorials):
  1. Apache configuration
  2. Virtual hosting
  3. Apache security
  4. mod_ssl
  5. Perl
  6. Firewall configuration

วันพุธที่ 3 กันยายน พ.ศ. 2557

การติดตั้ง upgrade mysql percona บน CentOS

การติดตั้ง upgrade mysql percona บน CentOS

วิธี upgrade mysql บน CentOS แบบคร่าวๆนะครับ

1. check version mysql โดยใช้คำสั่ง mysql --version

2. download version mysql ที่ต้องการมาใช้
(ในที่นี้แนะนำ mysql ของ percona นะครับ)
ที่นี่ http://www.percona.com/downloads/

3. ไฟล์ที่ใช้ในการติดตั้งจะต้องมีไฟล์ client , shared , server นะครับ ชื่อไฟล์จะมีคำเหล่านี้อยู่นะครับ เช่น
MySQL-client-percona-5.5.xx-x.rhel6.x64_i86.rpm
MySQL-shared-percona-5.5.xx-x.rhel6.x64_i86.rpm
MySQL-server-percona-5.5.xx-x.rhel6.x64_i86.rpm


4. เมื่อได้ไฟล์นั้นมาแล้ว stop mysql ก่อน
  service Mysql stop;

5. จากนั้นถอนของเก่าออกโดยใช้คำสั่ง ดังนี้
#yum remove mysql
#yum remove mysql-server
(คำสั่งนี้จะลบโปรแกรมออกแต่ข้อมูลไม่หายไป)

6. จากนั้นติดตั้ง version ใหม่เข้าไปโดยใช้คำสั่ง
#rpm -ivh --nodeps --force MySQL-client-percona-5.5.xx-x.rhel6.x64_i86.rpm
#rpm -ivh --nodeps --force MySQL-shared-percona-5.5.xx-x.rhel6.x64_i86.rpm
#rpm -ivh --nodeps --force MySQL-server-percona-5.5.xx-x.rhel6.x64_i86.rpm

7. จากนั้นเมื่อติดตั้งเสร็จเรียบร้อยแล้วให้ใช้คำสั่ง upgrade mysql โดยใช้คำสั่งดังนี้

#mysql_upgrade -u root

แล้วรอจนกว่าจะเสร็จ เป็นอันเสร็จสิ้นกระบวนการ
ปล.ระวัง เรื่อง my.cnf ถ้าอัพจาก version เก่าๆมา เป็น 5.5.xx
จะมีบางฟังชั่นใช้งานไม่ได้ ตอนลงเสร็จแล้วจะ start mysql ไม่ได้ครับ ที่นึกออกที่ต้องเข้าไปแก้จะมี
1. default-character-set=tis620 จะใช้ไม่ได้ให้ comment เอาไว้ แล้วเปลี่ยนเป็น
 character-set-server=tis620 เป็นต้น
2. skip-locking ให้ comment เอาไว้อีกเช่นกัน

ปล2.ทุกการกระทำมีความเสี่ยงกรุณาทำด้วยความระมัดระวัง ด้วยความหวังดี  จาก realaerm@hosxp 
ข้อมูลจาก http://nahaeo-hospital.blogspot.com/2013/06/upgrade-mysql-percona-centos.html