페이지

2012년 5월 30일 수요일

테이블스페이스 사용가능 공간확인

dba_data_files, dba_free_space 뷰 사용

select d.tn, round(total/1024/1024) total_mb,
round(free/1024/1024) free_mb,
to_char(round(free/total*100,1), '99.9')||'%' rate
from (select tablespace_name tn, sum(bytes) total
 from dba_data_files
 group by tablespace_name) d,
 (select tablespace_name tn, sum(bytes) free
 from dba_free_space
 group by tablespace_name) f
where d.tn=f.tn;

2012년 5월 29일 화요일

테이블 용량 확인

select segement_name, sum(bytes/1024/1024) Mbyte
from dba_extents
and segment_name='테이블명'
group by segment_name;

2012년 5월 17일 목요일

Hidden Parameter 조회

select a.ksppinm, b.ksppstvl
from x$ksppi a, x$ksppsv b
where a.indx=b.indx
and ksppinm like '_optimizer_cost_model';

x$ksppi 뷰의 ksppinm 컬럼=실제 파라미터 이름
ksppdesc=디스크립션정보

x$ksppsv 뷰의 ksppstvl 컬럼=해당 파라미터 값
두 뷰 공통적 컬럼=indx

2012년 4월 10일 화요일

admin ws1 다섯째날

* 권한: 특정 sql문을 실행하거나 다른 유저의 객체에 접근할수 있는 자격.
- system 권한: dba가 user에게 주는 권한으로. any라는 권한을 주는 상황이 많다. with admin option을 사용할 수 있으며 revoke시 해당 grantee에게 다시 권한을 할당받은 grantee의 권한은 제거되지 않아 보안상 문제가 생긴다.
- object 권한: owner가 user에게 주는 권한으로 with grant option 사용 가능하며 revoke시 해당 grantor에게 권한을 받은 grantee들의 권한도 같이 제거된다.
- select * from dba_tab_privs;

* sysdba와 sysoper 권한: sysdba는 superuser라고 볼수 있으나 sysoper는 db는 삭제할 수는 없고 다른 user data를 볼수도 없다.

* role
- role 안에 role을 넣을수도 있다.
- 인증을 통해 role 부여도 가능하다.
- role은 객체가 아니며 owner도 없고 어떤 스키마에도 속하지 않는다.
- 일반적으론 default role을 사용한다.
- set role role이름 으로 변경 가능.

* predefined role
- connect: create session
- resource: create cluster, create indextype, create operator, create procedure, create sequence, create table, create trigger, create type
 - resource는 unlimited tablespace 권한도 포함되어있다=quota가 먹지 않는다.=system tablespace도 사용 가능하다
- scheduler_admin: create any job, create external job, create job, execute any class, execute any program, manage scheduler
- dba: 대부분의 시스템 권한
- select_catalog_role: data dictionary에 대해 select만 가능하도록 부여할때 사용.
 - o7_dic_a: 제일 먼저 나오는 parameter이며 반드시 false여야 함. 이걸 true로 할 경우 모든 일반 user들이 다 dictinary를 조회 가능
 - select any table: 모든 스키마를 볼수 있지만 dictionary는 못봄
- select * from role_sys_privs;

* profile: 한계집합이라고도 한다. profile은 user가 하나씩 사용 가능하다.
- resource: resource_limit 파라메터가 true되어야만 사용 가능하다. 기본값 false. 즉 resource는 옵션
 - cpu per session: 1000으로 설정하면 10초로 설정됨. 세션당 10초를 넘어가는 경우 rollback+ logoff
 - cpu per call: 하나의 call이 한계값을 넘으면 rollback
 - network / memory
  - connect time
  - idle time
  - concurrent session: 한 client 측에서 사용가능한 동시 세션수로 실무에선 3개 주로 사용
 - private sga: 정렬, 비트맵 병합등에 사용되는 공간의 양 제한. shared server 사용하는 경우만 적용
 - disk I/O: read per call, read per session 사용가능

- password 보안
 - password history: 기존 pw 기록을 보관하며 조건을 제한함. 볼수는 없음
  - password_reuse_time: 주어진 일수동안 암호 재사용 불가
  - password_reuse_max: 이전 패스워드를 사용하기 위한 암호 변경 횟수
※위 두개의 파라메터는 함께 사용 불가. 하나를 수정하면 다른 하나는 unlimited여야함
 - password 복잡성
  - password_verify_function을 verify_function로 지정함. verify_function은 $ORACLE_HOME/rdbms/admin/utlpwdmg.sql 스크립트로 생성하는 함수
  - verify_function 주건: 최소길이 4, username과 동일할수 없음, 한개문자/한개숫자/한개특수문자 포함해야함, 이전 암호와 최소한 3자이상 달라야함.
 - password aging and expire
  - password_life_time: 암호만료수명. 일단위 지정
  - password_grace_time: 만료후 유예기간
