You are on page 1of 11

กลุ่ม 1 เร่ ือง

Virtual Private Database

VPD เป็ นการกำาหนด Policy ของการ Access DB ในระบดับ Row-Level (เข้าใจว่าเป็ นการกำาหนดการ
Access ข้อมูลในระดับแต่ละ Row) ว่าถ้าเป็ นคนท่ี Login เข้ามาตาม Role นีจ้ะสามารถ Access ข้อมูล Row
ไหนได้บ้าง คืออนุญาติให้ผู้ท่ีเข้า Access ข้อมูลนัน
้ เห็นเฉพาะข้อมูลท่ีเค้าถูกกำาหนดสิทธิใ์ห้เห็นเท่านัน
้ ไม่สามารถเห็น
ข้อมูลส่วนอ่ ืนๆ เสมือนว่าเป็ น DB ส่วนตัวของแต่ละคน แต่ท่ีจริงแล้วคือ DB ก้อนเดียวกันเพียงแต่ตัว Oracle มีการ
ไปเติม where statement ต่อท้ายการทำางานของ user คนนัน ้ ๆ ว่า select เฉพาะข้อมูลของคนๆนีเ้ท่านัน ้ นะ
เข้าไป

VPD - Virtual Private Database (ส่วนท่ีเจ้าของกลุ่มส่งเข้า mail ไว้ให้)

เป็ น technology ของ Oracle ท่ีใช้ในการกำาหนดสิทธิก์ ารเข้าถึงข้อมูลในตารางให้กับ user แต่ละคนหรือ


แต่ละกลุ่ม โดยสามารถตัง้ให้ละเอียดได้่ในระดับของแต่ละแถว (Row Level Security) ซ่ ึง feature นีจ้ะเร่ิมมีตัง้แต่
Oracle 8i

หลักการทำางานของมันก็คือ เ่ ืม่ือ user ใช้คำาสัง่ query database เข้ามา ระบบจะทำาการตรวจสอบสิทธิก ์ าร


เข้าถึงข้อมูลของ user คนนัน
้ ๆ (จะมีการบันทึกสิทธิไ์ว้ในตาราง $VPD อะไรซักอย่าง จำาช่ ือไม่ได้) แล้วทำาการ modify
sql statement ของ user คนนัน ้ ให้เห็นเฉพาะข้อมูลท่ีสามารถเข้าถึงได้ตาม policy ท่ีตัง้เอาไว้ เช่น ถ้าตัง้ให้ user
A สามารถ เห็นเฉพาะ credit limit ของลูกค้าท่ต ี นเองดูแล แล้ว user A เขียนคำาสัง่ select * from customer
ระบบก็จะ auto append where statement เข้าไปใน statement นัน ้ ๆ โดย user A จะไม่เห็นความเปล่ียน
แปลงใดๆ ในการ query (คือเป็ นการใช้งานตามปกตินัน ่ เอง) ด้วยเหตุนีม
้ ันเลยถูกเรียกว่า Virtual Private
Database เพราะมันจะทำาเสมือนว่า DB ก้อนเดียวเน่ีย มันซอยเป็ นก้อนเล็กๆ ท่ี user แต่ละคนเข้าถึงได้แต่
database ของตนเอง เลยคล้ายๆ กับเป็ น database เสมือน

ข้อดี - การ 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

• Oracle จะทำาการจัดเก็บข้อมูลแบบ Logical Structure และ Physical Structure


• โดย Logical Structure จะเรียกว่า Tablespace ส่วน Physical Structure จะเรียกว่า Data file
• Data file จะถูกจัดเก็บไว้ใน OS โดยมีนามสกุลเป็ น .dbf
• ใน 1 Database มีได้หลาย Tablespace, 1 Tablespace สามารถมีได้หลาย Data File แต่ 1 Data
File สามารถอยู่ได้ใน Tablespace เดียวเท่านัน

ประเภทของ Tablespace มีดังนี้


