SHOW PARAMETER 파라미터명;
show parameter NLS_LENGTH_SEMANTICS;
2. toad나 오렌지, SQL Developer에서는 데이터 딕셔너리인 시스템 뷰에서 조회를 할 수 있다.
SELECT name, type, value
FROM SYS.V_$PARAMETER
WHERE name = '파라미터명';
SELECT NAME, TYPE, VALUE
FROM SYS.V_$PARAMETER
WHERE NAME IN('TEMP_UNDO_ENABLED', 'UNDO_MANAGEMENT', 'UNDO_RETENTION', 'UNDO_TABLESPACE');
Toad, Orange와 같은 Tool에서는 "ctrl+e" 눌러서 예상 실행계획을 편하게 확인하는 경우가 있으나 자세한 정보를 보기 위해서는 아래와 같이 따라한다.
SELECT * FROM T_ORD WHERE ORD_SEQ = 4;
위 쿼리를 예상 실행계획으로 실행하고 싶은 경우엔 아래와 같이 실행한다.
-- 실행계획 만들기
EXPLAIN PLAN FOR
SELECT * FROM T_ORD WHERE ORD_SEQ = 4;
-- 실행계획 확인하기
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
위와 같이 쿼리 2문장을 순서대로 각각 실행하면 아래와 같이 예상 실행계획 결과가 나온다.
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 44 | 2 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| T_ORD | 1 | 44 | 2 (0)|
|* 2 | INDEX UNIQUE SCAN | PK_T_ORD | 1 | | 1 (0)|
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("ORD_SEQ"=4)
-- Id : 실행계획의 오퍼레이션 ID (구분자, 순서아님)
-- Operation : 해당 단계에 수행한 작업 내용
-- Name : 해당 단계에 작업을 수행한 대상 오브젝트(테이블 또는 인덱스)
-- Rows : 해당 단계 수행 시 조회될 예상 데이터 건수
-- Bytes : 해당 단계까지 사용될 예상 데이터양(누적)
-- Cost (%CPU) : 해당 단계까지 사용될 예상 비용(누적)
실제 실행계획
SELECT *
FROM T_ORD T1
, M_CUS T2
WHERE T1.CUS_ID = T2.CUS_ID
AND T1.ORD_DT >= TO_DATE('20170101','YYYYMMDD')
AND T1.ORD_DT < TO_DATE('20170201','YYYYMMDD')
AND T2.CUS_GD = 'A';
위 쿼리를 실제 실행계획으로 실행하고 싶은 경우엔 아래와 같이 실행한다.
1번 : 실제 실행계획 만들기(hint 추가)
SELECT /*+ GATHER_PLAN_STATISTICS */
*
FROM T_ORD T1
, M_CUS T2
WHERE T1.CUS_ID = T2.CUS_ID
AND T1.ORD_DT >= TO_DATE('20170101','YYYYMMDD')
AND T1.ORD_DT < TO_DATE('20170201','YYYYMMDD')
AND T2.CUS_GD = 'A';
2번 : 실제 실행계획을 만든 SQL의 SQL_ID찾아내기
SELECT T1.SQL_ID ,T1.CHILD_NUMBER ,T1.SQL_TEXT
FROM V$SQL T1
WHERE T1.SQL_TEXT LIKE '%GATHER_PLAN_STATISTICS%'
ORDER BY T1.LAST_ACTIVE_TIME DESC;
3번 : 실제 실행계획 조회하기(각자의 SQL_ID, CHILD_NUMBER를 사용할 것)
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('3ykn80uy9n32d',0,'ALLSTATS LAST'));
-- Starts : 해당 단계를 수행한 횟수
-- E-Rows : 해당 단계의 예상 데이터 건수
-- A-Rows : 해당 단계의 실제 데이터 건수
-- A-Time : 해당 단계까지 수행된 실제 시간(누적)
-- Buffers : 해당 단계까지 메모리 버퍼에서 읽은 블록 수(논리적 IO 횟수, 누적)
-- Reads : 해당 단계까지 디스크에서 읽은 블록 수(물리적 IO 횟수, 누적)
-- OMem : SQL 처리를 위해 사용한 메모리 수치
-- 1Mem : SQL 처리를 위해 사용한 메모리 수치
-- Used-Mem : SQL 처리를 위해 사용한 메모리 수치
Sysdate : 02/15/2011 14:25:22 1분 전 : 02/15/2011 14:24:22 2분 전 : 02/15/2011 14:23:22 5분 전 : 02/15/2011 14:20:22 10분 전 : 02/15/2011 14:15:22 10분 전 : 02/15/2011 14:15:22 30분 전 : 02/15/2011 13:55:22 1시간 전 : 02/15/2011 13:25:22 1일 전 : 02/14/2011 7일 전 : 02/08/2011 30일 전 : 01/16/2011 6AM 전 : 02/15/2011 18:00:00 2PM 전 : 02/15/2011 22:00:00
Sysdate : 02/15/2011 14:19:34 1분 후 : 02/15/2011 14:20:34 2분 후 : 02/15/2011 14:21:34 5분 후 : 02/15/2011 14:24:34 10분 후 : 02/15/2011 14:29:34 10분 후 : 02/15/2011 14:29:34 30분 후 : 02/15/2011 14:49:34 1시간 후 : 02/15/2011 15:19:34 1일 후 : 02/16/2011 7일 후 : 02/22/2011 30일 후 : 03/17/2011 6AM 후 : 02/16/2011 06:00:00 2PM 후 : 02/16/2011 02:00:00
Oracle 10g 부터는 데이터의 백업과 복원을 위해서 기존에 사용되는 exp/imp툴을 대신할 Oracle Data Pump(expdp/impdp) 유틸리티가 제공되어 집니다. exp/imp 툴이 없어진것은 아닙니다. Oracle 11g 부터는 기존의 Original exp/imp툴에 대한 일반적인 사용지원이 되지 않는다고 합니다.
Oracle Data Pump 유틸리티는 더욱 유연하고, 빠른 속도의 기존의 exp/imp를 대체할 유틸리티 라고 합니다. 기존의 exp/imp와의 차이점을 간단히 알아보겠습니다.
1. exp/imp는 덤프 파일을 유틸리티를 실행하는 컴퓨터에 생성합니다. expdp/impdp 는 덤프 파일이 데이터베이스 서버의 지정된 폴더에 생성됩니다. 즉, 덤프 파일을 받고 올리기 위해서 서버에 로그인해야만 합니다.
2. exp/imp는 덤프파일이 생성된 서버의 버전이 다를 경우 호환이 되지 않습니다. 메이저 버전 뿐만 아니라, 마이너 버전 사이에도 호환이 거의 안되는것 같습니다. expdp/impdp 는 실행시 버전을 지정하여 그에 맞는 덤프 파일을 생성할 수 있습니다.
4. DB dump 파일(.dmp)을 복사하여 목적지 DB가 있는 PC 또는 서버에 복사한다.
5. import하기 전, 출발지 DB에서 tablespace 구성을 확인한다.
1> 목적지 db에서 sqlplus 또는 toad, orange for oracle에 system 계정으로 접속하여 tablespace 경로를 확인한다.
SELECT SUBSTRB(TABLESPACE_NAME, 1, 10) AS "테이블스페이스"
,SUBSTRB(FILE_NAME, 1, 50) AS "파일명"
,TO_CHAR(BLOCKS, '999,999,990') AS "블럭수"
,TO_CHAR(BYTES, '99,999,999') AS "크기"
FROM DBA_DATA_FILES
ORDER BY TABLESPACE_NAME, FILE_NAME;
2> tablespace 편집을 누르면 옵션을 확인할 수 있다.
6. 목적지 DB의 tablespace와 비교하여 없는 tablespace를 목적지 DB에서 다 생성할 준비를 한다.
- 목적지에서 DATAFILE의 경로는 자유롭게 확인하여 설정한다. (위에 5-1 쿼리로 확인 가능)
CREATE TABLESPACE TS_TEMP
DATAFILE 'D:\app\82103\oradata\orcl\TS_TEMP.DEF'
SIZE 10M
AUTOEXTEND ON NEXT 1M
MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK OFF;
7. 출발지 DB에서 사용했던 DB계정과 동일하게 목적지 DB에서 생성하고, 권한을 부여한다. (PW는 달라도 됨)
오류 보고 - ORA-01031: insufficient privileges 01031. 00000 - "insufficient privileges" *Cause: An attempt was made to perform a database operation without the necessary privileges. *Action: Ask your database administrator or designated security administrator to grant you the necessary privileges