Top Banner
กกกกกกกกกกกกกกกกกกกก Oracle (v. 1) หหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหห Oracle หหหหหหหหหหหหหหหหหหหหห หหหหหหหหหหหหหหหห หหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหห หหหห หหหหหหหหหหหหหหหห หหหหหหหหหหหหห หหหหหหหหหหหหหหหห หหหหหหหหหหหหหหหหหห Oracle หหหหห http://otn.oracle.com http://tahiti.oracle.com http://forums.oracle.com http://support.oracle.com หหหหหหหหหหหหหหหหหหหห หหห หห google หหหหหหหหหห หหหหหหหหหหหหหหหหหหหหหหหห My Oracle Support หหหหหหหหหหหหหหหหหหหหห หหหหห หหหหหหหหหหหหหห หหหหหหหหหหหหหหหหหหหหหหหหหหหหหหหห 1. Parameter file - parameter หหหห หห 2 หหห หหห text หหหห (pfile) หหห binary หหหห (spfile), pfile หหหหหหหหหหหหหหหหหห Editor หห OS หหหหห หหหห spfile หหหหหหหหหหหหหห Instance หหหหหหหหห หหหหหหห Oracle 8i หหหหหห text หหหหหหหหหหหหหหห pfile (parameter file) หหหหห หหหห database initialization parameters หหหห pfile หหหหหหหหหหหหหหหหห Instance หหหหหหหห(startup) หหหหหหหหหหหหหหหหหหหหหหหห pfile หหหหหหหหหหหหหหหห หหหหหหหหห หหหหหหหหหหหหหหหหห(restart) หหห parameter(dynamic)หหหหหหหหหหห หหหหหหหหหหหหหหหหหห ALTER SYSTEM หหหห ALTER SESSION หหหหหหหหหหหหหหห หหหหหหห Oracle 9i หหหหหหหหหหหหหหหหหหหห spfile (server parameter file) หหหห หหหห binary หหหห หหหหหหหหหหหหห หหหหหหหหห pfile หหหหหหหหหหหหหหหห spfile หหหห หหหหหหหห Instance หหหหหหหหห ALTER SYSTEM SPFILE หหหหหหหหหหหหหหหหหหหหหหหหหหหหห (dynamic) หหหหหหหหหหหหหห Instance หหห spfile หหหหหหหหหหหหหหหหห RAC, หหหหหหหหหหหหห Instance หหหหหหหหหหหหหหหหห pfile - Oracle หหหหห spfile หหหหหหหหหหหหห Instance (startup) กกกกกกกกก Server Parameter File: หหห SID หหหหหหหหหหหหหหหหหหหหหหหห Instance (หหหหหหหหหหหห RAC), หหห '*' หหหหหหหหหหห Instance หหหหหหหหหหห หหหห db2.thread=2 db1.thread=1 *.undo_management='AUTO' *.undo_retention=3600 db2.undo_tablespace='UNDOTBS2' db1.undo_tablespace='UNDOTBS1' หหห Parameter หหหหหหห dynamic หหหหหหหหหหหห ALTER SESSION หหหห ALTER SYSTEM หหหหหหหหหหหหหหหหห Instance หหหหหหหหหหหหห ALTER SESSION SET parameter_name = value ALTER SYSTEM SET parameter_name = value [DEFERRED] หหหหหหห ALTER SYSTEM หหหหหหหหหหหหหหห SCOPE หหหหหหหหหหหหหหหหหหหหหหหหหหหหหหห 1
39

การตรวจเช็คฐานข้อมูล Oracle v1 draft

Jan 12, 2015

Download

Education

Luigi Di Cosmo

หลายครั้งที่ผู้เริ่มต้นใช้งานฐานข้อมูล Oracle และต้องรับหน้าที่เป็นผู้ดูแลฐานข้อมูล อาจตั้งคำถามให้กับตัวเองว่าอะไรบ้างที่เราต้องรู้ในการตรวจเช็ค ตรวจสอบฐานข้อมูล เราสามารถอ่าน ค้นคว้าสิ่งต่างๆ เกี่ยวกับฐานข้อมูล Oracle ได้บน http://otn.oracle.com http://tahiti.oracle.com http://forums.oracle.com http://support.oracle.com หรือหาสิ่งที่อยากรู้ ได้บน google ด้วยตัวเอง
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: การตรวจเช็คฐานข้อมูล Oracle v1 draft

การตรวจเช็คฐานข้�อมู�ล Oracle (v. 1)

หลายครั้��งที่��ผู้��เรั้��มต้�นใช้�งานฐานข้�อม�ล Oracle และต้�องรั้�บหน�าที่��เป็�นผู้��ดู�แลฐานข้�อม�ล อาจต้��งค"าถามให�กั�บต้�วเองว&าอะไรั้บ�างที่��เรั้าต้�องรั้� �ในกัารั้ต้รั้วจเช้(ค ต้รั้วจสอบฐานข้�อม�ล เรั้าสามารั้ถอ&าน ค�นคว�าส��งต้&างๆ เกั��ยวกั�บฐานข้�อม�ล Oracle ไดู�บน http://otn.oracle.com http://tahiti.oracle.com http://forums.oracle.com

http://support.oracle.com หรั้+อหาส��งที่��อยากัรั้� � ไดู�บน google ดู�วยต้�วเอง

บที่ความน��ไดู�ใช้�ไอเดู�ยจากั My Oracle Support พรั้�อมกั�นน��ไดู�ดู�ดูแป็ลง ที่ดูสอบ เพ+�อน"ามาเสนอ และหว�งว&าจะม�ป็รั้ะโช้ยน.ต้&อผู้��อ&าน

1. Parameter file - parameter ไฟล. ม� 2 แบบ ค+อ text ไฟล. (pfile) และ binary ไฟล. (spfile), pfile

สามารั้ถแกั�ไข้ไดู�ดู�วย Editor บน OS น��นๆ ส&วน spfile ต้�องจ�ดูกัารั้ผู้&าน Instance ข้องม�นเอง

