Upload
kamuzu
View
79
Download
0
Embed Size (px)
DESCRIPTION
Oracle8i Administration. 포스데이타 광양운영팀 권 태 삼. Lesson 1 Oracle Architectural Components. ■ Overview. Instance. User Process. SGA. Shared Pool. Library Cache. Data buffer Cache. Redo Log Buffer. Server Process. Data Dict Cache. PGA. SMON. DBW0. PMON. CKPT. LGWR. Others. - PowerPoint PPT Presentation
Citation preview
Oracle8i Administration
포스데이타 광양운영팀
권 태 삼
Lesson 1Oracle Architectural
Components
3
■ Overview
Instance
SGAUserProcess
Shared Pool
LibraryCache
Redo LogBuffer
Database
Parameterfile
Passwordfile
ServerProcess
PGA
Datafile
Controlfile
Redo logfile
ArchivedLog file
Data bufferCache
Data DictCache
SMON DBW0 PMON CKPT LGWR Others
4
■ Overview
• Oracle Server– Oracle Instance and Oracle Database
• Oracle Instance– Memory structure: SGA(Shared Global Area)
• 데이터 베이스 프로세스에 의해 공유되는 데이터베이스 정보를 저장– Background Process
• Database file– 데이터베이스 정보를 저장하기 위해 제공되는 OS File System
• Server Process– User Process 로 부터 보내어진 SQL 문을 실행하는 프로세스
5
■ Oracle Database Files
• Data File– 데이터베이스 내에 실제 데이터– 데이터는 사용자 정의 테이블에 저장– 데이터 파일은 데이터 사전 포함
• Redo Log File– 데이터를 복구하기 위해 데이터베이스 변경 기록을 보관– 데이터베이스는 최소 두개의 Redo log file 이 필요
• Control File– 데이터베이스의 무결성을 유지하기 위해 필요한 정보를 포함
• 데이터베이스 구조정보• 동기화정보
– 데이터베이스는 최소한 하나의 control file 을 포함
Database
Parameterfile
Passwordfile
Datafile
Controlfile
Redo logfile
ArchivedLog file
6
■ Oracle Instance
• Oracle database 에 접근하기 위한 수단• 항상 하나의 데이터베이스만을 Open
• Oracle Instance– SGA Memory Structure– Background Process
Instance
SGAShared Pool
LibraryCache
Redo LogBuffer
Data bufferCache
Data DictCache
SMON DBW0 PMON CKPT LGWR Others
Memorystructures
BackgroundProcesses
7
■ Oracle Instance
• SGA– 데이터베이스 프로세스에 의해 공유되는 데이터베이스 정보를 저장하기 위해
사용되는 메모리 영역– Shared Pool
• Library Cache: 최근에 실행된 SQL 문장을 보관• Data Dictionary Cache: 데이터 사전으로부터 가장 최근에 사용된 데이터 보관
– Data Buffer Cache: 가장 최근에 사용된 데이터를 보관– Redo log Buffer: 데이터베이스의 변경된 정보를 보관
• Background Process– 동시 접속 사용자의 서비스 요청에 필요한 기능을 수행– Database Writer(DBW0): database buffer cache 의 변경된 내용을
데이터 파일에 저장– Log Writer(LGWR): redo log buffer 에 등록된 변경사항을 redo log file 에
보관– System Monitor(SMON): 데이터베이스 일관성 체크– Process Monitor– Checkpoint Process(CKPT): control file 에 데이터베이스 상태 정보를 갱신 ,
buffer cache 내에 변경사항을 data file 에 갱신
8
■ Processing a Query
• Parse– Search for identical statement– Check syntax, object names, and privileges– Lock objects used during parse– Create and store execution plan
• Execute– Identify rows selected
• Fetch– Return rows to user process
9
■ The Shared Pool
• Library Cache(Shared SQL Area)– Text of the SQL statement– Parse tree– Execution plan– Reduce parse time and memory requirement
• Data Dictionary Cache(Dictionary Cache, Row cache)– 최근에 사용된 테이블에 대한 정보 보관– Tables, indexes, columns, users, privileges, other database objects
• SHARED_POOL_SIZE 파라미터로 size 를 정할 수 있음 .
Shared Pool
LibraryCache
Data DictCache
10
■ Database Buffer Cache
• 최근에 사용된 block 을 보관
• DB_BLOCK_SIZE 파라미터를 이용해 block size 변경
• DB_BLOCK_BUFFES 파라미터를 이용해 buffer 수 변경
■ Program Global Area(PGA)
ServerProcess
PGA
• Server Process 에 의해서만 쓰여짐• Sort area, session information, cursor state,
stack space
11
■ Processing a DML Statement
• DML execute phase1. 필요로 하는 block 이 buffer cache 에 있는지 없는지 check2. 수정하기 위해 row 를 locking3. Data 변경사항을 redo log buffer 에 기록4. Server process 가 rollback block 에 before image 를 기록 , data block
을 update
SGAUser
Process
Shared Pool
Redo LogBuffer
Database
ServerProcess
Datafile
Controlfile
Redo logfile
Data bufferCacheUPDATAE emp …UPDATAE emp …
1
14 2 3
12
■ Redo Log Buffer
• Size defined by LOG_BUFFER
• Records changes made through the instance
• Used sequentially
• Is a circular buffer
■ Rollback Segment
• Server process saves the old data value into a rollback segment
• Undo the changes if the transaction is rolled back
• Provide read consistency
• Instance Recovery
13
Instance
■ COMMIT Processing
• Step in Processing COMMIT– Server process 가 SCN 을 가진 commit record 를 redo log buffer 에
기록– LGWR 이 redo log buffer 의 내용을 redo log file 에 기록– User 에게 COMMIT 완료를 통보– Resource lock 을 release
SGA
UserProcess
Shared Pool
Redo LogBuffer
Database
ServerProcess
Datafile
Controlfile
Redo logfile
Data bufferCache
1
4
2
3
LGWR
14
Instance
■ Log Writer(LGWR)
• LGWR writes when– When a transaction commits– When the redo log buffer is one-third full– When there is more than a megabyte of changes recorded in the
redo log buffer– Before DBW0 writes modified blocks to the data files
SGA Shared Pool
Redo LogBuffer
Database
Datafile
Controlfile
Redo logfile
Data bufferCache
LGWR
15
Instance
■ Database Writer(DBW0)
• DBW0 writes when– There are many dirty buffers– There are few free buffers– Timeout occurs(every three seconds)– Checkpoint occurs
SGA Shared Pool
Redo LogBuffer
Database
Datafile
Controlfile
Redo logfile
Data bufferCache
DBW0
16
■ SMON(System Monitor)
• Automatically recovers the instance– Roll forward changes in the redo logs– Opens the database for user process– Rolls back uncommitted transactions
• Coalesces free space
• Deallocates temporary segments
■ PMON(Process Monitor)
• Cleans up after failed processes by– Rolling back the transaction– Releasing locks– Releasing other resources
Lesson 2Getting Started with the Oracle
Server
18
■ Users SYS and SYSTEM
• SYS– Password: change_on_install– Owner of the database data dictionary
• SYSTEM– Password: manager– Owner of additional internal tables and views used by Oracle tools
■ Authentication
• OS 인증
• Password 인증– Remote 로 접속 시 password file 을 인증 받아야 접속 가능 – OS 의 DBA 그룹이 아니면서 sysdba, sysoper role 을 가지고 있는 user
• DB 인증
19
■ Operating System Authentication
• Set up the user to be authenticated by the operating system
• Set REMOTE_LOGIN_PASSWORDFILE to NONE
• Use the following commands to connect to a database
CONNECT / AS SYSDBACONNECT / AS SYSOPERsqlplus internal
CONNECT / AS SYSDBACONNECT / AS SYSOPERsqlplus internal
20
■ Using Password File Authentication
• Create the password file using the password utility
• Set REMOTE_LOGIN_PASSWORDFILE to EXCLUSIVE or SHARED
• Use the following command to connect to a database
$orapwd file=$ORACLE_HOME/dbs/orapwSIDpassword=admin entries=10$orapwd file=$ORACLE_HOME/dbs/orapwSIDpassword=admin entries=10
CONNECT INTERNAL/ORACLECONNECT INTERNAL/ORACLE
Lesson 3Managing an Oracle Instance
22
■ Overview of Start Up and Shut Down an Oracle Server
• Start up– Start an instance– Mount the database– Open the database
• Shut down– Close the database– Dismount the database– Shut down the instance
23
■ The Initialization Parameter File
• Size the System Global Area(SGA)
• Set database and instance defaults
• Set user or process limits
• Set limits on database resources
• Define various physical attributes of the database(database block size)
• Specify control files, archived log files, the ALERT file, and trace file locations
Instance
SGA Shared Pool
Redo LogBuffer
Data bufferCache
LGWRCKPTPMONDBW0SMON ARCH
SQL> CONNECT / AS SYSDBASQL> STARTUP PFILE=/DISK1/initU15.oraSQL> CONNECT / AS SYSDBASQL> STARTUP PFILE=/DISK1/initU15.ora
initU15.ora
24
■ Stages in Startup and Shutdown
• Starting Up in Stages– Starting the Instance
• parameter file 읽음• SGA 와 background process 를 띄움• ALERT file, trace file 을 open• Database 와 control file 을 생성
– Mounting the Database• Renaming data file• Redo log archived option 설정• full database recovery 수행
– Opening the Database• Open the data file• Open the redo log file• database 일관성 check• 필요하다면 SMON 이 instance recovery 수행
SHUTDOWN
Instance started
NOMOUNT
MOUNT
OPEN
Control file opened for this instance
All files opened as described by the control file for this instance
parameter file 읽음
control file 읽음
Data file, Redo log file 검증STRATUP
SHUTDOWN
25
■ Stages in Startup and Shutdown
• Shutting Down in Stages– Closing the Database
• buffer cache 의 변경사항을 data file 에 보관• redo log file 내의 entries 를 redo log file 에 보관• data file, redo log file close
– Dismounting the Database• Database dismount• Control file close
– Shutting Down the Instance• Instance Shutting down• ALERT file, trace file close• SGA deallocate• background process terminate
– ALERT file• DB start, shutdown 시간 기록• startup, shutdown 시 error 기록
26
■ Starting Up the Instance
• STARTUP Command
• ALTER DATABASE Command
• Opening a Database in Read-Only Mode
– Execute queries– Execute disk sorts using locally managed tablespaces– Take data files offline and online– Perform recovery of offline data files and tablespaces
STARTUP PFILE=$ORACLEHOME/DISK1/initU15.oraSTARTUP PFILE=$ORACLEHOME/DISK1/initU15.ora
ALTER DATABASE database MOUNT;ALTER DATABASE database MOUNT;
ALTER DATABASE database OPEN READ ONLY;ALTER DATABASE database OPEN READ ONLY;
27
■ Shutting Down
• Shutdown Option
• Shutdown mode
A Abort I Immediate
T Transactional N Normal
Shutdown Mode A I T NAllow new connections NO NO NO NO
Wait until current sessions end NO NO NO YES
Wait until current transactions end
NO NO YES YES
Force a checkpoint and close files
NO YES YES YES
28
■ Getting and Setting Parameter Values
• Dynamic Performance View– Oracle Server 에 의해 관리되고 , 계속적으로 update– 디스크와 메모리 구조에 대한 데이터를 포함– performance tuning 을 위해 사용되는 데이터를 포함– Have public synonyms with the prefix V$
SGA
Controlfile
V$PARAMETERV$SGAV$OPTIONV$PROCESSV$VERSIONV$INSTANCE
V$THREADV$CONTROLFILEV$DATABASEV$DATAFILEV$DATAFILE_HEADERV$LOGFILE
29
■ Getting and Setting Parameter Values
• Displaying Current Parameter Values– Command
– Dynamic performance view V$PARAMETER 를 이용한 query
• Dynamic Initialization Parameters– instance 실행동안에 initialization parameter 를 수정
SHOW PARAMETER controlSHOW PARAMETER control
SELECT name FROM V$PARAMETERSELECT name FROM V$PARAMETER
ALTER SYSTEM SET TIMED_STATISTICS=true;ALTER SYSTEM SET TIMED_STATISTICS=true;
ALTER SYSTEM SET SORT_AREA_SIZE=131072 DEFERRED;ALTER SYSTEM SET SORT_AREA_SIZE=131072 DEFERRED;
30
■ Managing Sessions
• Enable and Disable Restricted Session– Command
– Mode 변경
• Terminating Sessions– Session 확인
– Session Terminate
STARTUP RESTRICTSTARTUP RESTRICT
ALTER SYSTEM DISABLE RESTRICTED SESSION;ALTER SYSTEM DISABLE RESTRICTED SESSION;
SELECT id,serial# FROM V$SESSION WHEREusername=‘SCOTT’;SELECT id,serial# FROM V$SESSION WHEREusername=‘SCOTT’;
ALTER SYSTEM KILL SESSION ‘7,15’;ALTER SYSTEM KILL SESSION ‘7,15’;
31
■ Managing Sessions
• ALERT File and Trace File– Trace file 은 서버와 background process 에 의해 작성– Oracle Server 는 trace file 내에 error 정보를 보관– ALERT file 은 메시지와 에러로 구성– Server process tracing 을 변경
ALTER SESSION SET sql_trace=TRUE;ALTER SESSION SET sql_trace=TRUE;
Lesson 4Creating a Database
33
■ Overview
• Database System 을 관리하고 , 조직하는데 첫번째 단계• Database 생성은 많은 data file(OS file) 이 필요함• Database 생성 후 변경할 수 없는 database block size 와
database character set 과 같은 database 설정을 결정한 후 database 를 생성
• 다음과 같은 방법으로 인증이 되어야 database 를 생성할 수 있음– operating system– Using a password file
• Instance allocate 를 위한 Memory 가 충분해야• Database 공간을 위한 충분한 디스크 공간이 있어야
34
■ Creating a Database Manually
• 유일한 instance, 데이터베이스 이름 , 데이터베이스 character set을 결정
• OS 변수 설정• parameter file 준비• password file 생성• Instance 실행• 데이터베이스 생성• Data Dictionary 생성을 위한 scripts 실행과 차후 단계 실행
35
■ Creating a Database Manually
• OS 변수 설정
• Parameter file 준비– 새로운 initSID.ora 생성
– vi 에디터를 이용해 initSID.ora 파일 수정• DB_NAME, CONTROL_FILES, DB_BLOCK_SIZE 는 반드시 수정
Variable Description
ORACLE_HOME Oracle Software 가 인스톨될 디렉토리 설정
ORACLE_SID Oracle Instance 지정
ORACLE_BASE 특별하게 필요하지 않음
ORA_NLS33 Database 생성 시 character set 설정
PATH $ORACLE_HOME/bin 이 포함된 path 설정
$cp init.ora $ORACLE_HOME/dba/initU16.ora$cp init.ora $ORACLE_HOME/dba/initU16.ora
36
■ Creating a Database Manually
• Instance 실행– SYSDBA 로 접속– NOMOUNT 단계에서 Instance 실행
• 데이터베이스 생성
SQL>STARTUP NOMOUNT PFILE=initU16.oraSQL>STARTUP NOMOUNT PFILE=initU16.ora
CREATE DATABASE U16 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXLOGHISTORY 100LOGFILE GROUP 1 (‘/DISK3/log1a.rdo’, /DISK4/log1b.rdo’) SIZE 1 M, GROUP 2 (‘/DISK3/log2a.rdo’, /DISK4/log2b.rdo’) SIZE 1 MDATAFILE ‘/DISK1/system01.dbf’ size 50M autoextend on CHARACTER SET WE8ISO8859P1;
CREATE DATABASE U16 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXLOGHISTORY 100LOGFILE GROUP 1 (‘/DISK3/log1a.rdo’, /DISK4/log1b.rdo’) SIZE 1 M, GROUP 2 (‘/DISK3/log2a.rdo’, /DISK4/log2b.rdo’) SIZE 1 MDATAFILE ‘/DISK1/system01.dbf’ size 50M autoextend on CHARACTER SET WE8ISO8859P1;
Lesson 5Creating Data Dictionary Views
and Standard Packages
38
■ Overview
• Data Dictionary– 데이터베이스 내에 객체들에 대한 설명을 포함– Base tables– Data Dictionary views
• Dynamic Performance table– 데이터베이스와 instance 를 모니터하고 tuning 하기 위해 DBA 에 의해
사용되는 정보를 포함
• Built-in PL/SQL packages
39
■ Data Dictionary Overview
• Oracle Database 중에 가장 중요한 부분
• 데이터베이스와 데이터베이스의 object 들에 대한 정보 제공
• read-only table 과 view 를 포함
• SQL Command 에 의해 update– DDL(Data Definition Language)– Some DML(Data Manipulation Language)
• SYS user 가 소유
• SYSTEM tablespace 내에 저장
• SELECT 문만을 사용
40
■ Data Dictionary Contents
• Logical and physical database structure
• Definition and space allocations of objects
• Integrity constraints
• Users 의 이름• 각 user 에게 할당된 Roles
• 각 user 에게 할당된 Privileges
• Auditing
• Other Information
41
■ How the Data Dictionary is Used
• Oracle server uses it to find information about– Users– Schema Objects(tables, views, indexes, clusters, synonyms, procedures, and
so on)– Storage structures
• Oracle Server 는 DDL 문이 실행될 때 Data Dictionary 를 수정
• User 와 DBA 는 데이터베이스에 대한 정보를 얻고자 할 때 사용
• Data Dictionary Example– General Overview
• DICTIONARY• DICT_COLUMNS
– Schema objects• DBA_TABLES• DBA_TAB_COLUMNS• DBA_OBJECTS• DBA_CONSTRAINTS
– Space allocation• DBA_SEGMENTS• DBA_EXTENTS• DBA_FREE_SPACE
– Database Structure• DBA_DATA_FILES• DBA_ROLLBACK_SEGS• DBA_TABLESPACES
42
■ Constructing the Data Dictionary
• Creating Data Dictionary Views
• Administrative Scripts
Script Purpose
catalog.sql 공통적으로 사용되는 data dictionary 와 synonyms 를 생성
catproc.sql 서버측 PL/SQL 을 위해 요구되는 scripts
Convention Description
cat*.sql Catalog 와 data dictionary 에 대한 정보
dbms*.sql Database Package specifications
prvt*.plb 암호화된 database package code
utl*.sql Database utilities 를 위한 Views 와 Tables
Lesson 6Maintaining the Control File
44
■ The Use of the Control File
• 데이터베이스를 성공적으로 동작시키기 위해 필요한 작은 binary file
• 각 control file 은 하나의 database 와 link
• 데이터베이스가 사용되는 동안 Oracle Server 에 의해 계속적으로 update
• control file 내의 정보는 Oracle Server 에 의해서만 수정
• Should be multiplexed
• Contents– Database name and identifier– Database creation date– Data file and redo log file locations– Tablespace names– Log history is recored during log switches– Location and status of archived logs– Backup information– Current log sequence number– Checkpoint information
45
■ How to Add a Control File
• Shut down the database
• Copy the current control file using an operating system command
• Add the new control file names to the CONTROL_FILES parameter
• Start up the database
■ Guidelines for Control Files
• Multiplex the control file
• Include the full pathname in CONTROL_FILES
• Back up the control file after the database structure changes
46
■ Obtaining Information About the Control File
• V$CONTROLFILE
• V$CONTROLFILE_RECORD_SECTION
• Control File 로 부터 많은 Performance View 에 대한 정보를 얻음– V$BACKUP– V$DATAFILE– V$TEMPFILE– V$TABLESPACE– V$ARCHIVE– V$LOG– V$LOGFILE– V$LOGHIST– V$ARCHIVED_LOG– V$DATABASE– Others
SELECT name FROM v$controlfile;SELECT name FROM v$controlfile;
Lesson 7Maintaining Redo Log Files
48
■ Overview
• Oracle Server 는 데이터베이스의 데이터 손실을 최소화하기 위해 online redo log file 을 관리
• database buffer cache 내에 모든 데이터 변경 사항을 기록• instance failure 와 같은 상황에서 data file 에는 쓰여지지 않고 ,
commit 된 데이터를 복구하기 위해 사용• recovery 를 위해서만 사용• Redo Log Groups and Members
– Redo Log Groups• online redo log file 들의 집합을 online redo log group• LGWR Process 는 그룹 내 모든 online redo log files 에 같은 정보를 동시에 작성• Oracle Server 에는 최소 두개의 online redo log file groups 가 있어야
– Redo Log Members• 그룹 내 각 online redo log file 을 member 라 함• 그룹 내 각 member 는 동일한 log sequence number 를 가지고 있고 , 같은 size• 현재 log sequence number 는 control file 과 모든 data files 의 헤더에 저장
49
■ LGWR, Log Switches, and Checkpoints
Instance
SGA Shared Pool
Redo LogBuffer
Database
Datafile
Controlfile
Redo logfile
Data bufferCache
LGWRCKPTDBWR ARCH
Passwordfile
Parameterfile
Archivedlog file
50
■ LGWR, Log Switches, and Checkpoints
• LGWR– transaction commit– redo log buffer 가 1/3 이상 full– redo log buffer 에 기록된 변경사항이 1M 이상일때– timeout(every three second)– DBWn 이 동작하기 전에
• Log Switches– LGWR 이 하나의 online redo log group 에 작성하는 것을 멈추고 , 다른 online
redo log group 에 작성하는 event– Log switch 가 발생하면 checkpoint 가 시작
• Checkpoint– CKPT 는 모든 데이터파일의 header 와 control file 의 header 를 update– Checkpoint 는 다음과 같은 상황에서 발생
• 모든 log switch• instance 가 normal, transactional, immediate 옵션을 가지고 shut down 되었을 때• LOG_CHECKPOINT_INTERVAL, LOG_CHECKPOINT_TIMEOUT, FAST_START_IO_TARGE
T 파라미터 설정에 따라• DBA 의 요청에 의해• checkpoint 에 대한 정보는 LOG_CHECKPOINTS_TO_ALERT 파리미터가 TRUE 로
설정 되어있으면 ALERT 파일에 기록된다 .
51
■ Obtaining Log and Archive Information
• SQL Command
• V$DATABASE
• V$INSTANCE
SQL>ARCHIVE LOG LIST;SQL>ARCHIVE LOG LIST;
SQL>SELECT name, log_mode FROM v$database;SQL>SELECT name, log_mode FROM v$database;
SQL>SELECT archive FROM v$instance;SQL>SELECT archive FROM v$instance;
52
■ Obtaining Information About Groups and Members
• V$THREAD
• V$LOG
• V$INSTANCE
SQL>SELECT groups, current_group#, sequence# FROM v$thread;SQL>SELECT groups, current_group#, sequence# FROM v$thread;
SQL>SELECT group#, sequence#, bytes, members, status FROM v$log;SQL>SELECT group#, sequence#, bytes, members, status FROM v$log;
SQL>SELECT * FROM v$logfile;SQL>SELECT * FROM v$logfile;
53
■ Multiplexing and Maintaining Members and Groups
• Adding Online Redo Log Groups
• Adding Online Redo Log Members
• How to Relocate or Rename Online Redo Log Files– 새로운 위치로 online redo log file 복사– ALTER DATABASE RENAME FILE 명령어 실행– 물리적으로 이름이나 OS 파일을 생성하는 것이 아니라 control file 의 pointer
를 변경하는 것
ALTER DATABASE ADD LOGFILE(‘/DISK3/log3a.rdo’, ‘/DISK4/log3b.rdo’) size 1M;ALTER DATABASE ADD LOGFILE(‘/DISK3/log3a.rdo’, ‘/DISK4/log3b.rdo’) size 1M;
ALTER DATABASE ADD LOGFILE MEMBER‘/DISK4/log1b.rdo’ TO GROUP 1‘/DISK4/log2b.rdo’ TO GROUP 2
ALTER DATABASE ADD LOGFILE MEMBER‘/DISK4/log1b.rdo’ TO GROUP 1‘/DISK4/log2b.rdo’ TO GROUP 2
54
■ Dropping Online Redo Log Groups and Members
• Dropping Online Redo Log Groups
– 최소 2 개의 online redo log group 이 있어야– active and current group 은 drop 불가– 데이터베이스가 ARCHIVELOG 모드이고 , log file group 이 archived 가
아니면 그룹 drop 불가– drop 후 OS 파일 삭제
• Dropping Online Redo Log Members
– group 내에 member 가 하나이면 그 member 는 drop 불가– group 이 current 이면 그 group 에 속한 member 는 drop 불가 -> log
switch– member drop 후 OS 파일 삭제
• Clearing Online
ALTER DATABASE DROP LOGFILE GROUP 3;ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE ADD LOGFILE MEMBER ‘/DISK4/log2b.dbf’;ALTER DATABASE ADD LOGFILE MEMBER ‘/DISK4/log2b.dbf’;
ALTER DATABASE CLEAR LOGFILE ‘/DISK3/log2a.rdo’;ALTER DATABASE CLEAR LOGFILE ‘/DISK3/log2a.rdo’;
55
■ Using LogMiner
• Redo log file 을 처리하기 위한 procedure 를 제공
• Redo log file 의 내용을 SQL 문으로 변환
• LogMiner 사용법– Directory file 생성
– Log File List 생성
– LogMiner 실행
EXECUTE DBMS_LOGMNR_D.BUILD(‘v815dict.ora’, ‘/ora815/admin/v815/log’);EXECUTE DBMS_LOGMNR_D.BUILD(‘v815dict.ora’, ‘/ora815/admin/v815/log’);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE (‘/ora815/admin/v815/redo01a.log’, DBMS_LOGMNR.NEW);EXECUTE DBMS_LOGMNR.ADD_LOGFILE (‘/ora815/admin/v815/redo01a.log’, DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE (‘/ora815/admin/v815/redo02a.log’, DBMS_LOGMNR.ADDFILE);EXECUTE DBMS_LOGMNR.ADD_LOGFILE (‘/ora815/admin/v815/redo02a.log’, DBMS_LOGMNR.ADDFILE);
EXECUTE DBMS_LOGMNR.START_LOGMNR ( DICTFILENAME=>‘/ora815/admin/v815/log/ v815dict.ora’);EXECUTE DBMS_LOGMNR.START_LOGMNR ( DICTFILENAME=>‘/ora815/admin/v815/log/ v815dict.ora’);
56
■ Using LogMiner
• LogMiner 사용법– 조회
– LogMiner 종료
• Obtaining Information About Logs Being Analyzed– V$LOGMNR_DICTIONARY– V$LOGMNR_PARAMETERS– V$LOGMNR_CONTENTS
SELECT timestamp, username, sql_redo FROM v$logmnr_contentsWHERE seg_name =‘EMP’;
TIMESTAMP USER SQL_REDO---------- ----- ----------------------------------14-APR-99 SYS update SCOTT.EMP set sal = ..14-APR-99 SYS update SCOTT.EMP set sal = ..
SELECT timestamp, username, sql_redo FROM v$logmnr_contentsWHERE seg_name =‘EMP’;
TIMESTAMP USER SQL_REDO---------- ----- ----------------------------------14-APR-99 SYS update SCOTT.EMP set sal = ..14-APR-99 SYS update SCOTT.EMP set sal = ..
EXECUTE DBMS_LOGMNR.END_LOGMNR;EXECUTE DBMS_LOGMNR.END_LOGMNR;
Lesson 8Maintaining Tablespaces and
Data Files
58
■ Database Storage Hierarchy
Database
Tablespace
Segment
Extent
OracleBlock
Data File
OS Block
PhysicalLogical
59
■ Database Storage Hierarchy
• Database Architecture– physical structure: control files, online redo log files, data files– logical structure: tablespaces, segments, extents, data blocks
• Tablespace– 하나의 database 에만 존재해야– 각 tablespace 는 하나 이상의 datafile 로 구성– 하나의 tablespace 는 하나 이상의 segments 로 구성– Tablespace 는 read-write, read-only status 변경 가능
• Data File– 하나의 data file 은 오직 하나의 tablespace 내에 존재– DBA 가 data file 의 크기를 변경– Oracle Server 는 디스크 공간을 할당함으로써 tablespace 를 위한 data file 을
생성
• Segments=Object– table 에 할당된 모든 저장 공간– segment 는 다른 tablespace 에 존재할 수 없음– 하나의 tablespace 내에 존재하는 다른 data file 내에 존재 가능– 각 segments 는 하나 이상의 extent 들로 구성
60
■ Database Storage Hierarchy
• Extents– 하나 이상의 extent 들은 하나의 segment 를 구성– segment 를 생성할 때 최소 하나의 extent 를 포함– DBA 가 segment 에 extent 들을 추가할 수 있음– extent 는 연속된 Oracle Block 의 집합– 하나의 extent 는 하나의 data file 에만 존재해야
• Data Blocks– Oracle Server 는 Oracle Block 단위로 data file 내에 저장공간을 관리– Oracle Server 가 할당 , 읽기 , 쓰기할 수 있는 가장 작은 단위의 저장공간– 하나의 Data block 은 하나 이상의 OS block 으로 구성– Data block 의 크기는 DB_BLOCK_SIZE 파라미터에 따라 결정– 최대 block 크기는 OS 에 따라 다름
Tablespace
data file data file Segment
Extent
61
■ SYSTEM and Non-SYSTEM Tablespace
• SYSTEM Tablespace– Database 생성 시 만들어짐– Data dictionary 를 포함– SYSTEM rollback segment 를 포함
• Non-SYSTEM Tablespace– Space 관리가 쉽다– rollback, temporary, application data, application index segment 를 분리– user 객체에 할당된 space 를 제어
62
■ Creating Tablespace
CREATE TABLESPACE app_data DATAFILE ‘/DISK4/app_data_01.dbf’ SIZE 100M, ‘/DISK5/app_data_02.dbf’ SIZE 100M MINIMUM EXTENT 500K DEFAULT STORAGE ( INITIAL 500K NEXT 500K MAXEXTENTS 500 MINEXTENTS 3 PCTINCREASE 0 );
CREATE TABLESPACE app_data DATAFILE ‘/DISK4/app_data_01.dbf’ SIZE 100M, ‘/DISK5/app_data_02.dbf’ SIZE 100M MINIMUM EXTENT 500K DEFAULT STORAGE ( INITIAL 500K NEXT 500K MAXEXTENTS 500 MINEXTENTS 3 PCTINCREASE 0 );
■ Space Management in Tablespace• Dictionary-managed tablespaces
– Default technique– Free extents recored in data directory tables
• Locally managed tablespaces– Free extents recorded in bitmap– Each bit corresponds to a block or group of blocks– Bit value indicates free or used
63
■ Locally Managed Tablespaces
• recursive space management 를 줄일 수 있음
• data dictionary table 의 내용을 줄일 수 있음
• data dictionary 내에 table 을 update 하지 않기 때문에 rollback 정보를 생성하지 않는다 .
• locally managed tablespace 내에 모든 extent 들의 크기는 같다
• No coalescing required
CREATE TABLESPACE user_data DATAFILE ‘/DISK2/user_data_01.dbf’ SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
CREATE TABLESPACE user_data DATAFILE ‘/DISK2/user_data_01.dbf’ SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
64
■ Temporary Tablespace
• sort 연산을 위해 사용
• permanent object 들을 포함할 수 없다
• Locally managed extent
• UNIFORM SIZE = SORT_AREA_SIZE * n
• 항상 NOLOGGINF 모드로 설정
• tempfile 을 read-only 로 할 수 없다
• tempfile 을 rename 할 수 없다
• ALTER DATABASE 명령어로 tempfile 을 생성할 수 없다 .
CREATE TEMPORARY TABLESPACE temp TEMPFILE ‘/DISK2/temp_01.dbf’ SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
CREATE TEMPORARY TABLESPACE temp TEMPFILE ‘/DISK2/temp_01.dbf’ SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
65
■ Taking Tablespace Offline or Online
• Offline tablespace 인 data 에 접근 불가능
• 항상 online 이어야 하는 tablespace– SYSTEM– active rollback segment 인 tablespace
• offline tablespace backup 을 수행
• tablespace 나 data file 을 복구
• data file 의 이동
• tablespace offline 명령어
• tablespace online 전환
ALTER TABLESPACE app_data OFFLINE;ALTER TABLESPACE app_data OFFLINE;
ALTER TABLESPACE app_data ONLINE;ALTER TABLESPACE app_data ONLINE;
66
■ Read-Only Tablespaces
• Tablespace 에 대한 read operation 만 수행 가능
• Objects 를 tablespace 로부터 drop 가능 -> Data dictionary 에서만 삭제
• Tablespace 가 online 상태에서만 read-only 상태로 변경 가능
• active rollback segment 를 포함하고 있으면 불가능
• Tablespace 가 online backup 상태이면 read-only 상태로 변경 불가능
ALTER TABLESPACE app_data READ ONLY;ALTER TABLESPACE app_data READ ONLY;
■ Dropping Tablespaces
• Tablespace 가 data dictionary 로 부터 삭제
• contents 가 data dictionary 로 부터 삭제
DROP TABLESPACE app_data INCLUDING CONTENTS;DROP TABLESPACE app_data INCLUDING CONTENTS;
67
■ Resizing a Tablespace
• Data file 의 크기를 변경– Automatically
– Manually
• Tablespace 에 data file 을 추가
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK6/app_data_04.dbf’ SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK6/app_data_04.dbf’ SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
ALTER DATABASE DATAFILE ‘/DISK5/app_data_02.dbf’ RESIZE 200M;
ALTER DATABASE DATAFILE ‘/DISK5/app_data_02.dbf’ RESIZE 200M;
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK5/app_data_03.dbf’ SIZE 200M;
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK5/app_data_03.dbf’ SIZE 200M;
68
■ Moving Data Files
• ALTER TABLESPACE– Tablespace 는 offline 상태이어야 함– target data file 이 존재해야 함
• ALTER DATABASE– Database 가 mount 되어 있어야 함– target data file 이 있어야 함
– Tablespace 가 offline 될 수 없는 tablespace 의 data file rename 방법• Shut down the database• data file move• Mount the database• ALTER DATABASE RENAME FILE 명령어 실행• Open the database
ALTER DATABASE RENAME FILE ‘/DISK1/system_01.dbf’ TO ‘/DISK2/system_01.dbf’;
ALTER DATABASE RENAME FILE ‘/DISK1/system_01.dbf’ TO ‘/DISK2/system_01.dbf’;
ALTER TABLESPACE app_data RENAME DATAFILE ‘/DISK4/app_data_01.dbf’ TO ‘/DISK5/app_data_01.dbf’;
ALTER TABLESPACE app_data RENAME DATAFILE ‘/DISK4/app_data_01.dbf’ TO ‘/DISK5/app_data_01.dbf’;
Lesson 9Storage Structure and
Relationships
70
■ Types of Segments
• Segments– Database 내에 object 들이 차지하고 있는 공간
• Table– Database 내에 data 를 보관하기 위한 가장 일반적인 방법
• Table Partition– High concurrent usage 시 Scalability 와 availability 를 향상– Table 내에 data 는 여러 partition 에 저장될 수 있고 , partition 들은 다른 tables
pace 에 존재 가능 – hashing algorithm 이용
• Cluster– data segment– cluster 내에 row 는 key column value 를 기반으로 저장– 하나의 cluster 는 하나 이상의 table 을 포함– index 와 hashing algorithm 을 이용하여 cluster 내 row 를 접근
• Index– 특정 key 를 이용하여 row 의 위치를 쉽게 검색할 수 있도록
• Index-organized table, Index partition, Rollback segment, Temporary segment, LOB segment, LOB index, Nested table, Bootstrap segment
71
■ Using Block Space Utilization Parameters
• Database Block– I/O 의 최소 단위– 하나 이상의 OS Block 으로 구성– DB_BLOCK_SIZE 파라미터로 크기 설정– Database 생성 시 설정
• Database Block Contents– Header: data block address, table directory, row directory, transaction slot– Free space– Data
Header
Free Space
Data
72
■ Using Block Space Utilization Parameters
• Block Space Utilization Parameters
– Data 와 index segment 의 공간 활용을 제어하기 위해 사용– INITRANS, MAXTRANS
• Data block 이나 index block 에 생성되는 transaction slot 의 초기와 최대 수 설정• transaction slot 은 block 을 변경하는 transaction 에 대한 정보를 저장
– PCTFREE: Block 의 update 에 대비해 reserved space percentage– PCTUSED: minimum percentage of used space
INITRANS
MAXTRANS
PCTUSED
PCTFREE
73
• Data Dictionary View
• Querying DBA_SEGMENTS– General Information
• OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME– Storage settings
• INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS, PCT_INCREASE– Size
• EXTENTS, BLOCKS, BYTES– Other information
• Location, Tuning
■ Obtaining Information About Storage Structures
SegmentsDBA_SEGMENTS
TablespacesDBA_TABLESPACES
Data FilesDBA_DATA_FILES
Used ExtentsDBA_EXTENTS
Free ExtentsDBA_FREE_SPACE
74
• Querying DBA_EXTENTS– Identification
• OWNER• SEGMENT_NAME• EXTENT_ID
– Location• TABLESPACE_NAME• RELATIVE_FNO• FILE_ID• BLOCK_ID
– Size• BLOCKS• BYTES
• Querying DBA_FREE_SPACE– Location
• TABLESPACE_NAME• RELATIVE_FNO• FILE_ID• BLOCK_ID
– Size• BYTES• BLOCKS
■ Obtaining Information About Storage Structures
Lesson 10Managing Rollback Segments
76
• Rollback Segment 는 데이터 변경 시 변경 전 data 와 data 의 위치 저장• Rollback segment header 에는 rollback segment 를 사용하는
현재 transaction 에 대한 정보가 저장된 transaction table 을 포함• 하나의 transaction 은 하나의 rollback segment 만을 사용
■ Overview
Update Transaction
Table
New Image
Old Image
Rollback Segment
77
• Transaction Rollback– transaction 이 table 내에 row 를 변경할 때 , 변경 전에 데이터를 rollback
segment 에 보관
• Transaction Recovery– instance failure 시 uncommitted 변경 사항을 roll back
• Read Consistency– 다른 user 에게 변경되기 전에 데이터 값을 보여줌
■ Purpose
Read ConsistencyTransactionrecovery
Rollback Segment
Transaction Rollback
78
• SYSTEM– Database 생성 시 SYSTEM tablespace 내에 생성– SYSTEM tablespace 내에 objects 를 위해 사용
• Non-SYSTEM– multiple tablespace 를 가지고 있는 database 는 최소 하나의 non-SYSTEM rollb
ack segment 가 필요– 다른 tablespace 내에 objects 를 위해 사용– private– public
• Deferred– Tablespace 가 immediate option 으로 offline 되었을 때 사용– Tablespace 가 다시 online 되었을 때 transactions 을 roll back
■ Types of Rollback Segments
79
• Allocation of a Rollback Segment– Transaction 이 시작되면 하나의 rollback segment 가 할당
• Using extent– Transactions 은 sequential, circular 하게 rollback segment 의 extent 를
사용– 하나 이상의 transaction 들이 같은 rollback segment 의 extent 를 사용 가능– 각 rollback segment block 은 하나의 transaction 의 정보를 포함
• Growth of Rollback Segments– pointer 는 다음 extent 가 no active transaction 일 때만 이동 가능– next extent 가 사용되고 있으면 , transaction 은 하나의 extent 를 추가
■ Using Rollback Segments with Transactions
Active extent
1 2
34
1 2
3
4
5
Inactive extent
New extent
80
• Guidelines– 모든 extents 의 크기가 같도록 INITIAL=NEXT 를 사용– Rollback segment extents 의 allocation 과 deallocation 을 최소화하기 위해 OPT
IMAL 값을 설정– 불필요한 rollback segment 의 확장을 피하기 위해 MAXEXTENTS 값을 설정
• Bringing Rollback
– Database startup 시 rollback segment 를 online 상태로 설정
■ Creating Rollback Segments
CREATE ROLLBACK SEGMENT rbs01 TABLESPACE rbs STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 20 MAXEXTENTS 100 OPTIMAL 2000K );
CREATE ROLLBACK SEGMENT rbs01 TABLESPACE rbs STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 20 MAXEXTENTS 100 OPTIMAL 2000K );
ALTER ROLLBACK SEGMENT rbs01 ONLINE;ALTER ROLLBACK SEGMENT rbs01 ONLINE;
ROLLBACK_SEGMENTS=(rbs01, rbs02)ROLLBACK_SEGMENTS=(rbs01, rbs02)
81
• Changing Rollback Segment Storage Settings– OPTIMAL 이나 MAXEXTENTS 를 변경
• Deallocating Space from Rollback Segments
• Taking a Rollback Segment Offline
• Dropping Rollback Segments
■ Maintaining Rollback Segments
ALTER ROLLBACK SEGMENT rbs01 STORAGE( MAXEXTENTS 200 );ALTER ROLLBACK SEGMENT rbs01 STORAGE( MAXEXTENTS 200 );
DROP ROLLBACK_SEGMENT rbs01;DROP ROLLBACK_SEGMENT rbs01;
ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 4M;ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 4M;
ALTER ROLLBACK SEGMENT rbs01 OFFLINE;ALTER ROLLBACK SEGMENT rbs01 OFFLINE;
82
• DBA_ROLLBACK_SEGS– Identification
• SEGMENT_ID• SEGMENT_NAME
– Location• TABLESPACE_NAME
– Type• OWNER(PUBLIC or SYS)
– Status• STATUS(ONLINE or OFFLINE)
• Rollback Segment Statistics
■ Obtaining Rollback Segment Information
V$ROLLNAME USN NAME
V$ROLLNAME USN NAME
V$ROLLSTAT USN EXTENTS RSSIZE XACTS . .
V$ROLLSTAT USN EXTENTS RSSIZE XACTS . .
83
• Rollback Segment Statistics
• Rollback Segment: Current Activity
■ Obtaining Rollback Segment Information
V$ROLLNAME USN NAME
V$ROLLNAME USN NAME
V$ROLLSTAT USN EXTENTS RSSIZE XACTS OPTSIZE HWMSIZE AVEACTIVE STATUS CUREXT CURBLK
V$ROLLSTAT USN EXTENTS RSSIZE XACTS OPTSIZE HWMSIZE AVEACTIVE STATUS CUREXT CURBLK
V$SESSION SADDR USERNAME SID SERIAL#
V$SESSION SADDR USERNAME SID SERIAL#
V$TRANSACTION SES_ADDR XIDUSN UBAFIL STATUS . .
V$TRANSACTION SES_ADDR XIDUSN UBAFIL STATUS . .
84
• Transactions 을 위한 공간 부족– Tablespace 에 data file 추가– MAXEXTENTS 크기를 늘려줌– 초기 extent 값을 크게 설정해서 segment 를 재생성
• Read-consistency error– MINEXTENTS 값을 크게– extent 의 크기를 크게– OPTIMAL 값을 크게
• Blocking Session– Blocking Session 을 찾아서 kill
• Error in taking tablespace offline
■ Troubleshooting Rollback Segment Problem
Lesson 11Managing Tables
86
• Regular table
• Partitioned table
• Index-organized table
• Cluster
• Structure of a Row
■ Overview
Row header
Column length
Column value
87
• Changing Rollback Segment Storage Settings– OPTIMAL 이나 MAXEXTENTS 를 변경
• Deallocating Space from Rollback Segments
• Taking a Rollback Segment Offline
• Dropping Rollback Segments
■ Maintaining Rollback Segments
ALTER ROLLBACK SEGMENT rbs01 STORAGE( MAXEXTENTS 200 );ALTER ROLLBACK SEGMENT rbs01 STORAGE( MAXEXTENTS 200 );
DROP ROLLBACK_SEGMENT rbs01;DROP ROLLBACK_SEGMENT rbs01;
ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 4M;ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 4M;
ALTER ROLLBACK SEGMENT rbs01 OFFLINE;ALTER ROLLBACK SEGMENT rbs01 OFFLINE;
88
• Guidelines– tablespace fragmentation 을 줄이기 위해 표준 extent size 를 사용– fragmentation 을 줄이기 위해 locally managed tablespaces 를 사용– 작고 , 자주 사용되는 table 에 대해서는 CACHE 모드로 설정
■ Creating Table
CREATE TABLE employee ( id NUMBER(7), last_name VARCHAR2(25), dept_id NUMBER(7))PCTFREE 20 PCTUSED 50STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50 )TABLESPACE data;
CREATE TABLE employee ( id NUMBER(7), last_name VARCHAR2(25), dept_id NUMBER(7))PCTFREE 20 PCTUSED 50STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50 )TABLESPACE data;
89
• High-Water Mark– Table 에서 사용되고 있는 마지막 block 를 가리키고 있다– insert 시 마지막 block 으로 이동– row delete 시에는 reset 되지 않음– Table 의 segment header 에 보관– Full table scan 시 high-water mark 까지 모든 block 을 scan
• Finding the High-Water Mark– High-Water Mark 의 위치와 unused block 의 수를 찾기 위한 package 제공– DBMS_SPACE
• Deallocation of Unused Space– release 된 공간은 table 내에 다른 segment 에 의해 사용
■ Controlling Space Used by Tables
ALTER TABLE summit.employeeDEALLOCATE UNUSED;ALTER TABLE summit.employeeDEALLOCATE UNUSED;
90
• Truncating a Table– Table 내에 모든 row 를 삭제– 대응하는 모든 index 를 truncate– foreign key 에 의해 참조되고 있는 table 은 truncate 될 수 없음– 삭제된 trigger 는 fire
• Dropping a Table
■ Controlling Space Used by Tables
TRUNCATE TABLE summit.employee;TRUNCATE TABLE summit.employee;
DROP TABLE summit.departmentCASCADE CONSTRAINTS;DROP TABLE summit.departmentCASCADE CONSTRAINTS;
91
• Dropping a Column– Table 내에 하나의 column 을 삭제
– column length, 각 row 의 데이터를 삭제
• Using the UNUSED Option– Mark a column as unused
– Drop unused columns
■ Controlling Space Used by Tables
ALTER TABLE ordersSET UNUSED COLUMN commnetsCASCADE CONSTRAINTS
ALTER TABLE ordersSET UNUSED COLUMN commnetsCASCADE CONSTRAINTS
ALTER TABLE employeeDROP COLUMN commentsCASCADE CONSTRAINTS CHECKPOINT 1000;
ALTER TABLE employeeDROP COLUMN commentsCASCADE CONSTRAINTS CHECKPOINT 1000;
ALTER TABLE ordersDROP UNUSED COLUMNS CHECKPOINTS 1000;ALTER TABLE ordersDROP UNUSED COLUMNS CHECKPOINTS 1000;
92
• Table 정보 얻기
• Extent 정보 얻기– DBA_EXTENTS
• OWNER, SEGMENT_NAME, EXTENT_ID, FILE_ID, BLOCK_ID, BLOCKS
■ Retrieving Table Information
DBA_OBJECTS OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID CREATED
DBA_OBJECTS OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID CREATED
DBA_SEGMENTS OWNER SEGMENT_NAME TABLESPACE_NAME HEADER_FILE HEADER_BLOCK
DBA_SEGMENTS OWNER SEGMENT_NAME TABLESPACE_NAME HEADER_FILE HEADER_BLOCK
DBA_TABLES OWNER TABLE_NAME PCT_FREE PCT_USED INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE CACHE BLOCKS EMPTY_BLOCKS CHAIN_CNT TEMPORARY DURATION
DBA_TABLES OWNER TABLE_NAME PCT_FREE PCT_USED INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE CACHE BLOCKS EMPTY_BLOCKS CHAIN_CNT TEMPORARY DURATION
Lesson 12Managing Indexes
94
• Classification of Indexes– Logical
• logical classification groups indexes from an application perspective• Single column or concatenated• Unique or nonunique• Function-based
– Physical• index 를 어떻게 보관하느냐 따라 분류• Partitioned or nonpartitioned• B-tree• Normal or reverse key• Bitmap
■ Overview
95
• B-Tree Index
– Index entry• Index entry header: column 의 수와 locking 정보를 포함• Key column length-value pairs: key value 에 따른 key 내에 column 의 크기 정의• ROWID: key value 를 포함하는 row 의 id
• Reverse Key Index
■ Overview
Root
Branch
Leaf
KEY ROWID
ID (BLOCK# ROW# FILE#)----- --------------------1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.0001
KEY ROWID
ID (BLOCK# ROW# FILE#)----- --------------------1257 0000000F.0002.00012877 0000000F.0006.00014567 0000000F.0004.00016657 0000000F.0003.0001
ID FIRST_NAME JOB----- ---------- -----------7499 ALLEN SALESMAN7566 JONES MANAGER7782 CLARK MANAGER7369 SMITH CLERK
ID FIRST_NAME JOB----- ---------- -----------7499 ALLEN SALESMAN7566 JONES MANAGER7782 CLARK MANAGER7369 SMITH CLERK
Index on EMPLOYEE(ID)
EMPLOYEE table
96
• Creating Function-Based Indexed– Query performance 개선
– Queries using expressions can use the index
• Bitmap Index– B-tree 와 비슷하게 구성– leaf node 는 ROWIDs 대신에 각 key value 에 대한 bitmap 을 저장– 구성요소
• bitmap entry header: columns 의 수와 lock information• Key values: 각 key column 에 대한 length 와 value 의 쌍
■ Overview
CREATE INDEX summit.item_quantity_to_deliver_idxON summit.item (quantity – quantity_shipped);CREATE INDEX summit.item_quantity_to_deliver_idxON summit.item (quantity – quantity_shipped);
SELECT ord_id, item_idFROM ITEMWHERE ( quantity – quantity_shipped) > 0;
SELECT ord_id, item_idFROM ITEMWHERE ( quantity – quantity_shipped) > 0;
97
• Comparing B-Tree and Bitmap Indexes
■ Overview
B-tree Bitmap
High cardinality columns 에 적당 Low cardinality columns 에 적당
key 에 대한 update 가 inexpensive key 에 대한 update 가 expensive
OR 절을 사용하는 query 는 비효율적 OR 절을 사용하는 query 에 효율적
OLTP 에 사용 Data warehousing 에 사용
98
• Creating Normal B-Tree Indexes
• Guidelines– Query 와 DML 의 balance– Data 나 rollback segment 와 다른 tablespace 에 존재하도록– Uniform extents size 를 사용– large index 에 대해서는 NOLOGING 모드를 사용– Table 과 다르게 PCTFREE 를 높게 설정
■ Creating Indexes
CREATE INDEX summit.employee_last_name_idxON summit.employee(last_name)PCTFREE 30STORAGE (INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;
CREATE INDEX summit.employee_last_name_idxON summit.employee(last_name)PCTFREE 30STORAGE (INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;
99
• Creating Reverse Key Indexes
• Creating Bitmap Indexes
■ Creating Indexes
CREATE UNIQUE INDEX summit.orders_id_idxON summit.orders(id) REVERSEPCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE INDX;
CREATE UNIQUE INDEX summit.orders_id_idxON summit.orders(id) REVERSEPCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE INDX;
CREATE BITMAP INDEX orders_region_id_idxON summit.orders(region_id)PCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;
CREATE BITMAP INDEX orders_region_id_idxON summit.orders(region_id)PCTFREE 30STORAGE(INITIAL 200K NEXT 200KPCTINCREASE 0 MAXEXTENTS 50)TABLESPACE indx;
100
• Changing Storage Parameters for Indexes
• Allocating and Deallocating Index Space
■ Reorganizing Indexes
ALTER INDEX summit.employee.last_name_idxSTORAGE(NEXT 400KMAXEXTENTS 100);
ALTER INDEX summit.employee.last_name_idxSTORAGE(NEXT 400KMAXEXTENTS 100);
ALTER INDEX summit.orders_region_id_idxALLOCATE EXTENT (SIZE 200KDATAFILE ‘/DISK6/indx01.dbf’;
ALTER INDEX summit.orders_region_id_idxALLOCATE EXTENT (SIZE 200KDATAFILE ‘/DISK6/indx01.dbf’;
ALTER INDEX summit.orders_id_idxDEALLOCATE UNUSED;ALTER INDEX summit.orders_id_idxDEALLOCATE UNUSED;
101
• Rebuilding Indexes– index 를 다른 tablespace 로 이동– 삭제된 entries 를 제거함으로써 공간 활용도를 개선– reverse key index 를 normal B-Tree index 로 변경 또는 그 반대로 변경
• Coalescing Indexes
■ Reorganizing Indexes
ALTER INDEX summit.orders_region_id_idx REBUILDTABLESPACE indx02;ALTER INDEX summit.orders_region_id_idx REBUILDTABLESPACE indx02;
ALTER INDEX summit.orders_id_idx COALESCE;ALTER INDEX summit.orders_id_idx COALESCE;
■ Dropping Indexes• 커다란 data 를 load 하기전에 index 를 drop 하고 load 후 index 재생성
• 자주 사용되지 않은 indexs 를 제거하고 , 필요할 때 생성
• instance failure 시 INVALID 표시된 index 를 제거 후 재생성
DROP INDEX summit.department_name_idx;DROP INDEX summit.department_name_idx;
102
■ Obtaining Index Information
DBA_INDEXES OWNER INDEX_NAME INDEX_TYPE TABLE_OWNER TABLE_NAME UNIQUENESS TABLESPACE_NAME LOGGING STATUS
DBA_INDEXES OWNER INDEX_NAME INDEX_TYPE TABLE_OWNER TABLE_NAME UNIQUENESS TABLESPACE_NAME LOGGING STATUS
DBA_ID_COLUMNS INDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION COMUMN_LENGTH
DBA_ID_COLUMNS INDEX_OWNER INDEX_NAME TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION COMUMN_LENGTH
SELECT index_name, tablespace_name, index_type, uniqueness, statusFROM dba_indexesWHERE owner = ‘SUMMIT’;
SELECT index_name, tablespace_name, index_type, uniqueness, statusFROM dba_indexesWHERE owner = ‘SUMMIT’;
Lesson 13Managing Data Integrity
104
• Types of Constraints
• Constraint States– Disabled novalidate– Disabled validate– Enabled novalidate– Enabled validate
■ Integrity Constraints
Constraint Description
NOT NULL column 이 null values 를 가질 수 없음
UNIQUE unique 로 column 이나 column 의 조합을 설정
PRIMARY KEYcolumn 이나 column 의 조합을 table 의 primary key 로 설정
FOREIGN KEY column 이나 column 의 조합을 table 의 foreign key 로 설정
CHECK table 의 row 가 만족해야 하는 condition 을 설정
105
• Deferred Constraints– 하나의 transaction 이 commit 되었을 때만 constraints 를 check– commit 시 constraints violation 이 있다면 모든 transaction 이 rollback
• Defining Constraints Immediate or Deferred
• Foreign Key Considerations
■ Integrity Constraints
ALTER SESSIONSET CONSTRAINT[S] = {IMMEDIATE|DEFERRED|DEFAULT);
ALTER SESSIONSET CONSTRAINT[S] = {IMMEDIATE|DEFERRED|DEFAULT);
Action 적절한 해결방법
Drop Parent Table Cascade constraints
Truncate parent table Disable or drop foreign key
Drop Tablespace containing parent table CASCADE CONSTRAINTS 를 사용
Avoid locks on child table while performing DML o parent table
foreign key 에 대한 index 를 생성
Perform DML o child tableEnsure tablespace containing parent key index online
106
• Defining Constraints While Creating Table
• Guidelines– Primary and unique constraints
• table 과 다른 tablespace 에 위치• bulk load 가 자주 발생하면 nonunique indexes 를 사용
– Self-referencing foreign key• initial load 후 foreign key 를 정의하거나 enable• constraint 를 deferrable constraint 로 정의
■ Implementing Constraints
CREATE TABLE summit.employee(id NUMBER(7)
CONSTRAINTS employee_id_pk PRIMARY KEYDEFERRABLEUSING INDEX STORAGE(INITIAL 100K NEXT 100K) TABLESPACE indx,
last_name VARCHAR2(25)CONSTRAINTS employee_last_name_nn NOT NULL,
dept_id NUMBER(7))TABLESPACE data;
CREATE TABLE summit.employee(id NUMBER(7)
CONSTRAINTS employee_id_pk PRIMARY KEYDEFERRABLEUSING INDEX STORAGE(INITIAL 100K NEXT 100K) TABLESPACE indx,
last_name VARCHAR2(25)CONSTRAINTS employee_last_name_nn NOT NULL,
dept_id NUMBER(7))TABLESPACE data;
107
• Using the EXCEPTIONS Table– EXCEPTION Table 생성 (utlexcpt.sql)
– EXCEPTIONS 절을 포함하여 ALTER TABLE 실행
– invalid data 를 가진 row 확인
– data 내에 error 를 수정– constraints 를 enable 하기 위해 ALTER TABLE 실행
■ Maintaining Constraints
SQL>@?/rdbms/admin/ttlexcptSQL>@?/rdbms/admin/ttlexcpt
ALTER TABLE summit.employeeENABLE VALIDATE CONSTRAINT employee_dept_id_fkEXCEPTIONS INTO system.exceptions
ALTER TABLE summit.employeeENABLE VALIDATE CONSTRAINT employee_dept_id_fkEXCEPTIONS INTO system.exceptions
SELECT rowid, id, last_name, dept_idFROM summit.employeeWHERE ROWID in( SELECT row_id FROM exceptions)FOR UPDATE;
SELECT rowid, id, last_name, dept_idFROM summit.employeeWHERE ROWID in( SELECT row_id FROM exceptions)FOR UPDATE;
ALTER TABLE summit.employeeENABLE VALIDATE CONSTRAINT employee_dept_id_fkEXCEPTIONS INTO system.exceptions
ALTER TABLE summit.employeeENABLE VALIDATE CONSTRAINT employee_dept_id_fkEXCEPTIONS INTO system.exceptions
108
■ Obtaining Constraint Information
DBA_CONSTRAINTS OWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAME DELETE_RULE STATUS DEFERABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHANGE
DBA_CONSTRAINTS OWNER CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_OWNER R_CONSTRAINT_NAME DELETE_RULE STATUS DEFERABLE DEFERRED VALIDATED GENERATED BAD RELY LAST_CHANGE
DBA_CONS_COLUMNS OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
DBA_CONS_COLUMNS OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
SELECT constraint_name, constraint_type, deferrable,deferred, validatedFROM dba_constraintsWHERE owner= ‘ SUMMIT’ AND table_name = ‘EMPLOYEE’;
SELECT constraint_name, constraint_type, deferrable,deferred, validatedFROM dba_constraintsWHERE owner= ‘ SUMMIT’ AND table_name = ‘EMPLOYEE’;
Lesson 14Loading Data
110
• Loading data– Direct-Load Insert– SQL*Loader– Export and Import Utilities
■ OverviewOther
Applications
OracleDatabase
OracleDatabase
SQL*Loader
Import
Direct-load insert
Export
111
• Using Direct-Load Inserts
■ Loading Data Using Direct-Load Insert
INSERT /*_APPEND */ INTO scott.empNOLOGGINGSELECT * FROM SCOTT.OLD_emp;
INSERT /*_APPEND */ INTO scott.empNOLOGGINGSELECT * FROM SCOTT.OLD_emp;
EMP table
ServerProcessServerProcess
Used block
Free space after delete
High-water mark
Blocks used by inserted rows
112
• Parallel Direct-Load Insert
– 각 slave process 에 의해 insert 된 data 를 보관하기 위해 temporary segments 가 할당
– commit 을 실행해야만 temporary segment 의 extents 가 table 에 포함
■ Loading Data Using Direct-Load Insert
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+PARALLEL(scott.emp, 2) */ INTO scott.emp NOLOGGINGSELECT * FROM scott.old_emp;
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+PARALLEL(scott.emp, 2) */ INTO scott.emp NOLOGGINGSELECT * FROM scott.old_emp;
EMP table
SlaveProcessSlave
Process
Used block
Free space after delete
High-water mark
Temporary segments
SlaveProcessSlave
Process
113
• Parallel Direct-Load Insert
– 각 slave process 에 의해 insert 된 data 를 보관하기 위해 temporary segments 가 할당
– commit 을 실행해야만 temporary segment 의 extents 가 table 에 포함
■ Loading Data Using Direct-Load Insert
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+PARALLEL(scott.emp, 2) */ INTO scott.emp NOLOGGINGSELECT * FROM scott.old_emp;
ALTER SESSION ENABLE PARALLEL DML;INSERT /*+PARALLEL(scott.emp, 2) */ INTO scott.emp NOLOGGINGSELECT * FROM scott.old_emp;
EMP table
SlaveProcessSlave
Process
Used block
Free space after delete
High-water mark
Temporary segments
SlaveProcessSlave
Process
114
• SQL*Loader– 외부 파일들로부터 table 로 데이터를 load
■ Loading Data Using SQL*Loader
Rejected
Parameter file(optional)
Oracle Server
SQL*Loader
Record selection
Field processing
Control fileData file
Bad file
Discard file(optional)
Accepted
Selected
Inserted
Discarded
Rejected
Log file
Database file
115
• Files Used by SQL*Loader– Control file: input format, output tables, optional condition– Data file: control file 에 정의된 형태의 data 를 포함– Parameter file: command line parameter 를 정의– Log file: SQL*Loader 에 의해 생성되며 , load 의 기록을 보관– Bad file: load 동안 reject 된 기록을 작성– Discard file: 조건에 맞이 않는 모든 data 를 보관
• SQL*Loader 특징– 하나 이상의 input file 을 사용– 여러 input record 들이 하나의 논리적인 record 로 조합– 데이터는 disk, tape, named pipe 와 같은 media 로 부터 load– 데이터는 한번의 수행으로 여러 table 에 load– table 내에 존재하는 데이터에 추가 , 대체하는 option 을 제공– SQL function 을 input 데이터에 적용– 데이터를 data buffer cache 를 거치지 않고 , 직접 table 에 load
■ Loading Data Using SQL*Loader
116
• Conventional Path Load– 데이터 load 위해 SQL 문을 사용– field specification 에 만족하지 않은 record 는 reject– select 목록에 만족하지 않은 record 는 discard– Redo log 생성은 logging attribute 에 따라 결정
• Direct Path Load– 메모리 내에 data 의 blocks 을 만들고 , 이 blocks 을 직접 table 의 extent 에
저장– database 가 archivelog mode 이면 redo log 생성 안함– database buffer cache 를 거치지 않고 , 직접 데이터를 load– extent 관리 high-water mark 조정을 위해 SGA 를 사용
■ Loading Data Using SQL*Loader
Conventional Path Direct Path
데이터 변경 후 COMMIT 실행 data save
Redo log entries 발생 특정 조건에 따라 발생
모든 constraints enforce primary key, unique, NOT NULL
INSERT trigger fire INSERT triggers do not fire
clustered table 에 load 될 수 있음 clustered table 에 load 될 수 없음
다른 사용자가 table 변경 가능 변경 불가능
117
• Using SQL*Loader
• Guidelines– 사용된 command line option 을 지정하기 위해 parameter file 을 사용– data file 이 작은 경우 control file 에 위치– loading performance 를 향상
• 충분한 공간 할당• sorting the data on the largest index• parallel load 시 temporary segments 의 위치를 다르게 지정
■ Loading Data Using SQL*Loader
$sqlldr scott/tiger \> control=u1case6.ctl \> log=u1case6.log direct=true
$sqlldr scott/tiger \> control=u1case6.ctl \> log=u1case6.log direct=true
Lesson 15Reorganizing Data
119
• Moving Data Using Export and Import
– Administrator 가 실행– database 들 사이에 data 이동– 다른 tablespaces 로 data 이동– 효율적인 storage 와 performance 를 위해 data 를 reorganize– 어떤 user 소유의 data 를 다른 user 로 이동– 다른 OS 플랫폼이나 Oracle 버전에 다른 database 를 migrate– logical backup 을 수행
■ Overview
Data files
OS file
Import
Export
120
• Export Modes– Table
• table, indexes, triggers, constraints, grants 모두 export 가능– User
• user 가 소유하고 있는 모든 objects 를 export 가능• 다른 users 가 소유하고 있는 indexes 와 triggers 은 제외
– Database• database 내에 모든 objects 를 export 가능• SYS 소유의 objects 는 제외
• Conventional and Direct Path Export
■ Overview
Dump files
Database
ExportExport
EvaluatingbufferEvaluatingbufferPrivate bufferor buffer cachePrivate bufferor buffer cache
SQL commandprocessingSQL commandprocessingBuffer cachemanagementBuffer cachemanagementRead databaseblockRead databaseblock
DirectConventional
121
• Using Export
• Using Import
■ Overview
$exp scott/tiger tables=(dept, emp) \> file=emp.dmp log=exp.log \> compress=n direct=y
$exp scott/tiger tables=(dept, emp) \> file=emp.dmp log=exp.log \> compress=n direct=y
$imp scott/tiger tables=(dept, emp) \> file=emp.dmp log=imp.log ignore=y$imp scott/tiger tables=(dept, emp) \> file=emp.dmp log=imp.log ignore=y
122
• Steps for Transporting a Tablespace1. Tablespace 를 read-only 로 만듬2. Export metadata from source3. data files 을 대상 system 으로 복사4. 대상 system 으로 export file 을 전송5. metadata 를 대상 system 내에 import6. 필요하다면 tablespace 를 read-write 로 변경
• Transportable Tablespace Uses– 모든 tablespace data 를 이동– media recovery 를 지원– source and target database
• 같은 OS 이어야 함• Oracle 8i, release 8.1 또는 그 이상이어야 함• 같은 block size 이어야 함• 같은 character set 이어야 함
■ Transporting a Tablespace
123
• Example
– SYSTEM 1 의 tablespace 를 read-only 로
– metadata tablespace export
■ Transporting a Tablespace
s980501.dmps980501.dmp
SYSTEM 1
/u/d1/u/d2
/disk1/disk2
SALES_TSSALES_TS
SYSTEM 2
/u/d1/sales1.dbf/u/d1/sales1.dbf
/u/d2/sales2.dbf/u/d2/sales2.dbf
SALES_TSSALES_TS
/disk1/sales1.dbf/disk1/sales1.dbf
/disk2/sales2.dbf/disk2/sales2.dbf
read only
SQL>ALTER TABLESPACE sales_ts READ ONLY;SQL>ALTER TABLESPACE sales_ts READ ONLY;
exp FILE=x980501.dmp TRANSPORT TABLESPACE=Y \TABLESPACE=sales_ts TRIGGER=N CONSTRAINTS=Nexp FILE=x980501.dmp TRANSPORT TABLESPACE=Y \TABLESPACE=sales_ts TRIGGER=N CONSTRAINTS=N
124
• Example
– tablespace data file 을 system 2 로 복사– s980501.dmp export file 을 system 2 로 복사– tablespace metadata import
– tablespace read-write 로 변환
■ Transporting a Tablespace
s980501.dmps980501.dmp
SYSTEM 1
/u/d1/u/d2
/disk1/disk2
SALES_TSSALES_TS
SYSTEM 2
/u/d1/sales1.dbf/u/d1/sales1.dbf
/u/d2/sales2.dbf/u/d2/sales2.dbf
SALES_TSSALES_TS
/disk1/sales1.dbf/disk1/sales1.dbf
/disk2/sales2.dbf/disk2/sales2.dbf
read only
imp FILE=x980501.dmp TRANSPORT TABLESPACE=Y \DATAFILES=(/disk1/sales01.dbf, /disk2/sales02.dbf)imp FILE=x980501.dmp TRANSPORT TABLESPACE=Y \DATAFILES=(/disk1/sales01.dbf, /disk2/sales02.dbf)
SQL>ALTER TABLESPACE sales_ts READ WRITE;SQL>ALTER TABLESPACE sales_ts READ WRITE;
Lesson 16Managing Password Security
andResources
126
• Profiles– Password aging and expiration– Password history– Password complexity verification– Account locking– CPU time– I/O operations– Idle time– Connect time– Memory space– Concurrent sessions
■ Overview
127
• password management– Account locking– Password aging and expiration– Password history– Password complexity verification
• Enabling Password Management– profiles 을 사용함으로써 password management 를 설정– users 에게 profile 을 할당– CREATE USER 또는 ALTER USER 를 사용하여 account 를 lock, unlock,
expire– password limit 은 항상 강요
• Controlling Account Lock and Password– 사용자가 password 를 분실했을 때 , password 를 reset– 사용자의 account 를 unlock– account 를 lock– 수동으로 password 를 expire
■ Administering Passwords
ALTER USER hanneIDENTIFIED BY rueACCOUNT UNLOCK;
ALTER USER hanneIDENTIFIED BY rueACCOUNT UNLOCK;
128
• Creating a Profile: Password settings
• Altering a Profile
• Dropping a Profile
■ Administering Passwords
CREATE PROFILE grace_5 LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNLIMITED PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_TIME 30 PASSWORD_VERIFY_FUNCTION verify_function PASSWORD_GRACE_TIME 5;
CREATE PROFILE grace_5 LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNLIMITED PASSWORD_LIFE_TIME 30 PASSWORD_REUSE_TIME 30 PASSWORD_VERIFY_FUNCTION verify_function PASSWORD_GRACE_TIME 5;
ALTER PROFILE defaultFAILED_LOGIN_ATTEMPTS 3PASSWORD_LIFE_TIME 60PASSWORD_GRACE_TIME 10;
ALTER PROFILE defaultFAILED_LOGIN_ATTEMPTS 3PASSWORD_LIFE_TIME 60PASSWORD_GRACE_TIME 10;
DROP PROFILE developer_prof;DROP PROFILE developer_prof;
DROP PROFILE developer_prof CASCADE;DROP PROFILE developer_prof CASCADE;
129
• Managing Resources with Profiles– CREATE PROFILE 명령어를 이용하여 profile 을 생성– CREATE 또는 ALTER USER 명령어를 이용하여 user 에게 profile 할당– resource limit 을 enable
• RESOURCE_LIMIT 초기화 파라미터• ALTER SYSTEM 명령어
• Setting Resource Limits at Session Level
■ Controlling Usage of Resources
Resource Description
CPU_PER_SESSION 총 CPU 시간 (100 초 단위 )
SESSIONS_PER_USER 각 user 당 concurrent session 수
CONNECT_TIME 연결 시간 ( 분 )
IDLE_TIME inactive time( 분 )
LOGICAL_READS_PER
_SESSIONdata block 수
PRIVATE_SGA SGA 내에 private space(byte)
130
• Setting Resource Limits at Call Level
• Creating a Profile: Resource Limit
• Enabling Resource Limits– RESOURCE_LIMIT 초기화 파라미터를 TRUE 를 설정– ALTER SYSTEM 명령어를 이용하여 resource limit enable
■ Controlling Usage of Resources
CREATE PROFILE developer_prof LIMIT SESSIONS_PER_USER 2 CPU_PER_SESSION 10000 IDLE_TIME 60 CONNECT_TIME 480;
CREATE PROFILE developer_prof LIMIT SESSIONS_PER_USER 2 CPU_PER_SESSION 10000 IDLE_TIME 60 CONNECT_TIME 480;
Resource Description
CPU_PER_CALL call 당 CPU 시간 (100 초 )
LOGICAL_READS_PER_CALL call 당 읽을 수 있는 data blocks 의 수
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
131
• DBA_USERS– profile– username– account_status– lock_date– expire_date
• DBA_PROFILES– profile– resource_name– resource_type(PASSWORD, KERNEL)– limit
■ Viewing Password and Resource Limits Information
SELECT username, password, account_status, lock_date, expire_dateFROM dba_users;SELECT username, password, account_status, lock_date, expire_dateFROM dba_users;
SELECT * FROM dba_profiles WHERE resource_type=‘PASSWORD’;SELECT * FROM dba_profiles WHERE resource_type=‘PASSWORD’;
SELECT p.profile, p.resource_name, p.limitFROM dba_users u, dba_profiles pWHERE p.profile=u.profile AND username=‘SCOTT’ ANDp.resource_type=‘KERNERL’;
SELECT p.profile, p.resource_name, p.limitFROM dba_users u, dba_profiles pWHERE p.profile=u.profile AND username=‘SCOTT’ ANDp.resource_type=‘KERNERL’;
Lesson 17Managing Users
133
• Users and Security
• Database Schema– 특정 user 와 관련된 table, view, cluster, procedure, package 와 같은
object 들의 집합
■ Overview
Accountlocking
Defaulttablepsace
Temporarytablespace
Tablespacequotas
Resourcelimits
Directprivileges
Roleprivileges
Authentication
mechanismSecurityDomain
134
• Checklist for Creating Users– username 과 authentication mechanism 을 선택– user 가 object 들을 저장하기 위해 필요한 tablespace 를 확인– 각 tablespace 를 위한 quotas 를 결정– default tablespace 와 temporary tablespace 를 할당– user 생성– user 에게 privileges 와 roles 를 grant
• Creating a New User: Database Authentication
■ Creating New Database Users
CREATE USER peterIDENTIFIED BY mylstsonDEFAULT TABLESPACE dataTEMPORARY TABLESPACE tempQUOTA 15m ON dataPASSWORD EXPIRE;
CREATE USER peterIDENTIFIED BY mylstsonDEFAULT TABLESPACE dataTEMPORARY TABLESPACE tempQUOTA 15m ON dataPASSWORD EXPIRE;
135
• Creating a New User: Operating System Authentication– OS_AUTHENT_PREFIX 파라미터를 사용– Example: os User = user15
• Guidelines– Choose a standard password initially– EXPIRE 키워드를 사용– 항상 temporary tablespace 를 사용– QUOTA UNLIMITED 를 조심하여 사용– user 에게 Oracle Server 연결 방법과 password 변경 방법을 교육
■ Creating New Database Users
OS_AUTHENT_PREFIX
Database UserRemote_Login
Possible
OS_ OS_USER15 No
empty string “” USER15 No
OPS$(default) OPS$USER15 Yes
136
• Changing User Quota on Tablespace
• Dropping Users
■ Altering and Dropping Database Users
ALTER USER peterQUOTA 0 ON data;ALTER USER peterQUOTA 0 ON data;
DROP USER peter;DROP USER peter;
DROP USER peter CASCADE;DROP USER peter CASCADE;
Lesson 18Managing Privileges
138
• Managing Privileges– System: user 가 database 내에서 특정 action 을 수행할 수 있도록– Object: user 가 특정 object 에 접근과 조작할 수 있도록
■ Overview
• 126 가지의 system privileges
• ANY 키워드는 user 가 모든 schema 내에 privileges 를 가진다는 의미• GRANT 명령어는 user 또는 user 의 그룹에 privileges 를 추가• REVOKE 명령어는 privileges 를 제거
■ System Privileges
Category Examples
INDEX CRAETE ANY INDEX, ALTER ANY INDEX, DROP ANY INDEX
TABLECREATE TABLE, CREATE ANY TABLE, ALTER ANY TABLE, DROP ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE
SESSION CREATE SESSION, ALTER SESSION, RESTRICTED SESSION
TABLESPACECREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE,
UNLIMITED TABLESPACE
139
• Granting System Privileges
• Guidelines– PUBLIC 은 모든 user 에게 system privileges 를 부여– WITH ADMIN OPTION 으로 user 가 system privileges 를 부여 받게 됨
■ Granting System Privileges
GRANT CREATE SESSION, CREATE TABLE TO manager;GRANT CREATE SESSION, CREATE TABLE TO manager;
GRANT CREATE SESSION TO scott WITH ADMIN OPTION;GRANT CREATE SESSION TO scott WITH ADMIN OPTION;
140
• SYSDBA and SYSOPER Privileges
■ Password File Authentication
Category Examples
SYSOPER
STARTUP
SHUTDOWN
ALTER DATABASE OPEN | MOUNT
ALTER DATABASE BACKUP CONTROLFILE
ALTER TABLESPACE BEGIN/END BACKUP
RECOVER DATABASE
ALTER DATABASE ARCHIVELOG
RESTRICTED SESSION
SYSDBA
SYSOPER privileges WITH ADMIN OPTION
CREATE DATABASE
RECOVER DATABASE UNTIL
141
• Password File Authentication– 생성된 password file 을 check – password file 이 없다면 , ORAPWD 를 이용하여 password file 생성– 파라미터 file 내에 REMOTE_LOGIN_PASSWORD_FILE 이 EXCLUSIVE 로
설정되어 있는지 check– user 에게 SYSOPER, SYSDBA 권한을 부여– password file member 를 확인하기 위해 V$PWFILE_USERS view 를 확인
• Displaying System Privileges
• Revoking System Privileges
■ Password File Authentication
SELECT * FROM DBA_SYS_PRIVS;SELECT * FROM DBA_SYS_PRIVS;
REVOKE CREATE TABLE FROM karen;REVOKE CREATE TABLE FROM karen;
142
• Object Privileges
• Granting Object Privileges
■ Object Privileges
Object Privilege
Table View Sequence Procedure
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
GRANT EXECUTE ON dbms_pipe TO public;GRANT EXECUTE ON dbms_pipe TO public;
GRANT UPDATE(first_name, salary) ON employeeTO karen WITH GRANT OPTION;GRANT UPDATE(first_name, salary) ON employeeTO karen WITH GRANT OPTION;
143
• Displaying Object Privileges
• Revoking Object Privileges
■ Object Privileges
SELECT * FROM DBA_TAB_PRIVS;SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM DBA_COL_PRIVS;SELECT * FROM DBA_COL_PRIVS;
REVOKE execute ON dbms_pipe FROM scott;REVOKE execute ON dbms_pipe FROM scott;
144
• Define your purpose of auditing– 의심스러운 database activity– historical information 수집
• audit 하고자 하는 것을 정의– users, statements, objects– By session– Successful or unsuccessful
• audit trail 관리– audit trail 의 growth 를 모니터– 권한이 없는 접근으로부터 audit trail 보호
• Auditing Categories– Auditing privileged operations
• Instance startup, shutdown, SYSDBA connections– Database auditing
• 특정 database activities 에 대한 data 를 모니터하거나 수집하기 위해 사용• column values 를 기록할 수 없다 .• enabled by DBA
– Value-based or application auditing• code 를 통해 구현• column values 를 기록• table 에 대한 변경 사항을 track 하기 위해 사용
■ Auditing Guidelines
145
• Database Auditing
■ Using Database Auditing
parameterfile
ServerProcessServerProcess
DBADBA UserUser
OS audittrail
Audit option
Audit trailDatabase
Execute command
Generateaudit trail
Enable databaseauditing
Specifyaudit options
Reviewaudit
Information
146
• Enabling Auditing Options– Statement auditing
– Privilege auditing
– Schema object auditing
• Viewing Auditing Options
■ Using Database Auditing
AUDIT user;AUDIT user;
AUDIT select any table BY summit BY ACCESS;AUDIT select any table BY summit BY ACCESS;
AUDIT LOCK ON summit.employeeBY ACCESS WHENEVER SUCCESSFUL;AUDIT LOCK ON summit.employeeBY ACCESS WHENEVER SUCCESSFUL;
Data Dictionary view Description
ALL_DEF_AUDIT_OPTS Default audit options
DBA_STMT_AUDIT_OPTS Statement auditing options
DBA_PRIV_AUDIT_OPTS Privileges auditing options
DBA_OBJ_AUDIT_OPTS Schema object auditing options
147
• Viewing Auditing Results
■ Viewing Auditing Results
Audit Trail View Description
DBA_AUDIT_TRAIL 모든 audit trail entries
DBA_AUDIT_EXISTS AUDIT EXISTS/NOT EXISTS 를 기록
DBA_AUDIT_OBJECT 연결된 schema objects 를 기록
DBA_AUDIT_SESSION 모든 connect and disconnect entries
DBA_AUDIT_STATEMENT Statement auditing records
Lesson 19Managing Roles
149
• What is a Role?– users or other roles 에 할당된 related privileges 의 집합
• Role Characteristics– system privileges grant or revoke 명령어를 이용하여 role 을 grant or
revoke– system and object privileges 로 구성될 수 있음– enable and disable– 각 role 의 이름은 unique– role 에 대한 설명이 data dictionary 에 저장
• Role 의 이점– privileges 관리를 간소화– role 이 수정되면 role 이 할당된 모든 users 의 privileges 가 수정 (Dynamic
privilege management)– Selective availability of privileges– OS command or utilities 를 이용하여 users 에게 role 을 할당– No cascading revoke– Improve performance
■ Overview
150
• Creating Roles
• Using Predefined Roles
■ Creating and Modifying Roles
CREATE ROLE sales_clerk;CREATE ROLE sales_clerk;
CREATE ROLE hr_clerk IDENTIFIED BY bonus;CREATE ROLE hr_clerk IDENTIFIED BY bonus;
Role Name Description
CONNECT, RESOURCE backward compatibility 를 위해 제공
DBA WITH ADMIN OPTION 모든 system privileges
EXP_FULL_DATABASE database export 을 위한 privileges
IMP_FULL_DATABASE database import 를 위한 privileges
DELETE_CATALOG_ROLE data dictionary tables 에 대한 delete privileges
EXECUTE_CATALOG_ROLE data dictionary tables 에 대한 execute privileges
SELECT_CATALOG_ROLE data dictionary tables 에 대한 select privileges
151
• Modifying Roles
■ Creating and Modifying Roles
ALTER ROLE sales_clerkIDENTIFIED BY commission;ALTER ROLE sales_clerkIDENTIFIED BY commission;
ALTER ROLE hr_clerkIDENTIFIED EXTERNALLY;ALTER ROLE hr_clerkIDENTIFIED EXTERNALLY;
ALTER ROLE hr_managerNOT IDENTIFIED;ALTER ROLE hr_managerNOT IDENTIFIED;
■ Assigning Roles
GRANT sales_clerk TO scott;GRANT sales_clerk TO scott;
GRANT hr_manager TO scottWITH ADMIN OPTION;GRANT hr_manager TO scottWITH ADMIN OPTION;
152
• Establishing Default Roles– user 는 많은 assigned roles 을 가질 수 있다 .– user 가 log on 시 자동적으로 enabled 된 roles 를 default role 이라 함– user 에게 할당된 모든 roles 은 user 가 log on 시 enable
• Enabling and Disabling Roles– user 로 부터 role 을 임시적으로 revoke 하기 위해 role 을 disable– role 을 임시적으로 grant 하기 위해 enable– SET ROLE command 를 이용하여 enable and disable– Default role 은 user 가 log on 시 enable– password 는 role 을 enable 하기 위해 요구될 수 있다 .
■ Controlling Availability of Roles
ALTER USER scottDEFAULT ROLE hr_clerk, sales_clerk;ALTER USER scottDEFAULT ROLE hr_clerk, sales_clerk;
ALTER USER scott DEFAULT ROLE ALL;ALTER USER scott DEFAULT ROLE ALL;
ALTER USER scott DEFAULT ROLE NONE;ALTER USER scott DEFAULT ROLE NONE;
153
• Enabling and Disabling Roles: Examples
• Removing Roles from Users
• Removing Roles
■ Controlling Availability of Roles
SET ROLE hr_clerk;SET ROLE hr_clerk;
SET ROLE sales_clerk IDENTIFIED BY commission;SET ROLE sales_clerk IDENTIFIED BY commission;
SET ROLE NONE;SET ROLE NONE;
REMOVE sales_clerk FROM scott;REMOVE sales_clerk FROM scott;
REMOVE hr_manager FROM PUBLIC;REMOVE hr_manager FROM PUBLIC;
DROP ROLE hr_manager;DROP ROLE hr_manager;
154
• Displaying Role Information
■ Displaying Role Information
Role View Description
DBA_ROLES database 에 존재하는 모든 roles
DBA_ROLE_PRIVS users and roles 에 부여된 roles
ROLE_ROLE_PRIVS roles 에 부여된 roles
DBA_SYS_PRIVS users and roles 에 부여된 system privileges
ROLE_SYS_PRIVS roles 에 부여된 system privileges
ROLE_TAB_PRIVS roles 에 부여된 table privileges
SESSION_ROLES concurrently enabled roles
SELECT role, password_required FROM dba_roles;SELECT role, password_required FROM dba_roles;
Lesson 20Using National Language
Support
156
• NLS(National Language Support) Features– database utilities, error messages, sort order, date, time, monetary, numeric, an
d calendar convention 을 자동적으로 native language 로 변환할 수 있도록 함– language-dependent operations 은 client and server 측 환경 변수와 파라미터에
의해 제어– client 와 server 가 다른 character set 을 사용할 때 , Oracle server 가
자동적으로 변환
■ Overview
157
• different classes of character encoding schemes– single-byte character sets
• 7-bit• 8-bit
– Varying-width multibyte character set– Fixed-width multibyte character set– Unicode(UTF8, AL24UTFFSS)
• Character Sets and National Character Sets of a Database
• Guidelines– 가장 연관된 database character set 과 national character set 을 선택– String operations 은 fixed-width character set 을 선택하면 빨라짐– 공간 효율을 위해 variable-width character set 을 사용
■ Choosing a Database and a National Character Set
Database Character Sets National Character Sets
creation 시 정의 creation 시 정의
변경 안됨 변경 안됨CHAR, VARCHAR2, CLOB, LONG data type store
NCHAR, NVARCHAR2, NCLOB data type store
varying-width character setsfixed-width and varying-width multibyte character sets
158
• NLS parameter 를 지정하기 위한 방법– 서버 측 initialization parameter– client 에 대한 environment variables– ALTER SESSION command
• Specifying Language-Dependent Behavior for the Server– NLS_LANGUAGE
• messages 에 대한 language• Day and month names• A.D, B.C, A.M, P.M 에 대한 symbol• default sorting mechanism
– NLS_TERRITORY• default date format• decimal character and group separator• local currency symbol• ISO currency symbol• ISO week number calculation• week start day
■ Specifying Language-Dependent Behavior
159
• Specifying Language-Dependent Behavior for the Session– Environment variable
– 다른 환경 변수• NLS_DATE_FORMAT• NLS_DATE_LANGUAGE• NLS_SORT• NLS_NUMERIC_CHARACTERS• NLS_CURRENCY• NLS_ISO_CURRENCY• NLS_CALENDAR
■ Specifying Language-Dependent Behavior
NLS_LANG=<language>_<territory>.<character>NLS_LANG=<language>_<territory>.<character>
ALTER SESSION SETNLS_DATE_FORMAT=‘DD.MM.YYYY’;ALTER SESSION SETNLS_DATE_FORMAT=‘DD.MM.YYYY’;
DBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’, ’ ’ ’DD.MM.YYYY’ ’ ’);DBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’, ’ ’ ’DD.MM.YYYY’ ’ ’);
160
• Sorting– linguistic sort 제공– NLS_SORT 파리미터는 sort 의 유형을 지정– NLSSORT function 은 linguistic comparison 을 나타냄
• Using NLS Parameters in SQL Functions
■ NLS Parameters and SQL Functions
ALTER SESSION SET NLS_SORT=GERMAN;SELECT letter FROM letters ORDER BY letter;ALTER SESSION SET NLS_SORT=GERMAN;SELECT letter FROM letters ORDER BY letter;
SELECT TO_CHAR(hiredate, ‘DD.MON.YYYY’,‘NLS_DATE_LANGUAGE=GERMAN’) FROM emp;SELECT TO_CHAR(hiredate, ‘DD.MON.YYYY’,‘NLS_DATE_LANGUAGE=GERMAN’) FROM emp;
SELECT ename, TO_CHAR(sal, ‘9G999D99’,‘NLS_NUMERIC_CHARACTERS=‘ ‘,.’ ’’)FROM emp;
SELECT ename, TO_CHAR(sal, ‘9G999D99’,‘NLS_NUMERIC_CHARACTERS=‘ ‘,.’ ’’)FROM emp;
161
• Linguistic indexing
• High performance with local sorting
• NLS_COMP parameter for linguistic comparisons
■ Linguistic Index Support
CREATE INDEX nls_ename ON emp (NLSSORT(ename, ‘NLS_SORT = GERMAN’));CREATE INDEX nls_ename ON emp (NLSSORT(ename, ‘NLS_SORT = GERMAN’));
• Data 는 import 동안 NLS_LANG 에서 database character set 을 변환
• Loader
– Conventional: Data 는 NLS_LANG 에 지정된 session character set 으로 변환
– DIRECT: Data 는 직접 database character set 으로 변환
■ Importing and Loading Data Using NLS
162
• Obtaining Information About Character Sets– NLS_DATABASE_PARAMETERS
• PARAMETER(NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET)• VALUE
• Obtaining Information About NLS Settings– NLS_INSTANCE_PARAMETERS
• PARAEMETER• VALUE
– NLS_SESSION_PARAMETERS• PARAMETER• VALUE
■ Obtaining Information About NLS Settings
SELECT parameter, value FROM nls_database_parametersWHERE parameter LIKE ‘%CHARACTERSET%’;SELECT parameter, value FROM nls_database_parametersWHERE parameter LIKE ‘%CHARACTERSET%’;
SELECT * FROM nls_instance_parameters;SELECT * FROM nls_instance_parameters;
SELECT * FROM v$nls_valid_valuesWHERE parameter=‘LANGUAGE’;SELECT * FROM v$nls_valid_valuesWHERE parameter=‘LANGUAGE’;
SELECT * FROM v$nls_parameters;SELECT * FROM v$nls_parameters;