• SYSTEM เป็ น Tablespace ท่ีเก็บ oracle data dictionary และ object ทัง้หมดของ schema
SYS สามารถ access ได้เฉพาะ user SYS และ คนท่ไี ด้รับการ grant role DBA ทุก database ของ
oracle ต้องมี SYSTEM tablespace
• SYSAUX เร่ิมมีใน Oracle 10g ใช้เก็บข้อมูลท่จี ำาเป็ นต่อการทำางานในส่วนท่ต
ี ิดตัง้เพ่ิม และ component
ต่างๆ เช่น Oracle Enterprise Manager และ Automatic Workload Repository เป็ นต้น โดย
เม่ ือก่อนข้อมูลเหล่านีจ้ะเก็บไว้ท่ี SYSTEM Tablespace และแยกออกมาใน Version 10g ทุกฐานข้อมูล
ท่ีเป็ น Oracle Database 10g ขึน ้ ไป ต้องมี SYSAUX tablespace
• TEMP เป็ น Tablespace ท่ีใช้ชัว่คราวสำาหรับการทำางานของแต่ละ Session ท่ีเข้ามาทำางาน เช่น การ
Process SQL statement, ข้อมูลท่ีเก็บเป็ น global temporary table , การเรียงลำาดับของข้อมูล ใน
Oracle 10g Table space นีถ ้ ูกกำาหนดให้เป็ น Default Temporary Tablespace ถ้าไม่ได้สร้าง
temporary tablespace เอาไว้ ข้อมูลท่ไี ม่อยู่ถาวรเหล่านี จ้ะถูกเขียนในSYSTEM tablespace แทน
ซ่ึงเป็ นเร่ ืองท่ีแย่มาก ทำาให้ performance
• UNDO เป็ น Tablespace ท่ีใช้เก็บ Undo Segment ท่ีใช้ในการทำางานของแต่ละ Transaction เช่น
Add, Update, Delete ถ้ายังไม่มีการ Commit เราสามารถใช้คำาสัง่ Rollback เรียกข้อมูลเก่ากลับมาได้
undo tablespace ต้องมีอยู่ในทุกฐานข้อมูลของ Oracle
• USERS เม่ ือมีการสร้าง User ขึน ้ มา แล้วไม่กำาหนด Tablespace ให้กับ User คนนัน
้ ใช้งาน การเก็บ
ข้อมูลและ Object ท่ีสร้างขึ้น จะถูกจัดเก็บไว้ใน USERS Tablespace นี้
• EXAMPLE จะประกอบไปด้วย sample schema ท่ีให้ทดลองใช้งาน

การจัดการพ้ืนที่ว่างใน Tablespace แบ่งเป็ น 2 วิธี คือ


** การจัดแบ่งพ้ืนท่ีภายใน Tablespace เรียกว่า extents **
1. Locally managed tablespace
ข้อมูลพ้ืนท่ีวา่ งจะถูกจัดเก็บในรูปแบบของ Bit-Map เก็บไว้ใน header File ของ Tablespace โดยเลข 1
หมายถึงข้อมูล block ท่ีว่างและเลข 0 หมายถึง Block ข้อมูลท่ีถูกใช้งานไปแล้ว ข้อดีคือเม่ ือต้องการหาท่ีว่างภายใน
Tablespace จะทำาได้รวดเร็ว และเม่ ือพ้ืนท่ีภายใน Tablespace มีการเปล่ียนแปลง จะเปล่ียนค่าจาก 1 เป็ น 0 ทันที
2. Dictionary-managed tablespace
ข้อมูลท่ีเป็ นพ้ืนท่ีว่างจะถูกจัดเก็บในรูปแบบของ Dictionary เม่ ือพ้ืนท่ีใน Tablespace มีการเปล่ียนแปลง ก็
จะทำาการเปล่ียนแปลงข้อมูลใน Data Dict ด้วยเช่นกัน ซ่ ึงจะทำางานช้ากว่า แบบ Locally

การขยาย Size Tablespace มี 3 วิธี

1. add a datafile to a tablespace

2. add a new tablespace

3. increase the size of a datafile