※위 파라메터로 sys, sysman, dbsnmp 계정 lock이 되지 안도록 주의
 - password lock
  - password_login_attempts: 해당 로그인 횟수 실패시 lock
  - password_lock_time: lock시 lock되는 날짜

* default profile과 일반 profile
- user create시 명시하지 않으면 일반적으로 default profile을 사용하게 되며 도중에 다른 profile을 사용하게 되면 default profile은 해제가 된다. 다시 그 profile을 해제하면 default profile이 적용된다.

2012년 4월 9일 월요일

admin ws1 넷째날

* 공간 관점에서의 table space
- t/s를 쪼개면 segment, extent, db block
- 공간을 관리한다는 이야기는 segment, extent, block을 어떻게 관리할 것인가의 이야기

* t/s 만들때 type
- permanent: 일반적인 data file
- temporary: 정렬할때만 사용
- undo

* extent allovcation: extent
- extent 사이즈를 지정하는 방식
- auto: 서버가 필요한만큼 지정. extent 사이즈가 다 상이할 수 있음. 단편화 현상이 많아짐.
- uniform: 모든 extent 사이즈를 dba가 지정. 기본은 1M. 사이즈가 동일하기에 성능상 이점 있음.

* segment space management
- LMT를 선택하면 선택할 수 있는 기능으로 segment 관리 방법 설정
- auto: bitmap 방식. ASSM(Automatic Segment Space Management)
- manual: freelist를 조사함. 이전버젼과 호환성 위해서만 존재, auto 권장

* enable logging: t/s를 만들며 생기는 작업에 대한 로그를 남김. 보통 no

* predefined tablespace
- system: data dictionary  저장됨. SYS 스킴가 사용. user가 여길 사용하게 하면 hang 걸릴수 있음. 절대 r/o로 변경하면 안됨.
- sysaux: 10g부터 도입. system t/s에 보관할 수 잇는 사이즈를 넘는 정보를 저장.
- temp: index 생성이나 정렬을 위해 사용
- undotbs1
- users: 10g부터 default table space.
- example: sample schema

* segment 종류
- table: data segment
- index segment
- undo segment
- temp segment
- cache(boot strap) segment: system t/s에 존재하며 permanent type이나 데이터는 아닌 data dictionary이기에 따로 이름을 부르기 위해 cache segment라고 부른다고 생각하면 됨.

* offline 옵션
- normal: 일반적인 offline. t/s의 모든 data file에 오류조건이 없을 경우 offline됨. checkpoint 발생하므로 모든 데이터가 디스크에 기록됨.
- temporary: 오류조건이 있어도 임시로 t/s를 오프라인함. checkpoint 발생.
- immediate: checkpoint를 발생시키지 않고 즉시 offline으로 변경함. 단 noarchivelog 모드인 경우 불가. online으로 돌리려면 media recovery 필요.
- for recover: 이전 버젼 호환성위해서만 사용.

* t/s 삭제
- t/s를 삭제하면 datafile과의 연결을 끊기만 한다고 생각하면 된다. 옵션을 추가해야 데이터파일도 삭제할 수 있다.
- 사용자가 DML작업중인 경우 drop할 수 없기에 offline 후 drop을 권장한다.

* t/s 확인
- tablespace: dba_tablespace, v$tablespace
- datafile: dba_datafile, v$datafile
- temp file: dba_temp_file, v$tempfile

* db사이즈가 커지는 케이스
- t/s 생성
-기존t/s에 data file을 추가
-기본 datafile을 resizing으로 추가
-자동 확장기능 사용
* 계정에 속한 정보들
- user이름
- 인증방식
- default t/s: 생성시 따로 명시 안했으면 system defined default t/s 지정됨(USERS)
 - 9i까지는 system t/s가 sys defined default t/s여서 저장해서 문제가 많았다.
 - 따로 지정방법: creater user kim identified by kim default tablespace A;
- temp t/s: 생성시 따로 명시안했으면 system defined temp t/s 지정됨
- user profile
- consumer group: 나중에 resource manager에서 나옴
- lock state

* temporary t/s
- 정렬을 위한 t/s
- 정렬을 일으키는 작업: index 생성, order by, group by, union, minus 등
※튜닝에서 정렬을 없애는 것도 하나의 이슈
- pga에서 sort area가 있는데 정렬을 할때 이 메모리가 부족하면 temp t/s를 쓰게 된다.

* 인증방법
- password 인증: dictionary 인증 or db인증이라고도 함
 - user가 os의 인증을 받았다고 해도 db에 접속할경우 db의 인증을 다시한번 해야함.
 - remote로 접속할때 pw인증을 위해 pw 파일이 필요함.
