Author: worapot.k

  • Oracle Database 18c XE กับปัญหาการ import user

    Oracle Database XE คืออะไร

    Oracle XE หรือ Oracle Express Edition เป็นซอฟต์แวร์ฐานข้อมูล Oracle เวอร์ชันที่ให้สามารถดาวน์โหลดไปใช้งานได้โดยไม่มีค่าใช้จ่าย แต่จะมีข้อจำกัดในการใช้งาน ตัวอย่างเช่นในเวอร์ชัน 18c จะมีข้อจำกัด เช่น

    • จำกัดการใช้งานข้อมูลได้ไม่เกิน 12 GB
    • จำกัดการใช้งาน RAM ได้ไม่เกิน 2 GB
    • ฟังก์ชันการใช้งานหลายอย่างที่ไม่มีให้ใช้งานเหมือนเวอร์ชัน Standard หรือ Enterprise

    Oracle Database XE 18c กับการติดตั้งในรูปแบบ Multitenant

    Oracle Database XE 18c จะถูกติดตั้งในรูปแบบที่เรียกว่า Multitenant ซึ่งจะมีรูปแบบดังนี้คือ

    • มีฐานข้อมูลที่เป็น container database
    • ฐานข้อมูลที่สร้างภายใต้ container เรียกว่า pluggable database
    • ในการติดตั้งไม่สามารถเลือกได้ว่าจะลงเฉพาะ container database อย่างเดียวโดยไม่ลง pluggable database แต่ตัว pluggable database จะถูกติดตั้งมาให้ด้วย 1 pluggable database (มีได้สูงสุด 3 pluggable database)

    รูปตัวอย่างผลการติดตั้ง Oracle Database XE 18c

    • การเรียกใช้ service name จะเป็นดังนี้
      • XE เป็น service name สำหรับเรียกใช้ container database
      • XEPDB1 เป็น service name สำหรับเรียกใช้งาน pluggable database
      • service name ทั้ง XE และ XEPDB1 จะถูกกำหนดไว้แล้วตั้งแต่ตอนติดตั้ง

    ปัญหาที่พบกับการ import user

    • เมื่อมีการ import user ด้วยคำสั่ง impdp
    • พบปัญหากับฐานข้อมูล container หรือ XE ส่วน ตัว pluggable หรือ XEPDB1 จะไม่พบปัญหาเช่นนี้
    • ตัวอย่างข้อความ error ที่พบ

    ORA-39083: Object type USER:”๊USER” failed to create with error: //”USER” คือชื่อ user ที่ถูก import เข้ามา

    ORA-65096: invalid common user or role name

    ตัวอย่างการแก้ปัญหาเมื่อต้องการ import user เข้า XE

    • รันคำสั่ง alter session set “_ORACLE_SCRIPT”=true;
    • สร้าง user ใหม่ โดยตั้งชื่อให้ตรงกับ user ที่ต้องการ import
    • ทำการ import ด้วยคำสั่ง impdp ตามปกติ

    สิ่งที่น่าสนใจ

    จะเห็นว่า oracle database 18c XE ถูกติดตั้งมาในรูปแบบ multitenant โดยมี database เริ่มต้นให้ 2 database คือ container database และ pluggable database ดังนั้นการเลือกว่าจะใช้งานแบบไหนก็ขึ้นอยู่กับลักษณะงานที่เราต้องการใช้งาน แต่กรณีที่ต้องการใช้งานทั่วไปแบบปกติ จะเห็นว่าการเลือกทำงานกับฐานข้อมูล pluggable database ดูแล้วน่าจะพบปัญหาน้อยกว่าจะไปทำงานกับตัว container database

  • เชื่อมต่อจากฐานข้อมูล Oracle ไปยังฐานข้อมูลอื่นด้วย Oracle Database Gateway

    โดยปกติหากต้องการเชื่อมต่อฐานข้อมูลสองฐานข้อมูลสำหรับ Oracle สามารถทำได้โดยการสร้าง database link แต่กรณีที่ต้องการสร้างการเชื่อมต่อจากฐานข้อมูล Oracle ไปยังฐานข้อมูลที่สร้างโดยระบบจัดการฐานข้อมูลอื่นที่ไม่ใช่ Oracle เช่น MS SQL Server, MySQL สามารถทำได้โดยใช้เครื่องมือที่เรียกว่า Oracle Database Gateway นั่นเอง

    ตัวอย่างการใช้ Oracle Database Gateway เชื่อมต่อไปยัง MS SQL Server

    เพื่อให้เห็นภาพการใช้งานจะยกตัวอย่างการใช้งานกับ MS SQL Sever ดังนี้

    หมายเหตุ รุ่นของ Software ที่ใช้ในตัวอย่างนี้คือ

    • Oracle Database 12c R2 (12.2.0)
    • Oracle Database Gateways 12c (12.2.0)
    1. เตรียมข้อมูลที่จำเป็นก่อนการติดตั้ง

    ข้อมูลของ SQL Server ที่เราต้องการเชื่อมต่อ

    • ชื่อเครื่องหรือ IP Address ของเครื่องที่ SQL Server ติดตั้งอยู่
    • หมายเลข port ของ SQL Server ที่เราต้องการเชื่อมต่อ
    • ชื่อฐานข้อมูล SQL Server ที่เราต้องการเชื่อมต่อ

    2. ขั้นตอนการติดตั้ง Oracle Database Gateway

    เมื่อดาวน์โหลดตัวติดตั้งจากเว็บไซต์ของ Oracle แล้ว ดำเนินการติดตั้งจากตัวติดตั้งที่ดาวน์โหลด ดังตัวอย่างต่อไปนี้

    ขั้นตอนนี้จะเป็นการใส่ข้อมูลของฐานข้อมูล MS SQL Server ที่ต้องการเชื่อมต่อ

    หลังจากนั้นทำการติดตั้งไปตามขั้นตอนตามลำดับ จนถึงขั้นตอนการสร้าง listener

    หลังจากติดตั้ง listener สำเร็จแล้ว ก็เป็นอันเสร็จสิ้นการติดตั้ง Oracle Database Gateway

    *** หลังจากการติดตั้ง หากเรียกดู Service จะเห็นว่ามี service ของ listener ปรากฎขึ้นมา

    3. การตั้งค่าหลังจากติดตั้ง

    • ไปยังโฟลเดอร์ที่ติดตั้ง Oracle Database Gateway เช่น C:\app\tg\Administrator\product\12.2.0\tghome_1\dg4msql\admin
    • เปิดไฟล์ initdg4msql.ora
    • ตรวจสอบการตั้งค่าตรง  HS_FDS_CONNECT_INFO

    HS_FDS_CONNECT_INFO=[192.168.100.184]/1433/MSSQLSERVER

    กรณีมีแค่ instance เดียว  อาจจะละชื่อ instance ไว้ และระบุชื่อฐานข้อมูลได้เลย ดังตัวอย่าง

    HS_FDS_CONNECT_INFO=[192.168.100.184]:1433//FILMSDSQL

    4. สร้าง database link

    เมื่อติดตั้ง Oracle Database Gateway เสร็จแล้ว ขั้นตอนต่อมาคือการสร้าง database link บนฐานข้อมูล Oracle เพื่อทำการเรียกดูข้อมูลบน MS SQL Server ผ่านทาง database link ที่สร้างขึ้นมา

    • รูปแบบคำสั่งในการสร้าง Database Link เป็นดังนี้

    CREATE PUBLIC DATABASE LINK DBLinkName

    CONNECT TO sa IDENTIFIED BY password

    USING ‘dg4msql’;

    • DbLinkName คือ ชื่อของ database link
    • sa คือชื่อของ user บน MS SQL Server (อาจจะเป็น user อื่นก็ได้)
    • password คือ รหัสผ่านสำหรับ user บนฐานข้อมูล MS SQL Server

    5. การเรียกดูข้อมูล สามารถเรียกดูข้อมูลผ่าน database link ที่สร้างขึ้นโดยใช้คำสั่ง sql เช่น

    select * from table@DBLinkName;

    เมื่อ table คือ ชื่อตารางที่อยู่บน MS SQL Server

  • การใช้ grant และ grant with grant option ใน Oracle

    การใช้คำสั่ง grant

    โดยทั่วไปเมื่อต้องการให้สิทธิ์สำหรับดำเนินการกับ object ใด ๆ ของ user หนึ่งให้กับอีก user หนึ่ง จะใช้คำสั่งคือ grant ตัวอย่าง เช่น

    • user1 เป็นเจ้าของตารางชื่อ table01
    • ในฐานข้อมูลมี user ชื่อ user2 อยู่ในฐานข้อมูลเดียวกับ user1
    • ต้องการให้ user2 สามารถใช้คำสั่ง select ข้อมูลจากตาราง table01 ของ user1
    • บน user1 ดำเนินการโดยใช้คำสั่งในการให้สิทธิ์คือ

    grant select on user1.table01 to user2;

    • หลังจากให้สิทธิ์แล้ว บน user2 สามารถใช้คำสั่งในการ select ข้อมูลจากตาราง table01 ของ user1 ได้ ตังตัวอย่างดังนี้

    select * from user1.table01; //ต้องระบุ user คั่นด้วยจุด และตามด้วยชื่อตาราง

    • การให้สิทธิ์ นอกจาก select แล้ว ยังมีสิทธิ์อื่น ๆ อีก เช่น insert, update, delete, execute ฯลฯ
    • ตัวอย่างการให้สิทธิ์มากกว่าหนึ่งสิทธิ์

    grant select, insert, update, delete on user1.table01 to user2;

    การใช้คำสั่ง grant with grant option

    รูปแบบการใช้คำสั่งคือ หลังคำสั่ง grant ปกติ ตามด้วย with grant option

    เช่น grant select on user1.table01 to user2 with grant option;

    ผลจากการใช้คำสั่ง with grant option จะมีผลให้ user ที่ได้รับสิทธิ์ สามารถให้สิทธิ์ที่ได้รับมา grant ต่อไปให้กับ user อื่นต่อได้นั่นเอง

    • ต่อเนื่องจากตัวอย่างแรก มี user3 ในฐานข้อมูลเดียวกันกับ user1 และ user2
    • เมื่อ user1 ใช้คำสั่ง

    grant select on user1.table01 to user2 with grant option;

    • มีผลทำให้ user2 สามารถ grant สิทธิ์ในการ select ให้กับ user อื่นต่อได้ เช่น

    grant select on user1.table01 to user3;

    user ที่ได้รับสิทธิ์ grant with option สามารถ ใช้ grant with option ต่อให้กับ user อื่นได้หรือไม่ ???

    • user ที่ได้รับการ grant ด้วยคำสั่ง with grant option สามารถ grant ให้ user อื่นด้วยคำสั่ง with grant option ด้วยเช่นกัน
    • ตัวอย่าง เช่น มี user4 ในฐานข้อมูลเดียวกับ user1, user2, user3
    • ต่อเนื่องจากตัวอย่างก่อนหน้านี้ user3 สามารถใช้คำสั่ง with grant option ต่อให้กับ user4 ได้ หาก user2 ได้ grant ให้ user3 ด้วยคำสั่ง with grant option

    ข้อควรระวัง

    • จะเห็นว่าในการใช้คำสั่ง grant with grant option นั้น จะทำให้ user ที่ได้รับสิทธิ์นี้ สามารถ grant สิทธิ์ต่อ ๆ กันไปให้กับ user อื่น ๆ เป็นทอด ๆ ด้วยคำสั่ง with grant option เช่นกัน
    • เมื่อ user อื่นที่ไม่ใช่เจ้าของ object ที่ถูก grant ได้รับสิทธิ์ในการ grant with option จะเห็นว่าจะทำให้การควบคุมการให้สิทธิ์ทำได้ยาก หรืออาจจะเกิดความไม่ปลอดภัยเกิดขึ้น ดังนั้น ถ้าไม่จำเป็นจึงไม่ควรให้สิทธิ์แบบ with grant option นั่นเอง

    การยกเลิกการให้สิทธิ์

    เมื่อต้องการยกเลิกการให้สิทธิ์ สามารถทำได้โดยใช้คำสั่ง revoke ตัวอย่างเช่น

    revoke select, insert, update, delete on user1.table01 from user2;

    จะเป็นการยกเลิกการให้สิทธิ์ในการ select, insert, update, delete บนตาราง table01 ของ user1 ที่เคยให้กับ user2

    ตรวจสอบได้อย่างไร ว่าเคย grant อะไรไปบ้าง

    มี view ของระบบที่ช่วยให้สามารถตรวจสอบได้ว่า object ใด ถูก grant อะไรไปบ้าง ซึ่ง view นี้เป็นของ user sys

    • view ที่เก็บข้อมูลการ grant ของ object ต่าง ๆ ชื่อ dba_tab_privs
    • มีฟีลด์ที่น่าสนใจคือ
      • grantee คือ user ที่ได้รับสิทธิ์
      • owner คือ user ที่เป็นเจ้าของ object
      • table_name คือ ชื่อ object (ชื่อของ table, view ฯลฯ)
      • grantor คือ user ที่เป็นผู้ให้สิทธิ์ (อาจจะไม่ใช่เจ้าของ object ก็ได้)
      • privilege คือ สิทธิ์ที่ได้รับ
      • grantable คือ user ที่เป็น grantee สามารถ grant สิทธิ์ต่อได้หรือไม่

  • Oracle User expire โดยไม่ทราบสาเหตุ

    นักพัฒนาบางท่านที่เพิ่งเริ่มพัฒนาระบบบนฐานข้อมูล Oracle อาจจะเคยเจอปัญหาเมื่อใช้ Oracle ตั้งแต่เวอร์ชัน 11 เป็นต้นไป นั่นคือ เมื่อสร้าง user บน Oracle และใช้งานไปได้ซักระยะอยู่ ๆ user นี้ก็เกิดก็ expire โดยที่ไม่ได้มีใครเข้าแก้ไขการตั้งค่าของ user นี้ ซึ่งเหตุการณ์นี้อาจจะมีสาเหตุแบบเดียวกับที่จะนำเสนอในบทควาามนี้ก็เป็นได้

    หมายเหตุ ในบทความนี้จะใช้ Oracle SQL Developer ซึ่งเป็นเครื่องมือในการเข้าถึงและจัดการฐานข้อมูล Oracle มาช่วยในการอธิบายเพื่อให้เห็นภาพได้ง่ายขึ้น

    ขั้นตอนการตรวจสอบที่มาของปัญหาและการแก้ไข

    1. login ด้วย sys
    2. ตรวจสอบการตั้งค่า Default Profile โดยเลือกเมนู View –> DBA

    3. ในหน้าต่าง DBA เลือกเพิ่มการเชื่อมต่อโดย SYS

    4. ไปที่การตั้งค่า Default Profile

    5. คลิกขวาที่ Default แล้วเลือก Edit

    6. จะปรากฏหน้าต่าง Default Profile

    ซึ่งใน Oracle 11 เป็นต้นไป หลังจากติดตั้งและสร้าง Database แล้ว ใน Default Profile จะมีการตั้งค่าเริ่มต้นไว้ดังรูป โดย Default Profile จะมีผลกับ user ที่ถูกสร้างใหม่ และค่าที่ทำให้ user หมดอายุโดยอัตโนมัติก็คือ “Expire in (days)” นั่นเอง จึงเป็นที่มาของการที่ user expire เองโดยที่ไม่ได้มีการเข้าไปแก้ไขข้อมูลใด ๆ ของ user นี้

    7. การแก้ไขไม่ให้ user ที่สร้างใหม่ expire อัตโนมัติ ทำได้โดยการแก้ค่า “Expire in (days)” ให้เป็น UNLIMITED

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

  • Remote ไปยังเครื่องคอมพิวเตอร์อื่นด้วย Chrome Browser

    การใช้งานเทคโนโลยีการทำงานระยะไกลหรือการ remote จากเครื่องคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่อง นับว่ามีความจำเป็นเพิ่มขึ้นมากในปัจจุบัน ซึ่งตัวระบบปฏิบัติการเองก็มีเครื่องมือรองรับ เช่น ใน Windows จะมี Remote Desktop นอกจากนี้ยังมีซอฟต์แวร์ที่รองรับการทำงานลักษณะนี้ เช่น TeamViewer หรือ AnyDesk ซึ่งบางซอฟต์แวร์หากใช้งานในลักษณะฟรี ก็อาจจะมีข้อจำกัดในการใช้งานบ้าง ดังนั้นในบทความนี้จะนำเสนอการใช้งาน remote ผ่าน chrome browser ซึ่งสามารถใช้งานได้ฟรี และค่อนข้างจะรองรับการทำงานทั่ว ๆ ไปได้ โดยไม่จำกัดเรื่องการเข้าใช้งาน (บางซอฟต์แวร์อาจจะมีการจำกัดจำนวนครั้งในการใช้งานในช่วงระยะเวลาหนึ่ง เป็นต้น)

    เตรียมการเบื้องต้นก่อนการใช้งาน

    1. ติดตั้ง chrome browser ทั้งฝั่งเครื่องต้นทางและฝั่งเครื่องปลายทาง
    2. เตรียมบัญชีผู้ใช้งานสำหรับ google หรือ google account เพื่อใช้สำหรับ remote

    ขั้นตอนการติดตั้งและตั้งค่า Extensions “Chrome Remote Desktop”

    1. การใช้งาน remote ผ่าน chrome browser นั้น อันดับแรกจะต้องทำการติดตั้ง Extensions เพิ่มก่อน ซึ่งก็คือ Chrome Remote Desktop ซึ่งช่องทางการดาวน์โหลดสามารถทำได้จากเมนูที่อยู่ในหน้าจอ chrome ได้เลยดังรูป โดยการกดที่เมนู Apps

    ถ้าไม่เจอเมนู Apps ให้ไปที่เมนู Bookmarks และเลือก Show bookmark bar ดังรูป

    จะปรากฏแถบว่าง ๆ ใต้ช่อง URL ซึ่งแถบนี้ก็คือ bookmark bar นั่นเอง

    คลิกขวาที่ bookmark bar จากนั้นเลือกเมนู Show apps shortcut

    เมื่อกดเลือกเมนู Apps แล้ว ในหน้าจอ chrome จะปรากฏรายการดังนี้

    เลือก Web Store เพื่อเข้าไปดาวน์โหลด Chrome Remote Desktop

    2. ในช่อง Search the store พิมพ์ chrome remote desktop เพื่อค้นหา

    กดเลือก Chrome Remote Desktop จะเข้าสู่หน้าจอการติดตั้ง extension นี้เพิ่มเติมให้กับ chrome browser

    เมื่อกดปุ่ม Add to Chrome จะมีกล่องข้อความถามเพื่อยืนยันการติดตั้ง ให้กดปุ่ม Add extension เพื่อยืนยัน

    เมื่อติดตั้งสำเร็จจะมีข้อความแจ้งดังรูป

    สังเกตว่าหลังช่อง URL จะปรากฏไอคอน

    ซึ่งมีไว้สำหรับแสดงและเรียกใช้งาน extensions ที่ติดตั้งไปนั่นเอง

    3. ทำการติดตั้ง Chrome Remote Desktop ทั้งฝั่งเครื่องต้นทางและปลายทางที่ต้องการ remote

    4. การเรียกใช้งานสามารถทำได้ดังรูป

    จากนั้นเลือก Chrome Remote Desktop

    5. ก่อนที่จะทำการ remote หรือตั้งค่าการ remote จะต้องทำการ login บน chrome browser ก่อนด้วยบัญขี google ที่ได้เตรียมไว้

    6. เริ่มต้นการตั้งค่าครั้งแรกโดยเลือก Remote Access ซึ่งครั้งแรกสุดจะต้องติดตั้งโปรแกรมเพิ่มเติมก่อน

    กดตรงไอคอนดังรูป เพื่อดาวน์โหลดโปรแกรมติดตั้งเพิ่มเติม

    ไฟล์ติดตั้งชื่อ chromeremotedesktophost.msi

    รันไฟล์นี้เพื่อทำการติดตั้งโปรแกรม หรือกดยอมรับและติดตั้งจากหน้าจอ chrome browser ดังรูป

    ในขั้นตอนการติดตั้งจะมีให้ตั้งชื่อเครื่อง

    จากนั้นจะเข้าสู่ขั้นตอนในการสร้างรหัส PIN โดย PIN นี้ใช้สำหรับให้เครื่องต้นทางที่ต้องการ remote เข้ามา ทำการกรอกเพื่อเชื่อมต่อ

    เมื่อตั้งค่าเสร็จสิ้นทั้งเครื่องต้นทางและปลายทางแล้ว ในบัญชี google เดียวกัน จะเห็นเครื่องที่เราได้ตั้งค่า remote ไว้ดังรูป

    7. สามารถแก้ไขชื่อเครื่องและตั้งค่ารหัส PIN ใหม่โดยเลือกที่ไอคอน

    จะเข้าสู่หน้าจอการตั้งค่าดังรูป

    8. การปิดการเชื่อมต่อระยะไกล สามารถทำได้โดยการเลือกที่ไอคอน

    เมื่อปิดการเชื่อมต่อแล้วสามารถกลับมาเปิดใหม่ได้อีกครั้งดังรูป

    9. เริ่มต้นการ remote โดยเลือกรายการที่เป็น อุปกรณ์ระยะไกล

    จากนั้นจึงใส่รหัส PIN ที่ได้ตั้งค่าไว้สำหรับเครื่องนั้น ๆ (เครื่องปลายทาง) ก็จะสามารถ remote เข้าไปที่เครื่องปลายทางได้

    เมื่อ remote สำเร็จแล้ว สามารถควบคุมการทำงานจากเครื่องต้นทางได้เสมือนไปทำงานอยู่ที่เครื่องปลายทาง

    ส่วนด้านขวาของหน้าจอจะมีสัญลักษณ์คล้ายหัวลูกศร สำหรับใช้เพื่อเรียกเมนูสำหรับปรับแต่งและควบคุมการทำงานของหน้าจอ remote

    การตั้งค่าการควบคุมระยะไกล หรือ Remote Support

    การตั้งค่าการควบคุมระยะไกล หรือ Remote Access ที่ได้กล่าวถึงไปก่อนหน้านี้ เป็นการตั้งค่าสำหรับการรีโมต โดยอาศัยบัญชี google บัญชีเดียวกันเพื่อ remote ไปมาระหว่างเครื่องสองเครื่องหรือมากกว่า แต่หากต้องการ remote โดยใช้บัญชี google อื่นสามารถตั้งค่าได้ในส่วนของ Remote Support ซึ่งการใช้งานในลักษณะนี้เหมาะกับการที่จะให้ผู้ที่ทำงานอยู่อีกเครื่องทำการ remote เข้ามาช่วยเหลือหรือแก้ไขปัญหาที่หน้าจอของอีกฝ่าย เช่น ผู้ดูแลระบบ remote ไปช่วยดูปัญหาที่เครื่องของผู้ใช้ โดยทั้งผู้ดูแลระบบและผู้ใช้ที่ต้องการความช่วยเหลือ ต่างก็มีบัญชี google เป็นของตัวเอง

    1. ลักษณะการใช้งาน Remote Support จะเป็นการสร้างรหัส PIN สำหรับการเข้าถึงเป็นครั้ง ๆ ไป
    2. หน้าจอการใช้งาน จะแบ่งเป็นสองส่วน คือ ฝั่งรับการสนับสนุน และฝั่งให้การสนับสนุน

    3. ฝั่งเครื่องที่ที่ต้องการรับการสนับสนุน ต้องทำการสร้างรหัสสำหรับให้เครื่องที่จะเข้ามาสนับสนุนทำการกรอกดังรูป

    4. ฝั่งเครื่องที่จะเข้ามาสนับสนุน หรือ remote เข้ามาช่วยเหลือ จะต้องได้รับแจ้งรหัสตัวเลขที่ทางฝั่งเครื่องปลายทางแจ้งมา เพื่อนำมากรอกในส่วนของ ให้การสนับสนุน

    จากนั้นกดปุ่มเชื่อมต่อ

    5. เมื่อฝั่งเครื่องที่จะเข้ามาสนับสนุนกรอกรหัสและกดปุ่มเชื่อมต่อ ฝั่งเครื่องที่ขอรับการสนับสนุน จะปรากฏข้อความให้ยืนยันว่าจะยอมรับการเชื่อมต่อหรือไม่

    เมื่อตอบ Share แล้ว ฝั่งเครื่องที่จะ remote เข้ามาก็จะสามารถเชื่อมต่อเข้ามาที่เครื่องที่ขอรับการสนับสนุนได้

    และฝั่งผู้รับการสนับสนุนสามารถหยุดการเชื่อมต่อได้โดยเลือก Stop Sharing จากแถบเมนูด้านล่าง

    เบื้องหลังการทำงาน

    สำหรับการทำงานเบื้องหลัง จะมี Service ที่ชื่อ Chrome Remote Desktop Service ที่คอยตรวจสอบและจัดการเรื่องการเชื่อมต่อ

    ดังนั้น หากมีปัญหาเชื่อมต่อไม่ได้อาจจะตรวจสอบว่า service นี้ยังทำงานอยู่หรือไม่

    อ้างอิง สามารถดูข้อมูลการตั้งค่าและการใช้งานเพิ่มเติมได้ที่

    https://support.google.com/chrome/answer/1649523?co=GENIE.Platform%3DDesktop&hl=en

  • การส่งภาพหน้าจอโทรศัพท์มือถือระบบ Android ไปยัง PC (Windows 10) โดยไม่ต้องติดตั้งโปรแกรมเพิ่ม

    ในการนำเสนอข้อมูลจากหน้าจอโทรศัพท์มือถือไปยัง Projector บางครั้งอาจจะต้องมีอุปกรณ์พิเศษในการส่งข้อมูลภาพ แต่มีอีกวิธีง่าย ๆ ที่สามารถทำได้หากมี PC ที่ติดตั้ง Windows 10 นั่นคือ การส่งข้อมูลหน้าจอจากโทรศัพท์มือถือไปยัง PC จากนั้นจึงส่งภาพจากหน้าจอ PC ขึ้นไปยัง Projector อีกต่อหนึ่ง ซึ่งวิธีนี้ผู้นำเสนอก็จะสามารถนำเสนอได้ทั้งข้อมูลจากหน้าจอมือถือ และข้อมูลอื่น ๆ ที่อยู่บน PC ด้วย

    สำหรับในบทความนี้จะกล่าวถึงวิธีการดังกล่าว โดยจะเป็นการส่งภาพหน้าจอจากโทรศัพท์มือถือระบบ Android ซึ่งเป็นวิธีการที่ไม่ต้องติดตั้งโปรแกรมใด ๆ เพิ่มบนโทรศัพท์มือถือ หรือบน PC

    สิ่งที่ควรรู้ก่อนการตั้งค่า

    • เนื่องจากวิธีการนี้เป็นการส่งผ่านข้อมูลถึงกันผ่านระบบเครือข่ายไร้สาย หรือ WiFi ดังนั้นทั้งอุปกรณ์ Android และ PC ควรเชื่อมต่อผ่าน WiFi บน Access Point ชื่อเดียวกัน เพื่อลดปัญหาที่จะเกิดจากการที่อุปกรณ์ทั้งสองหากันไม่เจอ

    ขั้นตอนการตั้งค่าบน Windows 10

    1. บน PC ไปที่ Setting

    2. เลือก System จะปรากฏเมนูด้านซ้ายมือ จากนั้นเลือก Projecting to this PC

    3. การตั้งค่าลำดับแรก “Some Windows and Android devices can project this PC when you say it’s OK” จะมี 3 ตัวเลือก

    ให้ตั้งค่าเป็นตัวเลือก Available everywhere on secure networks หรือ Available everywhere ส่วนตัวเลือก Always Off เป็นการเลือกที่จะไม่ให้มีการเชื่อมต่อเข้ามา

    4. การตั้งค่า “Ask to project to this PC”

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

    โดยเมื่อมีการขอเชื่อมต่อเข้ามายัง PC จะมีกล่องข้อความแจ้งเตือนดังรูป

    ส่วนตัวเลือกในการยอมรับการเชื่อมต่อจะมีสี่ตัวเลือกดังรูป

    ตัวเลือก First time only เป็นการตั้งค่าให้มีการแจ้งเตือนครั้งแรกที่ขอเชื่อมต่อเข้ามาเท่านั้น หากมีการขอเชื่อมต่อหลังจากนี้ครั้งต่อไปจะสามารถทำการเชื่อมต่อได้เลย (ตอนยอมรับการเชื่อมต่อต้องเลือก Always allow ด้วย หลังจากนี้หากมีการขอเชื่อมต่ออีกก็จะไม่มีข้อความแจ้งเตือนขึ้นมาอีก)

    ตัวเลือก Every time a connection is requested เป็นการตั้งค่าให้มีการแจ้งเตือนทุกครั้ง เมื่อมีการเชื่อมต่อ

    5. การตั้งค่า Require PIN for pairing

    เป็นการกำหนดว่าเมื่อมีการเชื่อมต่อกัน จะต้องมีการยืนยันรหัส PIN หรือไม่ โดยฝั่ง PC จะออกรหัส PIN ให้ และฝั่งโทรศัพท์มือถือต้องกรอกรหัส PIN นี้เพื่อยืนยัน

    ตัวเลือกการตั้งค่ามี 3 ตัวเลือก คือ

    ตัวเลือก Never เลือกตัวเลือกนี้หากไม่ต้องการใช้รหัส PIN ในการยืนยัน

    ตัวเลือก First Time ใช้สำหรับยืนยันรหัส PIN ครั้งแรกครั้งเดียว

    ตัวเลือก Always ต้องมีการยืนยันรหัส PIN ทุกครั้ง

    ตัวอย่างรหัส PIN

    6. การตั้งค่า “This PC can be discovered for projection only when it’s plugged into a power source”

    ถ้าเลือกเป็น On สามารถเชื่อมต่อได้เฉพาะกรณีที่ PC ต่อเข้ากับสาย power adapter ที่ต่อเข้ากับแหล่งจ่ายไฟเท่านั้น

    ส่งภาพจากหน้าจอโทรศัพท์มือถือไปยัง PC

    1. บนโทรศัพท์มือถือ ให้ไปที่ Setting และหาเมนู Wireless Display (อยู่ในหมวด WIRELESS & NETWORKS)

    จากตัวอย่าง เลือก More จะเจอเมนู Wireless Display

    2. แตะที่เมนู Wireless Display แล้วเปิดการใช้งาน Wireless Display จะปรากฏรายการ PC ที่เปิดให้สามารถเชื่อมต่อได้

    3. แตะเลือก PC ที่ต้องการเชื่อมต่อ หากบน PC มีการตั้งค่าให้ยืนยันรหัส PIN จะมีหน้าต่างให้ป้อนรหัส PIN บนโทรศัพท์มือถือ

    4. เมื่อป้อนรหัส PIN แล้วกด Accept ก็จะสามารถเชื่อมต่อกับ PC เพื่อส่งหน้าจอจากโทรศัพท์มือถือไปยัง PC ได้ดังรูป

  • คำสั่ง Update โดยใช้ข้อมูลจากอีกตาราง [Oracle]

    ในการสั่ง update ข้อมูล ในบางครั้งเราอาจจะเจอโจทย์ว่า ต้องการ update ข้อมูลในตารางหนึ่งโดยใช้ข้อมูลจากอีกตารางหนึ่ง ซึ่งลักษณะของข้อมูลทั้งสองตารางนี้ จะต้องมีฟีลด์ข้อมูลที่สามารถเชื่อมโยงความสัมพันธ์ของข้อมูลแต่ละเร็คคอร์ดได้

    ตัวอย่างข้อมูล

    1. มีข้อมูลสองตาราง

    ตารางที่ 1 เก็บข้อมูลวันในหนึ่งสัปดาห์ภาษาไทย [ชื่อตาราง : DAY_OF_WEEK_THAI]

    โครงสร้างตารางประกอบด้วย

    • ฟีลด์ ID เก็บ ID ของแต่ละเร็คคอร์ด
    • ฟีลด์ DAY_FULL เก็บข้อมูลวันแบบเต็มภาษาไทย
    • ฟีดล์ DAY_SHORT เก็บข้อมูลวันแบบย่อภาษาไทย

    ข้อมูลในตารางเป็นดังนี้

    ตารางที่ 2 เก็บข้อมูลวันในหนึ่งสัปดาห์ภาษาอังกฤษ [ชื่อตาราง : DAY_OF_WEEK]

    โครงสร้างตารางประกอบด้วย

    • ฟีลด์ ID เก็บ ID ของแต่ละเร็คคอร์ด
    • ฟีลด์ DAY_ENG เก็บข้อมูลวันแบบเต็มภาษาอังกฤษ
    • ฟีดล์ DAY_ENG_SHORT เก็บข้อมูลวันแบบย่อภาษาอังกฤษ

    ข้อมูลในตารางเป็นดังนี้

    2. ฟีลด์ที่เชื่อมโยงความสัมพันธ์ของทั้งสองตารางคือฟีลด์ ID

    3. ต่อมามีการปรับแก้โครงสร้างตาราง DAY_OF_WEEK โดยเพิ่มฟีลด์ 2 ฟีลด์ ดังนี้

    ฟีลด์ DAY_THA สำหรับเก็บข้อมูลวันแบบเต็มภาษาไทย

    ฟีลด์ DAY_THA_SHORT สำหรับเก็บข้อมูลวันแบบย่อภาษาไทย

    4. เนื่องจากมีข้อมูลวันภาษาไทยในตาราง DAY_OF_WEEK_THAI อยู่แล้ว และสามารถเชื่อมโยงข้อมูลกันได้ด้วยฟีลด์ ID ดังนั้นความต้องการคือ การใช้ข้อมูลจากตาราง DAY_OF_WEEK_THAI มา update ให้กับตาราง DAY_OF_WEEK

    5. รายละเอียดการ update

    นำข้อมูลวันแบบเต็มภาษาไทยในฟีลด์ DAY_FULL ของตาราง DAY_OF_WEEK_THAI มาใส่ในฟีลด์ DAY_THA ของตาราง DAY_OF_WEEK

    นำข้อมูลวันแบบย่อภาษาไทยในฟีลด์ DAY_SHORT ของตาราง DAY_OF_WEEK_THAI มาใส่ในฟีลด์ DAY_THA_SHORT ของตาราง DAY_OF_WEEK

    รูปแบบคำสั่ง SQL

    แบบที่ 1

    update table1 t1 set

    table1.data1= (select table2.data1 from table2 where table2.key = t1.key),

    table1.data2 = (select table2.data2 from table2 where table2.key = t1.key);

    แบบที่ 2

    update table1 t1 set

    (table1.data1, table1.data2) =

    (select table2.data1, table2.data2 from table2 where table2.key = t1.key);

    อธิบายคำสั่ง

    table1 คือ ตารางที่ต้องการ update

    t1 คือ ชื่ออ้างอิงแทนตาราง table1 ซึ่ง t1 จะถูกใช้ในคำสั่ง select

    table1.data1 และ table1.data2 คือ ฟีลด์ข้อมูลที่ต้องการ update

    table2 คือ ตารางที่จะนำข้อมูลมาใช้เพื่อ update ให้กับ table1

    table2.data1 และ table2.data2 คือ ฟีลด์ข้อมูลที่จะนำมาใช้เพื่อ update ให้กับ table1.data1 และ table1.data2 ตามลำดับ

    ตัวอย่างการนำไปใช้งาน

    แบบที่ 1

    update day_of_week t1 set
    day_tha = (select day_full from day_of_week_thai where day_of_week_thai.id = t1.id),
    day_tha_short = (select day_short from day_of_week_thai where day_of_week_thai.id = t1.id);

    แบบที่ 2

    update day_of_week t1 set
    (day_tha, day_tha_short) =
    (select day_full, day_short from day_of_week_thai where day_of_week_thai.id = t1.id);

    ผลลัพธ์การรันคำสั่งทั้งสองรูปแบบ จะได้ผลลัพธ์เช่นเดียวกัน ดังรูป

    ข้อมูลก่อน update

    ข้อมูลหลัง update

    สรุป

    1. สามารถใช้คำสั่ง update ได้ทั้งสองรูปแบบซึ่งจะได้ผลลัพธ์เหมือนกัน
    2. แบบที่ 2 จะเป็นการใช้คำสั่งที่สั้นและกระชับกว่าแบบที่ 1 มาก กรณีที่ข้อมูลที่ต้องการ update มีมากกว่า 1 ฟีลด์
    3. ข้อควรระวังคือ ความสัมพันธ์ระหว่างสองตารางต้องเป็น 1 ต่อ 1 จึงจะสามารถใช้คำสั่งรูปแบบนี้ได้
  • คลายข้อสงสัย “ทำไมสแกนบาร์โคดจากเครื่องอ่านแล้วไม่ enter หรือ tab ให้”

    ในการพัฒนาระบบที่ต้องมีการอ่านข้อมูลจากเครื่องสแกนบาร์โคดแบบสองมิติ (แบบแท่งหรือแบบเส้น) รูปแบบในการทำงานมักจะเป็นการอ่านข้อมูลจากตัวบาร์โคด จากนั้นตามด้วยอักขระ Enter หรือ Tab เพื่อเป็นการระบุว่าให้ส่งข้อมูลที่อ่านได้จากบาร์โคดให้กับฟังก์ชันใดฟังก์ชันหนึ่งเพื่อนำไปใช้งานต่อ แต่ในบางครั้งอาจจะเคยเจอปัญหาว่าทำไมเมื่อสแกนบาร์โคดแล้วไม่มีการ Enter หรือ Tab โดยอัตโนมัติ ทำให้ต้องกดปุ่ม Enter หรือ Tab เองทุกครั้งจากคีย์บอร์ด หรือต้องปรับแต่ง code เพื่อเพิ่มอักขระ Enter หรือ Tab ต่อหลังข้อมูลที่อ่านได้จากเครื่องสแกนบาร์โคด

    หนึ่งในแนวทางสำหรับการแก้ปัญหานี้อยู่ที่ตัวคู่มือสำหรับเครื่องสแกนบาร์โคดแต่ละรุ่นนั่นเอง โดยในที่นี้จะยกตัวอย่างกรณีที่เคยพบดังนี้

    ตัวอย่างการตั้งค่าเครื่องอ่านบาร์โคด Honeywell รุ่น Xenon Model 1900

    1. หาคู่มือการตั้งค่าตามรุ่น ซึ่งรุ่นนี้ คือ Xenon Model 1900 (ถ้าไม่มีคู่มือที่ให้มาพร้อมกับอุปกรณ์ อาจจะสามารถค้นหาคู่มือได้จากทาง internet โดยค้นตามรุ่น หรือตามบริษัทผู้ผลิต)
    2. ในคู่มือที่เกี่ยวกับการตั้งค่าเพื่อแก้ปัญหานี้ จะมีรหัสบาร์โคดที่ให้เราทำการสแกนเพื่อตั้งค่าอุปกรณ์ดังนี้

    กรณีต้องการให้ลงส่งอักขระ Enter หลังสแกนบาร์โคด สามารถทำได้โดยการสแกนบาร์โคดด้านล่าง

    กรณีต้องการให้ลงส่งอักขระ Tab หลังสแกนบาร์โคด สามารถทำได้โดยการสแกนบาร์โคดด้านล่าง

    สรุปควรแก้ปัญหาด้วยการเขียน Code หรือตั้งค่าอุปกรณ์

    จากการเปรียบเทียบจะเห็นว่าหากใช้วิธีการเขียน code น่าจะเป็นแนวทางที่ดีกว่าในการแก้ปัญหานี้ เพราะเป็นวิธีการที่ไม่ขึ้นกับเครื่องสแกนบาร์โคด ไม่ต้องลำบากหาคู่มือ แต่วิธีการตั้งค่าอุปกรณ์นั้น อาจจะเหมาะสมในกรณีที่ต้องการอ่านข้อมูลบาร์โคดจำนวนมากลงไฟล์ เช่น อ่านลง text file หรืออ่านลง excel เพื่อนำไฟล์นี้เตรียมไว้เป็นข้อมูลสำหรับทดสอบนำเข้าระบบใดระบบหนึ่งอีกที เป็นต้น

    ถือว่าเป็นสิ่งที่รู้ไว้เป็นแนวทางนำไปประยุกต์ใช้ให้เหมาะกับสถานการณ์ได้

  • ปัญหาการ Debug บางคำสั่งใน .NET Web Project (VS.NET 2013)

    ในการพัฒนา web application ด้วย Visual Studio.NET 2013 ผู้พัฒนาบางท่าน อาจจะเคยเจอปัญหาเมื่อ debug ไปถึงบางคำสั่งแล้ว คำสั่งไม่ทำงานตามที่ควรจะเป็น หรือบางครั้งก็ไม่มีการ return ค่าออกมา ทั้ง ๆ ที่ค่าของข้อมูลถูกต้อง ซึ่งหากเจอปัญหานี้แล้ว ให้ลองสังเกตดังต่อไปนี้

    1. เครื่องที่ใช้พัฒนาเป็น Windows 32 bit หรือ 64 bit
    2. ตรวจสอบแน่ใจแล้วว่าใช้งานคำสั่งได้ถูกต้อง และข้อมูลที่คำสั่งนี้นำไปประมวลผลมีความถูกต้องแล้ว

    ถ้าเครื่องที่ใช้เป็น Windows 64 bit ให้ทดลองทำตามดังนี้ คือ

    1. ไปที่เมนู TOOLS –> Options
    2. จะปรากฏหน้าต่าง Options
    3. เมนูด้านซ้ายมือของหน้าต่าง Options เลือกเมนูย่อย Projects and Solutions และภายใต้เมนูนี้ เลือกเมนูย่อย Web Projects จะเห็นตัวเลือกด้านขวามือสองตัวเลือก ให้เลือกเครื่องหมายถูกตัวเลือกแรก คือ Use the 64 version…
    4. คลิกปุ่ OK และทดลอง run project และ debug คำสั่งที่พบปัญหาอีกครั้ง

     

    ตัวอย่างคำสั่งที่พบปัญหา

    สำหรับตัวอย่างคำสั่งที่เคยพบปัญหาเมื่อทำการ debug คือ คำสั่งที่ใช้ในการอ่านข้อมูลจาก registry

    Registry.LocalMachine.OpenSubKey

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