Rman
Recovery Manager (RMAN) เป็ นเคร่ ืองมือ(Utility) ท่ี ถูกติดตัง้มาพร้อมกับ Oracle Database มีไว้เพ่ ือทำา
หน้าท่ีจด
ั การ backup restore and recovery

- สามารถใช้ได้กับฐานข้อมูลท่ีทำางานแบบ Archive Mode และ No Archive Mode ได้


- สามารถสัง่งานผ่าน Command Dos

Archive Mode

- เม่ ือ Restore จากไฟล์ท่ี Backup ไว้ ค่าข้อมูลท่ีได้จะเป็ นค่าข้อมูลถึงช่วงเวลาท่ีเกิดข้อผิดพลาด (แบบนีไ้ม่ประหยัด


พ้ืนท่ี แต่ดีสำาหรับ restroe recovery จะได้ข้อมูล ณ ปั จจุบัน)

No Archive Mode

- เม่ ือ Restore จากไฟล์ท่ี Backup ไว้ ค่าข้อมูลท่ีได้จะเป็ นค่าข้อมูล ณ เวลาท่ีทำาการ Backup เท่านัน
้ ไม่สามารถนำา
ข้อมูล ณ ช่วงเวลาก่อนท่จี ะเกิดข้อผิดพลาดกลับมาได้ เน่ ืองจากไม่มีข้อมูลจาก Redo Log File (แบบนีจ้ะประหยัดพ้ืนท่ี
แต่ restore recovery จะมีข้อมูลบางส่วนขาดหายไป หลังจากการ Backup)

ข้อดีของ Rman เม่ ือเทียบกับ การ Back up แบบปรกติ

- Rman มีการบีบอัดข้อมูล ทำาให้ประหยัดพ้ืนท่ี (กำาหนดใน configution ให้ บีบอัด หรือไม่บีบอัดก็ได้)

- Back up แบบปรกติ ไม่มีสามารถบีบอัดข้อมูลได้

- 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

คือการ backup ข้อมูลทัง้หมดไม่ว่าวันก่อนๆจะมีการ Backup อะไรไปบ้างแล้วก็ตาม ตามรูปข้างล่าง


2.Incremental Backup

** Incremental Backup แบ่งย่อยได้ ออกเป็ น Cumulative incremental backup กับ Differential


incremental backup

increment = เพ่ิมขึ้น .. การทำา incremental backup ก็คือ การ backup เอาเฉพาะเน้ือ data ส่วนท่ีเพ่ิมขึ้น
มา นัน
่ เอง ซ่ึงการ backup ครัง้แรก เราต้อง backup เป็ น level 0 (ซ่ ึงคือ full backup) ก่อน เพ่ ือนำามาเป็ นฐาน
(based backup) แล้วจึงทำาการ backup level 1 ซ่ ึงเป็ นการเอาเฉพาะส่วนท่ีเพ่ิมเติมจาก level 0 มาเก็บ

ยังแบ่งย่อย ลงได้อีก 2 แบบ คือ

• Cumultaive incremental backup


• Differential incremental backup

2.1Cumultaive incremental backup

การทำา cumulative backup จะทำาการ backup ส่วนที่เพิ่มต่อ/เปลี่ยนแปลง หลังทำา incremental


backup ล่าสุด ที่ level ต่ำากว่ามัน

2.2Differential incremental backup

การทำา differential backup จะทำาการ backup ส่วนที่เพิ่มต่อ/เปลี่ยนแปลง หลังทำา incremental


backup ล่าสุด ที่ level เท่ากับ หรือ ต่ำากว่ามัน (ในท่ีนีค
้ อ
ื ต่อจาก level 0 และ level 1 ของวันก่อนหน้า )
สมมติว่า เรามีการใส่ข้อมูลลงใน Block เพ่ิมขึ้น วันละ 1 block เม่ ือสิน
้ วัน มีการทำา differential backup
ในการใช้ RMAN ถ้าเราบอกว่าให้แบ็คอัพแบบ incremental backup โดยไม่ระบุว่าเป็ น differential หรือ
cumulative มันจะเป็ น differential โดย default