ต้��งแต้& Oracle 8i เรั้าใช้� text ไฟล.ที่��เรั้�ยกัว&า pfile (parameter file) ในกัารั้เกั(บ database initialization

parameters ซึ่1�ง pfile น��จะถ�กัอ&านเม+�อ Instance เรั้��มต้�น(startup) กัารั้เป็ล��ยนค&าอะไรั้กั(ต้ามใน pfile จะม�ผู้ลกั(ต้&อเม+�อฐานข้�อม�ล ม�กัารั้เรั้��มต้�นใหม&(restart) แต้& parameter(dynamic)กั(ย�งสามารั้ถเป็ล��ยนแป็ลงไดู�ดู�วย ALTER SYSTEM หรั้+อ ALTER SESSION ซึ่1�งจะม�ผู้ลที่�นที่�

จากัน��น Oracle 9i ม�ฟ2เจอรั้.ที่��เรั้�ยกัว&า spfile (server parameter file) ซึ่1�งเป็�น binary ไฟล. และเกั(บข้�อม�ล เหม+อนกั�บ pfile กัารั้เป็ล��ยนแป็ลงใน spfile ต้�องที่"าผู้&�าน Instance โดูยกัารั้ใช้� ALTER SYSTEM

SPFILE อน3ญาต้�ให�ม�กัารั้เป็ล��ยนแป็ลงแบบ (dynamic) โดูยไม&ต้�องหย3ดู Instance และ spfile ย�งใช้�ในกัารั้แช้รั้.บน RAC, ในกัารั้เรั้��มต้�น Instance น��นถ�าเรั้าไม&รั้ะบ3 pfile - Oracle จะใช้� spfile ในกัารั้เรั้��มต้�น Instance (startup)

การเซตค�า Server Parameter File:

ใช้� SID เพ+�อกั"าหนดูค&าเฉพาะแต้&ละ Instance (เห(นไดู�ช้�ดูบน RAC), ใช้� '*' ส"าหรั้�บที่3กัๆ Instance ในฐานข้�อม�ลเช้&น

db2.thread=2db1.thread=1*.undo_management='AUTO'*.undo_retention=3600db2.undo_tablespace='UNDOTBS2'db1.undo_tablespace='UNDOTBS1'

กั�บ Parameter ที่��เป็�น dynamic เรั้าสามารั้ถใช้� ALTER SESSION หรั้+อ ALTER SYSTEM เป็ล��ยนแป็ลงข้ณะที่�� Instance ย�งที่"างานอย�&

ALTER SESSION SET parameter_name = valueALTER SYSTEM SET parameter_name = value [DEFERRED]

ส"าหรั้�บ ALTER SYSTEM เรั้าสามารั้ถกั"าหนดู SCOPE เพ+�อรั้ะบ3ข้อบเข้ต้ในกัารั้เป็ล��ยนแป็ลง

SCOPE = SPFILE - เหมาะกั�บ parameter ที่��เป็�น dynamic และ static เม+�อเป็ล��ยนแป็ลงใน spfile ไฟล. จะม�ผู้ลหล�งจากัเรั้��มต้�นใหม&ครั้��งต้&อไป็ (restart)

SCOPE = MEMORY - เหมาะกั�บ parameter ที่��เป็�น dynamic กัารั้เป็ล��ยนแป็ลงจะเป็ล��ยนเพ�ยงใน หน&วยความจ"าเที่&าน��นSCOPE = BOTH - เหมาะกั�บ parameter ที่��เป็�น dynamic จะเป็ล��ยนที่��งใน spfile ไฟล. และ หน&วยความจ"า

1

Page 2: การตรวจเช็คฐานข้อมูล Oracle v1 draft

หากัไม&รั้ะบ3 SCOPE = BOTH (default)

เช้&นSQL> show parameter open_cursorsNAME TYPE VALUE------------------------------------ ----------- ------------------------------open_cursors integer 300

SQL> alter system set open_cursors=100 scope=MEMORY;System altered.

SQL> show parameter open_cursors;NAME TYPE VALUE------------------------------------ ----------- ------------------------------open_cursors integer 100

SQL> select sid, name, value from v$spparameter where name='open_cursors';SID NAME VALUE----- -------------------- ----------* open_cursors 300

SQL> alter system set open_cursors=200 scope=BOTH;System altered.

SQL> show parameter open_cursors;NAME TYPE VALUE------------------------------------ ----------- ------------------------------open_cursors integer 200

SQL> select sid, name, value from v$spparameter where name='open_cursors';SID NAME VALUE----- -------------------- ----------* open_cursors 200

SQL> alter system set open_cursors=300 scope=SPFILE;System altered.

SQL> show parameter open_cursors;NAME TYPE VALUE------------------------------------ ----------- ------------------------------open_cursors integer 200

SQL> select sid, name, value from v$spparameter where name='open_cursors';SID NAME VALUE----- -------------------- ----------* open_cursors 300

SQL> alter system set open_cursors=300 sid='TEST' scope=SPFILE;System altered.

SQL> select sid, name, value from v$spparameter where name='open_cursors';SID NAME VALUE----- -------------------- ----------* open_cursors 300TEST open_cursors 300

2

Page 3: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> alter system reset open_cursors sid='TEST' scope=SPFILE;System altered.

SQL> select sid, name, value from v$spparameter where name='open_cursors';SID NAME VALUE----- -------------------- ----------* open_cursors 300

จากัต้�วอย&างข้�างบนย�งแสดูงให� เห(นว&าเรั้าย�งสามารั้ถใช้� SID='...' เป็�นอะไรั้กั(ไดู� และกัารั้ใช้� ALTER SYSTEM RESET

การตรวจสอบว�าใช็� spfile หร�อไมู� (อ�างอ�ง)SQL> show parameter spfileNAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string /oracle/11gR1/dbs/spfileorcl.ora

SQL> select isspecified, count(*) from v$spparameter group by isspecified;ISSPEC COUNT(*)------ ----------TRUE 23FALSE 267

หากต�อง การน�า SPFILE ออกมูาเป็�น text ไฟล! - ที่"าไดู�โดูยCREATE PFILE FROM SPFILEเช้&น

SQL> create pfile='/tmp/pfile' from spfile;File created.

ในม3มกัล�บกั�น หากัต้�องกัารั้เป็ล��ยนจากั pfile เป็�น spfileCREATE SPFILE FROM PFILE

เช้&นSQL> create spfile from pfile;

หรั้+อSQL> create spfile from pfile='/tmp/pfile';

จากั น��น stop/start ฐานข้�อม�ล

SQL> show parameter spfile;NAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string

SQL> create spfile from pfile;File created.

SQL> shutdown immediate;SQL> startup

SQL> show parameter spfile;NAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string /oracle/11gR1/dbs/spfileorcl.ora

3

Page 4: การตรวจเช็คฐานข้อมูล Oracle v1 draft

หมูายเหต# เรั้าจะรั้� �ไดู�อย&างไรั้ว&า Initialization parameters ต้�วไหนที่��เรั้าสามารั้ถเป็ล��ยนแป็ลง (ALTER SYSTEM

SET) และม�ผู้ลในที่�นที่�SQL> select name, value from v$parameter where ISSYS_MODIFIABLE='IMMEDIATE';

2. Control files - Control file เกั(บข้�อม�ล - ช้+�อฐานข้�อม�ล, เวลาที่��ฐานข้�อม�ลถ�กัสรั้�าง, ช้+�อและที่��เกั(บข้อง datafile/redo log ไฟล. และอ+�นๆ ที่��จ"าเป็�นในฐานข้�อม�ล, และแนะน"าควรั้ม�อย&างน�อย 2 ไฟล. เกั(บบน physical disk

ที่��ต้&างกั�น พรั้�อมกั�บ backup

SQL> select status, name from v$controlfile;STATUS NAME------- -----------------------------------------------------------------/oracle/oradata/ORCL/controlfile/o1_mf_5twzvtgn_.ctl/oracle/flash_recovery_area/ORCL/controlfile/o1_mf_5twzvtoh_.ctl

Initialization parameter ที่%&เก%&ยวข้�องCONTROL_FILES - ช้+�อข้อง controlfiles (ช้+�อไฟล.)CONTROL_FILE_RECORD_KEEP_TIME- จ"านวนว�นที่��เกั(บข้�อม�ลใน controlfile กั&อนจะถ�กัเข้�ยนที่�บ

Control file ม�กัารั้เกั(บข้�อม�ล 2 ป็รั้ะเภที่- ข้�อม�ลที่��จ"าเป็�นส"าหรั้�บฐานข้�อม�ล และจะไม&ถ�กัเข้�ยนที่�บ เช้&น datafile, online redo log

- ข้�อม�ลเกั��ยวกั�บ RMAN ที่�� backup และใช้�ในกัารั้ recovery ซึ่1�งจะถ�กัเข้�ยนที่�บไดู�

CONTROLFILE AUTOBACKUPRMAN> show all;CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;new RMAN configuration parameters:CONFIGURE CONTROLFILE AUTOBACKUP ON;new RMAN configuration parameters are successfully stored

ที่3กัๆ ครั้��งหล�ง backup หรั้+อเป็ล��ยนแป็ลงเกั��ยวกั�บ Tablespace, เพ��ม redo log - oracle จะ backup control

file โดูยอ�ต้โนม�ต้� (อ�าง อ�ง)

เช้&นRMAN> backup datafile 1;

Starting backup at 19-APR-10allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=141 device type=DISKchannel ORA_DISK_1: starting full datafile backup setchannel ORA_DISK_1: specifying datafile(s) in backup setinput datafile file number=00001 name=/oracle/oradata/ORCL/datafile/o1_mf_system_5twzp126_.dbfchannel ORA_DISK_1: starting piece 1 at 19-APR-10

channel ORA_DISK_1: finished piece 1 at 19-APR-10piece handle=/oracle/flash_recovery_area/ORCL/backupset/2010_04_19/o1_mf_nnndf_TAG20100419T231236_5ws07tyl_.bkp tag=TAG20100419T231236 comment=NONEchannel ORA_DISK_1: backup set complete, elapsed time: 00:02:38Finished backup at 19-APR-10

Starting Control File and SPFILE Autobackup at 19-APR-10 piece

4

Page 5: การตรวจเช็คฐานข้อมูล Oracle v1 draft

handle=/oracle/flash_recovery_area/ORCL/autobackup/2010_04_19/o1_mf_s_716771721_5ws0f47f_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 19-APR-10

การ backup Control file:

- backup เป็�น binary file

ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';

- สรั้�าง SQL statement เพ+�อใช้� recreate control file

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/oracle/backup/control.sql';

จะเห(นว&า Control file เป็�นส��งที่��ส"าค�ญมากั จ1งจ"าเป็�นที่��จะต้�อง ต้รั้วจสอบและ BACKUP(เสมอ)

ต'วอย�าง Multiplex controlfiles เมู�&อใช็�งาน ASM DiskGroup

SQL> show parameter control_filesNAME TYPE VALUE------------------------------------ ----------- ------------------------------control_files string +DATA/orcl/controlfile/current.277.741286407 SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.

RMAN> startup nomount;Oracle instance startedTotal System Global Area 626327552 bytesFixed Size 2229080 bytesVariable Size 390073512 bytesDatabase Buffers 226492416 bytesRedo Buffers 7532544 bytes

RMAN> restore controlfile to '+DATA' from '+DATA/orcl/controlfile/current.277.741286407';Starting restore at 25-APR-11using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: SID=10 instance=orcl_2 device type=DISKchannel ORA_DISK_1: copied control file copyFinished restore at 25-APR-11

ASMCMD> ls +DATA/orcl/CONTROLFILE/Current.277.741286407current.285.749426511

5

Page 6: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> alter system set control_files='+DATA/orcl/controlfile/current.277.741286407','+DATA/orcl/controlfile/current.285.749426511' scope=spfile;

System altered.

SQL> startup force;ORACLE instance started.

Total System Global Area 626327552 bytesFixed Size 2229080 bytesVariable Size 390073512 bytesDatabase Buffers 226492416 bytesRedo Buffers 7532544 bytesDatabase mounted.Database opened.

SQL> show parameter control_filesNAME TYPE VALUE------------------------------------ ----------- ------------------------------control_files string +DATA/orcl/controlfile/current.277.741286407, +DATA/orcl/controlfile/current.285.749426511

3. Redo log files - จะเกั(บข้�อม�ลที่��ม�กัารั้เป็ล��ยนแป็ลงในฐานข้�อม�ล และ Oracle ใช้� online redo log files

เพ+�อช้&วยให�เกั�ดูกัารั้ส�ญหายข้องข้�อม�ลน�อยที่��ส3ดู, redolog files จะถ�กัใช้� เช้&นกัรั้ณ� instance ม�ป็8ญหา และต้�องกัารั้ที่��จะกั��ข้�อม�ลที่�� commit ไป็แล�ว ซึ่1�งย�งไม&ไดู�ถ�กัเข้�ยนลง data files - redo log ควรั้ต้�องที่"า multiplex และอย�&บน physical disk ที่��ต้&างกั�น เพ+�อป็9องกั�น disk crash หรั้+อ ผู้��ใช้�ลบ และ ต้�องกัารั้ 2 redo log groups อย&างน�อย

6

Page 7: การตรวจเช็คฐานข้อมูล Oracle v1 draft

และ 3 redo log groups เม+�อใช้� ARCHIVE LOG mode

การจ'ดการก'บ Online Redo Log Groups และ Members (อ&านเพ��มเต้�ม Oracle support: 102995.1)ต้�วอย&าง: ลบ/เพ��ม Online Redo Log GroupsSQL> select group#, sequence#, bytes, members, status from v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS---------- ---------- ---------- ---------- ----------------1 22 52428800 2 CURRENT2 21 52428800 2 INACTIVE3 20 52428800 2 INACTIVE

SQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------3 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_3_5wb8p2vh_.log3 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5wb8p33t_.log2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;Database altered.

SQL> select group#, sequence#, bytes, members, status from v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS---------- ---------- ---------- ---------- ----------------1 22 52428800 2 CURRENT2 21 52428800 2 INACTIVESQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

SQL> ALTER DATABASE ADD LOGFILE GROUP 3;Database altered.

SQL> select group#, sequence#, bytes, members, status from v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS---------- ---------- ---------- ---------- ----------------1 22 52428800 2 CURRENT2 21 52428800 2 INACTIVE3 0 104857600 2 UNUSED

ต้�วอย&าง: ลบ/เพ��ม Online Redo Log MembersSQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------3 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_3_5x5m8zfh_.log3 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log

7

Page 8: การตรวจเช็คฐานข้อมูล Oracle v1 draft

1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

SQL> ALTER DATABASE DROP LOGFILE MEMBER '/oracle/oradata/ORCL/onlinelog/o1_mf_3_5x5m8zfh_.log';Database altered.

SQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------3 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

SQL> ALTER DATABASE ADD LOGFILE MEMBER '/oracle/oradata/ORCL/onlinelog/redo3b.log' to group 3;Database altered.

SQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------3 INVALID ONLINE /oracle/oradata/ORCL/onlinelog/redo3b.log3 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log 2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

ต้�วอย&าง ที่��เห(นจะเป็�นแค&กัารั้จ�ดูกัารั้กั�บ redolog file และหว�งว&าจะเป็�นป็รั้ะโยช้น. ช้&วยในกัารั้ต้รั้วจเช้(คฐานข้�อม�ล - อย&างไรั้กั(ต้าม เรั้าต้�องเรั้�ยนรั้� �กัารั้แกั�ป็8ญหาในกัรั้ณ�ที่�� redolog file ม�ป็8ญหาดู�วย (และต้รั้วจเช้(ค backup เสมอ)

ต้�วอย&าง กัรั้ณ� member ข้อง redo group โดูยลบSQL> select group#, status, type, member from v$logfile;GROUP# STATUS TYPE MEMBER---------- ------- ------- -----------------------------------------------------------------3 ONLINE /oracle/oradata/ORCL/onlinelog/redo3b.log3 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log2 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_2_5wb6kn6p_.log2 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5wb6koh5_.log1 ONLINE /oracle/oradata/ORCL/onlinelog/o1_mf_1_5wb6khy8_.log1 ONLINE /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5wb6kkxd_.log

SQL> !rm /oracle/oradata/ORCL/onlinelog/redo3b.log /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log

SQL> alter system switch logfile;บน alert log file:

8

Page 9: การตรวจเช็คฐานข้อมูล Oracle v1 draft

Sat Apr 24 18:31:47 2010Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_arc2_2497.trc:ORA-00313: open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1: '/oracle/oradata/ORCL/onlinelog/redo3b.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1: '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_arc2_2497.trc:ORA-00313: open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1: '/oracle/oradata/ORCL/onlinelog/redo3b.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1: '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3Sat Apr 24 18:31:48 2010Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_3908.trc:ORA-00313: open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1: '/oracle/oradata/ORCL/onlinelog/redo3b.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1: '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3

ต้รั้วจสอบ redolog group 3 และแกั�ป็8ญหาSQL> select group#, sequence#, bytes, members, status from v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS---------- ---------- ---------- ---------- ----------------1 28 52428800 2 CURRENT2 27 52428800 2 INACTIVE3 26 104857600 2 INACTIVE

SQL> alter database clear unarchived logfile group 3;Database altered.บน alert log file:Sat Apr 24 18:32:45 2010alter database clear unarchived logfile group 3WARNING! CLEARING REDO LOG WHICH HAS NOT BEEN ARCHIVED. BACKUPS TAKENBEFORE 04/24/2010 18:28:58 (CHANGE 1512349) CANNOT BE USED FOR RECOVERY.Clearing online log 3 of thread 1 sequence number 26Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3904.trc:ORA-00313: open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1: '/oracle/oradata/ORCL/onlinelog/redo3b.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3ORA-00312: online log 3 thread 1:

9

Page 10: การตรวจเช็คฐานข้อมูล Oracle v1 draft

'/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.log'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directoryAdditional information: 3Deleted Oracle managed file /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5x5m8zrk_.logSat Apr 24 18:32:49 2010Archiver process freed from errors. No longer stoppedSat Apr 24 18:32:56 2010Completed: alter database clear unarchived logfile group 3

จะเห(นว&า logfile group 3 ใช้�งานไดู�ป็กัต้� - ส&วนกัารั้แกั�ป็8ญหากั�บ redolog file กั(ข้1�นกั�บแต้&ละกัรั้ณ�ไป็

4. Archiving - เป็�นกัลไกัที่��จ"าเป็�นในกัารั้ส"ารั้องข้�อม�ลที่��เป็ล��ยนแป็ลงในฐานข้�อม�ลArchive files เกั(บข้�อม�ลที่��จ"าเป็�นในกัารั้กั��ฐานข้�อม�ล ดู�งน��นจ1งม�กัแนะน"าให�ใช้�ฐานข้�อม�ลที่��เป็�น Archive Mode

ต'วอย�าง:เป็ล��ยน No Archive Mode -> Archive Mode

10

Page 11: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> archive log list;Database log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 31Current log sequence 33

SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.

SQL> startup mountORACLE instance started.Total System Global Area 836976640 bytesFixed Size 1303132 bytesVariable Size 536874404 bytesDatabase Buffers 293601280 bytesRedo Buffers 5197824 bytesDatabase mounted.

SQL> alter database archivelog;Database altered.

SQL> alter database open;Database altered.

SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 31Next log sequence to archive 33Current log sequence 33

SQL> select NAME, CREATED, LOG_MODE, CHECKPOINT_CHANGE#,ARCHIVE_CHANGE# from V$DATABASE;NAME CREATED LOG_MODE CHECKPOINT_CHANGE# ARCHIVE_CHANGE#--------- --------- ------------ ------------------ ---------------ORCL 28-MAR-10 ARCHIVELOG 1663822 1619901*** กัรั้ณ� ข้อง RAC เรั้าต้�อง shutdown database (instance all nodes) -> startup mount (only one node) -> alter database archivelog -> alter database open -> startup instance other nodes.

กั&อน 10g หากัฐานข้�อม�ลเป็�น archive mode เรั้าควรั้ต้�องเป็:ดู automatic archiver process โดูยกัารั้เซึ่ต้ log_archive_start=TRUE แต้&จากั 10g "log_archive_start" ไม&จ"าเป็�นต้&อไป็ และอาจพบ Error เม+�อ startup ฐานข้�อม�ลORA-32006: LOG_ARCHIVE_START initialization parameter has been deprecated

กัารั้พ�จารั้ณา พ+�นที่�� disk ส"าหรั้�บ Archive Files [ID 122555.1] - ข้อเสนอ script พรั้�อมต้�วอย&างcolumn ord noprintcolumn date_ heading 'Date' format A15column no heading '#Arch files' format 9999999column no_size heading 'Size Mb' format 9999999compute avg of no on reportcompute avg of no_size on reportbreak on reportselect MAX(first_time) ord, to_char(first_time,'DD-MON-YYYY') date_,

11

Page 12: การตรวจเช็คฐานข้อมูล Oracle v1 draft

count(recid) no, count(recid) * <REDO_SIZE_FILE_MB> no_sizefrom v$log_historygroup by to_char(first_time,'DD-MON-YYYY')order by ord/clear breaksclear computesclear columnsต'วอย�าง:SQL> select distinct (bytes)/1024/1024 from v$log;(BYTES)/1024/1024-----------------50

SQL> column ord noprintSQL> column date_ heading 'Date' format A15SQL> column no heading '#Arch files' format 9999999SQL> column no_size heading 'Size Mb' format 9999999SQL> compute avg of no on reportSQL> compute avg of no_size on reportSQL> break on report

SQL> select MAX(first_time) ord, to_char(first_time,'DD-MON-YYYY') date_,count(recid) no, count(recid) * 50 no_sizefrom v$log_historygroup by to_char(first_time,'DD-MON-YYYY')order by ord/SQL> clear breaksSQL> clear computesSQL> clear columnsDate #Arch files Size Mb--------------- ----------- --------19-APR-2010 43 215020-APR-2010 96 480021-APR-2010 96 480022-APR-2010 97 485023-APR-2010 96 480024-APR-2010 96 480025-APR-2010 97 485026-APR-2010 96 480027-APR-2010 97 485028-APR-2010 96 480029-APR-2010 96 480030-APR-2010 96 480001-MAY-2010 66 3300----------- --------90 4492จะพบว&า เฉล��ยว�นละ 4 - 5 Gb ถ�าต้�องกัารั้เกั(บ Archive Files 3 ว�น จ"าเป็�นต้�องม�พ+�นที่�� ถ1ง 5 * 3 = 15 Gb

ต้�วอย&าง อ+�นๆ Archive Mode -> No Archive ModeSQL> startup mountORACLE instance started.Total System Global Area 836976640 bytesFixed Size 1303132 bytesVariable Size 536874404 bytesDatabase Buffers 293601280 bytesRedo Buffers 5197824 bytes

12

Page 13: การตรวจเช็คฐานข้อมูล Oracle v1 draft

Database mounted.

SQL> alter database noarchivelog;Database altered.

SQL> archive log list;Database log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 31Current log sequence 33Archiving จ1งเป็�นส��งจ"าเป็�นในกัารั้ส"ารั้องข้�อม�ล หรั้+อแม�แต้&เพ+�อกัารั้แกั�ป็8ญหา บนฐานข้�อม�ล เช้&น ป็8ญหา block

corruption

Oracle พารั้าม�เต้อรั้.ที่��เกั��ยวกั�บ Archiving (เพ��มเต้�มที่�� Oracle Documents):

- LOG_ARCHIVE_DEST_n- LOG_ARCHIVE_DEST_STATE_n- LOG_ARCHIVE_FORMAT

หมูายเหต# เม+�อเรั้าใช้� Database Archive Mode และ Archive destination

เป็�น USE_DB_RECOVERY_FILE_DEST แป็ลว&าเรั้ากั"าล�งเกั(บ archive files ที่�� Flashback Area

(db_recovery_file_dest) ดู�งน��นต้�องแน&ใจว&าเรั้ากั"าหนดูค&าพารั้าม�เต้อรั้. db_recovery_file_dest_size มากัพอ และต้รั้วจเช้(ค V$FLASH_RECOVERY_AREA_USAGE เพรั้าะถ�าม�กัารั้ใช้�พ+�นที่��มากัเกั�นค&า db_recovery_file_dest_size อาจที่"าให�ฐานข้�อม�ลไม&สามารั้ถเข้�ยน archive file ไดู� ส&งผู้ลให�ฐานข้�อม�ลม�ป็8ญหาไดู�

13

Page 14: การตรวจเช็คฐานข้อมูล Oracle v1 draft

5. Data files - เป็�น physical file บนดู�สต้. ที่��สรั้�างโดูย Oracle และเกั(บโครั้งสรั้�างข้�อม�ล อาที่�เช้&น tables และ indexes แต้&ละ datafile สามารั้ถอย�&บนฐานข้�อม�ลเดู�ยวเที่&าน��น*** อย&างไรั้กั(ต้าม read only tablespace สามารั้ถ แช้รั้. datafiles รั้ะหว&างฐานข้�อม�ลไดู� (reference)

5.1 Autoextendautoextend เป็�นที่างเล+อกั ที่��ช้&วยเรั้าสามารั้ถป็:ดูหรั้+อเป็:ดูกัารั้ใช้�งาน ในกัารั้ข้ยาย datafile โดูยอ�ต้โนม�ต้� แต้&ถ�าเรั้าไม&สามารั้ถจ�ดูสรั้รั้พ+�นที่��ให�กั�บ datafile ไดู� เรั้าย�งสามารั้ถเพ��ม datafile

SQL> select FILE_NAME, AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files where tablespace_name='USERS';FILE_NAME AUT INCREMENT_BY------------------------------------------------------------ --- ------------/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf YES 160

SQL> alter database datafile '/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf' autoextend off;Database altered.

SQL> select FILE_NAME, AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files where tablespace_name='USERS';FILE_NAME AUT INCREMENT_BY------------------------------------------------------------ --- ------------/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf NO 0

SQL> alter database datafile '/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf' autoextend on next 10M;Database altered.

SQL> select FILE_NAME, AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files where tablespace_name='USERS';FILE_NAME AUT INCREMENT_BY

14

Page 15: การตรวจเช็คฐานข้อมูล Oracle v1 draft

------------------------------------------------------------ --- ------------/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf YES 1280

มาต้รั้ฐาน Oracle datafile สามารั้ถม�ไดู�มากัส3ดู 4194303 datablocks ดู�งน��นDB_BLOCK_SIZE = 2048 จะม� datafile ข้นาดู 8191 M

DB_BLOCK_SIZE = 4096 จะม� datafile ข้นาดู 16383 M

DB_BLOCK_SIZE = 8192 จะม� datafile ข้นาดู 32767 M

DB_BLOCK_SIZE = 16384 จะม� datafile ข้นาดู 65535 M

ต้��งแต้& Oracle 10g ม�ฟ8งกั.ช้�นกัารั้ที่"างานใหม&ที่��เรั้�ยกัว&า BIGFILE ที่��ช้&วยให�สามารั้ถสรั้�าง datafile ที่��ม�ข้นาดูใหญ&กัว&าเดู�ม แต้&ใน 1 tablespace ม�ไดู�แค& 1 datafile เที่&าน��นSELECT TABLESPACE_NAME, BIGFILE from DBA_TABLESPACES;อย&างไรั้กั(ดู� ข้นาดูข้อง datafile มากัส3ดูย�งข้1�นกั�บ Operation System อ�กัดู�วย

ต'วอย�าง: พ�จารั้ณา datafile ที่��เป็:ดูใช้� AutoextendSQL> select file_id, tablespace_name, bytes, maxbytes/1024/1024 "maxbytes(M)", maxblocks, increment_by, file_name from dba_data_files where autoextensible = 'YES';FILE_ID TABLESPACE BYTES maxbytes(M) MAXBLOCKS INCREMENT_BY FILE_NAME---------- ---------- ---------- ----------- ---------- ------------ ------------------------------------------------------------4 USERS 298188800 32767.9844 4194302 1280 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf3 UNDOTBS1 272629760 32767.9844 4194302 640 /oracle/oradata/ORCL/datafile/o1_mf_undotbs1_5twzp19d_.dbf2 SYSAUX 962854912 32767.9844 4194302 1280 /oracle/oradata/ORCL/datafile/o1_mf_sysaux_5twzp15k_.dbf1 SYSTEM 849346560 32767.9844 4194302 1280 /oracle/oradata/ORCL/datafile/o1_mf_system_5twzp126_.dbf5 TBS_DATA 136314880 32767.9844 4194302 1280 /oracle/oradata/ORCL/datafile/o1_mf_tbs_data_5v51k05o_.dbf

5.2 Locationเรั้าควรั้ต้�องรั้� �ว&า ต้"าแหน&งข้อง datafile น��นอย�&ที่��ไหน เพ+�อใช้�ในกัารั้พ�จารั้ณา และกัารั้บ"ารั้3งรั้�กัษาSQL> select * from v$dbfile;FILE# NAME---------- ------------------------------------------------------------4 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf3 /oracle/oradata/ORCL/datafile/o1_mf_undotbs1_5twzp19d_.dbf2 /oracle/oradata/ORCL/datafile/o1_mf_sysaux_5twzp15k_.dbf1 /oracle/oradata/ORCL/datafile/o1_mf_system_5twzp126_.dbf5 /oracle/oradata/ORCL/datafile/o1_mf_tbs_data_5v51k05o_.dbf6 /oracle/oradata/ORCL/datafile/o1_mf_flow_1_5w23bgcm_.dbf

ต'วอย�าง: กัารั้ย�าย datafile (แบบ alter database datafile ... )SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ------------------------------------------------------------ -------1 /oracle/oradata/ORCL/datafile/o1_mf_system_5twzp126_.dbf SYSTEM2 /oracle/oradata/ORCL/datafile/o1_mf_sysaux_5twzp15k_.dbf ONLINE3 /oracle/oradata/ORCL/datafile/o1_mf_undotbs1_5twzp19d_.dbf ONLINE4 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf ONLINE5 /oracle/oradata/ORCL/datafile/o1_mf_tbs_data_5v51k05o_.dbf ONLINE6 /oracle/oradata/ORCL/datafile/o1_mf_flow_1_5w23bgcm_.dbf ONLINE

15

Page 16: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> alter database datafile 4 offline;Database altered.

SQL> !mv /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ------------------------------------------------------------ -------4 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf RECOVER

SQL> alter database rename file '/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf' to '/oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf';Database altered.

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf RECOVER

SQL> recover datafile 4;Media recovery complete.SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf OFFLINE

SQL> alter database datafile 4 online ;Database altered.

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf ONLINE

หรั้+อ ใช้�อ�กัว�ธี� (alter tablespace ...)SQL> alter tablespace users read only;Tablespace altered.

SQL> alter tablespace users offline ;Tablespace altered.

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf OFFLINE

SQL> !mv /oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf

SQL> alter database rename file '/oracle/oradata/ORCL/datafile_test/o1_mf_users_5twzp1c3_new.dbf' to '/oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf';Database altered.

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf OFFLINE

16

Page 17: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> alter tablespace users online;Tablespace altered.

SQL> alter tablespace users read write;Tablespace altered.

SQL> select file#,name, status from v$datafile;FILE# NAME STATUS---------- ---------------------------------------------------------------- -------4 /oracle/oradata/ORCL/datafile/o1_mf_users_5twzp1c3_new.dbf ONLINEข้�างต้�นไดู�แสดูงต้�วอย&างกัารั้ย�าย datafile อย&างไรั้กั(ดู�เรั้าควรั้รั้� �และเข้�าใจ กัารั้ต้รั้วจเช้(ค และจ�ดูกัารั้กั�บ datafile (อ&าน เพ��มเต้�ม)

หมูายเหต# กัารั้ย�าย database file จากัข้�างต้�นเป็�นกัารั้ย�าย database file บน File System แต้&ป็8จจ3บ�นหลายๆที่�� อาจจะใช้� ASM และหากัต้�องกัารั้ย�าย database file ใน ASM DiskGroup ควรั้ที่"าอย&างไรั้ ข้อแนะน"าต้�วอย&างครั้&าวๆ

http://surachartopun.com/2009/10/moving-datafile-system-from-one-asm.htmlhttp://surachartopun.com/2009/10/moving-datafile-in-asm-by-asmcmdcp.html

ต้�วอย&างแรั้กั เป็�นกัารั้ย�าย database file ข้อง system tablespace ดู�งน��นจ1งต้�อง shutdown ฐานข้�อม�ล แต้&ถ�าต้�องกัารั้ย�าย database file ข้อง tablespace ที่��ไม&ใช้& system/sysaux เรั้าแค&เพ�ยง offline tablespace

ต'วอย�าง ย�าย database file กรณี% ASM DiskGroup

SQL> select file_id, file_name from dba_data_files where tablespace_name='TEST_DATA'; FILE_ID FILE_NAME---------- -------------------------------------------------- 9 +DATA/orcl/datafile/test_data.1335.721759717

SQL> alter tablespace TEST_DATA read only;Tablespace altered.

SQL> alter tablespace TEST_DATA offline;Tablespace altered

RMAN> backup as copy datafile 9 format '+DATA2';Starting backup at 26-APR-11allocated channel: ORA_DISK_1channel ORA_DISK_1: SID=38 device type=DISKchannel ORA_DISK_1: starting datafile copyinput datafile file number=00009 name=+DATA/orcl/datafile/test_data.1335.721759717output file name=+DATA2/orcl/datafile/test_data.993.749500909 tag=TAG20110426T184147 RECID=38 STAMP=749500915channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15Finished backup at 26-APR-11

RMAN> SWITCH DATAFILE 9 to copy;

17

Page 18: การตรวจเช็คฐานข้อมูล Oracle v1 draft

datafile 9 switched to datafile copy "+DATA2/orcl/datafile/test_data.993.749500909"

SQL> alter tablespace TEST_DATA online;Tablespace altered.

SQL> alter tablespace TEST_DATA read write;Tablespace altered.

SQL> select file_id, file_name from dba_data_files where tablespace_name='TEST_DATA'; FILE_ID FILE_NAME---------- -------------------------------------------------- 9 +DATA2/orcl/datafile/test_data.993.749500909

*** จากัน��นกั(ลบ datafilecopy ดู�วย rman *** RMAN> list datafilecopy all;RMAN> delete datafilecopy … [all];

18

Page 19: การตรวจเช็คฐานข้อมูล Oracle v1 draft

6. Tablespaces6.1 SYSTEM TablespaceUser objects ไม&ควรั้สรั้�างใน System tablespace เพ+�อช้&วยไม&ให�เกั�ดูป็8ญหาเรั้+�อง fragmentation และป็9องกั�นกัารั้ม�ข้นาดูใหญ&ข้อง system tablespace โดูยที่��ไม&จ"าเป็�นSQL> select owner, segment_name, segment_type from dba_segments where tablespace_name = 'SYSTEM' and owner not in ('SYS','SYSTEM');ต้รั้วจสอบ segment ที่��อย�&บน system tablspace และ เจ�าข้องไม&ใช้� SYS หรั้+อ SYSTEM

6.2 SYSAUX Tablespace (version >= 10g)SYSAUX ถ�กัต้�ดูต้��งอ�ต้โนม�ต้� เป็�นเหม+อน tablespace (ช้&วย)ให�กั�บ system tablespace ถ�า SYSAUX ม�ป็8ญหาอาจที่"าให� ฐานข้�อม�ลฟ2เจอรั้.(เช้&น AWR)ที่��ใช้� SYSAUX ม�ป็8ญหา

SQL> alter system checkpoint;System altered.

SQL> exec DBMS_WORKLOAD_REPOSITORY.create_snapshot;BEGIN DBMS_WORKLOAD_REPOSITORY.create_snapshot; END;

*ERROR at line 1:ORA-13509: error encountered during updates to a AWR tableORA-00376: file ORA-00376: file 2 cannot be read at this timeORA-01110: data file 2: '/oracle/oradata/ORCL/datafile/o1_mf_sysaux_5twzp15k_.dbf'cannot be read at this timeORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 14ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 37ORA-06512: at line 1

SQL> alter tablespace sysaux online;Tablespace altered.

SQL> exec DBMS_WORKLOAD_REPOSITORY.create_snapshot;PL/SQL procedure successfully completed.

กัารั้ต้รั้วบสอบกัารั้ใช้�งานบน SYSAUXSQL> select space_usage_kbytes, occupant_name, occupant_desc from v$sysaux_occupants order by 1 desc;หรั้+อSQL> @?/rdbms/admin/utlsyxsz.sqlutlsyxsz.sql - Utility script ส"าหรั้�บ SYSAUX Size

6.3 Locally vs Dictionary Managed TablespacesDictionary Managed Tablespaces ถ�กัจ�ดูกัารั้ดู�วยกัารั้ใช้� dictionary tables

Locally Managed Tablespaces เรั้��มม�มาต้��งแต้& Oracle 8i. Tablespace จะถ�กัจ�ดูกัารั้เฉพาะส&วน ดู�วยกัารั้ใช้� bitmap

SQL> select tablespace_name, extent_management from dba_tablespaces;

TABLESPACE_NAME EXTENT_MAN------------------------------ ----------SYSTEM LOCALSYSAUX LOCAL

19

Page 20: การตรวจเช็คฐานข้อมูล Oracle v1 draft

อย&างไรั้กั(ต้าม Locally Managed Tablespaces ม�ข้�อดู�กัว&า Data Dictionary managed tablespaces

เช้&น ไม&ต้�องม�กัารั้เกั(บ free space ใน data dictionary จ1งช้&วยลดู contention ข้อง table น��นๆ และย�งลดูกัารั้เกั�ดู fragmentation เป็�นต้�นExtent_management_clause:[EXTENT MANAGEMENT{DICTIONARY | LOCAL{AUTOALLOCATE | UNIFORM [SIZE integer [K|M] }}]AUTOALLOCATE - tablespace จะถ�กัจ�ดูกัารั้ข้นาดูข้อง EXTENT จากัรั้ะบบUNIFORM - tablespace จะถ�กัจ�ดูกัารั้กั�บข้นาดูข้อง EXTENT ให�ม�ข้นาดูที่��เหม+อนกั�น (default = 1 megabyte)

6.4 Temporary Tablespaceจะถ�กัใช้�เพ+�อกัารั้ sort และกัารั้เกั(บ global temporary tables. เรั้าควรั้ต้�องแน&ใจว&า tablespace ส"าหรั้�บ temporary segments เป็�นป็รั้ะเภที่ TEMPORARYSQL> select tablespace_name, contents from dba_tablespaces;

TABLESPACE_NAME CONTENTS------------------------------ ---------SYSTEM PERMANENTSYSAUX PERMANENTTEMP TEMPORARYUSERS PERMANENTหรั้+อ แน&ใจว&า USER ถ�กัหนดูให�ใช้� temporary space เป็�นป็รั้ะเภที่ TEMPORARYSQL> select u.username, t.tablespace_name from dba_users u, dba_tablespaces t where u.temporary_tablespace = t.tablespace_name and t.contents <> 'TEMPORARY';ต้�วอย&างอ+�นๆกัารั้เป็ล��ยน temporary tablespace บน userSQL> alter user SYSTEM temporary tablespace User;กัารั้เป็ล��ยน default temporary tablespace บนฐานข้�อม�ลSQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;กัารั้ลดู ข้นาดู tempfile

กัารั้หาข้นาดูข้อง temporary tablespaceSQL> select tablespace_name, sum(bytes)/1024/1024 mb from dba_temp_files group by tablespace_name;

TABLESPACE_NAME MB------------------------------ ----------TEMP 28

กัารั้ หา "high water mark" ข้อง temporary tablespace (max used at one time)SQL> select tablespace_name, sum(bytes_cached)/1024/1024 mb from v$temp_extent_pool group by tablespace_name;TABLESPACE_NAME MB------------------------------ ----------TEMP 27

กัารั้ หา current usageSQL> select ss.tablespace_name, sum((ss.used_blocks*ts.blocksize))/1024/1024 mb from gv$sort_segment ss, sys.ts$ ts where ss.tablespace_name = ts.name group by ss.tablespace_name;TABLESPACE_NAME MB------------------------------- ----------TEMP 1

20

Page 21: การตรวจเช็คฐานข้อมูล Oracle v1 draft

หรั้+อSQL> SELECT A.tablespace_name tablespace, D.mb_total, SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_used,D.mb_total - SUM (A.used_blocks * D.block_size) / 1024 / 1024 mb_free FROM v$sort_segment A,(SELECT B.name, C.block_size, SUM (C.bytes) / 1024 / 1024 mb_total FROM v$tablespace B, v$tempfile C WHERE B.ts#= C.ts# GROUP BY B.name, C.block_size ) D WHERE A.tablespace_name = D.name GROUP by A.tablespace_name, D.mb_total;TABLESPACE MB_TOTAL MB_USED MB_FREE------------------------------- ---------- ---------- ----------TEMP 28 1 27

6.5 Tablespace Fragmentation

Fragmentation ค+อ กัารั้ที่�� tablespace ถ�กัแบ&งออกัเป็�นส&วนๆ อาจจะม�พ+�นที่��ว&างมากั แต้&เป็�นช้��นเล(กั ที่"าให�ไม&สามารั้ถใช้�งานม�นไดู�Fragmented tablespaces ม�ผู้ลต้&อ performance โดูยเฉพาะ Full Table Scans หรั้+อ ที่"าให�เกั�ดูป็8ญหา out-of-space. กัารั้แกั�ไข้ป็8ญหา ที่"าไดู�ดู�วยกัารั้ recreate object เรั้าสามารั้ถใช้� 'alter table .. move' หรั้+อ กัารั้ export/import

Script to Detect Tablespace Fragmentation [ID 1020182.6]

21

Page 22: การตรวจเช็คฐานข้อมูล Oracle v1 draft

7. Objects 7.1 จ�านวนข้อง Extents

Extent เป็�นหน&วย(logical) ข้องกัารั้จ�ดูสรั้รั้พ+�นที่��ฐานข้�อม�ล หากัเรั้�ยงล"าดู�บ Data Block -> Extent -> Segment

กัารั้ ข้ยาย ข้อง object อาจจะไม&ใช้&ส��งส"าค�ญต้&อ Performance แต้&ถ�ากัารั้ข้ยายข้อง object รั้วมๆ กั�น หลายๆ object ย&อมม�ผู้ลต้&อ Performance แน&นอนเรั้าสามารั้ถหา object ที่��ม�กัารั้จ�ดูสรั้รั้ extent มากักัว&าที่��เรั้ากั"าหนดูไดู�:

select owner, segment_type, segment_name, tablespace_name, count(blocks), SUM(bytes/1024) "BYTES K", SUM(blocks) from dba_extents where owner NOT IN ('SYS','SYSTEM') group by owner, segment_type, segment_name, tablespace_name having count(*) > &number_extents order by segment_type, segment_name;

ส��งน��บอกัอะไรั้ แล�วอย&างไรั้?

เม+�อ เรั้าพบ object ที่��ม�กัารั้จ�ดูสรั้รั้ extent มากั(เช้&น จ"านวน extent 100 - 200) เรั้าสามารั้ถสรั้�าง object น��ใหม&กั�บ extent ที่��ม�ข้นาดูใหญ&กัว&า

ต'วอย�าง: กัารั้ย�าย table จากั extent 1M ไป็ 10M, สมม3ต้� สรั้�าง tablespace extent uniform

1M(TBS_EXT_1M) และ 10M(TBS_EXT_10M)SQL> select blocks, bytes, tablespace_name from user_extents where segment_name='TB_TEST';BLOCKS BYTES TABLESPACE_NAME---------- ---------- ------------------------------128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M

22

Page 23: การตรวจเช็คฐานข้อมูล Oracle v1 draft

128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M128 1048576 TBS_EXT_1M

SQL> alter table TB_TEST move tablespace TBS_EXT_10M;Table altered.

SQL> select blocks, bytes, tablespace_name from user_extents where segment_name='TB_TEST';BLOCKS BYTES TABLESPACE_NAME---------- ---------- ------------------------------1280 10485760 TBS_EXT_10Mจะเห(นว&า จ"านวนข้อง extent น�อยลง

7.2 Next extentSegment สามารั้ถที่��จะเต้�บโต้ไดู� จ1งต้�องม�กัารั้จ�ดูสรั้รั้ next extent เม+�อจ"าเป็�น ถ�าพ+�นที่��ว&างน��นไม&เพ�ยงพอใน tablespace จะส&งผู้ลให� next extent ไม&สามารั้ถจ�ดูสรั้รั้พ+�นที่�� และ object จะไม&เต้�บโต้ต้&อไป็เรั้าสามารั้ถเช้(ค segment ที่��ไม&สามารั้ถจ�ดูสรั้รั้ next extentselect s.owner, s.segment_name, s.segment_type, s.tablespace_name, s.next_extent from dba_segments s where s.next_extent > (select MAX(f.bytes) from dba_free_space f where f.tablespace_name = s.tablespace_name);แต้& ถ�าม� fragmentation มากัๆ ใน tablespace จะส&งผู้ลให�ผู้ลล�พที่.ที่��ไดู� แสดูงว&า object ว&าย�งสามารั้ถเต้�บโต้ไดู� ดู�งน��นเรั้าอาจจะดู�ดูแป็ลงโดูยกัารั้หา fragmentation ใน tablespace ไป็เป็รั้�ยบเที่�ยบกั�บ next extent ข้องแต้&ละ object

7.3 Indexesกัารั้ rebuild index เป็�นส��งที่��ดู� แต้&เรั้าย�งสามามารั้ถเล+อกัว�ธี�กัารั้อ+�น coalescing index

กัารั้ พ�จารั้ณา b-tree index กั&อน rebuild อาจใช้�หล�กัเกัณฑ์.- deleted entries represent 20% or more of the current entries.- the index depth is more then 4 levels.อ&านเพ��มเต้�ม Richard Foote

ต'วอย�าง: เช้(ค index_stats เม+�อม�กัารั้ update/index ข้�อม�ล และ rebuild index (tb_test = 50 rows)SQL> create index ind_test on tb_test(object_id);Index created.

SQL> analyze index IND_TEST validate structure;Index analyzed.

SQL> select lf_rows, lf_rows_len, del_lf_rows, del_lf_rows_len, used_space FROM index_stats WHERE name = 'IND_TEST';LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN USED_SPACE---------- ----------- ----------- --------------- ----------50 800 0 0 800

SQL> update tb_test set object_id=1 where rownum <= 10; 10 rows updated.

SQL> commit;Commit complete.

SQL> analyze index IND_TEST validate structure;Index analyzed.

23

Page 24: การตรวจเช็คฐานข้อมูล Oracle v1 draft

SQL> select lf_rows, lf_rows_len, del_lf_rows, del_lf_rows_len, used_space FROM index_stats WHERE name = 'IND_TEST';

LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN USED_SPACE---------- ----------- ----------- --------------- ----------60 940 10 160 940

SQL> delete from tb_test where rownum <=10; 10 rows deleted. SQL> commit;Commit complete.

SQL> analyze index IND_TEST validate structure;Index analyzed.

SQL> select lf_rows, lf_rows_len, del_lf_rows, del_lf_rows_len, used_space FROM index_stats WHERE name = 'IND_TEST';LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN USED_SPACE---------- ----------- ----------- --------------- ----------50 780 10 140 780

SQL> alter index ind_test rebuild;Index altered.

SQL> analyze index IND_TEST validate structure;Index analyzed.

SQL> select lf_rows, lf_rows_len, del_lf_rows, del_lf_rows_len, used_space FROM index_stats WHERE name = 'IND_TEST';LF_ROWS LF_ROWS_LEN DEL_LF_ROWS DEL_LF_ROWS_LEN USED_SPACE---------- ----------- ----------- --------------- ----------40 640 0 0 640

น��นเป็�น แค&ต้�วอย&างกัารั้ analyze index ครั้&าวๆกัารั้ต้รั้วจสอบ object เรั้าควรั้จะต้รั้วจเช้(คอย&างสม"�าเสมอเพ+�อป็9องกั�นป็8ญหาในอนาคต้ ซึ่1�งอาจส&งผู้ลต้&อ application

และอ+�นๆ

24

Page 25: การตรวจเช็คฐานข้อมูล Oracle v1 draft

8. AUTO vs MANUAL undo - ใน ฐาน ข้�อม�ล Oracle เวอรั้.ช้� �นกั&อนๆ เรั้าจ�ดูกัารั้กั�บ RollBack

Segments ดู�วย manual undo. ส&วน automatic undo(เรั้��มใช้� Oracle 9i) จะถ�กัใช้�เม+�อเซึ่ต้ UNDO_MANAGEMENT เป็�น AUTOSQL> show parameter UNDO_MANAGEMENTNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTO

แต้& ถ�าหาไม&เซึ่ต้ค&า UNDO_MANAGEMENT หรั้+อเซึ่ต้เป็�น MANUAL จะใช้�กัลไกั 'old' rollback segment

อย&างไรั้กั(ต้าม Oracle แนะน"าให�ใช้� AUTO

8.1 AUTO UNDOกัารั้กั"าหนดูเวลาในกัารั้เกั(บ undo น��นจะถ�กัควบค3มดู�วย UNDO_RETENTION (ว�นาที่�)undo_retention เป็�นพารั้าม�เต้อรั้.ใหม&ที่��พบบน Oracle 9i และย�งเป็�นพารั้าม�เต้อรั้.ที่��สน�บสน3น "flashback

query" ฟ2เจอรั้.SQL> show parameter UNDO_RETENTION;NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_retention integer 900

SQL> alter system set UNDO_RETENTION=3600;System altered.

SQL> show parameter UNDO_RETENTION;NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_retention integer 3600

บน Oracle 10g ค3ณอาจเล+อกัใช้� GUARANTEE เพ+�อให�แน&ใจว&า undo ข้�อม�ล ไม&ถ�กัข้�ยนที่�บกั&อน undo_retention ที่��กั"าหนดูSQL> show parameter undo_tablespace;NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_tablespace string UNDOTBS1

SQL> alter tablespace UNDOTBS1 retention GUARANTEE;Tablespace altered.

V$UNDOSTAT view สามารั้ถใช้�ในกัารั้ต้รั้วจสอบกัารั้ใช้�ป็รั้ะโยช้น.พ+�นที่�� undo

ค"านวณจ"านวน undo block ต้&อว�นาที่�:SQL> SELECT (SUM(undoblks))/ SUM ((end_time - begin_time) * 86400) FROM v$undostat;

(SUM(UNDOBLKS))/SUM((END_TIME-BEGIN_TIME)*86400)------------------------------------------------57.8207692

25

Page 26: การตรวจเช็คฐานข้อมูล Oracle v1 draft

หรั้+อ ค"านวณจ"านวน Byte ที่��ต้�องกัารั้SQL> SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes" FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'),(SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS FROM v$undostat),(select block_size as DBS from dba_tablespaces where tablespace_name=(select upper(value) from v$parameter where name = 'undo_tablespace'));Bytes----------751016.081

เรั้า ย�งใช้� DBA_UNDO_EXTENTS เพ+�อต้รั้วจสอบรั้ายละเอ�ยดู extents และพ+�นที่��ใช้�ใน undo tablespace

ป็8จจ3บ�นSQL> SELECT DISTINCT STATUS, SUM(BYTES), COUNT(*) FROM DBA_UNDO_EXTENTS GROUP BY STATUS;STATUS SUM(BYTES) COUNT(*)--------- ---------- ----------ACTIVE 1048576 1EXPIRED 172687360 250UNEXPIRED 49938432 57ACTIVE - Undo Extent เป็�น Active, ใช้�โดูย transaction.

EXPIRED - Undo Extent ถ�กั expire (Exceeded the Undo Retention).

UNEXPIRED - Undo Extent ที่��ย�งข้1�นอย�&กั�บค&า UNDO_RETENTION.

8.2 MANUAL UNDO- rollback ม�ป็8ญหาอาจ ส&งผู้ลต้&อกัารั้เป็:ดูฐานข้�อม�ลเช้&น เซึ่ต้ rollback_segments เป็�น RBS1 แต้&ไม&พบ 'RBS1' rollback segment เม+�อเป็:ดูฐานข้�อม�ลORA-01534: rollback segment 'RBS1' doesn't existError 1534 happened during db open, shutting down database- rollback segment ข้นาดูเล(กั หรั้+อไม&เพ�ยงพอ จะม�ผู้ลกัรั้ะที่บต้&อกัารั้ที่"างานข้องฐานข้�อม�ล ดู�งน��นเรั้าต้�องต้รั้วจสอบSQL> create rollback segment rbs1;Rollback segment created.

SQL> show parameter UNDO_MANAGEMENTNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string MANUAL

SQL> show parameter rollback_segmentsNAME TYPE VALUE------------------------------------ ----------- ------------------------------rollback_segments string RBS1

SQL> select d.segment_name, d.tablespace_name, s.waits, s.shrinks, s.wraps, s.status from v$rollstat s, dba_rollback_segs d where s.usn = d.segment_id order by 1;SEGMENT_NAME TABLESPACE_NAME WAITS SHRINKS WRAPS STATUS------------------------------ ------------------------------ ---------- ---------- ---------- ---------------RBS1 SYSTEM 0 0 10 ONLINESYSTEM SYSTEM 0 0 0 ONLINE

ถ�าไม&กั"าหนดู rollback_segments จะม� "SYSTEM" rollback segment เดู�ยวSQL> show parameter UNDO_MANAGEMENTNAME TYPE VALUE

26

Page 27: การตรวจเช็คฐานข้อมูล Oracle v1 draft

------------------------------------ ----------- ------------------------------undo_management string MANUAL

SQL> show parameter rollback_segmentsNAME TYPE VALUE------------------------------------ ----------- ------------------------------rollback_segments string

SQL> select d.segment_name, d.tablespace_name, s.waits, s.shrinks, s.wraps, s.status from v$rollstat s, dba_rollback_segs d where s.usn = d.segment_id order by 1;SEGMENT_NAME TABLESPACE_NAME WAITS SHRINKS WRAPSSTATUS------------------------------ ------------------------------ ---------- ---------- ---------- ---------------SYSTEM SYSTEM 0 0 0 ONLINEจากัข้�างต้�น ข้อข้ยายความ MANUAL UNDO เพ�ยงครั้&าวๆ (more)

อย&าง ไรั้กั(ต้ามข้อแนะน"าให�ใช้� AUTO UNDO (อย&างกัรั้ณ�ฟ2เจอรั้. Total Recall กั(ต้�องกัารั้ AUTO UNDO)

27

Page 28: การตรวจเช็คฐานข้อมูล Oracle v1 draft

9. การจ'ดการก'บหน�วยความูจ�า (Memory Management)

กัารั้ จ�ดูกัารั้กั�บหน&วยความจ"าข้องฐานข้�อม�ล Oracle จะม�ความแต้กัต้&างกั�นไป็ ซึ่1�งข้1�นอย�&กั�บ oracle เวอรั้.ช้�น เพรั้าะ oracle เองไดู�ม�กัารั้เพ��มค3ณสมบ�ต้� ในกัารั้จ�ดูกัารั้กั�บหน&วยความจ"ากั�บฐานข้�อม�ลเวอรั้.ช้�นใหม&ๆ เพ+�อให�ง&ายและม�ป็รั้ะส�ที่ธี�ภาพ ดู�งน��นเรั้าม�กัจะถ�กัแนะน"าให�ใช้�ค3ณสมบ�ต้�ในกัารั้จ�ดูกัารั้กั�บหน&วยความจ"า ดู�วยว�ธี�อ�ต้โนม�ต้�

9.1 ก�อน Oracle 9i

องค. ป็รั้ะกัอบหน&วย ความจ"าที่��แต้กัต้&างกั�น (SGA และ PGA) ต้�องกัารั้ที่��จะถ�กักั"าหนดูในกัารั้เรั้��มต้�นข้องฐานข้�อม�ล(startup) ค&าเหล&าน��เป็�นค&าคงที่�� ดู�งน��นหากัหน1�งในองค.ป็รั้ะกัอบข้องหน&วยความจ"าที่��ต้"�าเกั�นไป็ และจ"าเป็�นต้�องเป็ล��ยนแป็ลง ฐานข้�อม�ลจ"าเป็�นต้�อง restart เพ+�อให�ฐานข้�อม�ลใช้�ค&าใหม&ที่��ไดู�เป็ล��ยนแป็ลงต้�วอย&าง พารั้าม�เต้อรั้.ที่��อาจใช้�ผู้�ดูบ&อยๆ เช้&น sort_area_sizeSQL> show parameter sort_area_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------sort_area_size integer 1024000

พารั้าม�เต้อรั้. sort_area_size กั"าหนดู จ"านวนหน&วยความจ"าที่��สามารั้ถใช้�ในกัารั้เรั้�ยงล"าดู�บ ค&าน��เป็�นส&วนหน1�งข้อง User Global Area (UGA) ดู�งน��นจะถ�กัจ�ดูสรั้รั้ให�แต้&ละผู้��ใช้�หากัผู้��ใช้�เข้�ามาใช้�งานพรั้�อมกั�นเป็�น จ"านวนมากั ในกัารั้เรั้�ยงล"าดู�บข้�อม�ลข้นาดูใหญ& รั้ะบบอาจจะใช้�หน&วยความจ"าจ"านวนมากัเช้&น sort_area_size ข้อง 1MB กั�บผู้��ใช้� 200 คน เข้�ามาพรั้�อมกั�นในฐานข้�อม�ล อย&างไรั้กั(ต้ามหน&วยความจ"าน��ถ�กัจ�ดูสรั้รั้แบบไดูนาม�กั ม�นสามารั้ถจ�ดูสรั้รั้หน&วยความจ"าถ1ง 200MB และอาจที่"าให�เกั�ดูกัารั้ใช้� SWAP บนรั้ะบบ

9.2 Oracle 9iเรั้��มต้�นจากั Oracle 9i พวกัเรั้าจะพบพารั้าม�เต้อรั้.:workarea_size_policy = [AUTO | MANUAL]pga_aggregate_target = <value>

28

Page 29: การตรวจเช็คฐานข้อมูล Oracle v1 draft

ซึ่1�งยอมให�เรั้ากั"าหนดูพ+�นที่��หน&วยความจ"าส"าหรั้�บ PGA โดูยที่��จะถ�กัใช้�รั้&วมกั�นข้อง sessions

ถ�าค&าน��น�อยเกั�นไป็ (pga_aggregate_target) บ&อยครั้��งที่��เรั้าจะพบ ORA-4030SQL> show parameter workarea_size_policyNAME TYPE VALUE------------------------------------ ----------- ------------------------------workarea_size_policy string AUTO

SQL> show parameter pga_aggregate_targetNAME TYPE VALUE------------------------------------ ----------- ------------------------------pga_aggregate_target big integer 500M

ถ�า workarea_size_policy เป็�น AUTO หน&วยความจ"าส"าหรั้�บ work area (sort area) จะถ�กัจ�ดูกัารั้อ�ต้โนม�ต้� จากัค&า pga_aggregate_target

ต้�วอย&าง work area:- Sort-based operators (ORDER BY, GROUP BY, ROLLUP, window functions)- Hash-join- Bitmap merge- Bitmap createอ�นไดู�แกั& พารั้าม�เต้อรั้. *area_sizeSQL> show parameter area_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------bitmap_merge_area_size integer 1048576create_bitmap_area_size integer 8388608hash_area_size integer 131072sort_area_size integer 65536

ถ�า workarea_size_policy เป็�น MANUAL หน&วยความจ"าส"าหรั้�บ work area (sort area) จะไม&ใช้� pga_aggregate_target เรั้าต้�องม�กัารั้จ�ดูกัารั้กั�บพารั้าม�เต้อรั้. *area_size แต้&ละต้�วเองกัารั้ต้รั้วจสอบ PGA เช้&น ข้�อม�ลกัารั้ใช้�PGASELECT * FROM V$PGASTAT;หรั้+อ ค"าแนะน"าเพ+�อกัารั้ป็รั้�บค&าข้อง PGASELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,ESTD_OVERALLOC_COUNTFROM V$PGA_TARGET_ADVICE;หรั้+อ กัารั้ต้รั้วจสอบ PGA แต้&ละ sessionset pages500 lines110 trims onclear colcol name format a30col username format a20break on username nodup skip 1select vses.username||':'||vsst.sid||','||vses.serial# username, vstt.name, max(vsst.value) valuefrom v$sesstat vsst, v$statname vstt, v$session vseswhere vstt.statistic# = vsst.statistic# and vsst.sid = vses.sid and vstt.name in('session pga memory','session pga memory max','session uga memory','session uga memory max','session cursor cache count','session cursor cache hits','session stored procedure space','opened cursors current','opened cursors cumulative') and vses.username is not nullgroup by vses.username, vsst.sid, vses.serial#, vstt.name order by vses.username, vsst.sid, vses.serial#, vstt.name;

29

Page 30: การตรวจเช็คฐานข้อมูล Oracle v1 draft

กัารั้ป็รั้ะมาณค&า PGA_AGGREGATE_TARGET:

- ส"าหรั้�บรั้ะบบ OLTPPGA_AGGREGATE_TARGET = (<Total Physical Memory > * 80%) * 20%- ส"าหรั้�บรั้ะบบ DSSPGA_AGGREGATE_TARGET = (<Total Physical Memory > * 80%) * 50%

9.3 Oracle 10gAutomatic Shared Memory Management (ASMM) ถ�กัแนะน"าใน Oracle เวอรั้.ช้�น 10g ค3ณล�กัษณะกัารั้จ�ดูกัารั้หน&วยความจ"าอ�ต้โนม�ต้� ที่"าไดู�โดูยกัารั้ต้��งค&าพารั้าม�เต้อรั้. SGA_TARGET ให�มากักัว&าศุ3นย.ค3ณล�กัษณะ น��ม�ป็รั้ะโยช้น. ช้&วยให�เรั้าสามารั้ถแบ&งป็8นที่รั้�พยากัรั้หน&วยความจ"าในส&วนต้&างๆ และกัารั้จ�ดูสรั้รั้ที่รั้�พยากัรั้ณ.จะเป็�นไป็โดูยอ�ต้โนม�ต้� ดู�วย Oracle

SGA_TARGET พารั้าม�เต้อรั้.ม�ผู้ลต้&อ องป็รั้ะกัอบหน&วยความจ"า:- Fixed SGA และ other internal ที่��ต้�องกัารั้โดูย Oracle Database instance- Log buffer- Shared pool- Java pool- Buffer cache- keep และ recycle buffer caches (ถ�ารั้ะบ3)- Nonstandard block size buffer caches (ถ�ารั้ะบ3)- Streams pool

เม+�อ เรั้าเซึ่ต้ค&าส"าหรั้�บ SGA_TARGET, Oracle 10g จะกั"าหนดูข้นาดูส&วนป็รั้ะกัอบอ�นไดู�แกั&- Shared pool (SQL และ PL/SQL execution)- Java pool (Java execution state)- Large pool (large allocations เช้&น RMAN backup buffers)- Buffer cache- Streams poolSQL> show parameter sga_targetNAME TYPE VALUE------------------------------------ ----------- ------------------------------sga_target big integer 512M

กัารั้ต้รั้วจสอบข้�อม�ลกัารั้ใช้� SGAselect * from v$sgastat;select * from v$sgainfo;หรั้+อ ค"าแนะน"าเพ+�อกัารั้ป็รั้�บค&าข้อง SGAselect * from v$sga_target_advice order by sga_size;หรั้+อต้รั้วจสอบกัารั้เพ��ม ค&าหรั้+อลดูค&า ข้องส&วนป็รั้ะกัอบ SGAselect * from v$sga_dynamic_components;และALTER SESSION SET nls_date_format = 'DD/MM/YYYY:HH24:MI:SS';SET PAGESIZE 900SET LINESIZE 255COL COMPONENT FORMAT A25COL INITIAL_SIZE FORMAT A10COL TARGET_SIZE FORMAT A10COL FINAL_SIZE FORMAT A10COL OPER_TYPE FORMAT A10select START_TIME, component, oper_type, oper_mode,status, initial_size/1024/1024 "INITIAL", target_size/1024/1024 "TARGET", FINAL_SIZE/1024/1024 "FINAL", END_TIMEfrom v$sga_resize_opsorder by start_time, component;

30

Page 31: การตรวจเช็คฐานข้อมูล Oracle v1 draft

ส&วนกัารั้จ�ดูกัารั้หน&วยความจ"า PGA อ�ต้โนม�ต้� ย�งใช้�งานไดู�ผู้&าน workarea_size_policy และ pga_aggregate_target พารั้าม�เต้อรั้.

9.4 Oracle 11gAutomatic Memory Management (AMM) ถ�กัแนะน"าใน Oracle เวอรั้.ช้�น 11g ช้&วยให�ป็รั้�บค&า PGA และ SGA โดูยอ�ต้โนม�ต้� กั�บค&าพารั้าม�เต้อรั้. MEMORY_MAX_TARGET และ MEMORY_TARGET SQL> show parameter MEMORY_MAX_TARGETNAME TYPE VALUE------------------------------------ ----------- ------------------------------memory_max_target big integer 800M

SQL> show parameter MEMORY_TARGETNAME TYPE VALUE------------------------------------ ----------- ------------------------------memory_target big integer 800M

กัารั้ต้รั้วจสอบองค.ป็รั้ะกัอบข้องหน&วย ความจ"าที่��ใช้� AMMselect * from V$MEMORY_DYNAMIC_COMPONENTS;ต้รั้วจสอบกัารั้เพ��มและลดูข้ององค. ป็รั้ะกัอบใน AMM ดู�วย V$MEMORY_RESIZE_OPS

หรั้+อ ค"าแนะน"าเพ+�อกัารั้ป็รั้�บค&าส"าหรั้�บ AMMselect * from v$memory_target_advice order by memory_size;

10. Logging & Tracing10.1 Alert File

alert log ไฟล.ข้องฐานข้�อม�ล จะเกั(บส��งที่��เป็ล��ยนแป็ลงในฐานข้�อม�ล อ�นไดู�แกั&- internal errors (ORA-600), block corruption errors (ORA-1578), และ deadlock errors (ORA-

60)

- SQL เช้&น CREATE/ALTER/DROP DATABASE/TABLESPACE และจากั Oracle Enterprise Manager

หรั้+อ SQL*Plus ที่��เกั��ยวกั�บ STARTUP, SHUTDOWN, ARCHIVE LOG, RECOVER

- Errors เกั��ยวกั�บ shared server และ dispatcher processes

- Errors ข้ณะที่�� materialized view (refresh)

กัารั้ที่�� เรั้าม� alert log ไฟล. ข้นาดูใหญ& จะเป็�นกัารั้ใช้�พ+�นที่��ข้อง Disk โดูยที่��ไม&จ"าเป็�น และส&งผู้ลต้&อป็รั้ะส�ที่ธี�ภาพในกัารั้เข้�ยนลง Disk ข้อง OS

ก�อน 11g:

SQL> show parameter background_dump_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------background_dump_dest string /oracle/admin/orcl/bdump

11g ->: จะใช้� diagnostic_dest พารั้าม�เต้อรั้.SQL> show parameter background_dump_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------background_dump_dest string /oracle/diag/rdbms/orcl/orcl/trace

SQL> show parameter diagnostic_destNAME TYPE VALUE

31

Page 32: การตรวจเช็คฐานข้อมูล Oracle v1 draft

------------------------------------ ----------- ------------------------------diagnostic_dest string /oracle

10.2 Max_dump_file_size Oracle server process จะสรั้�าง trace ไฟล. เพ+�อเกั(บความผู้�ดูพลาดู เรั้าสามารั้ถใช้� trace ไฟล. เพ+�อว�เครั้าะห.ในแกั�ป็8ญหาและป็รั้�บป็รั้3ง ส&วน max_dump_file_size จะจ"ากั�ดูข้นาดูข้อง trace ไฟล.SQL> show parameter max_dump_file_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------max_dump_file_size string unlimited

SQL> alter system set max_dump_file_size=10240;System altered.

SQL> show parameter max_dump_file_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------max_dump_file_size string 10240user_dump_dest พารั้าม�เต้อรั้. จะเป็�นพ+�นที่�� ที่��ใช้�เกั(บข้�อม�ล trace ไฟล. ที่��เกั�ดูจากั user processes

ส&วนบน Oracle 11g พ+�นที่��ดู�งกัล&าว จะถ�กัควบค3มโดูย 'diagnostic_dest' พารั้าม�เต้อรั้.

*** audit ไฟล. ***

โดูย ป็กัต้�กัารั้ เช้+�อมต้&อฐานข้�อม�ลดู�วย SYS หรั้+อ SYSDBA จะม�กัารั้เกั(บเข้�า OS ไฟล. โดูยพ+�นที่�� ที่��ใช้�เกั(บจะถ�กัควบค3มดู�วย พารั้าม�เต้อรั้. 'audit_file_dest'

ถ�า พารั้าม�เต้อรั้.น�� ไม&ไดู�กั"าหนดูจะเป็�น $ORACLE_HOME/rdbms/audit

SQL> show parameter audit_file_destNAME TYPE VALUE------------------------------------ ----------- ------------------------------audit_file_dest string /oracle/admin/orcl/adump

ต้�วอย&าง อ+�นๆ (ต้รั้วจสอบกัารั้ ใช้�งาน sys กั�บกัารั้ใช้� syslog )

*** บน 11g เรั้าจ"าเป็�นที่��จะต้�องเรั้�ยนรั้� �กั�บ Automatic Diagnostic Repository (ADR) ***

ADR เป็�นที่��เกั(บข้�อม�ลเพ+�อใช้�ในกัารั้ว�น�จฉ�ย เช้&น trace files, alert log, และ Health Monitor reports. ส&วนที่��ต้� �งข้อง ADR จะถ�กัควบค3มดู�วย 'diagnostic_dest' พารั้าม�เต้อรั้.

กัารั้ต้รั้วจเช้(คบนฐานข้�อม�ล เป็�นส��งที่��จ"าเป็�นส"าหรั้�บผู้��ดู�แลรั้ะบบ ผู้มหว�งว&าบที่ความจะม�ป็รั้ะโยช้น.บ�างนะครั้�บ

อ�างอ,งhttp://support.oracle.comhttp://tahiti.oracle.com

เข้%ยนโดย: @surachart (surachartopun.com) OUGTH

32