- external 인증(os인증): OS의 kim user를 db에 등록해두면 db에 접근할때 sqlplus / 만으로 로그인 가능.
 - local 인증시는 큰 이슈가 없으나 remote로 os인증하여 로그인하면 보안에 허점 발생
 - OS_AUTHENTT_PREFIX=OPS$ -> create user OPS$kim identified by externally 로 구현

※DBA는 반드시 OS 파일 생성이나 삭제 권한을 가져야 한다.=시스템 admin과 자주 이것때문에 싸움





2012년 4월 5일 목요일

admin ws1 셋째날

* Parameter: 성능과 밀접한 관계
 - basic parameter 32개와 그 외 advanced parameter 가 있음.
 - 몇몇 항목들 예시
  ①control_file: c 파일의 위치, 이름. show parameter control_file 로 볼수 있음. control file이 담긴 디스크의 장애 등을 대비해 멀티플렉싱과 미러링을 권장함. 최대 파일 갯수는 8개
  ②db_block_size: 1k~64k까지 가능하다고 이론상 하지만 실제론 2k~32k밖에 안씀.
  ③db_cache_size: db_buffer_cache 총사이즈(내 instance는 0으로 나오네), 기본값은 48M
  ④db_nk_cache_size: 기본 블록사이즈에 해당하지 않는 data file을 불러들이는 경우가 있는데 이 경우 db_nk_cache_size를 사용하게 됨. 만약 기본 블록사이즈를 8k로 정한 경우 2,4,6,16,32k 단위의 datafile은 여기서 불러들이게 된다.
  ⑤db_file_multiblock_read_count: data file을 불러들이러 disk에 접근할때 한번에 여러개의 블록을 동시에 읽기 위한 카운트로 기본값은 8개.
  ⑥db_files: db에서 열수 있는 최대 data file 개수.기본 200개로(os따라 다름) 최대 maxdatafiles(os에 따라 다름)까지 가능.
  ⑦pga_aggregate_target: PGA의 크기 설정. 최소 10M, 최대 4096G. 기본값은 10M이거나 SGA의 20%중 큰 값(내건 90M, sga_targer은 262M. ???262M x 0.2: 52M인데?)
  ⑧process: 오라클 서버에 동시 연결할 수 있는 OS 사용자들의 최대 수.
  ⑨shared_pool_size: sps의 사이즈. 기본값: 16m
  ⑩undo_management: undo 관리 방법으로 보통 auto 사용.

* alert log
 - 위치: background_dump_dest 파라메터 위치의 aleart_<sid>.log 파일

* dynamic performance view: x$를 기반으로 만든 v$ 뷰, db 메모리에 직접 액세스해 지금 db의 상태를 보여준다.
 - v$ 가 붙으면 지금 현재 상태를 보여준다고 알면 된다.
 - v$의 종류는 v$fixed_table에 다 있음.

* data block
 - 행의 내용이 너무 커서 여러개의 블록에 행이 나누어져 들어갈 수도 있음. 이 경우를 chaining block 이라 함.
 - block header: 세그먼트 유형(테이블, 인덱스등), 데이터블록 주소, table directory(어느 테이블의 내용인가), row directory(행이 몇개 드러있나), transaction slot이 있음.
 - transaction slot: dml 작업을 진행하고 잎다면 block에 접근해야 하는데 이때 transaction slot이란 티켓을 얻어야 접근이 가능하다.
  ①block space parameter로 수정 가능
  ②initrans: 최소 티켓, 기본 값은 테이블의 경우 1, 인덱스는 2
  ③maxtrans: 255
 - free space: dml이 자주 발생하면 단편화가 생기는데 오라클 서버가 알아서 병합작업을 진행함.

* OMF(Oracle Managed file)
 - 반대는 UMF(User Managed file)
 - db_create_file_dest 파라메터만 수정해주면 알아서 파일이름, 사이즈를 정해서 생성한다.

* 테이블 스페이스 관리
 - table space를 쪼개 들어가면 extent 라는 공간으로 쪼개지는데 한 extent에 insert가 많이 일어나서 확장이 필요하다면 공간할당을 해야하는데, extent 공간 할당의 방법이 두가지로 나누어진다.
 ① LMT: Locally management table space. 일반적으로 이걸 쓴다. 표준화까지 됨.
   - table space 자신이 공간에 대한 정보를 bitmap을 통해 관리한다.
   - bitmap(전광판이라 생각하면 됨)으로 인접한 사용 가능 extent를 미리 파악해둔다.
 ②DMT: Dictionary management table space: 이전 버젼과 호환성때문에만 지원한다(8i 이전)
   - data dictionary에서 extent를 관리한다.
   - free extent에 대한 정보가 DIC에 저장되어 있는데(예: dba_extens) tablespace를 위한 extent 요구가 많아지면 경합이 발생한다.
   - freelist를 계속 유지하고 있기에 extent들에 대한 정보를 계속 갱신해야 한다=성능