กลุ่ม 3 เร่ ือง

Oracle Scheduler

วิธีสร้าง Job Scheduler ด้วย dbms_scheduler


เม่ ือเราเขียนโปรแกรม(ในท่ีนีใ้ช้ PL/SQL)เสร้จแล้ว และต้องการควบคุมการทำางานด้วย Job บน server เราสามารถ
ทำาได้ตามนีค
้ รับ
1. สร้างโปรแกรมให้ Database รู้จัก
2. สร้าง Job ให้โปรแกรม โดย job จะทำาหน้าท่ีกำาหนดเวลาทำางานให้โปรแกรม และความถ่ีท่ีโปรแกรมจะทำางาน

สร้างโปรแกรม

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.');

เร่ิมต้นด้วยการสร้าง program โดยทำาการกำาหนดช่ ือโปรแกรม และคำาสัง่ทำางานของโปรแกรม


program_name = กำาหนดช่ ือให้ program
program_type = ชนิดของ program
program_action = คำาสัง่ให้โปรแกรมทำางาน
enabled = กำาหนดสถานะให้โปรแกรม ทำางานทันที เหรอ disable ไว้ก่อน

สร้าง 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.');

ส่วนสร้าง job จะกำาหนดเวลา และความถ่ี ท่ี job จะทำางาน


ในตัวอย่างนีจ้ะให้ job ทำางาน ทุกๆ 30 วินาที โดยให้เร่ิมทำางานทันทีท่ี run command นี้ (ค่า SYSTIMESTAMP
จะคืนค่า วันท่แ
ี ละเวลาปั จจุบัน )
ถ้าต้องการให้ job run ทุกๆ แปดโมงเช้า ก็เปล่ียนพารามิเตอร์ repeat_interval เป็ น repeat_interval =>
'TRUNC(SYSDATE+1)+8/24'

คำาสั่งเพิ่มเติม
//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 ตรงท่ีมันเก็บข้อมูลไว้ในตัวมันเองเลย...

ทีนี้...ก็สบาย dba แค่กำาหนดว่าจะต้องให้ mview ตัวนี้ refresh บ่อยแค่ไหน มันก็จะทำาเองโดยอัตโนมัติ...


ท่ีสะดวกมาก ๆ อีกอย่างหน่ ึงก็คือ ผู้ใช้งานไม่จำาเป็ นต้องรับรู้ว่ามี mview เพียงแค่เรียก SELECT statement มาท่ี
base table เหมือนเดิม...ตัว optimizer จะทำาการเปล่ียน query ให้เองโดยอัตโนมัติมาท่ี mview ถ้ามัน
analyze แล้วว่าสามารถเรียกใช้ mview ได้ แม้ว่า query นัน ้ จะไม่ match 100% กับ field ใน mview.

ซ่ึงการใช้ mview ต้องมีการ set parameter ของ database ใน init.ora ไว้อย่างเช่น


query_rewrite_enabled และอ่ ืน ๆ

Scheduler & Material View (ส่วนท่ีเจ้าของกลุ่มเค้าส่งเข้า mail ไว้ให้)

Scheduler มันถูกพัฒนามาจาก Job ใน Oracle version เก่า ๆ ซ่ ึงเขาได้เพ่ิมความสามารถในการทำางานให้มากขึ้น


หัวใจสำาคัญของ Scheculer คือ
1. Program -> คือบอกว่าจะให้ Job นัน ้ ทำาอะไร ซ่ ึงในการสัง่ให้ทำางานนีจ้ะเป็ นได้ทัง้ PL/SQL Block, Store
Procedure, Executeable file และ shell script.
2. schedule -> บอกว่าจะให้ Job ทำางานเม่ ือไร ซ่ ึงโดยปกติก็จะมีการ set เป็ นแบบ recurrence เช่น ทำาทุก ๆ
สิน
้ เดือน, ทุกวันจันทร์ เป็ นต้น ซ่ ึงในการกำาหนดเวลาในการทำางาน สามารถกำาหนดให้เป็ นเวลาใด ๆ ก็ได้ในอนาคต

