สวัสดีครับ หายไปนานเลยครับ ภาระกิจรัดตัวต้องไปช่วยลุงกำนันครับ ชาติต้องมาก่อนอื่นใดครับ บทความนี้เราจะมาเล่าถึงการนำเอา ORACLE APEX มาใช้ในฐานข้อมูลของเราเอง จากบทความที่แล้วที่เราได้ทดลองใช้ ORACLE APEX บน Example Cloud กันบ้างแล้ว ตอนนี้เราจะมาทดลอง Install ลงบนเครื่องเราเองใช้ในหน่วยงานแบบไม่ต้องมี Internet และไม่ต้องไปเสียเงินใช้บน ORACLE Cloud :p ตั้งใจว่าจะไม่เป็นวิชาการมากนักเอาเป็นแบบเน้นทดลองกันเองเลยตามขั้นตอน แต่ก่อนอื่นก็ต้องทำความเข้าใจกันบ้างเพื่อว่าเวลา Install จะได้ไม่งงว่ากำลังทำอะไร ครับ ORACLE Application Express Engine เป็น โปรแกรม Oracle Package ที่ต้องการติดตั้งลงในฐานข้อมูล ORACLE เท่านั้นและแสดงผลเป็น Web Application และการติดตั้งก็มีสองวิธีคือ ใช้ Web Server ของ Database เอง หรือใช้ Web Listener อื่นร่วมด้วยก็ได้ ซื่งบทความนี้จะเสนอเฉพาะวิธีที่สองเท่านั้นครับ เพราะในหน่วยงานส่วนใหญ่น่าจะใช้เป็น แบบ Multi-Tier มากกว่า
ภาพประกอบแบบ การใช้ Listener ของ database เองเลยที่เรียกว่า Oracle XML DB Protocol Server with the embedded PL/SQL gateway แบบนี้จะเห็นว่าไม่ต้องไม่ Http Web Listener แยกต่างหาก แบบนี้เราจะไม่พูดถึงในบทความนี้ครับ
ภาพประกอบแบบที่สอง ที่เราจะพูดถึงการลง Oracle APEX ในแบบ Multi-Tier ที่สามารถลงทั้งหมดบนเครื่องเดียวกันกับ Database (ถ้าทรัพยากรเครื่องพอ) หรือ ลงแยกเป็น Web Listener หนึ่งเครื่องกับ Database อีกเครื่องก็ได้ ในแบบนี้ก็ยังสามารถลงบน Web Listener ได้หลายยี่ห้อ แต่ส่วนใหญ่ก็อยู่ในค่าย Oracle นั้นแหละครับได้แก่
1. ลงบน Web Listener Apache ที่มีการลง mod_plsql มาให้ด้วยเช่น ตัว product ชื่อ Oracle Internet Application Server ดังภาพด้านล่าง แบบนี้เราก็ไม่ได้พูดถึงในบทความนี้เพราะ product เก่าแล้ว
2. ลงบน Web Listener ยี่ห้ออื่นๆโดยจะต้องมีการลง Application เพิ่มเติมลงบนเครื่อง Web Listener นั้นๆ Application ที่ต้องลงเพิ่มนี้ Oracle ก็จัดเตรียมไว้ให้ สามารถ Download ฟรีได้ครับ ชื่อ APEX Listener ซึ่งจะกล่าวถึงวิธีการ Install ในบทความนี้ด้วยครับ ในแบบนี้ ตัว Web Listener ที่เลือกใช้ใน Oracle product จะเป็น Web Logic หรือ GlassFish ในบทความนี้จะกล่าวถึงเฉพาะการติดตั้งบน Glass Fish เท่านั้น
เอาละครับ เพื่อความเข้าใจอันดีก็จะสรุปว่า เราจะทำการ Install Oracle APEX แบบ Multi-Tier ลงบน Web Listener ที่ชื่อว่า GlassFish โดยมีขั้นตอนคล่าวๆ ดังนี้
1. การเตรียมฐานข้อมูลก่อนลง APEX
2. Download Oracle APEX
3. Install Oracle APEX ลงบนฐานข้อมูล ORACLE
4. Download APEX Listener
5. Install APEX Listener บนเครื่องเดียวกับที่จะลง GlassFish
6. ทดสอบ APEX Listener แบบ standalone
7. Download GlassFish
8. Install GlassFish
9. Deploy APEX Listener ลงบน GlassFish
10. ทดสอบ เรียก APEX สร้าง Work space และ User ทดสอบ Login
11. เป็นอันเสร็จครับ
ทั้งนี้ตัวอย่างที่แสดงจะเป็นการลงโปรแกรมทั้งหมดบนเครื่องเดียวกับ Oracle Database บนระบบปฏิบัตรการ Windows
ขั้นตอนที่ 1 การเตรียม Database Resource
ต้องทำการตรวจสอบ ขนาดของ SHARED_POOL_SIZE ว่าจะต้องมีขนาดอย่างต่ำ 100M ขึ้นไป สามารถตรวจสอบด้วยการ login ฐานข้อมูลด้วยสถานะ sysdba จากนั้นใช้คำสั่ง
SQL> SHOW PARAMETER SHARED_POOL_SIZE
ถ้าขนาดที่ได้น้อยกว่า 100M สามารถแก่ไขขนาดด้วยคำสั่ง
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
หลังจากเตรียมพื้นที่เรียนร้อยแล้ว ในกรณีของเราที่ต้องการลง Web Listener ลงบนเครื่องเดียวกับฐานข้อมูล ดังนั้นเราจะต้องทำการปิด Listener ที่มากับฐานข้อมูลก่อนเพื่อเวลาลง GlassFish จะได้ไม่ตีกันด้วยคำสั่ง
SQL>EXEC DBMS_XDB.SETHTTPPORT(0);
SQL>COMMIT;
ถ้าต้องการพื้นที่ tablespace เพื่อเก็บข้อมูล APEX โดยเฉพาะก็สามารถสร้าง tablespace เตรียมไว้ก่อนได้ในขั้นตอนนี้
แล้วทำการ RESTART ฐานข้อมูลใหม่
ขั้นตอนที่ 2 ทำการ Download ORACLE APEX ได้จาก
http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html
ในกรณีของผมได้ file : apex_4.2.4.zip
ในขั้นตอนนี้ให้ทำการ extract ไฟล์ไปไว้ที่ Drive C: ในชื่อ folder ว่า apex
ขั้นตอนที่ 3 ทำการ Install Oracle APEX ลงบนฐานข้อมูล ORACLE ขั้นตอนนี้จะยาวหน่อย และต้องเตรียมจด password ต่างๆที่เราจะต้องตั้งไว้ด้วยนะครับ เพราะต้องใช้ในการ Install ขั้นตอนอื่นต่อๆไป
3.1 ทำการ Install ORACLE APEX โดยการ
3.1.1 ย้ายไปยัง folder apex
3.1.2 login ฐานข้อมูลด้วย sysdba
3.1.3 install APEX ด้วยคำสั่ง
SQL>@apexins.sql tablespace_apex tablespace_files tablespace_temp images
tablespace_apex เป็น tablespace ที่เก็บข้อมูล ของ APEX และ user
tablespace_files เป็น tablespace ที่เก็บข้อมูลที่เป็น file ของ APEX และ user
tablespace_temp เป็น temp tablespace
images virtual image ที่ใช้อ้างอินเมื่อเรียกจาก web จะต้องระบุเป็น /i/
ถ้าเราเตรียม tablespace ไว้แล้วจากขั้นตอนที่ 1 ก็ให้ใช้ tablespace ที่เตรียมไว้ ส่วนตัวอย่างของผมใช้ tablespace ที่มากับฐานข้อมูลคือ SYSAUX ครับ
3.2 เมื่อทำการ Install เสร็จระบบจะทำการสร้าง account ใหม่ในฐานข้
อมูลขึ้น 3 account ได้แก่
APEX_040200 เป็น account ที่เก็บ metadata และ engine ของ APEX
FLOWS_FILES เป็น account ที่เก็บ file ที่ upload ของ APEX
APEX_PUBLIC_USER เป็น account ที่ใช้ในการ config จาก Apex Listener
ถ้าสังเกตจะเห็นว่ามี account APEX_030200 อยู่ด้วยอันนี้ติดมากับฐานข้อมูลสามารถลบออกได้
3.3 จากนั้นทำการตั้งค่า password ของ user ADMIN ของ APEX ด้วยคำสั่ง
SQL>@apxchpwd.sql
เมื่อเราต้องการเปลี่ยน password ของ ADMIN APEX เราสามารถใช้ program นี้เปลี่ยนในภายหลัง ได้โดยไม่ต้องกรอก password ปัจจุปัน (ในกรณีที่ลืม password)
3.4 ทำการ Restart ฐานข้อมูล
3.5 ทำการ config account APEX_PUBLIC_USER ด้วยการ unlock และ ตั้ง password ใหม่
unlock ด้วยคำสั่ง
SQL>ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
ตั้ง password ด้วยคำสั่ง
SQL>ALTER USER APEX_PUBLIC_USER IDENTIFIED BY new_password;
3.6 ทำการ config เพื่อให้ APEX สามารถรองรับการทำ Web Services Server ได้
ด้วยคำสั่ง
SQL>@apex_rest_config.sql
แล้วโปรแกรม จะให้ทำการตั้ง password ของ account สองตัวได้แก่ APEX_LISTENER และ APEX_REST_PUBLIC_USER (จดเอาไว้ด้วยครับ)
3.7 ทำการเปิด Network ให้ account ให้รองรับ Web Services, Mail จาก APEX และการทำ Report PDF ได้ด้วย script นี้ สามารถ copy ไป run ใน SQL ได้เลย
DECLARE
ACL_PATH VARCHAR2(4000);
BEGIN
-- Look for the ACL currently assigned to '*' and give APEX_040200
-- the "connect" privilege if APEX_040200 does not have the privilege yet.
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040200',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'APEX_040200', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to '*'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'APEX_040200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;
เป็นอันเสร็จขั้นตอนการ install ORACLE APEX ลงบนฐานข้อมูล
Comments
Post a Comment