OracleHistory1
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
969
On Slideshare
953
From Embeds
16
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 16

http://www.techgig.com 16

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Oracle BasicAdministration February, 1999 CloudBox Jang Kyung Sang
  • 2. Oracle basic administration http://www.ggola.com 1. Overview of Oracle basic architecture Oracle Components Oracle은 3개의 Components로 구성된다 - Processes (Background) - Memory Structures - Files (datafiles, redo log files, control files, parameter file) Memory Processes Files jkspark@hanafos.com -2- 장 경상
  • 3. Oracle basic administration http://www.ggola.com Memory Structures Oracle Components의 첫번째 부분인 Memory Structures를 SGA라 하는데 Oracle의 memory구조를 칭하는 말이다. (System Global Area) - contain data and control information for one Oracle Database System - The SGA should always be in non-paged, non-swapped memory 동시에 여러 사용자가 접속하면 이 메모리구조를 공유하기 때문에 ‘Shared Global Area’라고도 한다. SGA는 3개의 memory 구조를 가지고 있는데 ‘Shared Pool’과 ‘Database Buffer Cache’, ‘Redo Log Buffer’로 이루어진다. <= System Global Area => - Shared Pool - - Database Buffer Cache - - Redo log Buffer - Libarary Cache Data Dictionary Cache Shared Pool : Library Cache, Data Dictionary Cache로 구성 1. Shared SQL Area (referred to as the library cache) . SQL Statement 를 위치시키고 관련 information을 저장한다. . SQL문은 여기서 4가지 단계를 거친다 parsing -> binding -> execution -> fetch(fetch는 select only) . 동일한 SQL문의 실행요청을 대비 parsing된 information을 저 장한다. 2. The Data Dictionary Cache . database의 dictionary를 저장한다. (tables, views, column information, privileges ….)  Size 결정 parameter : Shared_Pool_Size = ? jkspark@hanafos.com -3- 장 경상
  • 4. Oracle basic administration http://www.ggola.com The Database Buffer Cache : holds copies of data blocks read from disk. (연결된 모든 users는 buffer cache를 공유한다) 1. A Cache miss : 처음으로 data를 read할 때 buffer에 없으므로 disk에서 read하여 buffer cache에 위치시킨다. (physical read) 2. A Cache hit : 원하는 data가 이미 buffer에 있으므로 memory 에 서 directly read 한다. (logical read) Loaded Data BLOCK 빈 BLOCK DISK Cache miss (physical read) Cache hit (logical read) USER  여러 사용자가 동일한 data를 원하는 경우 cache hit를 통해 보 다 빠르게 return 할 수 있다.  그러한 read의 비율을 Hit ratio라 하는데 70~80%를 적정선으 로 본다. (현재 2006년 데이터베이스의 대용량화가 진행되면서 점점 더 이 비율은 의미가 없어지고 있다. 97%와 98%는 엄청난 성능의 차이를 보일 수도 있는 것이 현실이다. 즉, SGA size와 HIT Ratio를 종합적으로 판단해야지 hit ratio 비율만 보는 것은 그다지 옳은 판단기준이 아니다.)  Size 결정 parameter : DB_BLOCK_SIZE = ?K (SIZE) DB_BLOCK_BUFFER = ? (개수) 그러므로 buffer 크기는 둘간의 곱으로 계산된다. The Redo Log Buffer : a circular buffer containing about changes made to the database. (Database에 반영될 변경된 내용을 저장) 1. Database에 반영될 모든 변경사항을 저장한다. (즉, Disk의 Database File에 반영되어야 할 사항은 먼저 여기에 기록된다) 2. Unrecoverable keyword나 Create Table, Create Index 등으로 인 한 변경사항은 Redo Log Buffer를 bypass 한다. (Oracle SQL*Loader를 사용할 때도 경우에 따라 bypass 한다)  Page 54 참조  Size 결정 parameter : LOG_BUFFER = ? jkspark@hanafos.com -4- 장 경상
  • 5. Oracle basic administration http://www.ggola.com Background Processes Oracle Components의 두번째 부분인 Processes를 Background Processes라 하는데 default로 항상 필요한 Processes가 있고 경우 에 따라 띄우는 Processes가 있다. Default Process DBWR LGWR PMON SMON CKPT RECO System Global Area ARCH LCKn SNPn Dnnn Pnnn Snnn Optional Mandatory(Default) Processes 1. PMON : Process Monitor (비정상 종료된 user process관련 transaction recovery) . cleans up abnormally terminated connections . rollback uncommitted transactions . release locks held by a terminated process . frees SGA resources allocated to the failed process . restarts failed shared server and dispatcher processes(MTS시) 2. SMON : System Monitor (비정상 종료된 instance 관련 recovery) . performs automatic instance recovery . reclaims space used by temporary segments no longer in use . merges contiguous areas of free space in the datafiles(automatic coalescing) 3. DBWR, LGWR : Database Writer, Log Writer (file에 write하는 process) . Datafile 에 변경된 data write – DBWR . Online Redo Log File 에 변경된 data write - LGWR  위 4개의 Processes는 default processes로 initial parameter를 이용한 control이 불가능하며 이중 하나라도 fail될 경우 instance는 crash되고 restart해야 한다. jkspark@hanafos.com -5- 장 경상
  • 6. Oracle basic administration http://www.ggola.com Optional Processes 1.RECO : Recover . resolves failures involving a distributed transaction (Oracle에 Distributed Option이 추가되는 경우) 2.LCKn : Lock . performs interinstance locking in a parallel server system (Oracle Parallel Server System으로 사용시 instance간 locking 관 리) 3.Pnnn : Parallel Query . provides parallel query(, index) creation, parallel data loading, parallel ‘create table as select’ capabilities (Oracle에 Parallel Query Option이 추가되는 경우) 4.SNPn : Snapshot Refresh . performs automatic refreshes of snapshots(read-only replicated tables) (server job queues and replication queues와 관련) (Oracle에 Procedural Option이 추가되는 경우) (Replication 사용시 Replication Option 추가) Other Processes (Parameter Setting에 dependent한 processes) 1. CKPT : Checkpoint . ensure that all modified database buffers are written to the database files.(LGWR을 대신해 all datafiles의 header information update : LGWR역할 분담) (Parameter에 CHECKPOINT_PROCESS = TRUE로 Setting이 되 어 있어야 하며 default는 FALSE다) 2. ARCH : Archiver . copies online redo log files to a designated storage device once LGWR switches to a new group (Oracle Server가 ARCHIVELOG MODE로 운영중인 경우만 해 당) 3. Snnn : Shared Server Processes . MTS(multi-thread-server)로 운영할 경우만 생성 (Parameter에 process수 설정 mts_servers=5 mts_max_servers=15) 4. Dnnn : Dispatcher Processes . MTS(multi-thread-server)로 운영할 경우만 생성 (Parameter에 process수 설정 mts_dispatchers="tcp,7" mts_max_dispatchers=15) jkspark@hanafos.com -6- 장 경상
  • 7. Oracle basic administration http://www.ggola.com User Process 와 Server Process 1. User Process : Application Program이 run될 때 . runs client side application program . SQL statement를 server process에 pass하고 그 result를 receive 한다. 2. Server Process : User Process에 대한 Server작업을 대행하는 Process로 User Process가 Client Side에 가깝다면 Server Process 는 User Process와 interface하는 Server Side의 Process라 할 수 있다. . SGA내 shared memory를 사용하여 User Process로 부터 넘겨받 은 SQL을 처리한다. . disk로 부터 database buffer cache로 place and read data . SQL Statement Result를 User Process에 return 한다. . SQL 처리 : parse – syntax check, semantics check (object존재등 확인) , execution plan 설정 binding – parameter and value 처리 (값넘기기등) execute – parsed SQL 실행 fetch – select인 경우 data passes An Oracle Instance is the combination of the SGA an the database background processes. 즉, Oracle Instance 라 함은 SGA 라는 memory 와 background processes 를 말한다. 따라서 Instance 가 시작되면 SGA memory 가 allocated 되고 background processes 가 start 된다. Database 와 Instance 의 차이는 instance 가 시작되면 instance 에 의해서 database(datafiles) 가 mount 된다는 점이다. (주의 : user process 와 server process 는 oracle instance 부분으로 define 되지 않는다) jkspark@hanafos.com -7- 장 경상
  • 8. Oracle basic administration http://www.ggola.com Files Oracle Database 는 3개의 File components를 갖는다. Datafiles, Control files, Redo log files로 나누는데 Oracle Server가 open 되기 위한 각종 parameter 를 기록해 놓은 parameter file 과 기록을 남기는 alert file, trace file도 일종의 관련요소로 포함 시킬 수 있다. Datafiles System.dbf A_data.dbf Roll_back.dbf A_index.dbf xxxx.dbf xxxx.dbf xxxx.dbf xxxx.dbf xxxx.dbf xxxx.dbf . contains all of the database data (tables, indexes …등 data dictionary data and user data) . data를 physical하게 기록하는 OS 상에 존재하는 File로 확장자는 일반적으로 .dbf를 사용한다. Control Files control01.ctl control02.ctl control03.ctl . a small binary file that describes the structure of the database . database files, log files 정보 및 database name 저장 . database내 table 정보, CKPT정보 등을 포함하여 Database 의 Start관련정보(mount, open, ascess), Recovery 필요정보를 저장한다 . DB 전반에 관한 내용을 physical하게 기록하는 OS 상에 존재하는 File로 확장자는 일반적으로 .ctl을 사용한다. <동일한 control file들을 다른 Disk에 저장 하여 Disk Failure에 따 른 Oracle Start 및 Recovery 문제를 방지할 수 있다>  Control file을 정의하는 parameter : control_files = ? jkspark@hanafos.com -8- 장 경상
  • 9. Oracle basic administration http://www.ggola.com Redo Log Files == Multiplexed Redo Log Files == Group 1 Group 2 Group 3 Log_File_1A.log Log_File_2A.log Log_File_3A.log (Member A) (Member A) (Member A) Disk #1 Disk #2 Log_File_1B.log Log_File_2B.log Log_File_3B.log (Member B) (Member B) (Member B) . record all changes made to the database, and are used for data recovery. (Recovery를 위한 모든 data 변경사항을 저장) . 위 그림처럼 Multiplexed로 Redo Log File이 만들어지면 같은 Group내에 있는 모든 Log File(Members)들은 동시에 동일한 information을 update하며 Size도 같게 된다. (mirroring) . 적어도 2개 이상의 Log Group을 가져야 한다. (member의 default size는 500K 이다) . 변경된 내용을 physical하게 기록하는 OS 상에 존재하는 File로 확 장자는 일반적으로 .log를 사용한다. . log file 1개가 다차면 다음 log file로 이동하면서 순환된다. (이를 switch라 한다) <각각의 Log member들은 다른 Disk에 저장 함으로서 Disk Failure 에 따른 Oracle Recovery 문제를 방지할 수 있다> Parameter File . a text file containing a list of instance configuration parameters . SGA memory sizing, control file location and name, back ground processes information등 각종 Oracle Instance 시작시 setting될 value를 지정한다. . physical하게 기록되는 OS 상에 존재하는 Text File로 확장자는 일 반적으로 .ora를 사용한다.  일반적으로 다음의 위치에 존재하며 init.ora 가 default다 /$ORACLE_HOME/dbs/init$SID.ora jkspark@hanafos.com -9- 장 경상
  • 10. Oracle basic administration http://www.ggola.com Alert File . Oracle Instance가 작동중인 동안 error가 발생하면 alert file에 그 message를 남기고 만일 server process나 background process에 의 해 detect되면 trace file로 dump된다. . Oracle 이 스스로 기록을 남기는 OS 상에 존재하는 Text File로 확 장자는 (alert_).log  일반적으로 다음의 위치에 존재하며 parameter file에 지정된 background_dump_dest = /……./ parameter의 위치에 기록된 다. Trace File Server process 가 trace file . internal error 가 server process나 background process에 의해 을 만들게 하려면 : detect되면 관련된 trace file에 그 message를 남기게 된다. . Server Process가 스스로 기록을 남기는 OS 상에 존재하는 Text 1. parameter : sql_trace=true File의 확장자는 (ora_) (process_no) .trc 이고 background process가 2. command : alter session set 생성시키는 trace file은 process 이름 no_.trc로 사용한다. sql_trace = true  background process에 의해 감지되면 parameter file에 지정된 cf) background process 의 background_dump_dest = /……./ parameter의 위치에 기록된 trace file 은 관계없다. 다.  server process에 의해 감지되면 parameter file에 지정된 user_dump_dest = /……./ parameter의 위치에 기록된다. Oracle Architecture Oracle Instance PMON SMON DBWR LGWR CKPT Pnnn SGA Dnnn Shared Pool Database Buffer Cache Redo Log Buffer RECO Data Dictionary Area Shared SQL Area Snnn LCKn ARCH SNPn Parameter File Server Process User Process Control File Datafile1 Datafile3 LogfileA1 LogfileB1 Control File Datafile2 Datafile n LogfileA2 LogfileB2 Database (Files) jkspark@hanafos.com - 10 - 장 경상
  • 11. Oracle basic administration http://www.ggola.com 2. Starting up and Shutting down an Instance Authentication Methods OS상에서 DBA작업을 수행하는 최초의 일과 마지막 일은 Database 를 startup 하고 shutdown 하는 것이다. 일반적으로 Server Manager라는 utility를 사용하는데 이는 최초 Instance를 start하고 down시키기 위한 방법중의 하나다. OS에 Login 후 Server Manger를 Invoke하는 방법은 OS의 인증에 따라 username/password 없이 하는 것과 직접 username/password를 입력하는 방법이 있다. Connect internal Sys user로만 instance를 start and down할 수 있지만 다른 user에 게도 그런 권한을 주려면 ‘sysdba’ or ‘sysrole’ 권한을 주어야 한다. . sys user인 경우 [oracle]> svrmgrl connect sys/password Connected. SVRMGR> . 타 user인 경우 [oracle]> svrmgrl connect user/password as sysdba ; Connected. SVRMGR> OS 인증으로 user/password 없이 invoke하기 위해선 password file 없이 parameter remote_login_passwordfile = NONE 으로 해야 하고 그렇지 않으면 ORAPWD utility를 이용하여 password file을 만들고 parameter remote_login_passwordfile = EXCLUSIVE 로 해 야 한다. 위 경우는 password file을 만들고 invoke하는 경우고 일반 적으로 parameter remote_login_passwordfile = NONE 으로 하여 OS 인증을 통해 invoke 한다. . 일반적인 경우 (당연히 sys user로 login 된다) [oracle]> svrmgrl connect internal Connected. SVRMGR> jkspark@hanafos.com - 11 - 장 경상
  • 12. Oracle basic administration http://www.ggola.com Startup Instance Instance 를 start시키고 database를 open하는데는 3단계의 과정을 거친다. nomount . Database를 Creation 하는데 사용한다. . Parameter file init$SID.ora 를 read하여 instance start. mount . started instance로 control file을 open. (alter file structure and modify control file flags) . control file과 disk status등을 확인하여 문제가 생기는 경우 starting recovery, DB관리를 위한 renaming log or datafiles 등을 위한 절차이다. . mount option : (OPS Server 사용시) - exclusive : 단지 현재의 한 instance만 access - parallel : multiple instance사용 가능 (Begin OPS) - shared : is a synonym for parallel ( = parallel) - option ‘retry’ : 5초 간격으로 start되지 못한 OPS의 instance를 계속적으로 start open . makes the database available to all users. . All files opened as described by the control file for this instance. (open datafiles, log files..) . open option : - noresetlogs : 보통 Database open시 log file을 건들지 않는경우 에 해당 - resetlogs : Database open시 log file을 reset한다. 즉, log file을 초기화 시켜서 open하는 경우로 일부 data를 lost할 수 있다  SGA는 parameter file에 지정된 대로 redo log buffers, database buffers가 생기고 Fixed size에 일반적인 database and instance 정보를 저장한다.(no user data) 그리고 variable size는 shared pool, sort areas등 user관련 data가 사용한다. jkspark@hanafos.com - 12 - 장 경상
  • 13. Oracle basic administration http://www.ggola.com Database Starting . startup : svrmgrl에서 startup 하면 nomount, mount, open의 과정 을 일시에 수행한다. . startup nomount -> alter database mount -> alter database open (한단계씩 실행하면서 적절한 작업을 수행하는 경우에 이용) . startup option : - force : 이미 start된 instance를 restart - restricted : restricted privilege를 가진 user만 database에 connect 할 수 있도록 start. - PFILE = filename : 특정 file을 parameter file로 start.  Instance가 start되면 Oracle Server는 read parameter file, allocates the SGA, starts the background processes, opens trace and alert files.  Connect internal후 Database를 startup하기전에 session에 대 한 제한을 줄 수 있다. Alter system enable restricted session ; Alter system disable restricted session ; Shutdown Instance Instance 를 down 시키는데는 3가지 option이 있다. nomal (일반적인 경우로 생략되어 default로 적용된다) . waits for all currently connected users to terminate their sessions normally. immediate . terminates currently executing SQL statements and rolls back uncommitted transactions. abort (즉각적인 Shutdown Database) . does not wait for calls to complete or users to disconnect. (It dose not roll back uncommitted transactions.) . does not close or dismount the database , but does shut down the instance. (The next startup will require instance recovery automatically)  Shutdown : close -> dismount -> down jkspark@hanafos.com - 13 - 장 경상
  • 14. Oracle basic administration http://www.ggola.com 3. Creating a Database Create a Database Tasks Database를 Creation하기 위해서는 다음과 같은 선행작업을 필요로 한다. Managing and organizing a database system . organizing the contents of the database through tablespaces . database 구조를 디자인 to reduce contention and fragmentation . OS environment 준비, parameter file setting, starting the instance . Create Database SQL command를 수행 . redo log files and control files를 multiplexed로 생성하여 Database Safety를 높인다. . 필요한 경우 password file생성 . database monitor를 위한 data dictionary tables and views 결정 Determining Tablespaces Tablespace는 Oracle의 가장큰 저장단위 . 개개의 tablespace는 하나이상의 OS상의 Files로 구성된다. . database가 running일 때 tablespaces can be brought online . system영역인 system tablespace는 offline될 수 없지만 그 밖의 tablespace는 offline될 수 있다. (database가 running 이어도) 단, active rollback segments를 가지고 있는 tablespace는 offline 될 수 없다. . object는 하나의 tablespace에만 존재할 수 있다. (Oracle8 이전) . SYSTEM tablespace외에 일반적으로 TEMP(sorting), RBS(rollback), TOOLS(Oracle Server Tools)를 기본적으로 필요로 하며 그 다음은 설계에 맞도록 Application Data and Index를 위한 tablespaces를 적절히 생성하게 된다.  Tablespace를 적절하게 구성하기 위해선 저장될 data의 특성 을 고려하여 다음의 사항을 주의한다. – minimize fragmentation – minimize disk contetion – separate segments jkspark@hanafos.com - 14 - 장 경상
  • 15. Oracle basic administration http://www.ggola.com Minimizing Fragmentation . fragmentation의 propensity에 따라 비슷한 빈도를 나타내는 object를 적절한 tablespace에 따라 분류한다. (extent의 alloc, dealloc의 빈도에 따라 fragmentation propensity가 결정된다) . 일반적인 fragmentation은 segment의 종류에따라 달라지는데 요 약하면 다음과 같다. Segment Type Fragmentation Characteristics Data dictionary segments Zero fragmentation Application data segments (data) A low fragmentation Application interim segments (index) A moderate fragmentation Rollback segments A moderate fragmentation Temporary segments A high fragmentation . Data dictionary는 일반적으로 고정된 정보를 가지므로 extent의 alloc, dealloc이 드물다. . data의 경우 삭제가 많이 일어나지 않는다면 많지않은 fragmentation이 일어날 것이다. . index의 경우 새로 만들거나 없어지는 경우가 생기므로 일정정도 의 alloc, dealloc이 일어날 것이다. . rollback segments의 경우 alloc, dealloc이 비교적 빈번히 일어나겠 지만 순환적으로 사용하므로 심하지않은 fragmentation이 일어날 것이다. . temporary segments의 경우 sorting작업이 빈번하므로 지속적인 fragmentation이 일어나겠지만 주로 재 사용을 하므로 큰 부담을 주지는 않을 것이다. Minimizing Contention . Performance 향상에 있어서 disk contention을 줄이는 것은 중요한 부분의 하나가 된다. . 위에서 열거했듯이 각 segment별 성격이 다르므로 각각의 segment별 disk를 나누어서 생성하는 것이 가장 좋을 것이다. . 물론 경우에 따라 Large segments가 필요하다면 Small segments 와 disk를 달리 사용하는 것이 좋을 것이고 data와 index는 대부분 동시에 변경을 가져오므로 필히 disk를 나누어 사용하는 것이 좋다. . 단, 동시에 사용하는 관련있는 table과 index는 나누어야 겠지만 서로 관련성이 떨어지는 table과 index가 있다면 예를들어 A업무의 table이 #1 disk , index가 #2 disk라면 B업무는 #1 disk에 index를 #2 disk에 table로 나누는 것이 좋은 분류가 될 것이다. (중요한것은 업무성격별 분류가 된다) jkspark@hanafos.com - 15 - 장 경상
  • 16. Oracle basic administration http://www.ggola.com Separating Segments . 그렇다면 어떤 방식으로 segments를 나눌 것인가! . different backup needs, access requirement, day-to-day uses, life span (1) Backup and Recovery관점에서 다른 종류의 application data들을 나누어두면 advantages가 있 다. 만일 read-only tablespaces를 가지고 있다면 backup이 훨씬 더 빨라질 것이다. (2) Sizing관점에서 Data growth의 measure and forecast가 쉬워진다. (3) Security 보안차원에서 user database privileges를 separating groups별 로 관리하기가 훨씬 쉬워진다. (4) Cleanup project별로 나누어져 있으면 archiving or cleanup하기가 훨씬 쉬워진다. (종료된 project관련 segment는 간단하게 삭제를 해도 다른 project에 영향을 주지 않을 것이다) Storing Database Files . 각종 database file은 어떻게 저장하는 것이 performance와 안정성 을 높일 수 있는가! . 적어도 two different physical devices에 control file을 나눔으로써 control file의 media failure에 대비한다. . multiplex the redo log files and put group members on different disks (control file을 나누는 이유와 같다) . disk를 striping해서 tablespace separating을 통한 data를 보관함 으로써 disk resource contention을 줄임으로 performance를 향상한 다. jkspark@hanafos.com - 16 - 장 경상
  • 17. Oracle basic administration http://www.ggola.com Creating a Database Creating an Oracle Database 준비를 위한 과정별로 살펴본다. Process for Creating a Database . Database를 생성하기 위한 기본 요소 - unique instance name, database name, block size, database character set, maximum number of database files, and maximum number of lock files . copy and edit the parameter file (init.ora : Oracle은 기본적인 parameter file을 제공함으로 그것을 copy하여 project성격에 맞게 설정한다) . set up the appropriate operating variables . invoke server manager and connect (SVRMGRL> CONNECT INTERNAL (/ as sysdba or sysoper) . start the instance (SVRMGRL> STARTUP NOMOUNT) . create the database (Oracle은 기본적인 database creation statement를 제공한다. 사용하고자 하는 system에 맞도록 조정하여 사용한다) Determining the Instance Name, Copying and Editing the pfiles . Decide unique instance name . instance name은 parameter file의 name에 default로 만들어지며 pfile directory에 생성되어 $ORACLE_HOME/dbs 밑에 Symbolic link 된다. (예: instance name 이 CENTER이면 initCENTER.ora로) . instance의 running 여부는 O/S dependent하게 check된다. 예를 들면 UNIX machine에서 ps – ef 와 같은 명령어로 관련 instance의 background processes의 활성화 여부를 check한다. . parameter file을 product system 환경에 맞게 수정한다. pfile은 only read file 이므로 수정이 있으면 반드시 instance restart를 해야 적용된다. . 주요 parameter attribute : (That should be specified) db_name, control_files, db_block_size, shared_pool_size, backupground_dump_dest, user_dump_dest, db_block_buffers, compatible (이중 db_name and db_block_size parameter는 creating database 시점에만 적용된다. 당연히, 이후 수정작업은 instance restart와 상 관없이 영향을 끼치지 못한다. 즉, db_name parameter의 이름을 바 꾼다 하여도 DB name이 변경되는 것은 아니다. 왜냐하면 이 이름은 control file에 저장되기 때문이다. Block Size도 마찬가지이다.) (Always specify at least two control filenames in the parameter file, placing them on separate disks if possible) jkspark@hanafos.com - 17 - 장 경상
  • 18. Oracle basic administration http://www.ggola.com . setting 된 parameter attribute 확인은 v$parameter table이나 sever manager상에서 show parameter ?? command로 확인이 가능 하다. (기타 : v$sga, show sga) Setting the system identifier and ora_nls . System Identifier(SID) is an environment variable used by the Oracle Server to determine to which instance a user will connect. (ORACLE_SID=CENTER;export ORACLE_SID) . Before starting up instance, verify that the SID is set correctly. . ORA_NLS is the PATH to the language object files. 이 environment variable 은 database creation전에 setting한다. (ORA_NLS= /app/oracle/product/733/ocommon/nls/admin/data; export ORA_NLS) . NLS setting check : sys.v$nls_valid_values (should be set for version 7.2 or higher) Procedure . connecting to the database SVRMGRL> connect internal ( / as sysdba) . staring the instance : read parameter file and background processes will be started. SVRMGRL> startup nomount . creating the database SVRMGRL> create databse CENTER datafile ‘/…/system.dbf’ size 10?M logfile group 1 ‘/…/redoCENTER1a.rdo’ size 10?K, group 2 ‘/…/redoCENTER2a.rdo’ size 10?K ; (그외 내용은 oracle default script crdb@SID.sql 참조) . adding a control file : database creation시 default control file은 1 개 이므로 instance shutdown후 기존 control file은 다른 이름으로 가능한 다른 disk에 copy하고 parameter file의 control_files= 에 추 가한다) . adding a redo log member : database creation시 default log group 은 2개이고 1개의 member를 갖는다. group당 member를 추가한다. SVRMGRL> alter database add logfile member ‘/…/redoCENTER1b.rdo’ to group 1 ; (size는 기존 member와 동일하게 생성되고, v$log와 v$parameter view를 참조한다) . Data Dictionary Views : oracle운영에 필요한 view생성 script catalog.sql : creates commonly used data dictionary views catproc.sql : runs all scripts required for PL/SQL on the server jkspark@hanafos.com - 18 - 장 경상
  • 19. Oracle basic administration http://www.ggola.com . Data Dictionary Users : Database administrators, Database users, Applications, The Oracle Server (Never use DML such as INSERT, UPDATE and DELETE to update the base data dictionary tables directly.) . Catagories : user_xxx, all_xxx, dba_xxx all data dictionary tables and vies are owned by sys. jkspark@hanafos.com - 19 - 장 경상
  • 20. Oracle basic administration http://www.ggola.com 4. Accessing and Updating Data 개요 Overview 1. SQL statements are processed by the Server process. 2. Identical SQL statements use shared SQL pool. 3. The database buffer cache keep before images of modified data in rollback blocks and after images of modified data in data blocks 4. The database writer (DBWR) writes all changed buffers to disk. Database buffer cache . Data blocks : data가 buffer에 없으면 disk에서 read하여 Database buffer cache내에 저장하고 user가 modify시 change한다 => after image . Rollback blocks : read된 original data를 저장한다. user가 rollback 을 원하면 이 block data information을 사용 rolled back 한다. => before image Copy Original version of data (before image 가 된다) Data block 빈 BLOCK (after image) DISK Cache miss (physical read) Rollback block (before image) Cache hit (logical read) USER . Redo log buffer : During the transaction processing , Sever process 는 위의 before and after image를 redo log buffer에 기록하며 이후 recovery에 사용된다. . The database buffer cache is organized in two lists: The dirty list and the least recently used(LRU) list. The dirty list contains modified buffers that have not been written to disk. Free buffers : 수정되지 않은 사용 가능한 buffers Pinned buffers : 현재 currently accessed buffers Dirty buffers : disk로 쓰여질 필요가 있는 수정된 buffers jkspark@hanafos.com - 20 - 장 경상
  • 21. Oracle basic administration http://www.ggola.com Server Process . All SQL statements are processed by the Server process. And Server process는 parse, execute, fetch를 담당한다. (PGA사용) Server process는 disk에서 read a data하기 위해 다음과 같은 작업 을 수행한다. – Searches the LRU list. – Looks for a free buffer - Moves dirty buffers to the dirty list 작업중 free buffer를 찾거나 찾지 못한 상태에서 지정된 크기의 범 위를 벗어나면 server process는 searching을 중단한다. . PGA는 server process에 위치시키는 memory이지만 MTS환경에 서는 session정보를 가지지 않는다.(SGA로 올라간다) Statement processing Processing SQL statement 1. parsing : syntax check => semantics check ( statement내 object 존 재 유무 check , security(grant) check from data dictionary => execution plan 설정 (rule base or cost base or choose..) 2. binding : parameter and value 처리 (값 넘겨주기) 3. execution : 실행 (S, I, U, D) 4. fetch : select statement only . 동일한 SQL statement 요청을 대비 parsing된 information은 shared pool에 보존된다. (procedure를 사용하는 이유중 하나) Select operation . logical read(cache hit) or physical read(cache miss)를 통해 read . 관련parameter : DB_FILE_MULTIBLOCK_READ_COUNT = ? (동시에 access 가능한 즉, I/O readable block수 : Full table scan에 유용) DB_FILE_SIMULTANEOUS_WRITE = ? (DBWR가 동시에 write 가능한 file수) Update operation 1. acquire data block and rollback block from database buffer cache 2. exclusive row lock 3. before and after images copy to redo log buffer jkspark@hanafos.com - 21 - 장 경상
  • 22. Oracle basic administration http://www.ggola.com 4. 위에서 확보한 rollback block에 rollback data copy 5. 변경된 내용을 data block에 적용 DBWR 구동 . DBWR는 무엇을 하는가 : writes all changed buffers to disk, uses a LRU algorithm to keep most recently used blocks in memory, defers writes for I/O optimization (buffer에 있는 내용을 disk로 내 려쓰므로 그 사이에 system failure시 commit이 되었다 할 지라도 commit결과가 반영되지 않을 수 있다. 이런 경우 redo log file이 recovery에 반영된다. 그렇기 때문에 before and after image가 redo log buffer로 copy 된다) . commit시점에서 LGWR가 redo log buffer를 모두 redo log file에 적용하므로 commit이 안된 transaction 의 buffer도 모두 redo log file에 반영된다 => piggyback write) . DBWR가 disk에 dirty buffer를 언제 쓰는가 : dirty list가 다 찬 경우, free buffer를 찾지 못하고 LRU list의 정해진 a specified number of buffers를 넘어선 경우, time-out 시, checkpoint 발생시 jkspark@hanafos.com - 22 - 장 경상
  • 23. Oracle basic administration http://www.ggola.com 5. Manage Transaction Concurrency and Consistency Transactions Transaction commit 1. commit command after DML 2. DDL command 발생 3. 정상적 log out from Oracle Server Transaction abort 1. rollback 2. user-requested termination 3. abnormal exit 4. process or disk failure . DDL은 implicit commit 1. Update 2. Insert 3. DDL command issued 4. Delete 5. Rollback 이 경우 1, 2는 commit이 발생하고 단지 4만이 rollback된다 Database commits procedure 1. A user issues a COMMIT 2. LGWR flushes redo log buffer to current log group. 3. Commit result is returned to the user 4. Resources and locks are released on data and rollback blocks. 5. DBWR will eventually write database blocks to disk. jkspark@hanafos.com - 23 - 장 경상
  • 24. Oracle basic administration http://www.ggola.com LGWR, Checkpoint, ARCH…. LGWR . LGWR 구동시점 1. a commit occurs 2. redo log buffer의 1/3이상 찰 때 3. time-out시 4. every three seconds 5. DBWR이 checkpoint발생으로 인해 database buffer cache를 clean할 경우 . redo log file이 다차면 switch가 발생되어 다른 log file에 sequence # 가 부여되고 그 log file이 current하게 된다. (current log sequence number는 control file에 기록된다) . alter system switch logfile ; command로 강제 log switch가능 Checkpoints . 발생시점 : 1. log switch 시 2. time-out 시 : LOG_CHECKPOINT_TIMEOUT = ? 3. disk에 write한 block수가 일정부분에 도달시 : LOG_CHECKPOINT_INTERVAL = ? 4. abort를 제외한 instance shutdown시 5. DBA의 강제 : alter system checkpoint ; command 시 6. Tablespace offline시 먼저 checkpoint발생 후 offline된다 7. Online backup 시 해당 file에 대해서 . 동기화정보 (synchronization information) - checkpoint발생시 고유의 checkpoint number가 생기고 이것은 각 datafile의 header와 control file에 update된다. – 따라서 control file의 checkpoint number는 각 datafile의 그것과 동일하다. (read only tablespace 제외) (8i에서는 fast_start_io_target도 영향을 미침) jkspark@hanafos.com - 24 - 장 경상
  • 25. Oracle basic administration http://www.ggola.com CKPT Process - parameter CHECKPOINT_PROCESS = TRUE 인경우 활성화 - CKPT가 활성화 되면 LGWR의 작업량중 위 동기화정보를 update 하는 작업을 인수받아 대신 해주므로 LGWR의 부담을 덜어준다. – datafile header and control file에 기록되는 checkpoint number는 맨 마지막 것이다. (system change number) - 빈번한 checkpoint발생은 recovery시 시간을 줄여 줄 수 있으나 전체적인 performance는 expense를 요구한다. – CKPT process의 활성화는 LGWR의 부담을 줄여주므로 database performance를 향상 시켜준다. ARCH . Archiver process는 redo log files을 다른 media로(tape or disk...) copy한다. (for only media failure recovery) . log switch 가 발생할 때만 작업한다. . instance가 archivelog mode로 운영중일때 활성화된다. jkspark@hanafos.com - 25 - 장 경상
  • 26. Oracle basic administration http://www.ggola.com 6. Manage the Database Structure Object Definition Database, File, Tablespace, Segment, Extent, Block Database Tablespace Tablespace Tablespace Segment Extent File #3 File #2 Block File #1 한 segment는 다른 tablespace에 걸쳐서 존재 할 수 없다. Logical Database Structure . Tablespace : is sum of some datafiles maped. can be offline, execpt SYSTEM tablespace and a tablespace with an active rollback segment, leaving DB is running . Tablespace uses performing partial backup and partial recovery operations.  System tablespace : create database시 생성된다. contains data dictionary information, procedure-package- triggers…. contains system rollback segment. can contain user data (때에따라 default tablespace를 정하 지 않은 경우 data 저장장소가 명확치 않으므로 system tablespace에 기록되는 bad action이 가능하다)  Non-system tablespace : consists of rollback segments, temporary segments, application data-indexes, user space…. 추가되는 tablespace.  Physical Database Structure : data files on O/S jkspark@hanafos.com - 26 - 장 경상
  • 27. Oracle basic administration http://www.ggola.com Creating a Tablespace . Create tablespace rb_tbs datafile ‘/u01/…./rb_tbs.dbf’ size 10M default storage ( initial 50K next 50K minextents 10 maxextents 121 pctincrease 0) ; . 위 default storage는 생성된 rb_tbs라는 tablespace에 생성될 segment의 create segment 문법에서 storage를 정하지 않았을 경우 위 default storage를 사용하게 된다. 만일 tablespace 생성시에도 default storage를 정하지 않는다면 system default storage를 적용시 킨다.  system default : initial 10 next 10 minextents 1 maxextents 10 pctincrease 50  dropping : drop tablespace rb_tbs including contents [cascade constraints]  tablespace attribute : create tablespace문에서 마지막에 option의 사용으로 tablespace의 속성을 정의할 수 있다. default : create tablespace …………….. permanent ; this tablespace는 object를 가질 수 있다. optional : create tablespace …………… temporary ; this tablespace는 object를 가질 수 없으며 단지, implicit sorts 에 사용된다. : v$sort_segments ※ rollback segment tablespace도 object를 가지지 않는다. rollback 용으로 사용되는 공간일 뿐이다.  tablespace의 종류 : read-only, read-write alter tablespace tbs_name read only ; alter tablespace tbs_name read write ; Segments . Rollback : holds rollback data for rollback, read-consistency, recovery . Data : holds all of the data for a table or a cluster . Index : holds all of the data for a specific index . Temporary : holds data belonging to temporary objects . Bootstrap : Server open시 server가 주관하는 일종의 cache segment로 DBA와 무관한 것으로 user access불가(sys user 소유로 system tablespace에 유지) jkspark@hanafos.com - 27 - 장 경상
  • 28. Oracle basic administration http://www.ggola.com 7. Manage Storage Allocation Controlling Extent Allocation Storage parameters Initial, next, minextents, maxextents, pctincrease, optimal(rollback segment용), freelists, freelist groups(OPS간의 즉, instance간 freelist의 정보 교환을 위해) . initial, mixextents 수정 불가 Segment 1 2 3 block Initial extent Next extent 첫번째 block (segment header block) : - extents정보 - free list정보(비어있는 block정보) Set storage parameters on Tables, clusters, indexes, rollback segments, tablespaces . Storage 적용 우선순위 : segment specific storage  default storage  system default . The OPTIMAL command is only specified for rollback segments. . FREELISTS and FREELIST GROUPS parameters cannot be specified for tablespace defaults Effects of changing PCTINCREASE pctincrease 50 이라면…. Next = next * (1 + new pctincrease / 100) rounded up to the next Oracle block ex) pctincrease 50인 경우 initial 10K next 10K일 때 처음 next가 발 생하면…. Next = 10 ; total = 10 + 10 = 20 두번째 next가 발생하면 Next = 10 * ( 1 + 50/100) = 15 ; total = 15 + 15 = 30 세번째 next가 발생하면 … Next = 15 * (1 + 50/100) = 22.5 ; total = 22.5 + 30 = 52.5  위는 round up을 생략한 계산 jkspark@hanafos.com - 28 - 장 경상
  • 29. Oracle basic administration http://www.ggola.com Database blocks An Oracle data block is the smallest unit of storage used by database. Properties of Database blocks . DB creation시 db_block_size parameter로 결정되고 all datafiles에 적용된다 . 위 size로 SGA내 database buffer도 결정 . db_block_size는 최초 변경후 수정이 불가하다 . block size의 default value는 depends on operating system . ALL I/O는 block level로 수행되고, Oracle Server는 row level로 locking을 유지, 관리한다. Block 정보 : row pointer Common and Variable Header transaction entry Table Directory Cluster Only Row Directory Row 정보 : requires 2 bytes of overhead per row Free Space PCTFREE Row Data PCTUSED Controlling Space Usage - PCTFREE : 추후 Update를 위해 block에 남겨둘 free space % (default : 10 %) - PCTUSED : 추후 일어날 Insert를 대비하기 위해 사용되는 Blcok의 제한 space (default : 40 %)]  따라서 PCTFREE + PCTUSED 는 100 이하여야 한다.  Update가 자주 일어나는 table의 경우 pctfree를 높임으로서 block 이동을 막을 수 있다. (update로 인한 한 row의 data가 한 block의 free space에 채워지지 않으면 그 row가 통째로 다른 block 으로 이동하기 때문에 migration)  Insert가 자주 일어나는 table의 경우는 pctused를 줄인다 (freelist정보에 대한 access를 줄이기 위해서)  위 parameters를 잘 조정하여 row data의 chaining and migration을 줄일 수 있도록한다. (왜냐하면 한 row는 가능한 한 block에 존재하려고 하므로 공간이 조금만 부족해도 그 row전체는 다른 block으로 이동하기 때문이 다.) jkspark@hanafos.com - 29 - 장 경상
  • 30. Oracle basic administration http://www.ggola.com - INITRANS : each block header에 initially로 allocate할 transaction entries 수를 지정 (1-255, default value는 1로 setting되며 가능한 바꾸지 않는다) - MAXTRANS : concurrently로 block을 access할 수 있는 the maximum number of transactions를 지정(1-255, default value 는 block size와 관계되어 설정되며 바꾸어서는 안된다) - Migration : pctfree의 지정크기 보다 더 큰 update가 발생할 수 있는데 그렇게 되면 update 작업을 동일 block에 완료할 수 없 기 때문에 그 전체 row를 다른 block으로 이동한다. 이 경우 현 block에는 이동된 row의 block을 알 수 있도록 불필요하게 공 간을 차지하는 row pointer를 기억해야 한다. 따라서 그 data를 access시 이전 존재했던 block을 access 하여 row pointer를 찾 아 옮겨진 block을 찾아가야 하는 불필요 작업이 필요하며, 경 우에 따라 계속 옮겨지면 row pointer를 따라 몇 block씩 read 하는 경우도 있을 수 있다.  Migration을 줄이기 위해선 PCTFREE설정을 고려하고 이미 migration이 일어난 경우에는 export  drop  import의 작업으로 row pointer를 정리할 수 있다. - Chaining : 일반적으로 large row에서 발생하는데 1 row가 1 block에 다 들어갈 수 없는 경우 다른 block에 걸쳐서 chained되는 경우를 말한다. Extent and Segment 관련 dictionary USER/DBA_EXTENTS, USER/DBA_FREE_SPACE USER/DBA_SEGMENTS, DBA_TABLESPACE, DBA_DATA_FILES Unused space 관리 . HWM (High water mark) : segment에서 원하는 data를 찾기 위해 서는 필요로 하는 extent 전체를 read해야 하므로 그 불필요성을 없 애기 위해 가장 마지막 extent의 사용된 마지막에 HWM을 표시하 여 read unit을 줄일 수 있다. 그러나 HWM은 data의 delete등으로 중간에 빈 space가 생겨도 내려오지 않는다. . De-allocation alter table tab_name deallocate unused ;  이 명령으로 사용되지 않는 space를 de-allocation이 가능하지만 HWM이상의 공간에서만 사용이 가능하다. . Coalescing free space alter tablespace tbs_name coalesce ;  이웃하고 있는 빈 space를 하나로 만들어 큰 공간을 만들어 주는 명령어 즉, 연속된 free space의 fragment를 없앤다. SMON이 주기적으로 비어있는 contiguous extent의 coalescing 작 jkspark@hanafos.com - 30 - 장 경상
  • 31. Oracle basic administration http://www.ggola.com 업을 하지만 pctincrease가 0보다 큰 tablespace에만 작업을 진행한 다. jkspark@hanafos.com - 31 - 장 경상
  • 32. Oracle basic administration http://www.ggola.com 8. Manage Rollback Segments Rollback Segments Characteristics (written in a circular fashion) . rollback for transaction (or to savepoint) . read consistency . database recovery . record data changed except SYSTEM rollback segment (SYSTEM Tablespace의 rollback segment는 SYSTEM이라 명명되어 있고, 적어도 그 외의 Rollback segment를 1개 이상을 가지고 있어 야 한다) Properties . transaction 크기나 시간에 따라 커질 수 있다. . alter rollback segment rbs_name shrink to <size> ; 이 명령으로 크기를 줄일 수 있다. . automatically shrink를 위해선 optimal option을 사용한다. . set transaction use rollback segment rbs_name ; 이 명령으로 rollback segment를 지정해서 사용할 수 있는데 한번만 유효하므로 여러 transaction을 요하는 경우에는 매번 이 명령을 사 용해야 한다. Parameters INITIAL, NEXT, MINEXTENTS, MAXEXTENTS, OPTIMAL . Optimal option을 지정하면 rollback segment가 커지면 de- allocate를 통해 이 optimal size만큼 유지하려한다. . pctincrease를 지정할 수 없으므로 항상 0이다. . minextents는 적어도 2개 이상을 유지한다. . maxextents는 unlimited를 지정할 수 없고 available한 disk space 를 모두 사용한다. Type . PRIVATE : system이 인지할 수 있도록 parameter file에 ROLLBACK_SEGMENTS = … 로 명시한다 (DBA가 생성) . PUBLIC : OPS의 경우 instance별로 지정해서 사용할 수 있도록 하 는데 사용하지만 OPS라 할지라도 일반적으로는 private이 추천된 다. . DEFERRED : tablespace가 offline되는 경우에 immediately하게 rollback이 될 수 없는 경우 system tablespace에 만들어져서 recovery시에 적용된다. jkspark@hanafos.com - 32 - 장 경상
  • 33. Oracle basic administration http://www.ggola.com  create rollback segment rbs_name tablespace rbs storage (initial .. .. optimal ??K) ;  alter rollback segment rbs_name online ;  v$rollname and v$rollstat view를 사용하여 rollback segment의 wait율을 구할수 있는데 만일, wait율이 1%보다크면 일반적으로 이 경우에 segment를 추가하거나 set 명령으로 수정한다. 일반적으로 50개 이하의 RBS사용을 추천하는데 다음을 recommand 한다. transaction : 1 ~ 16  RBS 4개 17 ~ 32  RBS 8개 32 이상 / 4  계산결과 개수의 RBS  drop rollback segment rbs_name ; jkspark@hanafos.com - 33 - 장 경상
  • 34. Oracle basic administration http://www.ggola.com 9. Manage Table and Index Segments Segment Features Data : contain data (table, index cluster, hash cluster) Index : Provides an efficient structure to locate specific rows in tables Tables Features . holds user data . holds system data (data dictionary) . create table statement로 만들어진다. . header block은 free list와 object extent information을 갖고있다. . parallel query option 사용시 parallel로 table creation이 가능.  create table tab_name as select …….. parallel … ; . redo log buffer를 bypass하는 unrecoverable option도 사용가능.  create table tab_name as select ….. unrecoverable ;  create table tab_name (column.. type ….), storage (….) tablespace tbs_name ;  alter table tab_name - (column .. type..) - add constraint …...;  drop table tab_name (cascade constraints : reference key drop) ;  truncate table tab_name ; - Row . row length는 제한이 없다. . row는 multi block에 span될 수 있으므로 row chaining의 원인이 된다. . null column의 column length는 0이다 Index Index는 B*-Tree concept을 사용한다. (설명생략) Features . Independent of table or cluster . Index만의 storage and tablespace를 갖는다. . parallel로 creation이 가능하며, 보통 해당 table보다 작다. . unrecoverable 사용이 가능하다. . data segment와 다른 tablespace를 사용하는 것이 좋다. jkspark@hanafos.com - 34 - 장 경상
  • 35. Oracle basic administration http://www.ggola.com . single or composite / unique or non-unique index 모두 가능하다. Bitmap Indexing . tables이 매우 큰 경우 (수백만 rows 이상) . 중복된 값이 매우 많은 data ( [ex] sex, age, marital status, postal code ..)  create [unique/bitmap] index ind_name on tab_name (column) tablespace ind_tbs_name storage (……) pctfree 0; - performance trade-off : index는 table retrieve speed를 올려주는 대신 table update speed의 저하를 감수해야 한다. (table data가 바뀌면 관련 index data도 동시에 바꾸어야 하므로) – index는 일반적으로 column data의 중복성이 5 ~ 20% 이내인 경 우에 효과적이다. – pctused 는 index storage에 사용하지 않는다. – pctfree 는 insert가 많이 일어날 경우 high, insert가 거의 이루어지 지 않는 경우 low하게 잡는다. – index는 delete 작업이 이루어 지지 않으므로 지속적인 변경이 오 는 table의 index size는 계속해서 커질 수 있다. 이런 경우 index를 drop하고 다시 만들면 되지만 DB가 running 중인 경우에는 index 를 생성하는 동안 그 index를 사용할 수 없으므로 rebuild option을 사용해서 재생성 하면 가능하고 또한 recreation 보다 더 낳은 performance를 제공한다.  alter index ind_name rebuild [tablespace tbs_name] ;  drop index ind_name ; jkspark@hanafos.com - 35 - 장 경상
  • 36. Oracle basic administration http://www.ggola.com 10. Manage Cluster Segments Segment Features Index cluster : contains rows from one or more tables stored together based on the value in a column of the tables Hash cluster : contains rows from a table stored by way of a hashing algorithm Clusters는 storage structure 를 정의하고 각 cluster는 하나 이상의 table definition을 가지고 있다. Hash clusters may contain more than one table but this is rare. Clustered table은 마치 standalone table처럼 user에게 access된다. Index cluster 특징 . I/O performance를 증가시킨다. . storage overhead를 감소시킨다. . clustered table은 Key를 공유한다. . The cluster index is an index created on the cluster key columns . cluster key의 최대 columns 제한은 16개로 정해지지만 실질적인 개수는 data block size에 의존적이고 대략 data block size의 1/3을 넘지 못한다.  clustered table들은 공통 column을 가지며 보통 함께 사용되고 동일한 data blokcs에 저장된다. Advantage . same data blocks을 사용함으로 disk I/O 감소 . clustered tabes간의 동일 data영역에 대한 storage 중복제거 . clustered tables에 대한 join시 access times 향상 . indexes를 위한 저장용량 감소 . clustered table의 join query시 상당한 performance향상 . join된 table의 key column 수정이 빠름 Disadvantage . 일반적인 update, delete, insert가 느리다. . 하나 이상의 tables로 만들어진 clustered table에 대한 full table scan은 느리다. jkspark@hanafos.com - 36 - 장 경상
  • 37. Oracle basic administration http://www.ggola.com Guideline . update가 잘 일어나지 않는 query가 중심적인 tables로서 보통 join으로 query가 이루어지는 table간에 clustered table을 만든다. . cluster key는 LONG이나 LON RAW를 갖는 column을 사용할 수 없다. . cluster index는 cluster key column에 대한 index로서 unique 하면 안된다. Creating cluster 1. cluster만들기 : table을 만들기 전에 먼저 만든다. create cluster cluster_ct1_ct2 ( key_column type) size 400 tablespace clt_data storage ( ….. ) ; 2. index 생성 create index idx_ct1_ct2 on cluster cluster_ct1_ct2 tablespace clt_index ; 3. 첫번째 cluster table create table ct1 ( column1, column2 ….. key_column) cluster cluseter_ct1_ct2 (key_column) ; 4. 두번째 cluster table create table ct2 ( column1, column2 ….. key_column) cluster cluseter_ct1_ct2 (key_column) ;  먼저 clustering할 table에 대한 definition을 생각하고 cluster를 만든다. 그리고 index를 생성하고 난후 clustering될 table을 하나씩 생성한다.  alter command로 수정  drop cluster 하는 방법 두가지 1. drop cluster cluster_ct1_ct2 including tables ; 2. drop table ct1 ; drop table ct2 ; drop cluster cluster_ct1_ct2 ; Hashing Hashing은 data retrieval의 performance을 향상 시키기위한 일종 의 table data를 저장하는 optional 방식이다. jkspark@hanafos.com - 37 - 장 경상
  • 38. Oracle basic administration http://www.ggola.com Hashing Applications . apply a hash function to the columns of table . store rows according to the result of the hash function . reduce the number of I/Os typically needed to retrieve a data block  table에 대한 hash는 먼저 cluster되어야 한다. Creating hash cluster 1. cluster 생성 : create cluster clt_emp ( emp_number number(4)) tablespace clt_data hashkeys 1000 hash is emp_number size 500 ; 2. table 생성 : create table emp_comp (empno number(4), column2, column3 …) cluster clt_emp (empno) ; 3. user-defined hash functions를 만드는 경우 home area code가 cluster key인 경우의 생성예: hash is mod ( (home_area_code + home_prefix), 101)  alter command로 수정하지만 hash cluster는 alter command로 size, hashkeys, hash is를 변경할 수 없다.  drop cluster clt_emp including tables ; jkspark@hanafos.com - 38 - 장 경상
  • 39. Oracle basic administration http://www.ggola.com 11. Manage Constraints Constraints Constraint type Not null Unique Check Primary key Foreign key Integrity constraints . Null value의 허용과 불허 정의 . unique value 확인 . table row의 primary identifying value 확인 . referenced table에서 column value의 적절성 확인 Data 일관성 보장 Foreign key check, application code check, database trigger check Advantage . easy to declare . centralized rules . easy to modify . immediate user feedback . flexible(enable, disable) . improved performance . documented in data dictionary Defining constraints - foreign key 생성시 on delete cascade : master가 delete되면 child도 함께 delete하는 option - 보통 references table에서 column name을 지정하지만 만일, primary key를 지정하는 경우 생략해도 된다. Constraint names . constraints name은 owner에게 unique 해야하고 . constraint clause의 constraint option 형식에서 지정하며 . 잘못된 경우 생성시 message로 나타나고 (미리 알 수 없다) jkspark@hanafos.com - 39 - 장 경상
  • 40. Oracle basic administration http://www.ggola.com . data dictionary에 입력되고 . constraint name을 이용하여 enable, disable, drop을 쉽게할 수 있 다. . constraint생성시 name을 지정하지 않으면 Oracle은 SYS_C00n 이 라는 형식으로 name을 만든다. .일반적으로 Oracle이 recommend하는 naming rule은 TableName_ConstraintType_ColumnName 예) emp table의 primary key : emp_pk_empno Creating constraints Not null constraints create table tab_name ( col1 number(6) constraint tab_nn_col1 not null ….) ; . not null constraint는 null인지 not null인지를 check하는 check constraint의 일종으로 constraint type은 check constraint와 동일한 ‘C’이다. (이후의 constraints관련 view참조) Unique constraints create table tab_name ( col1 number(6) constraint tab_nn_col1 not null constraint tab_uk_col1 unique using index tablespace idx_ts storage (….), ….) ; . unique constraint 생성시 index를 지정하지 않으면 Oracle이 제공 하는 rule에 따라 naming된 index가 자동으로 생성 . not null을 지정하지 않으면 null unique constraint생성 (위 처럼 지정하면 not null unique constraint 생성) Check constraints create table tab_name ( … col1 number(6) constraint tab_ck_col1 check ( col1 not in ( 0 ), col2 varchar2(3) constraint tab_ck_col2 check ( col2 in (‘ALL’, ‘NOT’,’ONE’)), ….. ….. ….) ; jkspark@hanafos.com - 40 - 장 경상
  • 41. Oracle basic administration http://www.ggola.com Primary constraints create table tab_name ( col1 number(6) constraint tab_pk_col1 primary key, ….. ….) ; . primary key 가 여러 column으로 만들어진 경우 create table tab_name ( col1 number(6), col2 varchar2(3), ….. , constraint tab_pk_col1_col2 primary key (col1, col2), ….. ….) ; Foreign key Create table emp ( …. , dept_id number(5) constraint emp_fk_dept_id references dept(id) on delete cascade …) ;  emp table의 dept_id는 dept table의 id column을 reference Foreign key index and no index . foreign key에 index가 있는 경우와 없는 경우  no index : parent table에 insert시 child에 lock을 요구하지 않음 parent table에 update, delete시 child table전체에 share lock 발생 그러나 child table의 insert, delete, update는 parent table에 lock을 요구하지 않는다.  index : parent table에 delete, update시 child table foreign key에 index가 있다면 lock을 요구하지 않는다. FK생성시 on delete cascade option을 사용했다면 parent table delete시 child에서 reference하고 있다면 child table data도 함께 delete한다. 이 때 발생하는 waiting and lock은 parent table row를 delete 한 후 Oracle 스스로 child table row를 delete 하는 순서를 거 침으로 발생하는 경우다. (user가 직접 delete작업을 하는 것과 마찬 가지) . foreign key는 원래 null value를 허용하므로 특히 composite key 인 경우에는 한 column만 null이라도 null이 아닌것으로 인식하므 로 필요에 따라 이를 막을 필요가 있다. jkspark@hanafos.com - 41 - 장 경상
  • 42. Oracle basic administration http://www.ggola.com table 의 Primary Key  check constrant를 사용한다. Create table emp ( 를 reference 하면 …. , column name 을 기술 empno number(6), 하지 않아도 된다 dept_id number(5), constraint emp_fk_empno_dept_id foreign key (empno, dept_id) references dept, constraint emp_ck_empno_dept_id check ( empno is not null and dept_id is not null) ….) ; Table만든후 나중에 constraint 추가하기 . alter command 사용 alter table tab_name add ( constraint const_name primary key(column), constraint const_name check ( salary > 50 ) ) ; alter table tab_name add ( constraint const_fk_name foreign key (column) references parent_tab(column)) ; Manage constraint 관련 view : dba(user, all)_constraint dba(user, all)_cons_columns Disable constraint . constraint가 disable되면 더 이상 그 constraint는 not enforced . 관련 index가 drop된다. . disable constraint하는 경우는 loading large amounts of data, batch operation, importing and exporting one table at a time Alter table tab_name disable constraint const_name [cascade]; . 만일 [cascade]를 사용한 constraint인 경우 disable시 cascade option을 사용하면 reference table의 FK까지 disable된다. 주의할 것은 enable작업은 따로 따로 해야 된다는 것이다. Enable constraint . constraint가 enable되면 그 constraint는 is enforced . 관련된 index가 creation된다. . table data의 constraint위반 여부를 검사하며 검사하는 동안 table 은 lock mode상태 . constraint creation시 default로 enable status를 가진다. Alter table tab_name enable constraint const_name [using index tablespace idx_tbs]  index 만들기 [exceptions into exceptions] ;  enable시 error사항 기록 jkspark@hanafos.com - 42 - 장 경상
  • 43. Oracle basic administration http://www.ggola.com . exception table에 enable시 error사항을 기록할 수 있다. table생성은 : /…/rdbms/admin/utlexcpt.sql (rowid, owner, table_name, constraint) (물론 이 table을 사용할 때는 truncate를 먼저 해야겠지) Drop constraint Alte table tab_name drop (unique(col), primary key) constriant const_name [cascade] ; Drop table tab_name cascade constraint ; jkspark@hanafos.com - 43 - 장 경상
  • 44. Oracle basic administration http://www.ggola.com 12. Manage Users User object : 한 user는 하나의 schema를 만들고 그가 만드는 모든 object는 그 user의 소유. user란 소유주 Schema object(user(owner)가 있는 object) : table, view, index, sequence, synonym Non schema object : Tablespace, Database, Rollback Segment, User Resources for user User resources to access a database: . username/password . access privilege . quotas . profile Authentication Specification . default tablespace . temporary tablespace . tablespace quotas : 현 user가 지정된 tablespace에 사용가능 토록 허가된 maximum space . system resource limits : the amount of CPU time, logical read, concurrent session per user, the idle time for a session (profile을 통해서 지정) Managing users Create User Create user scott identified by tiger default tablespace users temporary tablespace temp profile profile_name quota 10M (or unlimited) on users quota 5M on tablespace_name ; profile_name : assigns the profile named to the user tablespace_name : tablespace name needed for the user (unlimited : no limit, integer : K or M size)  user생성시 default는 어떤 tablespace에도 권한이 없다. jkspark@hanafos.com - 44 - 장 경상
  • 45. Oracle basic administration http://www.ggola.com Default Role . connect : session 관련 . resource : object creation, unlimited tablespace 등  SVRMGRL> 상태에서 user creation시 ‘CONNECT’ role은 자동 으로 grant 된다.  OS 인증 user가 필요한 경우 다음의 parameter 필요 : OS_AUTHENT_PREFIX = OPS$ (물론 prefix는 DBA가 정할 수 있다)  위의 경우 create user statement에서 by password 절은 externally로 대체해야 한다. 물론, 해당 OS Login User가 있어야 겠 지만. CF) alter user, drop user  drop user시 option “cascade”사용시 그 user의 object까지 함께 drop Monitoring User . all_users, user_users, dba_ts_quotas, user_ts_quotas  tablespace quotas check시 max_bytes column value가 –1이면 unlimited quota라는 뜻 Killing a User Session . kill session : “alter system kill session ‘sid, serial#’ ; “  session이 kill되면 해당 user의 rolling back, release locks, free all resources jkspark@hanafos.com - 45 - 장 경상
  • 46. Oracle basic administration http://www.ggola.com 13. Manage Resource Usage profiles profile을 사용하는 이유는 : 제한된 system resource를 다수의 user 가 사용하기 위해서는 적절한 resource 배분이 필요할 수 있으므로 이에 대한 규정을 해놓은 것이 profile 이다. 즉, profile은 system resource의 제한사항에 대한 information 전제조건 . initial parameter file에서 다음의 parameter가 TRUE로 설정되어 야 만 이 profile을 사용할 수 있다.  resource_limit = true (default FALSE ; 즉 일반적으로 사용 하지않음)  또는 명령어로 사용 가능 : alter system set resource_limit = true ; General System Resource . CPU time . I/O operation . Idle time . Connect time . Memory space . Concurrent sessions Resources for profiles . cpu_per_session : statement 처리 시간 1/100 초 . session_per_user : connect 가능한 user 수 . connect_time : connect 시간 . idle_time : 비활성 connect 시간 . logical_read_per_session : readable datablock 수 . private_sga : 하나의 session에서 reserve할 private space size(in PGA) jkspark@hanafos.com - 46 - 장 경상
  • 47. Oracle basic administration http://www.ggola.com Create profile . system privilege인 create profile 권한이 있는 user만 사용가능 . profile을 할당하지 않은 create user statement는 default profile을 automatically 제공  create profile ~~ alter profile ~~ drop profile ~~ (cascade 사용시 : assign된 모든 user의 profile revoke)  만일, alter command로 default profile 수정시 일반적인 즉, profile을 지정하지 않아 강제로 default profile을 제공받은 모든 user에게 그 변경사항이 적용 “alter profile default profile limit ~~ resource value ~~ ; Composite Limit . 다음의 resource에 대해 일정한 계산에 대해 규정한 값에 도달하 는경우에 limit을 발생시키기 위한 조정 . cpu_per_session, connect_time, private_sga, logical_read_per_session . 한 session이 resouce를 사용시 각 profile의 각 resource에 대하여 가중치를 부여하고 resource_limit이 한계에 도달하더라도 wait할 여유을 주기위한 것으로 resource_limit을 연장하는 방법이다. 즉, 각 resource_limit의 총합이 일정한 계산치(wait가능한 계산치)를 넘어설 때 resource_limit을 발생시킨다. . composit_limit = 3000으로 정의시 각 resource limit합이 3000이 될때까지 wait할 여유가 있다. 그 합이 3000이 넘을 때 session을 stop 시킨다. Profile Information . dba_users, user_resource_limits, dba_profiles, resource_cost jkspark@hanafos.com - 47 - 장 경상
  • 48. Oracle basic administration http://www.ggola.com 14. Manage Database Access Privilege System : database operation (모든 object에 적용) session, table (including select any table) Object : specific object (특정 object에 적용) select, update….. Role . reduced grant, dynamic privilege manage, selective available privilege, application awareness . Oracle default role : connect, resource, dba, import role, export role (이 5가지 role은 dba role이 모두 소유하고 있음) Grant and Revoke System Privilege  grant sys_priv (or role) to user (or role or public) (with admin option) ;  revoke sys_priv (or role) from user (or role or public) ; . public : all users 에게 . with admin option : grant 받은 privilege를 다른 user에게 grant할 수 있도록 하는 option  with admin option사용과 관련한 grant 결과 User grant grant A B C with admin option grant can’t grant A B C without admin option  revoke 사용시 with admin option을 사용한 경우 User C의 권한 은 그대로 유지됨 User B user 권한 1,3 revoke A B C 권한 1,2,3 권한 2 권한 1,2,3 jkspark@hanafos.com - 48 - 장 경상
  • 49. Oracle basic administration http://www.ggola.com Grant and Revoke Object Privilege  grant obj_priv (or all) (column list) on object to user (or role or public) (with grant option) ;  revoke obj_priv (or all) on object from user (or role or public) (cascade constraints) ; . obj_priv : select, insert, update, delete, reference, index, alter, execute . column list : 특정 column에 대해 지정가능(insert, update, references에 대해서만) . public : all users 에게 . with grant option : grant받은 권한을 다른 user나 role에 grant가 가능하도록 하는 option, grant option자체가 role에 grant되지는 않 는다. . cascade : 관련 referential integrity constraints (using references privilege) drop ex) grant select, insert(col1, col2), update(col3) on emp to scott, tailer (with grant option) ; ex) revoke select on emp from tailer (cascade constraints) ;  revoke using with grant option User 3. B user 권한 X,Z revoke A B C 1. grant 2. grant 권한 X,Y,Z 권한 Y 권한 Y B에 대한 권한 revoke로 인해 C user 권한 X,Z automatic cascade Object Privilege View  For DBA : dba_tab_privs, dba_col_privs  For user : user_tab_privs, user_tab_privs_made, user_tab_privs_recd, user_col_privs, user_col_privs_made, user_col_privs_recd  For all user : all_~~~ (위와 동일), table_privileges, column_privileges jkspark@hanafos.com - 49 - 장 경상
  • 50. Oracle basic administration http://www.ggola.com 15. Manage Roles What is ROLE ? Simplify privilege management through the use of roles. Roles are named groups of related privileges that are granted to users or other roles. Characteristics . can consist of both system and object privileges . 무소유 개념(특정 schema에 속하지 않는 none schema object) . 자기스스로 즉, 특정 role이 그 자신에게 role을 grant하는 경우가 아니라면 어떤 방법이든 role자체를 grant할 수 있다. . password를 사용할 수 있다. . grant받은 user별로 enable, disable이 가능하다. Benefits . reduce granting of privileges (단순화) . dynamic privilege management . selective availability of privileges Management Create create role ‘role_name’ (identified) (by password, externally) ; . identified by password : password 지정 . identified externally : OS 인증으로 password검증 . not identified (default) : no password Alter alter role ‘role_name’ (not) (identified) (by password, externally) ; . alter command로 role에 대한 password 인증 방식 변경가능 jkspark@hanafos.com - 50 - 장 경상
  • 51. Oracle basic administration http://www.ggola.com Set set role (all, none) ‘role_name’ (identified by password, except role) ; . all : 모든 role을 현 session에 grant (except role command와 함께 사용가능) . none : current session의 모든 role을 disable . role : 특정 role을 현 session에 enable  PRO*C 같은 third-generation language SQL*PLUS, Server Manager PL/SQL 위와 같은 경우는 ROLE에 대한 enable, disable이 가능하다. Information . Role View  role_sys_privs, role_tab_privs, role_role_privs, session_roles, user_role_privs, dba_sys_privs, dba_roles Special Roles : OSOPER, OSDBA . meaning : when a database is not opened (a database’s dictionary is in accessible), internal keyword로 control database operation . OSOPER관련 권한 : DB mount/open/start and shutdown, backup, archive, restricted session . OSDBA : ‘with admin option’을 가진 모든 system privileges 와 OSOPER role을 받고 있음. 그러나 이 role은 최초 ‘CREATE DATABASE’ 와 ‘time-based-recovery’에만 허가된다. 위 두가지 special role에 대응하는 같은 권한을 가진 role로서 ‘SYSOPER’, ‘SYSDBA’가 있는데, 이는 database에 저장된 information이나 password file을 사용해서 database connect할 수 있도록 하는데 필요한 role이다. jkspark@hanafos.com - 51 - 장 경상
  • 52. Oracle basic administration http://www.ggola.com 16. Audit the Database Overview Auditing 목적 . Investigate suspicious activity . Monitor database activity . Gather data about database activity Auditing Operations . Statement auditing . Privilege auditing . Object auditing 문장 권한 객체  모든 auditing정보는 audit trail에 저장된다. 물론, audit trail은 option이 enable되어 있어야한다. (SYS user소유의 AUD$에 기록된다) Auditing Information . who – what action – result (success or fail)  어느 user가 무슨 행동을 취해서 어떤 결과를 가져 왔는가를 판 단 ( EX) scott user의 insert action to emp 가 fail 되었다) General Auditing Recommendation . Database가 제공하는 audit정보는 자세하지 못하므로 일반적으로 는 trigger를 이용하도록 추천된다. (물론, trigger 이용시 performance 감소를 감수해야 한다) Auditing Enabling and Disabling Auditing . initial parameter “audit_trail = value”에 지정된 값에 따라 auditing이 결정된다. jkspark@hanafos.com - 52 - 장 경상
  • 53. Oracle basic administration http://www.ggola.com Auditing 생성 view . auditing이 필요없을 때 : catnoaud.sql  audit관련 table, view 삭 제 . auditing이 필요할 때 : cataudit.sql  audit관련 table, view생성 Audit Trail Option . parameter : AUDIT_TRAIL = VALUE (DB, OS, NONE) . default audit destination : audit_file_dest = ?/rdbms/audit  DB : database auditing, all audit record 기록 to “sys.AUD$”  OS : database auditing, all audit record 기록 to O/S File  NONE : disables auditing (default) Default Auditing . 다음의 경우에는 audit_trail parameter의 value에 상관없이 무조 건 auditing 된다. ( case and result sample) 1. Instance Startup 2. Instance Shutdown 3. Administrator privileges로 Database에 connection시 (SVRMGRL 처럼)  result :/app/oracle/product/8.0.5/rdbms/audit/ora_2016.aud  Sample : audit_trail=none일 때 자동 auditing Audit file /app/oracle/product/8.0.5/rdbms/audit/ora_20216.aud Oracle8 Enterprise Edition Release 8.0.5.2.1 - Production With the Partitioning and Objects options PL/SQL Release 8.0.5.2.0 - Production ORACLE_HOME = /app/oracle/product/8.0.5 System name: AIX Node name: TEST SYSTEM Release: 3 Version: 4 Machine: 000139104C00 Instance name: TESTDB Redo thread mounted by this instance: 1 Oracle process number: 0 Unix process pid: 20216, image: Sat Nov 27 16:16:15 1999 ACTION : connect internal OSPRIV : DBA CLIENT USER: oracle CLIENT TERMINAL: pts/0 Sat Nov 27 16:23:46 1999 ACTION : shutdown Sat Nov 27 16:25:27 1999 ACTION : startup AUDIT_TRAIL : none Sat Nov 27 16:25:27 1999 ACTION : startup OS_AUTHENT_PREFIX : ops$ jkspark@hanafos.com - 53 - 장 경상
  • 54. Oracle basic administration http://www.ggola.com Auditing Focus  Scope : SQL Statement : 문장 성공 여부 BY session : action당 1건씩 기록 BY access : 모든 action을 기록 . 모든 database user를 상대로 auditing을 할 수 있고, 몇몇 특정 user에 대한 list를 구성 auditing할 수도 있다. . Object auditing을 하는 경우는 특정 user를 선택할 수 없다.  ‘CONNECT INTERNAL’이나 ‘SYS user로 login’ 하는 경우는 auditing 하지 않는다.  remote database에 취한 action은 audit가 불가하다. Audit statement  audit 하기 : AUDIT statement_opt by user (by session, by access) ( whenever successful, not) ; . statement_opt : SQL statement . by user : user 지정 (default : all user) . by session : action당 1건 (default : DML) . by access : all action에 대해 (default : DDL) . WHENEVER SUCCESSFUL : SQL문 성공시만 . WHENEVER NOT SUCCESSFUL : SQL문 실패시만 (default : every case)  그 외 : privilege audit, object audit등 manual 참조 jkspark@hanafos.com - 54 - 장 경상
  • 55. Oracle basic administration http://www.ggola.com 17. SQL*Loader (Oracle 7 Server Utility) Concept Move data from external files into existing tables in Oracle7 database with SQL*Loader  Oracle Utility를 이용하여 Oracle외부의 file 즉, O/S상의 file형 태의 data를 Oracle로 옮기는 방법 SQL*Loader SQL*Loader Method . conventional path : file로부터 data를 read하여 insert문으로 data move . direct path : oracle memory를 거치지 않고 직접 block단위로 실행 하여 data move  cant recovery SQL*Loader Files . control file : loading data information . data file : insert할 data . log file : loading 결과(including compile error) . bad file : 오류가 발생한 data . discard file : 지정된 조건에 따라 skip한 원천 data  conventional path 사용시 : extent의 free list에서 가용 block을 찾아 정상적인 insert (default 대략 100개 단위로 commit) : SQL문 사용  direct path : HWMK이후로 BLOCK단위로 연속적 INSERT (table lock후 insert 종료시 commit) : SQL문장 사용안함 Input Data Type . Placed inside the control file itself . In a file containing the data  The control file describes how to interpret the input data  control file contents 1. Names of the data files 2. Format of the data files 3. Character set used 4. Data types contained in data files 5. Data field delimiters (+,-,*,/,괄호등의 식별자) 6. Tables and columns to load jkspark@hanafos.com - 55 - 장 경상
  • 56. Oracle basic administration http://www.ggola.com (SQL*Loader는 loading중 앞서 설명한 몇 개의 file을 생성할 수 있 다) Conventional Path . commits : rows parameter 사용 . recovery : all changes 현황이 redo files에 기록되므로 recovery가 능 . indexes : loading시 index가 있는 table이면 index도 함께 생성, 경 우에 따라 index drop후 loading한 후 다시 index를 만드는 방법도 고려 . array size : Multiple rows are read at one time and stored in the bind array. To maximize performance the bind array size of 100 rows is preferred. Direct Path . indexes 생성: 1. data loading된 후 index가 생성 2. index key를 위해 temporary segment가 사용 3. 기존 index와 temporary segment의 index로 new index로 merge 4. 기존의 index와 점유했던 temporary segment의 자원 release된 다. . constraints : 1. Not null, unique, primary key는 enable 2. Check constraint와 referential foreign key를 disable . trigger : insert trigger가 disable되므로 update trigger를 추천 1. Loaded data에 대한 구분을 위해 table에 marking 2. Insert trigger와 동일한 action을 갖는 update trigger 생성 3. Marking 된 모든 loaded rows에 대해 update 를 실행하고 update trigger를 삭제 (위 방법은 loaded table의 insert trigger가 존재하는 경우 추천 방법 이다) EX) sqlldr userid = scott/tiger control = test.ctl log = test.log direct = true Causes of Unsuccessful Loads . SQL*Loader ran out of space for the index . Data was not in the order specified . The instance failed during the load . Duplicate keys were found in a unique index jkspark@hanafos.com - 56 - 장 경상
  • 57. Oracle basic administration http://www.ggola.com ※ 시험을 위한 조언 놓치기 쉬운 것들 - Dedicated Server운영의 큰 이점 : to submit batch jobs - OPS운영시 general parameter file을 사용한다면 instance를 추가할 경우 어떤 parameter를 recognize해야 하는가 : IFILE - alter tablespace command에서 checkpoint수행과 관련한 command offline의 option : normal : 모든 datafile의 checkpoint수행 temporary : 모든 online상태의 datafile에 checkpoint수행 immediate : checkpoint is not performed - user의 commit명령후 제일 먼저 일어나는 것은 : LGWR가 redo log buffer를 flush - scheduled time으로 수행되는 backup을 check하기위한 auditing option : alter/manager tablespace - free transaction space를 위해 wait time을 줄이는 방법으로 더 높은값을 요하는 parameter는 : INITRANS - SYSDBA, SYSOPER system privilege를 grant받은 user에 관한 data dictionary : V$PWFILE_USERS - user session variables and arrays를 가지고 있는 component : PGA - sequence를 monitor하기 위한 auditing option : SELECT - instance failure시 DB buffer cache에서 committed data recovery background process : LGWR - reference key가진 table을 만들기 전에 foreign key를 가진 table을 만드는 command : CREATE SCHEMA - Database에 DBA만 access하여 maintenance를 수행하기위한 command는 : STARTUP RESTRICT MOUNT - If the space usage parameters are set to the default values, which change could cause higher processing costs because blocks will be considered free more often ? RAISING PCTUSED - Parallel query option사용시 이점이 있을 수 있는 system중 하나 : decision support system - Role의 특성 : none schema object, 자기자신에게 role grant 불가, password사용 가능, grant 받 은 user별로 role을 enable, disable가능 (erase privilege management) - Cluster parameter 중 변화를 줌으로써 new block에 적용되는 parameter는 : INITRANS jkspark@hanafos.com - 57 - 장 경상
  • 58. Oracle basic administration http://www.ggola.com - SQL*LOADER 사용시 direct path loading case중 하나 : uses very few calls to the Oracle7 Server - 단순한 offline backup을 수행하는데 필요한 role : OSOPER (Database 내부를 건드리지 않는 경우로 : DB mount/open/start and shutdown, backup, archive, restricted session) - Database 생성시 Oracle Server 상태는 : NOMOUNT - Password File 만드는 방법 : ORAPWD 유틸리티를 사용 - Index Analyze시 validate structure명령을 사용하면 어디서 그 결과를 참조할 수 있는가 : INDEX_STATS - O/S로 audit되는 내용을 table로 write하기 : AUDIT_TRAIL=DB and Restartup DB - control file minimum 개수는 : 1개 - control file에 접근되는 case : startup mount, open, access - hash cluster에서 hashkey=40 이면 몇 개의 hash key가 생성되는가 : 41개 (최소의 솟수로) - lock을 monitor할 수 있는 utility는 : utllockt.sql - timed_statistics parameter : default false, 만일 true이면 통계치를 계산하기 위한 overhead를 감수 해야한다. - chained row를 알아내기 위해서 analyze command를 사용할 수 있다 - pctfree를 낮게 하면 : allows inserts to fill blocks more completely may require fewer blocks to store data can increase processing costs can cause row migration - pctfree를 놎게 하면 : reserves more room for future updates may require more blocks to store data lowers processing costs reduces the need to chain rows - SQL*LOADER로 data load시 compile error는 어디에 기록되는가 : log file (Constraints disable후 loader실행하고 다시 enable하면 그때 exception도 log file에 저장) - exception table에 기록되는 것은 : row_id, owner, table_name, constraint - checkpoint occurs : log switch, log_checkpoint_timeout, log_checkpoint_interval, shutdown normal, shutdown immediate, tablespace offline - cluster변경시 추가되는 data block에만 영향을 주는 parameter : INITRANS - SQL*LOADER이 Direct path사용 : DIRECT = TRUE jkspark@hanafos.com - 58 - 장 경상
  • 59. Oracle basic administration http://www.ggola.com - create tablespace로 2M크기를 만드는 경우 initial 1M, next 1M의 table이 만들어 지는가 : 만일 create table의 storage절에서 1M의 단위를 bytes로 자세히 표현한 경우는 initial만 할당되고 추 가되는 next는 할당할 수 없다. 왜냐하면 tablespace생성시 header block을 tablespace 스스로 할 당해 사용하기 때문이다. 그러나 1M를 Mbytes로 표현한 경우는 initial을 db block size를 고려 해서 잡기 때문에 next 1M까지 가능해 진다. - create tablespace로 1M크기를 만든 경우는 위와 똑같은 이유로 1M짜리의 table을 생성할 수 없다. (물론, 1M라는 Mbytes 단위로 storage를 주는 경우는 table 생성이 가능하다) - 특정 SQL문장이 대, 소문자를 혼합하여 매우 불규칙적으로 쓰여져 느려진 것으로 판단되는 경 우 : parsed time이 더 걸리는 것이므로 규칙적으로 사용시 좋아진다. - system user로 접속한 session을 kill 할수 있는가 : sid, serial#만 알면 다른 system user 또는 sys user로 접속하여 kill 할 수 있다. (alter system kill session sid, serial# ;) - read only tablespace를 drop하기 : read only이건 read write이건 tablespace의 drop은 차이가 없다. object가 있으면 including contents를 사용하고 아니면 drop tablespace tbs_name command로 가능하다. jkspark@hanafos.com - 59 - 장 경상