ในการสร้าง Job เราจะให้ Package : DBMS_SCHEDULER


โดยในการสร้างจะสร้าง 4 แบบ
1. Inline คือระบุไปเลยว่าจะให้ทำาอะไรเม่ ือไร
2. สร้าง Program ขึ้นมาก่อน แล้วก็สร้างเหมือน Inline แต่ส่วนท่ีบอกว่าจะให้ทำาอะไรก็ให้ refer มาท่ี Program
แทน
3. สร้าง schedule ไว้ก่อนแล้ว ทำาเหมือน Inline แต่ในส่วนท่ีบอกว่าจะทำาเม่ ือไรก็ให้ refer มาท่ี schedule แทน
4. สร้างแบบ Refer ทัง้ Program และ Schedule

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)

นอกจากมันจะทำาหน้าท่ีเมือน view ปกติแล้ว มันยังมี Feature QUERY REWRITE ด้วย


ซ่ึง feature นีม
้ ีประโยชน์มากสำาหรับการท่ีต้อง issue Query เดิมบ่อย ๆ ตัว feature นีม
้ ันจะมี Query
Rewrite Engine ในการตรวจดูว่ามี Query Text ท่ี issued มาเหมือนกับ query ท่ีทำา Materialized View
ไหม ถ้าเหมือนมันจะย้ายไปดึง data จาก Materialized view แทนอัตโนมัติ โดยท่ีเราไม่ต้องแก้ Qeury ท่ี issue
ไปแต่อย่างใด

ในการ Refresh Data มันก็สามารถต้องเป็ นช่วงเวลา , Manual หรือบอกว่าให้ refresh ทุก ครัง้มีการ commit
transaction ก็ได้

กลุ่ม 4

ASM - Automatic Storage Management

คิดง่ายก็เป็ นการจัดการ 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 (แต่จริงๆ แล้วไม่ถึง แต่ก็ใกล้เคียงละ)

การทำางาน (ดูรูปจากใน Slide แล้วจะเข้าใจง่ายขึ้นนะ)


1. ทำา Pool ของ Storage ไว้
2. แบ่งส่วนของ Disk ออกเป็ นส่วนๆ
3. แบ่งส่วนของข้อมูลไปจัดเก็บไว้ในแต่ละ Disk แล้วทำาการสร้าง Index ในการเรียกไฟล์ด้วยวิธี Database
Oriented Indexing
4. Indexing แบบนีจ้ะอนุญาติให้ทำา rebalance โดยอัตโนมัติ โดยเวลาท่ก ี ารเพ่ิมหรือย้าย Disk ออกไป เช่น
Disk1 เก็บ 3 ส่วน, Disk 2 เก็บ 3 ส่วน ถ้าเราเพ่ิม Disk3 เข้าไป ก็จะแบ่งส่วนไปให้ Disk 3 จำานวน 2 ส่วน กลาย
เป็ น Disk1-3 เก็บตัวละ 2 ส่วน แบบนีเ้ป็ นต้น

SQL*PLUS....

ไม่รู้จะเขียนอะไร ไปดู Slide เอาเองละกัน มีแต่คำาสัง่พวก SQLPlus

SQL*PLUS (command line) - 2 Tiers -> Database (Oracle) + Client(Command line)


iSQL*PLUS (GUI) - 3 Tiers --> Database (Oracle) + Application server + Client (Web
browser)

พ้ืนฐานแล้ว Tools ตัวนี้ รองรับ


1. SQL Command
2. PL/SQL Block
3. SQL*PLUS

การทำางาน คือ iSQL*PLUS ยิง Command ไปเรียก SQL*PLUS อีกทีนงึ แล้วนำาผลลัพธ์มาแสดงบนหน้าจอ

กลุ่ม 5 เร่ ืองของ

DATA PUMP