2012년 4월 3일 화요일

admin ws1 둘째날

이전 review
*DB: 데이터들의 집합. 통합/저장/공유 가능한 데이터 집합, 저장 영역이 data file
     : control file + data file + redo log file을 합쳐 DB라고 함.

*control file: db이름, creation date, datafile 이름/위치, redo log 이름/위치, structure
                : control file이 마운트, 오픈해야 운영 가능

*database block size 8k: 기본값이며 standard block size, primary block size 라고도 부름
 -db 생성시 자동으로 생성되는 테이블은 8k 로 만들수밖에 없음: SYSTEM, SYSAUX
 -block size를 변경할 수도 있지만 변경하려면 SGA의 db duffer cache도 바꿔야하기에 instance 설정값 즉 parameter 파일도 변경이 필요하다.

*extent: 최소 5개의 블록을 모아 extent라고 한다. extent 안의 블록들은 반드시 연속적이어야 한다. segment가 더 필요할 때 extent 단위로 공간을 할당.
 - 시스템마다, table space를 만들때마다 extent 사이즈를 다르게 만들 수 있음.

*객체: data를 저장하기 위한 역할들을 수행하기 위해 저장하고 있는 것들을 객체라고 하고 객체들의 집합이 스키마이며 스키마들의 총 합을 DB라고 한다.

*객체들 중에서 extent가 필요한 객체들을 모은 것이 segment이다. 이들은 데이터 값들이 필요하기에 extent가 필요.

*segment가 저장되는 위치가 Table Space

*예를 들어 u01.dbf 파일이 1G이고 users table space와 연결되어 있고 얘밖에 없으면 users table space의 용량은 1G이다. 논리적으로는 users table space가 되는거고, 물리적으론 u01.dbf 파일이 된다. 만약 user가 emp 테이블을 만든다면 u01.dbf 내에 만들게 된다.

*EM 주소: http://hostname:1158/em
isql주소: http://hostname:5560/isqlplus
리스너 포트번호: 1521

*isqlplus에 로그인시 SYS 사용자로는 로그인 불가. isqlplus dba를 써야하는데 webdba란 롤을 만들어줘야 한다.
11g에선 없어지고 developer로 통합되었다.

*sqlplus hr/hr @script.sql: 로그인후 바로 sql 스크립트 실행

*DB startup 상태

1. shutdown 상태
 - offlie, closed 상태
 - Backup & recovery 진행 가능
 - SYSDBA, SYSOPER만 startup 가능

2. Nomount 상태
 - Instance만 올린 상태: SGA, Background process, alert + trace log file 활성화됨
 - Instance를 올리려면 Parameter 파일이 필요.
  ① server parameter file: 우선순위가 높음 spfile<sid>.ora 형식이며 직접 수정은 불가하고 ALTER system set 명령으로 수정가능, 재시작 필요 없음, 9i부터 생김
  ② pfile: init<sid>.ora 형식이며 직접 수정 가능하나 적용하려면 db 재시작 필요.
  -pfile로 시작하려면 startup pfile='경로/이름'
 - ALTER DATABASE nomount
 - SYSDBA, SYSOPER만 접속 가능
 - Create DB, Create Control file(Recreation) 진행 가능
3. Mount 상태
 - Control file를 올리면서 Instance file과 결합됨: Parameter 파일에 instance name, dbname참조
 - Control file의 위치는 Parameter 파일에 적힘.
 - Control file에 data file, online redo log file 의 위치와 이름이 적혀있으나 실제 존재하는지는 확인하지 않는다.
 - ALTER DATABASE mount
 - DBA만 접속 가능
 - DB mode 변경(no archive log mode, archive log mode), db 전체 full 복구, DB 구조 변경

4. Open 상태
 - 일반유저도 들어올 수 있는 상태
 - 이때도 Control file을 읽어들이며 Data file, Online redo log file의 존재여부도 체크한다.
   만약 두 파일이 없다면 error가 나타나며 recovery mode로 진입한다 by SMON
 - ALTER DATABASE open


* Shutdown 종류

 - Abort: 아주 비정상적인 종료
 - shutdown abort나 Instance failure나 startup force 하게 되면 db 일관성이 떨어진다.
  -수행중인 sql 문장이 terminate, 접속중인 user 강제끊김, db와 redo log buffer가 disk에 쓰여지지도 않음, commit 안된 tx가 rollback되지도 않음, 파일을 닫지 않고 instance가 종료됨.
  - 비정상적인 종료 후에는 instance recovery를 해줘야 하는데 이건 SMON이 자동으로 해준다

* Startup
 - Startup force: 강제 재시작
 - Startup restrict: 특정 사용자(dba나 sys?)를 제외한 다른 사용자의 접속을 막으며 open