Professional Documents
Culture Documents
VPD เป็ นการกำาหนด Policy ของการ Access DB ในระบดับ Row-Level (เข้าใจว่าเป็ นการกำาหนดการ
Access ข้อมูลในระดับแต่ละ Row) ว่าถ้าเป็ นคนท่ี Login เข้ามาตาม Role นีจ้ะสามารถ Access ข้อมูล Row
ไหนได้บ้าง คืออนุญาติให้ผู้ท่ีเข้า Access ข้อมูลนัน
้ เห็นเฉพาะข้อมูลท่ีเค้าถูกกำาหนดสิทธิใ์ห้เห็นเท่านัน
้ ไม่สามารถเห็น
ข้อมูลส่วนอ่ ืนๆ เสมือนว่าเป็ น DB ส่วนตัวของแต่ละคน แต่ท่ีจริงแล้วคือ DB ก้อนเดียวกันเพียงแต่ตัว Oracle มีการ
ไปเติม where statement ต่อท้ายการทำางานของ user คนนัน ้ ๆ ว่า select เฉพาะข้อมูลของคนๆนีเ้ท่านัน ้ นะ
เข้าไป
ข้อดี - การ config จะไม่กระทบต่อการทำางานตามปกติของ user เลย เพราะเป็ นการ modify ท่ห ี ลังบ้าน
ข้อเสีย - อาจจะไม่เหมาะ ถ้ามันมี policy อะไรมากๆ ต้องมา maintain ในนี เ้พราะคำาสััง่ท่ีใช้ค่อนข้างจะต้องอาศัยคน
มีความรู้ในการ admin เล็กน้อย และสิทธิก ์ าร modify VPD policy จะต้องเป็ น system เท่านัน ้
Oracle Audit
• ใช้ตรวจสอบการเข้าถึง database , session , network , data หรือแม้แต่ตรวจการใช้งาน sql
statement ได้ เช่น ตรวจสอบทุกคนท่ีเข้าไป select ข้อมูลใน table salary , หรือตรวจสอบคน
ท่ี login / logout ด้วย user manager ทุกครัง้ เป็ นต้น
• ผลท่ีได้ก็จะเก็บไว้ใน table ท่ีช่ือ dba_audit_session , dba_audit_statement ,
dba_audit_xxx
• ตัวอย่างคำาสัง่ audit เช่น audit session by manager; คือจะตรวจสอบการ login / logout
ของ user manager ทุกครัง้ ผลท่ีได้คือเวลาท่ีมีคน login user manager จะมีการเก็บ log ไว้
ในฐานข้อมูล (รูปดูใน slide เอา)
• audit คือการตรวจสอบ และรายงานผลของการใช้ข้อมูลต่างๆ ใน database .. ไม่ใช่การป้องกันการ
เข้าถึงข้อมูล
• ข้อดี คือถ้าเกิดมีใครเข้ามาถึงฐานข้อมูลได้แล้ว การ audit ก็ช่วยตรวจสอบการเข้าถึงข้อมูลได้อีกทาง
• ข้อเสีย ถ้าเปิ ด audit มากเกินไปจะทำาให้ระบบช้าลง ใช้เน้ือท่ีในการเก็บ log ของการ audit เยอะ
Syntax :
AUDIT audit_option [ON schema.object_name]
[BY username]
[BY { SESSION | ACCESS }]
[WHENEVER { SUCCESSFUL|NOT SUCCESSFUL }]
Example :
AUDIT session BY scott, james, retail;
กลุ่ม 2 เร่ ือง
Table space
Rman
Recovery Manager (RMAN) เป็ นเคร่ ืองมือ(Utility) ท่ี ถูกติดตัง้มาพร้อมกับ Oracle Database มีไว้เพ่ ือทำา
หน้าท่ีจด
ั การ backup restore and recovery
Archive Mode
No Archive Mode
- เม่ ือ Restore จากไฟล์ท่ี Backup ไว้ ค่าข้อมูลท่ีได้จะเป็ นค่าข้อมูล ณ เวลาท่ีทำาการ Backup เท่านัน
้ ไม่สามารถนำา
ข้อมูล ณ ช่วงเวลาก่อนท่จี ะเกิดข้อผิดพลาดกลับมาได้ เน่ ืองจากไม่มีข้อมูลจาก Redo Log File (แบบนีจ้ะประหยัดพ้ืนท่ี
แต่ restore recovery จะมีข้อมูลบางส่วนขาดหายไป หลังจากการ Backup)
- Rman เป็ น Incremental backup คือ ไฟล์ backup เฉพาะส่วนท่ีมีการเปล่ียนแปลง (update insert
delete ) โดยจะต้องมีการทำา full backup (Level 0 ) ในครัง้แรกก่อนเสมอ และหลังจากนัน ้ ในการ backup ครัง้
ต่อไป Rman จะเปรียบเทียบว่า ส่ิงท่ีเปล่ียนแปลงไป คือไฟล์ไหนบ้าง ก็จะทำาการ backup เฉพาะส่วนท่ีเปล่ียนแปลง
แต่แบบนีจ้ะมีข้อเสียคือ เม่ ือต้องการ Restroe recovery จะต้องนำาไปมาต่อเน่ ืองกันไปเร่ ือย ๆ
- Back up แบบปรกติจะเป็ น แบบ full backup คือ backup ทัง้หมด ทำาให้สิน ้ เปลืองเน้ือท่ี แต่จะมีข้อดีคือ เม่ ือ
ข้อมูลเกิดความเสียหายก็นำา full backup เพียงแคไฟล์เดียวมาทำาการ Restroe recovery ได้เลย
Backup มี 2 แบบตามนี้
1.Full Backup
increment = เพ่ิมขึ้น .. การทำา incremental backup ก็คือ การ backup เอาเฉพาะเน้ือ data ส่วนท่ีเพ่ิมขึ้น
มา นัน
่ เอง ซ่ึงการ backup ครัง้แรก เราต้อง backup เป็ น level 0 (ซ่ ึงคือ full backup) ก่อน เพ่ ือนำามาเป็ นฐาน
(based backup) แล้วจึงทำาการ backup level 1 ซ่ ึงเป็ นการเอาเฉพาะส่วนท่ีเพ่ิมเติมจาก level 0 มาเก็บ
Oracle Scheduler
สร้างโปรแกรม
execute DBMS_SCHEDULER.create_program (
program_name => 'FILL_KEY_NO_PROGRAM',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN PKG_SERVICES.FILL_KEY_NO_JOB(2); END;',
enabled => TRUE,
comments => 'Program to fill key no.');
สร้าง Job
execute DBMS_SCHEDULER.create_job (
job_name => 'FILL_KEY_NO_JOB',
program_name => 'FILL_KEY_NO_PROGRAM',
start_date => SYSTIMESTAMP,
repeat_interval => 'sysdate+30/(24*60*60)',
end_date => NULL,
enabled => TRUE,
comments => 'Job fill key no.');
คำาสั่งเพิ่มเติม
//enable job ให้ทำางาน
dbms_scheduler.enable('RESET_PAGE_JOB');
//disable job ไม่ให้ทำางาน
dbms_scheduler.disable('RPT1001_PROGRAM', TRUE);
//ดูข้อมูล program ท่ีมีใน database
SELECT owner, program_name, enabled FROM dba_scheduler_programs;
//ดูข้อมูล schedule ท่ีมีใน database
SELECT owner, schedule_name FROM dba_scheduler_schedules;
//ดูข้อมูล job ท่ีมีใน database
SELECT owner, job_name, enabled FROM dba_scheduler_jobs;
//drop program ทิง้
DBMS_SCHEDULER.drop_program (program_name => 'program_name');
//drop job ทิง้
DBMS_SCHEDULER.drop_job (job_name => 'program_name');
Materialize views
materialize view เป็ นการช่วยเพ่ิม performance ในการ query ปกติแล้ว ในการทำางาน query หนัก ๆ อย่าง
งาน data warehousing นัน ้ table จะต้องถูก join และ aggregate อยู่เสมอ เพ่ ือส่งผลลัพธ์ให้ผู้ใช้ท่ีเรียกดู
รายงาน ด้วยเหตุนีจ้งึ มักมีการสร้างส่ิงท่ีเรียกกันว่า summary table ขึ้นมาคือ ยอมเสียเน้ือท่ีบนดิสก์เพ่ ือเก็บข้อมูลท่ี
summary แล้วโดยวิเคราะห์จากการใช้งานของผู้ใช้งานว่ามักจะทำาการ query ข้อมูลแบบไหนท่ี summary level
ใด และท่ี key ใดบ้าง แต่ปัญหาคือ
1. summary table นัน ้ ไม่ link กับ base table ท่ีถูกสร้างขึ้นมา ดังนัน
้ ผู้ใช้งานจึงต้องรู้เองว่ามี summary
table อยู่ แล้วใช้ SELECT statement มายัง summary table นีแ ้ ทน
2. summary table ต้องถูก refresh อยู่เสมอเพ่ ือให้ได้ข้อมูลท่ี update ในระดับท่ีนา่ พอใจ จึงเป็ นการเพ่ิมงาน
ของ dba หรือผู้ดูแลข้อมูล เพราะงาน data warehouse นัน ้ ไม่ได้มี summary table เพียงตัวเดียว
Oracle จึงแก้ปัญหานีโ้ดยมี materialize view ขึ้นมา โดย materialize view นัน ้ ก็เป็ นเสมือน view ท่ียัง
link definition อยู่กับ base table แต่เป็ นเหมือนกับ table ตรงท่ีมันเก็บข้อมูลไว้ในตัวมันเองเลย...
Materialized View
มันมีขึ้นมาเพ่ ือกำาจัดปั ญหาของ View ปกติเพราะในการใช้งาน view ปกติทุก ๆ ครัง้ในการเรียกใช้งานมันจะต้องไปดึง
data มาจาก table ท่ีเก็บ data นัน ้ จริง ๆ และโดยปกติในการสร้าง view เราสร้างมาเพ่ ือย้าย query ท่ีซับซ้อนและ
การทำา Summary data ไปไว้ในนัน ้ ดังนัน
้ จากเง่ ือนไขนีจ้ึงทำาให้ view จะทำางานช้า
เขาจึงสร้าง concept ใหม่ขึ้นมาเพ่ ือเพ่ิมข้อดีให้ view คือ Materialized View มันจะทำาการเก็บ Data ท่ีเป็ น
output ของมันมาไว้ท่ีตัวเองเลย ไม่ต้องไปดึงใหม่ จึงทำาให้มันไวขึ้น เพราะมันจะเสีย cost ในการทำาตอนแรก และ
ตอน refresh data เท่านัน ้ และด้วย concept ท่ีมันสามารถ refresh data ของตัวมันเองได้ มันจึงถูกนำามาใช้
แทนการสร้าง permanent table สำาหรับการเก็บ Summary Data ด้วย (ไอ่น่ีต้อง Manual Refresh)
ในการ Refresh Data มันก็สามารถต้องเป็ นช่วงเวลา , Manual หรือบอกว่าให้ refresh ทุก ครัง้มีการ commit
transaction ก็ได้
กลุ่ม 4
คิดง่ายก็เป็ นการจัดการ HDD ในการเก็บข้อมูลฐานข้อมูล คิดว่ามันเป็ นการ Implement การทำางานแบบ RAID ด้วย
Tool ของ Oracle เอง แทบจะเรียกได้ว่ามันเป็ น RAID เลยแหล่ะ
ข้อดี
- ไม่ต้องใช้ Tool จาก 3rd Party เพราะว่า Oracle เองรวมมาให้แล้ว
- ทำาการ Load Balance ระหว่างข้อมูลในแต่ละ HDD ทำาให้ HDD ไม่ทำางานหนัก
- เร็ว เพราะว่า ข้อมูลถูกจัดเก็บในแต่ละ Disk ทำาให้เวลาดึงข้อมูลก็ดึงออกมาจาก HDD หลายๆ ตัวพร้อมกัน แล้วเอามา
ประกอบกันเป็ นข้อมูลชุดนึง นำาไปประมวลผลต่อไป
เช่น สมมตินะ ถ้าเรามี HDD ทำา ASM กัน 5 ลูก แต่ละลูกอ่านข้อมูลได้ 10 mb/s เวลาอ่านข้อมูลก็อ่านมาด้วย
ความเร็วเทียบเท่า 5 x 10 mb/s = 50 mb/s (แต่จริงๆ แล้วไม่ถึง แต่ก็ใกล้เคียงละ)
SQL*PLUS....
DATA PUMP
DATA PUMP ถูกออกแบบมาเพ่ ือใช้ในการ Copy ข้อมูลของ อราเคิลจาก ฐานข้อมูลหน่ ึงไปอีกฐานข้อมูลหน่งึ ไม่ใช่
การแบ๊คอัพข้อมูลโดยตรง แต่ก็สามารถนำาไปประยุกต์ใช้ได้ในการ Backup Data โดยมีคำาสัง่นี ต ้ ัง้แต่เวอร์ชัน
่ 10g
เป็ นต้นมา แต่เวอร์ชัน
่ ก่อนหน้านีก
้ จ็ ะมีคำาสัง่สำาหรับนำาข้อมูล เข้า- ออก จากฐานข้อมูลอราเคิล ไฟล์ท่ีได้ จะเป็ นไฟล์
นามสกุล *.dmp แต่มันจะใช้ไฟล์นามสกุลเหมือนกับคำาสัง่ exp แต่ไม่สามารถใช้คำาสัง่ Import ของ ดาต้า Pump ได้
สามารถใช้คำาสัง่นี ไ ้ ด ้ ทัง้แบบคอมมานไลน์
EnterpriseหรืManager
อทำางานผ่านได้ (ถ้าสามาถติดต่อ Host ได้)
ท่ีสำาคัญ user ท่ีเป็ น SYSDBA ไม่สามารถทำาคำาสัง่ นี ไ้ด้ในEM และในคู่มือบอกว่าไม่ควรใช้ User ท่ีเป็ น Sysdba
Enterprise Manager
• เป็ นแอปพลิเคชันท่ท
ี ำางานผ่านเบราเซอร์
• Oracle Service
• Oracle Listener
• Oracle console
• Maintenance เป็ นหน้าจอท่ีเตรียม function ให้ admin เข้าไป ควบคุมระหว่าง flow data หรือ outside
Oracle databases
กลุ่ม 6
** การทำา FlashBack Table ไม่สามารถทำาได้กับ Partitioned Table หรือ Materialized View ได้และในช่วง
เวลาท่ีต้องการย้อนนัน
้ โครงสร้างของตารางจะต้องไม่เปล่ียนแปลงจึงจะสามารถทำา Flashback Table ได้
ข้อดี
- ช่วยแก้ไขข้อผิดพลาดในฐานข้อมูลท่ท
ี ำาได้ง่ายขึ้นโดยใช้เพียงคำาสัง่ SQL
- ช่วยย่นระยะเวลาในการแก้ไขข้อผิดพลาดให้เร็วขึ้น
Example :
ก่อนทำา Flashback Table เราต้องทำาการ Enable การแก้ไข ROWID ก่อน เพราะการทำา Flashback Table จะ
มีผลกระทบต่อค่าของ RowID
Pseudocolumn ในการแสดงข้อมูล เก่ียวกับ Version เป็ น column ท่ี oracle provide ไว้ให้