DATA PUMP ถูกออกแบบมาเพ่ ือใช้ในการ Copy ข้อมูลของ อราเคิลจาก ฐานข้อมูลหน่ ึงไปอีกฐานข้อมูลหน่งึ ไม่ใช่
การแบ๊คอัพข้อมูลโดยตรง แต่ก็สามารถนำาไปประยุกต์ใช้ได้ในการ Backup Data โดยมีคำาสัง่นี ต ้ ัง้แต่เวอร์ชัน
่ 10g
เป็ นต้นมา แต่เวอร์ชัน
่ ก่อนหน้านีก
้ จ็ ะมีคำาสัง่สำาหรับนำาข้อมูล เข้า- ออก จากฐานข้อมูลอราเคิล ไฟล์ท่ีได้ จะเป็ นไฟล์
นามสกุล *.dmp แต่มันจะใช้ไฟล์นามสกุลเหมือนกับคำาสัง่ exp แต่ไม่สามารถใช้คำาสัง่ Import ของ ดาต้า Pump ได้

คำาสัง่นำาข้อมูลออก Export Data Pump : คำาสัง่ expdp

>expdp user/password @instand dumpfile.dmp [Option]

คำาสัง่ Import Data Pump คำาสัง่ impdp

สามารถใช้คำาสัง่นี ไ ้ ด ้ ทัง้แบบคอมมานไลน์
EnterpriseหรืManager
อทำางานผ่านได้ (ถ้าสามาถติดต่อ Host ได้)

ท่ีสำาคัญ user ท่ีเป็ น SYSDBA ไม่สามารถทำาคำาสัง่ นี ไ้ด้ในEM และในคู่มือบอกว่าไม่ควรใช้ User ท่ีเป็ น Sysdba

ควรใช้ User ท่ีมีสิทธิ ท


์ ำาการExport Import เท่านัน

การทำา Data Pump มีประโยชน์คือ ใช้ในการย้ายข้อมูลทัง้ระดับ Database, Schema, Table และใช้ได้กับ


ออราเคิลเท่านัน

Enterprise Manager
• เป็ นแอปพลิเคชันท่ท
ี ำางานผ่านเบราเซอร์

• เป็ นเคร่ ืองมือท่ีให้ผู้ดูแลระบบจัดการบริหารฐานข้อมูลสะดวกรวดเร็วขึ้นซ่ ึงจะช่วยบริหารจัดการการทำางานเก่ียว


กับฐานข้อมูลเกือบทัง้หมดเลย

• เคร่ ืองท่ีจะสามารถใช้งานเคร่ ืองมือชุดนีไ้ด้คือเคร่ ืองท่ต


ี ิดตัง้ Oracle Database Server หรือเคร่ ืองท่ต
ี ิดตัง้
Oracle Database Client ในแบบ Administrator

• ถ้าเทียบตัว enterprise manager ของ Microsoft ก็คือตัว Server management studio

จะสามารถทำางานได้ต้อง start service อย่างน้อย 3 ตัวนี้

• Oracle Service

• Oracle Listener

• Oracle console

ประกอบไปด้วย 4 หน้าหลักๆ คือ

• Home database console

• Performance จะบอกในลักษณะของ graph ว่าตอนนี้ performance ของเคร่ ืองถูกใช้งานไปเท่าไรแล้วบ้าง

• Administrator จะแสดง link ในการเข้าไปกำาหนด database object และการ initiate database


operations ของ oracle database inside เช่นเอาไว้ giant สิทธ์ให้ user หรือสร้าง user admin ใม่
ขึ้นมาเป็ นต้น

• Maintenance เป็ นหน้าจอท่ีเตรียม function ให้ admin เข้าไป ควบคุมระหว่าง flow data หรือ outside
Oracle databases

กลุ่ม 6

FlashBack Table & Flashback Version Query

Flashback เข้าใจง่ายๆ ก็คิอการย้อนเวลา ข้อมูลของเราโดยท่ี


