| 리눅스용 Oracle8 관리자 참고서 (Administrator's Reference for LINUX) Release 8.0.5 A66585-01 |
|
이 문서에서는 Oracle8 배포판과 함께 제공되는 기본적인 initsid.ora file에 관하여 설명하고자 한다. Oracle Installer는 이 파일을 $ORACLE_BASE/admin/db_name/pfile directory 디렉토리 내에 생성한다. 여러분들은 Oracle8 설치를 customize하기 위하여 이것을 수정할 수 있다.
일부 initsid.ora 인자 설정은 어떠한 크기의 설치에도 공통적인 것들이다. 이들 인자 설정은 크기가 다를 경우 다른 값들을 요구한다. 세가지 경우를 예측할 수 있다: 크기가 작은경우, 중간인 경우, 그리고 큰 경우. initsid.ora 샘플 파일에서, 설치 크기에 따른 인자값들의 설정을 보여주고 있다. 여러분들의 설정에 맞지 않는 줄에는 줄의 첫칸에 number sign (#)을 넣어 주어서 주석 처리하면 된다.
Table 2-1 suggests the approximate SGA sizes corresponding to the three scenarios provided for in the initsid.ora file.
| Installation/Database Size | ||||
| Block Size | Small | Medium | Large | |
|
2 KB |
4500 KB |
6800 KB |
17000 KB |
|
|
4 KB |
5500 KB |
8800 KB |
21000 KB |
|
이 파일은 오라클 회사에서 RDBMS 설치를 customizing화를 지원하기 위하여 제공된다. 다른 설치 모델의 크기가 다를 경우 다른 값을 가지는 것도 있고, 일부 인자들은 설정이 공통적이다. 세가지 경우가 제공된다: SMALL, MEDIUM 그리고 LARGE. 설치크기에 따라 조절해야 하는 인자들은 세가지 설정을 해 두었다. 설치의 크기에 따라 각각을 코멘트 처리하도록 하라.
# DEFAULT를 여러분들의 데이터베이스 이름으로 대치하라. db_name=DEFAULT db_files = 80 # SMALL # db_files = 400 # MEDIUM # db_files = 1000 # LARGE db_file_multiblock_read_count = 8 # SMALL # db_file_multiblock_read_count = 16 # MEDIUM # db_file_multiblock_read_count = 32 # LARGE db_block_buffers = 100 # SMALL # db_block_buffers = 550 # MEDIUM # db_block_buffers = 3200 # LARGE shared_pool_size = 3500000 # SMALL # shared_pool_size = 5000000 # MEDIUM # shared_pool_size = 9000000 # LARGE log_checkpoint_interval = 10000 processes = 50 # SMALL # processes = 100 # MEDIUM # processes = 200 # LARGE parallel_max_servers = 5 # SMALL # parallel_max_servers = 4 x (number of CPUs) # MEDIUM # parallel_max_servers = 4 x (number of CPUs) # LARGE log_buffer = 8192 # SMALL # log_buffer = 32768 # MEDIUM # log_buffer = 163840 # LARGE sequence_cache_entries = 10 # SMALL # sequence_cache_entries = 30 # MEDIUM # sequence_cache_entries = 100 # LARGE sequence_cache_hash_buckets = 10 # SMALL # sequence_cache_hash_buckets = 23 # MEDIUM # sequence_cache_hash_buckets = 89 # LARGE # audit_trail = true # if you want auditing # timed_statistics = true # if you want timed statistics max_dump_file_size = 10240 # limit trace file size to 5 Meg each # 다음 행의 주석처리를 해제하면, 만약 ALTER DATABASE ARCHIVELOG를 # 이용하여 archive 기능을 설정해 두었을 경우 automatic archiving이 가능하도록 해준다. # log_archive_start = true # log_archive_dest = disk$rdbms:[oracle.archive] # log_archive_format = "T%TS%S.ARC" # 만약 개별적인 rollback segment를 가능하게 하려면, 다음 행을 # 각각의 인스턴스에 있는 init.ora 파일에 추가하라: # rollback_segments = (name1, name2) # 만약 public rollback segments를 이용하면, 각각의 인스턴스에 # 얼마나 많은 rollback segments를 정의해 줄 것인지 다음 공식을 이용하여 계산한다. # # of rollback segments = transactions / transactions_per_rollback_segment # 이번 예제에서 각각의 인스턴스는 40/10 = 4를 가진다: # transactions = 40 # transactions_per_rollback_segment = 10 # Global Naming -- db가 접속하는 dblink가 같은 이름을 가지도록 해 준다. global_names = TRUE # 다음 행의 주석 처리를 해제하면, 데이터베이스가 생성될 때 global database 이름으로 저장되게 한다. # db_name 파라메터의 suffix (dot로 분리된)를 제공한다. # 만약 여러분들의 사이트가 e-mail을 위한 인터넷 도메인 이름을 이용한다면, # 여러분들의 e-mail 주소에서 '@' 뒷부분이 이들 인자의 값을 위해 좋은 후보가 될 수 있다. # db_domain = us.acme.com # global database name is db_name.db_domain #_db_block_cache_protect = true # memory protect buffers #event = "10210 trace name context forever, level 2" # data block checking #event = "10211 trace name context forever, level 2" # index block checking #event = "10235 trace name context forever, level 1" # memory heap checking #event = "10049 trace name context forever, level 2" # memory protect cursors # 병렬 서버 인자 (multi-instance) 설정 #ifile = ora_system:initps.ora # 기본적으로 두개의 control file을 정의한다. control_files = (ora_control1, ora_control2) # 만약 여러분들이 서버 동작을 추적하기 위하여 Oracle Trace 제품을 # 가동시키려면 다음행의 주석처리를 해제하라. # 이것은 Oracle Enterprise Manager console에서 서버 스케쥴링을 볼수 있겠끔 한다. # 마찬가지로, 만약 oracle_trace_collection_name 인자가 null이 아니라면, # 모든 session은 명명되어진 collection으로 기록된다. # oracle_trace_enable = TRUE
환경변수 값을 화면에 출력하기 위해서는, echo 명령어를 이용하라. 예를 들면, ORACLE_SID의 값을 출력하려면, 다음과 같이 입력하라:
$ echo $ORACLE_SID
Bourne 또는 Korn shell에서는 다음과 같이 입력하라:
$ ORACLE_SID=test $ export ORACLE_SID
C shell에서는 다음과 같이 입력하라:
% setenv ORACLE_SID test
여기서 test 는 변수 ORACLE_SID의 값이다.
Oracle8은 DBA가 모든 사용자에 대한 공통환경 설정을 허용한다. 공통환경 설정은 시스템 관리자나 데이터베이스 관리자로 하여금 실제적인 오라클 서버 시스템의 수정을 용이하게 해 준다.
oraenv (C shell에서는 coraenv) 명령어 파일은 설치동안에 생성된다. 이것은 오라클 환경변수를 포함하고 제공한다:
예를 들면, 데이터베이스를 /usr/oracle 에서 /usr1/oracle로 이동한다고 하자. 공통 환경설정 루틴이 없는 경우, 사용자 시작 파일을 개별적으로 갱신시켜야 한다. oraenv를 이용하는 경우, 각각의 사용자 profile내에서 oraenv 명령어 파일을 호출하도록 하고 관리자는 그 파일만을 변경함으로써 모든 수정은 완료될 수 있다.
오라클 소프트웨어 홈디렉토리와 분리하여 oraenv (또는 coraenv) 와 dbhome을 local bin directory에 두어라. 그리고 이들 파일들이 모든 사용자로 부터 접근 가능한지 확인하라. 그리고 oraenv (coraenv)가 여러분들이 ORACLE_HOME를 다른 디렉토리로 변경한 경우에도 계속 동작하는지 확인해야 한다.
하나의 데이터베이스나 인스턴스로 부터 다른 것으로 바꾸려고 한다면, oraenv routine을 호출하고 원하는 데이터베이스의 sid를 묻는 질문에 답하도록 하라. 항상 oraenv 명령어 파일의 완전한 경로명을 주어야 한다. 예를 들면:
$ . /usr/local/bin/oraenv ORACLE_SID= [default]? sid
다음 예제에서, 여러분들의 local bin directory는 /usr/local/bin로 가정하고, 여러분들의 제품 데이터베이스는 PROD라고 가정한다. 만약 여러분들이 시작시에 ORACLE_SID를 묻는 것을 좋아하지 않는다면, ORAENV_ASK 환경변수를 no로 설정해 두라.
아래 예제에서 oraenv를 실행한 후에 ORAENV_ASK는 기본값인 Yes로 설정해 둔것이다. 이것은 다음번 oraenv가 실행된 후에 다른 ORACLE_SID를 묻도록 하기 위한 것이다.
Bourne 또는 Korn shell에서는, .profile file에서 다음 줄을 추가하던지 대치시키도록 하라:
. local_bin_directory/oraenv
다음 행들로:
PATH=${PATH}:/usr/local/bin ORACLE_SID=PROD export PATH ORACLE_SID ORAENV_ASK=NO . oraenv ORAENV_ASK=
C shell에서는, .cshrc file에 다음 행들을 추가하던지 대치하도록 하라:
source local_bin_directory/coraenv
다음행들로:
setenv PATH ${PATH}:/usr/local/bin setenv ORACLE_SID PROD set ORAENV_ASK = NO source /usr/local/bin/coraenv unset ORAENV_ASK
다중 인스턴스 환경인 경우, 시작시에 sid를 정의하라.
Bourne 또는 Korn shell에서는:
PATH=${PATH}:/usr/local/bin ORACLE_SID=PROD export PATH ORACLE_SID SIDLIST= `awk -F: '/^[^#]/ {printf "%s ", $1}' /etc/oratab\Q echo "SIDS on this machine are $SIDLIST" ORAENV_ASK= oraenv
C shell에서는:
setenv PATH ${PATH}:/usr/local/bin setenv ORACLE_SID PROD set sidlist = `awk -F: '/^[^#]/ {printf "%s ", $1}' /etc/oratab\Q echo "SIDS on this machine are $sidlist" unset ORAENV_ASK source /usr/local/bin/coraenv
리눅스 환경에서 어떤 변수들은 오라클 시스템을 설치하기 전에 설정되어 있어야만 한다.
Table 2-2는 Oracle8 변수의 문법과 예제를 보여주고 있다.
Oracle8 Server files 과 programs에서, 물음표(?)는 ORACLE_HOME의 값을 나타낸다. 예를 들면, 다음 SQL 문장에서 Oracle8은 물음표를 ORACLE_HOME의 완전한 경로명으로 확장 시켜 준다:
alter tablespace TEMP add datafile '?/dbs/dbs2.ora' size 2M
@ 기호는 $ORACLE_SID를 표현한다. 예를 들면, 인스턴스에 포함되는 파일을 가르키려면, 다음과 같이 입력하라:
alter tablespace tablespace_name add datafile 'dbsfile@.ora'
Table 2-3은 Oracle8에서 사용되는 리눅스 환경변수를 위한 예제와 문법을 제공한다.
TZ 변수는 여러분들의 time zone을 설정한다. 여러분들의 운영체계가 이 환경변수를 사용하려면 리눅스 문서를 참고하도록 하라.
이것은 사용자로 하여금 daylight saving time 변화 또는 다른 시간대에 따른 시계를 맞출수 있도록 해준다. 맞춰진 시간은 date명령어에 의해 출력되는 time-stamp 파일에서 이용된다. 그리고 현재의 SYSDATE를 이용하여 얻을 수 있다.
Oracle8 Server를 시작하기 전에, 가상메모리 요구량은 다음 공식을 이용하여 예측할 수 있다:
<size of the oracle executable text>각각의 Oracle back-end 접속에 대하여, 가상메모리 요구량을 얻기 위하여 다음 공식을 이용하라:
<size of oracle executable data section>
실행가능한 text size, 개인적인 data section size 그리고 초기화되지 않은 data section siz (또는 bss)를 측정하기 위하여 size 명령어를 이용하라. Program text는 몇번 실행되던지간에, 오직 한번만 셀수 있다. 왜냐하면 모든 오라클 실행 텍스트는 항상 공유되기 때문이다.
데이터베이스가 기동되고 사용자가 접속할 때 이용되는 오라클의 물리적 메모리를 계산하기 위하여, ps 명령어를 이용한다. 모든 frontend, server 그리고 background oracle process를 조사하도록 하라. 각각에 대하여 상주메모리를 위해 "real size of process" columns을 추가한다. 그러고 나서 오라클 실행가능한 text size와 시스템에서 실행중인 오라클 툴 실행 프로그램을 그 컬럼의 subtotal에 더하여 준다. 몇번 실행이 되었던지간에 실행 프로그램의 크기는 오직 한번만 계산한다는 것을 명심해야 한다.
Oracle8 Administrator's Guide의 부록 A (Appendix A)에 있는 공식을 이용하여 클러스트 사이즈를 구하려면 Table 2-4에 있는 가이드라인을 이용하라.
| Type | Size |
|---|---|
|
Fixed header size |
68 bytes |
|
Variable transaction header |
24*INITRANS value for the table |
|
Row directory |
4 bytes per row of a clustered table |
Oracle8 Administrator's Guide의 부록 A에 있는 공식을 이용하여 index에 요구되는 크기를 구하려면 Table 2-5를 이용하라.
| Type | Size |
|
Fixed header size |
113 bytes |
|
Variable transaction header |
24*INITRANS value for the index |
|
Entry header |
5 bytes |
LINUX는 자원의 한계를 그 부모 프로세스로 부터 상속받는다 (운영체계 문서의 getrlimit(2)를 참조하라). 이 한계는 사용자 프로세스를 위해 실행되는 Oracle8 Server shadow process에도 적용된다. 그러나 만약 이들 한계가 너무 낮게 설정되어 있을 경우 Oracle8 Server 시스템이 영향을 받을 수 있다. 이것은 여러분들의 LINUX 시스템 관리자와 상의하도록 하라.
Oracle dba 사용자 계정에 할당된 Disk quota가 Oracle8 시스템의 운용에 방해를 해서는 안된다. Oracle8 데이터베이스 관리자와 리눅스 시스템 관리자가 서로 디스크 쿼터를 설정하기 전에 만나서 의논하도록 하라.
초기화 인자는 Oracle8 Server instance의 initsid.ora file에서 수정할 수 있다.
Table 2-6에는 리눅스에서 초기화 인자의 기본값이 나열되어 있다. 만약 여러분들이 initsid.ora file을 수정하지 않는다면 모든 Oracle8 Server instance는 이들 값을 기본값으로 여기게 된다. 오라클 회사는 여러분들의 initsid.ora file에는 기본적인 초기화 값들과 다른 인자들만 포함할 것을 권장한다.
시스템상에서 이들 인자의 기본값을 보려면, Server Manager를 이용해서 SHOW PARAMETERS라는 SQL 문장을 이용하라.
| Parameter | Default Value |
|---|---|
|
BACKGROUND_DUMP_DEST |
|
|
BITMAP_MERGE_AREA_SIZE |
1048576 |
|
COMMIT_POINT_STRENGTH |
1 |
|
CONTROL_FILES |
|
|
CREATE_BITMAP_AREA_SIZE |
8388608 |
|
DB_BLOCK_BUFFERS |
200 |
|
DB_BLOCK_SIZE |
2048 |
|
DB_FILES |
80 (maximum of 2000000) |
|
DB_FILE_DIRECT_IO_COUNT |
64 (maximum of 1048576) |
|
DB_FILE_MULTIBLOCK_READ_COUNT |
8 (range of 1-128, but should not exceed one quarter of DB_BLOCK_BUFFERS) |
|
DISTRIBUTED_TRANSACTIONS |
16 |
|
HASH_AREA_SIZE |
0 |
|
HASH_MULTIBLOCK_IO_COUNT |
1 |
|
LOCK_SGA |
FALSE |
|
LOCK_SGA_AREAS |
0 |
|
LOG_ARCHIVE_BUFFER_SIZE |
64 |
|
LOG_ARCHIVE_BUFFERS |
4 (maximum of 128) |
|
LOG_ARCHIVE_DEST |
|
|
LOG_ARCHIVE_FORMAT |
"%t_%s.dbf" |
|
LOG_BUFFER |
8192 |
|
LOG_CHECKPOINT_INTERVAL |
10000 |
|
LOG_SMALL_ENTRY_MAX_SIZE |
80 |
|
MTS_MAX_DISPATCHERS |
5 |
|
MTS_MAX_SERVERS |
20 |
|
MTS_SERVERS |
0 |
|
MTS_LISTENER_ADDRESS |
ADDRESS=address (See Chapter 6) |
|
NLS_LANGUAGE |
AMERICAN |
|
NLS_TERRITORY |
AMERICA |
|
OBJECT_CACHE_MAX_SIZE_PERCENT |
10 |
|
OBJECT_CACHE_OPTIMAL_SIZE |
102400 |
|
OPEN_CURSORS |
50 |
|
OS_AUTHENT_PREFIX |
ops$ |
|
PROCESSES |
50 |
|
SHARED_POOL_SIZE |
3500000 |
|
SORT_AREA_SIZE |
65536 |
|
SORT_READ_FAC |
5 |
|
SORT_SPACEMAP_SIZE |
512 |
|
USER_DUMP_DEST |
|
System Global Area (SGA)는 공유메모리 내에 존재하는 오라클의 구조이다. 이곳에는 자료구조, lock 그리고 data buffer가 존재한다. 전체 SGA를 주소로 지정하기 위해서는 각각의 oracle process에 대하여 충분한 공유메모리를 이용가능하도록 지정해야만 한다.
단일 공유메모리 영역의 최대 크기는 리눅스의 인자 SHMMAX에 의해서 결정된다. SGA가 2048KB인 경우 각각 512KB인 공유메모리 영역을 4개 이용하게 된다.
만약 SGA의 크기가 주어진 공유메모리 세그먼트의 크기(SHMMAX)를 넘어갈 경우, Oracle8은 요구된 SGA 크기를 맞추어 주기 위하여 좀더 연속적인 세그컨트를 할당하려고 노력하게 된다. SHMSEG는 프로세스에 의해 붙을 수 있는 세그먼트 수의 최대치를 말한다. 세그먼트를 연속적인 주소공간으로 추가하기 위하여, SHMMAX는 시스템에서의 한계값까지 최대값으로 설정되어야 한다.
다음 init.ora 인자는 SGA의 크기를 조절한다:
이들 인자들을 설정할 때는 주의를 기울여야 한다. 값이 너무 높게 잡히면 호스트의 물리적 메모리가 공유메모리로 너무 많이 할당되어 수행능력이 떨어지게 된다. 가이드라인으로서 모든 인스턴스의 SGA 크기는 총 물리적 메모리 (RAM)의 1/3을 넘지 않도록 한다.
인스턴스의 SGA의 대략적인 크기는 다음 공식을 이용하여 계산할 수 있다:
(DB_BLOCK_BUFFERS \xb0 DB_BLOCK_SIZE)
+ SORT_AREA_SIZE
+ SHARED_POOL_SIZE
+ 1MB
실행중인 데이터베이스의 SGA의 크기를 출력하려면, Server manager의 show sga 명령어를 이용하라. 이 명령어는 SGA의 크기를 bytes 단위로 보여 준다.
SGA가 있는 주소는, SGA에 있는 데이터베이스 버퍼나 사용자 응용 프로그램의 data 영역에서 cursor와 같은, 이용가능한 가상메모리 주소공간에 영향을 미친다.
tstshm에서 "Lowest shared memory address"와 "Highest shared memory address" 행에서 유효한 범위를 출력한다.
$ tstshm
tstshm의 출력 중 "Segment boundaries"를 점검하라.
$ORACLE_HOME/rdbms/lib directory로 이동하고 나서, ksms.s 파일을 생성하기 위하여 genksms을 실행하라:
$ cd $ORACLE_HOME/rdbms/lib
$ $ORACLE_HOME/bin/genksms -b sgabeg > ksms.s
여기서 sgabeg는 SGA의 시작주소 (기본값은 0x80000000) 이다. 그리고 step 2에서 결정된 범위내에 들어 있어야 한다.
$ORACLE_HOME/rdbms/lib directory에 있는 oracle 실행 파일을 다시 만들어 주어라:
$ make -f ins_rdbms.mk ksms.o
$ make -f ins_rdbms.mk ioracle
Using ioracle:
oracle0)
oracle실행 파일에 적절한 권한을 주어라.
$ORACLE_HOME/bin directory로 옮겨라.
결과적으로 새로운 오라클 커널이 SGA의 sgabeg에 명시된 주소로 적재된다.
genksms -b utility는 고정된 SGA의 시작점을 조절하는데 사용된다.
DBA는 오라클 서버에 의해 요구되는 특수한 계정과 친밀해 져 있어야 한다. 그리고 이들 계정이 적절한 group에 포함되어 있는지 확인해야 한다. 다음 장에서는 이들 특수한 사용자 계정에 관해 설명하고자 한다. 리눅스 계정은 Table 2-7에 설명되어 있으며, 오라클 서버 계정은 Table 2-8에 설명되어 있다.
.
Oracle8 uses several features of the LINUX operating system to provide a secure environment for users. These features include file ownership, group accounts, and the ability of a program to change its user ID upon execution.
Oracle8의 two-task 구조는 작업(그리고 주소공간)을 사용자 프로그램과 oracle program으로 나눔으로써 Oracle8의 보안을 향상시킬 수 있다. 모든 데이터베이스접근은 shadow proces와 oracle program상에서 특별한 인증을 통해 이루어 진다.
Oracle8 데이터베이스에서 강력한 보안을 필요로 한다면, 운영체계 수준에서 사용자 그룹을 생성하라. Group은 리눅스의 /etc/group 파일에 의해 조절된다. 오라클 프로그램은 보안 목적상 두가지 종류로 나누어 져 있다: 모두(리눅스 용어로 other)에 의해 실행 될 수 있는 것들, 그리고 DBA에 의해서만 실행 될 수 있는 것들. 보안에 대한 권장 접근법은 다음과 같다:
dba)를 생성하고 root와 oracle software 소유자 ID를 이들 그룹에 할당하라. dba 에 의해서만 실행가능 한 프로그램들은 710 퍼미션을 가진다. Server Manager 시스템 권한의 명령어는 설치동안 자동적으로 dba group에게 할당된다.
oracle group에 추가하라. 오라클 utility들을 oracle group ID에게 주어라. 공개적으로 실행가능한 프로그램들은, SQL*Plus와 같은, 이 그룹에 의해 실행가능하다. 이들 유틸리티에 대한 permission을 710 으로 설정하여 이들 그룹은 실행할 수 있으나 다른 이들은 실행 할 수 없도록 만들어 준다.
711 permission을 주면 other 사용자에 의해서도 실행가능해 진다. 이들 권한은 데이터베이스의 보안에 영향을 미치지 않는 프로그램에게만 제한하도록 한다.
비록 여러분들이 데이터베이스 관리자 그룹 이름으로 어떠한 것을 할당할 수도 있지만 기본 그룹 이름은 dba이다. 그리고 이 문서에서 기본적으로 사용하게 될 것이다. 만약 여러분들이 group 이름을 바꾼다면 오라클 Installer는 설치하는 동안 커널을 자동적으로 재연결 시키게 될것이다. 만약 여러분들이 같은 ORACLE_HOME을 가지는 여러개의 데이터베이스를 가지고 있다면 (오라클 회사에서는 이러한 설정은 강력하게 하지 않도록 권장하지만), 같은 데이터베이스 관리자 그룹을 가져야만 한다. 이러한 제한점은 일반적인 사용자를 위한 그룹이름(oracle group으로 알려져 있는)에는 적용되지 않는다.
|
WARNING:
비록 oracle software 소유자와 |
Oracle8 실행파일들을 인증되지 않은 곳에서 사용하는 것을 막는다. 여러분들이 사용할 방법은 여러분들이 single-task utility를 사용하는 가 하는 환경에 달려 있다. 다음은 Oracle8 실행 파일들을 보호하는 방법들을 제안한 것이다:
$ORACLE_HOME/bin directory에 보관하고 소유자를 oracle software 소유자로 설정해 주라.
sqlplus, exp, imp) 호스트상의 모든 사용자들이 Oracle Server로 접근할수 있도록 711로 permission을 준다.
700으로 제한한다.
만약 여러분들이 SQL*Plus를 가지고 있지 않다면, 여러분들은 SQL query를 하기 위하여 Server Manager를 이용할 수 있다. 다음 시스템 권한의 문장들은 oracle software 소유자 그리고 dba group의 사용자를 제외하고는 어느 누구도 접근할 수 있어서는 안된다. 그들에게는 특별한 운영시스템의 권한이 주어져 있다.
Oracle8을 설치하는데 사용되는 사용자 ID는 데이터베이스 파일들을 소유한다. 기본적인 사용자 ID는 oracle software 소유자이다. 이들 파일들의 인증을 permission 0600으로 설정하라: 소유자에게만 read/write (rw) 권한을 주고, group이나 다른 사용자들에게는 쓰기 권한을 주지 않아야 한다.
oracle software 소유자는 데이터베이스 파일을 포함하고 있는 디렉토리를 소유해야 한다. 보안을 보완하기 위하여 group 과 다른 사용자들에게 읽기 허용을 폐지시켜야 한다.
보호된 데이터베이스 파일로 접근하기 위하여, oracle program은 반드시 set user ID (setuid) bit를 설정해 두어야 한다. 이 bit를 설정하기 위하여 다음과 같이 입력한다:
$ chmod 6751 $ORACLE_HOME/bin/oracle
이것은 oracle program에 대하여 인증을 설정하는 것이다:
-rwsr-s--x 1 oracle dba 443578 Mar 10 23:03 oracle
Oracle Installer는 자동적으로 user ID를 설정한다. 실행 field에 있는 s는 여러분들이 oracle program을 실행 할때, 그것을 기동시킨 실제 사용자가 누구인든지 간에 유효사용자 ID가 oracle이 된다는 것을 의미한다.
네트워크 상에서 원격 사용자들은 그들의 password를 명확히 또는 암호화된 문으로 입력해야 한다. 여러분들이 암호화되지 않은 텍스트로 입력할 때 패스워드가 인증되지 않은 사용자에 의해 가로채어 질 수 있다. 이 때문에 보안 문제가 발생할 수 있다. Oracle Net8은 암호화된 password를 지원한다.
DBA 권한을 네트워크상에서 조절하기 위하여 다음중 한가지를 선택하라:
Oracle8은 네트워크를 통한 자동 로그인을 지원한다. (운영체계 인증 로그인)
LINUX는 dollar 기호($)를 환경변수의 시작으로 여긴다. 그러므로 여러분들이 스크립트에서나 명령어에서 운영체계 인증 (ops$) login 을 시도하면, 먼저 $ 기호를 backslash (\)로 escape 시켜야 한다. 예를 들면 사용자 ID scott는 원격지 로그인때 ops\$scott 로 명시해 주어야 한다.
root user ID로는 자동 로그인이 허용되지 않는다.
|
Note:
PC, Apple MacIntosh, 그리고 OS/2 사용자의 자동 로그인은 안전하지 못하다. 누구나 그들 사용자 ID의 오라클 설정 파일을 편집하고 고칠 수 있다. 보안 목적으로 만약 사용자가 이들 시스템이 네트워크상에서 접속하려고 한다면, 오라클 회사는 |
자동적이고 그리고 원격지 DBA 로그인은 Oracle Net8에 의해서 조절되지 않는다. 그들은 Oracle8 서버에 의해서 initsid.ora file에 있는 인자들을 이용하여 설정할 수 있다. 비록 자동 logins이 지원되지만, 기본적으로는 비활성화 되어 있다. 이들을 활성화 시키기 위해서는 REMOTE_OS_AUTHENT 초기화 인자의 값을 true로 설정해 두고, 데이터베이스를 시작하라.
oracle이 이들 로그인을 조절하기 때문에, Oracle Net8 listener를 root에 대하여 setuid를 설정하고서 실행할 필요가 없다.
Oracle Net8을 이용한 자동 로그인을 실행하려면 /etc/passwd file에 daemon이라고 불리는 사용자를 만들어야 한다. daemon 사용자는 어떤 로컬 데이터베이스에도 ops$ 계정을 가져서는 안된다. 또한 DBA 그룹을 가져서도 안된다. 즉, 외부 사용자가 여러분들의 로컬 데이터베이스로 침입할 수 있는 ops$daemon 계정이 아니어야 한다.
Table 2-10은 원격지 로그인을 조절하고 가능하게 하기 위한 /var/opt/oracle/listener.ora file에 사용되는 keyword에 대해 기술 하고 있다.
만약 데이터베이스로 접근하기 위한 DBA group ID가 기본값 (dba)이 아니라면, 그 이름을 명시해야 한다.
원격지 로그인과 원격지 DBA 접속을 위한 인자 값을 네트워크상의 데이터베이스의 ORACLE_SIDs 에 대하여 개별적으로 설정을 하던지, 또는 모든 sid에 대하여 한꺼번에 할 수도 있다. 예를 들면, 다음 문장들 중 하나를 이용하면 된다:
PARAMETER=ALL_SIDS PARAMETER=sid1[, sidn...]
sid에 대하여 어떤 권한이 할당되어 있는지 확인하려면, 다음과 같이 입력하라:
$ lsnrctl status
시스템은 원격지 로그인 인자들을 다음 순서대로 점검한다:
이들 권한은 오라클 Net8 listener에 의해 분기되는 shadow process의 사용자 ID와 group ID를 조절하여 구현하고 있다. 예를 들면:
true로 설정되어 있다면, 또는 만약 client-side의 운영체계에서 보고되어져 온 사용자 ID가 데이터베이스 호스트 머신에는 없는 계정이라면, 사용자 ID와 group ID가 daemon entry아래의 /etc/passwd file에서 발견되어야 한다.
true로 설정되어 있다면, 그리고 client operating system에서 보고되어져 온 user ID가 이 시스템 계정상에 존재한다면, 이 사용자 ID를 위한 사용자 ID와 group ID가 /etc/passwd 에서 발견되어야 한다.
true로 설정되어 있으나, REMOTE_DBA_OPS_ALLOWED가 false로 설정되어 있다면, 그리고 만약 user ID가 DBA 권한을 가진다면, process는 daemon의 사용자 ID와 group ID를 가진다. 만약 그렇지 않으면, process는 이 사용자의 사용자 ID와 group ID를 가지게 된다.
여러분들은 personal computer와 같은 원격지 머신으로 부터, 운영체계의 계정없이도 데이터베이스로 접근하고 관리할 수 있다. 사용자 인증은 오라클의 orapwd utility에 의해 생성되고 관리되는 Oracle8 password file을 이용하여 한다. 사용자 계정을 지원하는 운영체계상에서는 시스템의 password 파일을 이용한 인증을 할 수 있다.
로컬 password file은 $ORACLE_HOME/dbs directory에 있으며, 단인 데이터베이스를 위한 username과 password 정보를 포함하고 있다. 만약 컴퓨터상에 여러개의 $ORACLE_HOME directories가 있다면, 각각 분리된 password 파일을 가질 것이다.
orapwd utility는 $ORACLE_HOME/bin 에 있으며, oracle software 소유자에 의해 실행 가능하다. 다음과 같이 입력하여 orapwd를 실행하라:
$ orapwd file=$ORACLE_HOME/dbs/orapwsid password=password entries=max_users
이 문법은 Table 2-11에 기술되어 있다:
|
Note: 사용자의 최대수를 증가 시킨다든지 할때에는 새로운 password 파일을 생성해 주어야만 한다. 그러므로 max_users 는 여러분들이 예상하는 최대 수 보다 좀더 높게 잡아 주는 것이 좋다. |
$ orapwd file=/u01/app/oracle/product/8.0.5/dbs/orapwV805 \
password=manager entries=30
기본적인 password file인 /dbs/orapwd는 초기화 인자인 REMOTE_LOGIN_ PASSWORDFILE이 여러개의 데이터베이스를 위해서 SHARED로 설정되어 있을 때 사용된다. 다중 데이터베이스에서 sid에 특이적인 password 파일은 없다.
Oracle8 password file이 있을 때, 네트워크의 PC users는 이 데이터베이스에 대하여 INTERNAL로 접근할 수 있다. 권한을 가지지 않은 사용자는 데이터베이스를 사용하는 오라클 응용 프로그램을 실행함으로서 접속할 수 있다. 데이터베이스에 대해 DBA 기능을 원하는 권한을 가진 사용자는, dba user password를 추가하여 그들의 PC로 부터 적절한 Server Manager 명령어를 실행할 수 있다. 예를 들면:
SVRMGR> connect internal/dba_password
OPERATOR로서 접속할려면, OPERATOR password와 함께 같은 명령어를 사용한다.
Table 2-12에서 보여주는 다음 initsid.ora parameter 들은 보안성이 없는 프로토콜을 이용하여 원격지로 부터 접속할 경우의 행동들을 조절한다.
|
REMOTE_OS_AUTHENT |
|
|---|---|
|
OS_AUTHENT_PREFIX |
|
|
REMOTE_OS_ROLES |
원격지 접속을 통해 role을 가능 또는 불가능하게 만든다. |
|
Note:
만약 REMOTE_OS_AUTHENT가 |
서버가 shutdown 중인 인스턴스로 접속한 클라이언트는 뒤이어 SQL을 사용할 경우 다음중 하나의 에러메시지를 받게 된다.
ORA-03113: end-of-file on communication channel ORA-12571: TNS:packet writer failure
그들을 참조하는 프로그램을 수정하지 않고, 로그인 홈디렉토리를 이동하던지 추가 하고자 할 경우 다음과 같이 해야 한다:
/etc/passwd and /etc/oratab
/etc/group file에 있는 group memberships을 참조하라.
중앙 참조파일을 제외하고 경로명을 기록할 필요가 없다. 왜냐하면 사용자의 홈디렉토리는 다음과 방법 중 하나로서 유추할 수 있기 때문이다:
lhd script를 참조하라.
유사하게, group memberships은 /etc/group로 부터 계산할 수 있다. 다음 장에 있는 sample grpx script를 참조하라.
#!/bin/sh # # lhd - print login home directory name for a given user # # SYNTAX # lhd [login] # prog=`basename $0` if [ $# -eq 0 ] ; then login=`whoami` elif [ $# -eq 1 ] ; then login=$1 else echo "Usage: $prog login" >&2 exit 2 fi awk -F: '$1==login {print $6}' login=$login /etc/passwd
#!/bin/sh # grpx - print the list of users belonging to a given group # prog=`basename $0` if [ $# -ne 1 ] ; then echo "Usage: $prog group" >&2 exit 2 fi g=$1 # calculate group id of g gid=`awk -F: '$1==g {print $3}' g=$g /etc/group` # list users whose default group id is gid u1=`awk -F: '$4==gid {print $1}' gid=$gid /etc/passwd` # list users who are recorded members of g u2=`awk -F: '$1==g {gsub(/,/," "); print $4}' g=$g /etc/group` # remove duplicates from the union of the two lists echo $u1 $u2 | tr " " "\012" | sort | uniq | tr "\012" " " echoExample 2-1 Using lhd and grpx Scripts
이 예제는 관리자가 어떻게 .profile 이라는 골격 파일을 그룹의 멤버들에게 전파시키는 지 하는 방법을 보여준다. 먀ㄴ약 clerk group의 membership list가 바뀌더라도 코드 자체를 바꿀 필요는 없다.
$ for u in `grpx clerk` ; do > cp /etc/skel/.profile `lhd $u` > done
PL/SQL은 여러분들이 올려 볼수 있는 많은 수의 예제를 포함하고 있다. 데모와 메시지 파일들이 rdbms directory에 저장되어 있다. Oracle8 Server를 open 시키고 마운트 하는 작업을 실행하라:
scott/tiger로 접속하라:
$ cd $ORACLE_HOME/plsql/demo $ svrmgrl SVRMGR > connect scott/tiger
exampbld.sql을 실행하라:
SVRMGR > @exampbld
Table 2-13에는 커널 데모를 나열하고 있다.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Table 2-14에는 precompiler 데모를 나열하고 있다.
|
examp9.pc |
examp10.pc |
sample5.pc |
sample6.pc |
커널 PL/SQL demonstrations을 실행하기 위해서는, 데모를 생성한 것과 같은 계정을 이용하여, 커널로 접속하기 위하여 SQL*Plus를 실행해야 한다. "at" sign (@)을 쳐서 데모를 시작하던지 또는 데모 이름 앞에 start라는 단어를 쳐넣어서 시작해야 한다. 예를 들면, examp1 demonstration을 시작하기 위하여 다음과 같이 입력한다:
$ sqlplus scott/tiger SQLPLUS > @examp1
Precompiler PL/SQL demonstrations을 시작하기 위하여 다음과 같이 입력하라:
$ cd $ORACLE_HOME/plsql/demo $ make -f demo_plsql.mk demos
만약 여러분들이 하나의 데모를 만들길 원한다면, make command에서 그 인자로서 만들고자 하는 데모 이름을 인자로 입력해 주어라. 예를 들면 examp9.pc 실행 파일을 만들길 원한다면, 다음과 같이 입력하라:
$ make -f demo_plsql.mk examp9
현재 shell에서 examp9 demonstration을 실행하려 한다면, 다음과 같이 입력하라:
$ examp9
extproc demo를 실행하려 한다면, 여러분들은 먼저 다음 라인을 파일 tnsnames.ora에 추가해 주어야 한다:
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=plsff))(CONNECT_DATA=(SID=extproc)))
그러고 나서 listener.ora 파일에 다음 행을 추가한다:
SC=(SID_NAME=extproc)(ORACLE_HOME=/vobs/oracle)(PROGRAM=extproc))
그러고 나서 현재 shell에서 다음과 같이 입력하라:
SVRMGR> connect scott/tiger Connected. SVRMGR> connect system/manager Connected. SVRMGR> grant create library to scott; Statement processed. SVRMGR> connect scott/tiger Connected. SVRMGR> create library demolib as '$ORACLE_HOME/plsql/demo/extproc.so'; Statement processed.
그러고 나서 마지막으로, 실행이 되는지를 테스트하라:
SVRMGR> connect scott/tiger Connected. SVRMGR> @extproc
SQL*Loader demonstrations은 다음을 요구한다:
데모를 만들고 실행하기 위해서 다음과 같이 한다:
scott/tiger를 이용하여 접속한다.
ulcasen.sql 을 실행하라.
scott/tiger 사용자로서, 명령행에서 데모를 실행시킨다:
$ sqlldr scott/tiger ulcasen
scott/tiger 사용자로서, 다음 순서로 SQL*Loader demonstrations을 실행 시킨다:
ulcase1: Follow steps 1 - 3 above.
ulcase3: Follow steps 1 - 3 above.
ulcase4: Follow steps 1 - 3 above.
ulcase5: scott/tiger로서 ulcase*.sql를 실행시킨다. 그러고 나서 명령행에서 다음과 같이 입력한다:
$ sqlldr scott/tiger ulcase*
ulcase2: 데모를 실행한다 (여러분들은 ulcase2.sql script를 실행할수 없다).
ulcase6: scott/tiger로서 ulcase6.sql 를 실행한다. 그러고 나서 명령행에서 다음과 같이 입력한다:
$ sqlldr scott/tiger ulcase1 DIRECT=true
ulcase7: scott/tiger로서 ulcase6.sql script를 실행한다. 그러고 나서 명령행에서 다음과 같이 입력한다:
$ sqlldr scott/tiger ulcase7
Oracle8 Server는 SQL*Loader 기능을 포함하고 있다. 데모와 메시지 파일들은 rdbms directory 내에 있다.
SQL*Loader release 1.1 조절 파일은 옵션 문자열을 처리하는 다음 추가 파일들을 포함한다. 기본적으로 인자 없이 str를 사용한다.
[ "str" | "fix n" | "var n" ]
str(기본 값) 기록의 stream을 명시한다. 각각은 newline 문자로 끝나며, 한번에 한 레코드씩 읽힌다.
fix파일이 고정길이 레코드를 가지고 있음을 가르킨다. 각각은 n bytes 길이를 가지며, 여기서 n은 정수 값이다.
var은 파일이 가변길이 레코드를 가지고 있음을 가르킨다. 각각은 n bytes 길이를 가질수 있으며, 여기서 n은 각 레코드의 처음 5글자에 명시된 정수값이다.
만약 파일 처리 옵션이 선택되지 않는다면, 정보는 기본적으로 레코드의 스트림으로 처리된다(str). 여러분들은 fix mode가 기본적인 str mode 보다 더빠르다는 것을 느끼게 될 것이다. 왜냐하면 레코드의 종료를 찾을 필요 없기 때문이다.
고정길이 레코드를 포함한 파일을 읽기 위하여 fix 옵션을 사용할 때, 여기서 각각의 레코드는 newline 문자로 종료되며, SQL *Loader에게 레코드의 길이를 알릴때에는 newline의 길이를 포함시킨다.
예를 들면, 다음 파일을 읽으려면:
AAA newline BBB newline CCC newline
뒤에 붙는 newline 문자를 포함하여 fix 3 대신에 fix 4로 명시 해 줘야 한다.
마약 여러분들이 파일에서 마지막 레코드가 newline 문자를 가진 고정길이의 레코드로 종료하지 않는다면, 다른 레코드도 newline 문자로 종료할 수 없다. 유사하게, 만약 여러분들이 마지막 record를 newline으로 종료한다면 모든 레코드를 newline으로 종료할 수 있다.
|
WARNING: 일부 텍스트 편집기는, vi와 같은, 파일의 마지막 레코드를 자동으로 newline 문자로 종료시킨다. 이것은 만약 파일의 다른 레코드가 newline 문자로 종료 하지 않을 경우 불일치성을 야기 할수 있다. |
고정길이 레코드에서 newline 문자를 없애고자 한다면 그들을 올리는 것 보다는 control 파일에서 position(x:y) function을 이용한다. 이렇게 하기 위해서는 여러분들의 control file에 다음과 같이 입려하여 준다:
load data infile xyz.dat "fix 4" into table abc ( dept position(01:03) char )
이것이 종료되면, newline은 각각의 고정길이 record 에서 네번째 위치에 있기 때문에 없어지게 된다.
데이터베이스를 위한 control file의 크기를 결정하려면 Table 2-15에 있는 인자들 값을 이용하라.
| Parameter | Default Value | Maximum Value |
| MAXDATAFILES | 30 | 65534 |
| MAXINSTANCES | 1 | 63 |
| MAXLOGFILES | 16 | 255 |
| MAXLOGMEMBERS | 2 | 5 |
| MAXLOGHISTORY | 100 | 65534 |