FlashBack Table เป็ นการย้อนเวลาเฉพาะ Table ท่ีเรากำาหนดไว้ โดยเป็ นการย้อนเวลาของข้อมูลในตารางนัน ้
ให้กลับๆไปยังช่วงเวลาท่ีต้องการในอดีต เราสามารถจะกำาหนดเป็ นช่วงเวลาหรือหมายเลข SCN (System Change
Number) ก็ได้ โดย SCN คือ ค่าท่ีจะบอกว่า ณ ตอนนีข้อ ้ มูลมีการเปล่ียนแปลงไปครัง้ท่เี ท่าไหร่แล้ว SCN จะเกิดขึ้น
ทุกครัง้ท่ีมีการ Commit Database จะมีการสร้างเลข SCN ขึน ้ มา 1 ตัวและบวกเพ่ิมขึ้นไปเร่ ือยๆ แล้วเก็บลงใน
Data File, Control File, Redo Log Group(ง่ายๆก็เป็ นการย้อนเวลา Table นัน ้ กลับไปเม่ ือเวลาท่ีเราต้องการ)

** การทำา FlashBack Table ไม่สามารถทำาได้กับ Partitioned Table หรือ Materialized View ได้และในช่วง
เวลาท่ีต้องการย้อนนัน
้ โครงสร้างของตารางจะต้องไม่เปล่ียนแปลงจึงจะสามารถทำา Flashback Table ได้

ข้อดี

- ช่วยแก้ไขข้อผิดพลาดในฐานข้อมูลท่ท
ี ำาได้ง่ายขึ้นโดยใช้เพียงคำาสัง่ SQL
- ช่วยย่นระยะเวลาในการแก้ไขข้อผิดพลาดให้เร็วขึ้น

Example :

ก่อนทำา Flashback Table เราต้องทำาการ Enable การแก้ไข ROWID ก่อน เพราะการทำา Flashback Table จะ
มีผลกระทบต่อค่าของ RowID

ALTER TABLE EMPLOYEES ENABLE ROW MOVEMENT;

แบบท่ี 1 : FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);

ลองทำา Flashback Table แบบย้อนเวลาไปเม่ ือ 1 นาทีท่ีแล้วดิ เ๊ม่ ือกีเ้ราทำาอะไรไป)

FLASHBACK TABLE EMPLOYEES TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE);

Flashback Version Query

ก็เป็ นการ Query ข้อมูลเม่ ือในเวลาในอดีต แต่ยังไม่ได้เป็ นการสัง่ย้อนข้อมูลกลับไปเม่ ือเวลานัน


้ ๆนะ แค่ Query ขึน
้ มา
ดูว่าทำาอะไรไปกับข้อมูลบ้าง

Pseudocolumn ในการแสดงข้อมูล เก่ียวกับ Version เป็ น column ท่ี oracle provide ไว้ให้

• VERSIONS_XID บอก ID ของเวอร์ชัน


• VERSIONS_STARTSCN บอก start time แบบหมายเลข SCN

• VERSIONS_STARTTIME บอก start time แบบ timestamp

• VERSIONS_ENDSCN บอก end time แบบหมายเลข SCN

• VERSIONS_ENDTIME บอก end time แบบหมายเลข timestamp

• VERSIONS_OPERATION บอก type การทำางานว่า Insert, Update, Delete

** หมายเลข SCN ก็เป็ นหมายเลขท่ี Oracle สร้างขึ้นมาให้เม่ ือมีการทำางานกับข้อมูลแต่ละครัง้ เป็ นหมายเลขท่ีเอาไว้


อ้างอิงถึงช่วงเวลาการทำางานนัน
้ ๆ แต่ปกติเราก็ใช้เลข timestamp เน่ียแหละ

คำาสัง่ ทำาการ Flashback Version Query ดูว่าเกิดการทำางานอะไรกับข้อมูลบ้าง อันนีม


้ ี Table ท่ีช่ือ
EMPLOYEES ไว้อยู่แล้ว

SELECT VERSIONS_STARTTIME, VERSIONS_ENDTIME,VERSIONS_OPERATION,EMP_NO,


EMP_NAME

FROM EMPLOYEES VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE

ORDER BY VERSIONS_ENDTIME DESC;

You might also like