반응형

1. ALTER TABLE 테이블명_1 NOLOGGING;

    - 해당 테이블에서 작업시 훨씬 적은 양의 redo log만을 생성한다.

    - NOLOGGING으로 변경했던 테이블은 사용 후 다시 LOGGING 상태로 변경하는게 좋다.

 

2. insert /*+append*/ into 테이블명_1

    - APPEND 힌트를 줌으로써 DIRECT PATH INSERT가 가능하도록 한다.


3. insert /*+ PARALLEL(테이블명 프로세스수) */

    - 병렬처리 힌트를 줌으로 작업 속도가 증가한다.


4. CREATE INDEX 인덱스 명 ON 테이블명 (필드)

   TABLESPACE 테이블스페이스명

   NOLOGGING

   PARALLEL 8;

    - 인덱스 생성시에도 NOLOGGING과 PARALLEL을 적용하여 사용 할 수 있다

       다만 인덱스 생성 후 LOGGING 처리와 NOPARALLEL로 변경 적용 하여야 로깅처리 및 프로세스 사용을 적게 하게 된다.

       PARALLEL을 변경하지 않으면 생성시 사용한 프로세스 단위로 조회도 하게 되니 참고 !

    - ALTER INDEX 인덱스명 LOGGING NOPARALLEL;



5. 대량 테이블 SELECT 쿼리 수행시 시스템 자원을 활용하여 수행시간을 단축 시킬때 PARALLEL 힌트를 많이 사용한다.

   SELECT /*+ PARALLEL(테이블명) */ FROM 테이블명


6. DML 문장 (INSERT, DELETE, UPDATE)를 병렬로 수행하기 위해서는 현재 접속중인 세션을 DML로 지정해야만 병렬처리가 가능하다.

   ALTER SESSION ENABLE PARALLEL DML;

   사용 후 해당 세션의 DML을 해제 해주는게 좋다.

   ALTER SESSION DISABLE PARALLEL DML;


7. 

-- 1. 테이블 스페이스 사용량
SELECT   SUBSTR(A.TABLESPACE_NAME,1,30) TABLESPACE,
         ROUND(SUM(A.TOTAL1)/1024/1024,1) "TOTALMB",
         ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1) "USEDMB",
         ROUND(SUM(A.SUM1)/1024/1024,1) "FREEMB",
         ROUND((ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1))/ROUND(SUM(A.TOTAL1)/1024/1024,1)*100,2) "USED%"
FROM
         (SELECT   TABLESPACE_NAME,0 TOTAL1,SUM(BYTES) SUM1,MAX(BYTES) MAXB,COUNT(BYTES) CNT
          FROM     DBA_FREE_SPACE
          GROUP BY TABLESPACE_NAME
          UNION
          SELECT   TABLESPACE_NAME,SUM(BYTES) TOTAL1,0,0,0
          FROM     DBA_DATA_FILES
          GROUP BY TABLESPACE_NAME) A
GROUP BY A.TABLESPACE_NAME
ORDER BY TABLESPACE;

-- 2. 테이블 스페이스별 전체 용량 확인
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 TOTAL_SIZE
FROM    DBA_DATA_FILES
GROUP BY TABLESPACE_NAME;

-- 3. 테이블 스페이스 파일별 남은용량 확인
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 FREE_SIZE
FROM    DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME;

-- 4. 테이블 스페이스 파일 확인
SELECT * FROM SYS.DBA_DATA_FILES;

-- 5. 테이블 스페이스 추가
ALTER TABLESPACE 테이블 스페이스명 ADD DATAFILE '데이터파일 경로 및 파일명.DBF' SIZE 30720M AUTOEXTEND ON;

-- 6. TEMP 테이블 스페이스 추가
ALTER TABLESPACE 테이블 스페이스명 ADD TEMPFILE '데이터파일 경로 및 파일명.DEF' SIZE 30720M AUTOEXTEND ON;

-- 7. 쿼리 실행 시간 확인
SET TIMING ON;

-- 8. 대량 데이터 인덱스 생성시 Sort area size 조절
ALTER SESSION SET SORT_AREA_SIZE = 10000000; -> 10M

--9. 실행중인 SQL확인용
SELECT a.osuser, a.SID, a.serial#, a.status, b.sql_text
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address


반응형

사용방법

원격지에서도 사용가능합니다.

 

 


1. 디렉토리 조회하기

  select * from dba_directories;


2. 디렉토리 추가하기

  create directory dpump_dir as '/DATA/oracle';


3. 디렉토리 삭제 (잘못 입력 했을 경우 삭제)

  drop directory dpump_dir;


4. 디렉토리에 대한 권한 설정

grant read, write on directory dpump_dir to 사용자(또는 public);


5. expdp (oracle 계정 접속 후 사용 -> # su - oracle)

스키마(owner) 기준

$ expdp 사용자/비번 directory=2번에서 추가한 디렉토리 schemas=스키마명 dumpfile=파일명.dmp logfile=파일명.log

전체

$ expdp dpsp/dpsp dumpfile=파일명.dmp directory=2번에서 추가한 디렉토리 full=y logfile=파일명.log job_name=dpspfullexp

 

5.1 cmd 에서 사용방법

스키마(owner) 기준

expdp 사용자/비번@111.111.11.1:1521/orcl directory=2번에서 추가한 디렉토리 schemas=스키마명 dumpfile=파일명.dmp logfile=파일명.log

전체

expdp 사용자/비번@111.111.11.1:1521/orcl directory=2번에서 추가한 디렉토리 full=y dumpfile=파일명.dmp logfile=파일명.log


* expdp 실행모드


 - full 모드 : 데이터베이스 전체를 export 받을수있다

 - schema(owner) 모드 : schema 파라미터를 사용하여 특정 스키마 전체를 받을수있다.

 - tablespace 모드 : 해당 tablespace에 속한 모든 테이블을 받을수있습니다.

   transport_tablespace파라미터를 사용한다면 테이블과 테이블스페이스의 메타데이터도 받을수있습니다.

   단!!! transport_tablespace를 사용하려면 양쪽 OS가 같고 blocksize와 characterset 이 같아야 합니다.


 * expdp 파라미터


 - directory : 디렉토리 오브젝트를 지정하여 덤프 파일의 위치로 로그파일의 위치 지정가능

 - dumpfile : 파일시스템에 저장될 덤프파일의 이름을 지정해주는 파라미터로 파일이 여러개로 나누어질때 %U로 파일 이름을 고유하게 구분해 줄수 있다.

 - filesize : 한개 파일의 최대 크기를 지정

 - parfile : 파라미터 파일을 참조하여 사용

 - logfile/nologfile : 작업내용을 저장 할 로그파일명을 지정

 - content: 작업시 어떤 내용을 포함시킬 것인가를 결정

     All :테이블과 메타데이터를 모함한 모든것

     DATA_only:테이블 데이터만 포함 

     Metadata_only:메타데이터만 포함


 - exclude/include : 작업시 원하는 오브젝트만 선택하여 작업

   ex)scott schema 의 모든 것을 expdp 받되 emp,dept 테이블만 제외할경우

   expdp scott/tiger directory=datapump dumpfile=scott01.dmp schemas=scott exclude=table:\"IN\(\'EMP\',\'DEPT\'\)\"


 - query : 특정 조건에 맞는 데이터만 expdp 를 수행할 경우

 - sample : 데이터를 export할때 데이터가 너무 많을 경우 특정 퍼센트를 지정해서 추출 범위는 0.000001~100%

 - network_link : 원격으로 expdp할때 이기능은 DB link가 생성되어있어야 합니다

 - encrytion_password : expdp받은 테이블중에 특정 컬럼이 encryption되어있는경우 작업시 암호를 설정가능

 - job_name : 작업 수행시 job에 이름을 설정할수있습니다. 설정을 하지않으면 오라클이 자동으로 설정

 - status : 이 파라미터는 작업시 갱신된 내용을 status 설정된 시간 간격으로 진행상태를 보여주게 됩니다.

 - parallel : 작업수행시 프로세스를 몇 개를 사용 할 것인가를 지정하는 파라미터입니다. 주의할점은 지정된 개수만큼의 데이터 파일을 만들어 주어야하는데 앞에서 배운 %U 옵션을 주면 자동으로 생성 

 - attach : 일시 중단된 작업에 다시 접속 할때 사용

     ex) expdp scott/tiger job_name=dp1

       attach 모드 옵션

       add_file : 덤프파일을 추가

       exit:job 의 작업에서 빠져나감 

       kill_job : 해당 작업을 삭제

       parallel : 현재 작업중인 프로세스의 개수를 조절

       start_job :중단된 작업을 다시 시작 

       status : 현재 작업을 모니터링하는 시간조절

       stop_job : 현재 작업을 중단


6.impdp

  impdp 사용자/비번 dumpfile=파일명.dmp directory=dpump_dir2 schemas=스키마명 logfile=파일명.log


 * impdp 관련 파라미터


 * impdp 관련 파라미터는 거의 expdp와 비슷한 것이 많아서 중복설명은 생략하겟으니 expdp를 참고하세요


 - content

 - include 

 - exclude

 - table_exists_action : impdp 에 만 있는 옵션으로 동일한 이름의 테이블이 존재할 때 테이블의 데이터가 다를 경우가 있습니다.

     skip : 같은 테이블을 만나면 건너뛰고 다음테이블을 impdp 함

     append : 같은 테이블을 만나면 기존내용에 데이터를 추가

     truncate : 같은 테이블을 만나면 기존 테이블을 truncate 하고 새로 impdp 합니다

     drop : 기존 테이블을 drop하고 테이블을 새로 만들어서 새로운 내용을 impdp 합니다


 - remap_schema : scott user로 expdp 받은 테이블을 다른 유저로 impdp 할때 사용

     ex)impdp system/oracle directory=datapump dumpfile=scott.dmp schemas=scott include=table:\"\=\'emp\'\" remap_schema=scott:hr


 - remap_datafile : 기존 서버의 데이터파일 정보를 이전 후 서버의 데이터파일로 매핑해주는 파라미터

   expdp 된 덤프 파일 안에 데이터 파일 정보를 가지고 있는 경우만 사용가능

     ex)impdp system/oracle full=y directory=datapump dumpflie=full01.dmp  remap_datafile='/data1/users01.dbf':'/data2/users01.dbf'


 - remap_tablespace : 기존 테이블스페이스에서 다른 테이블스페이스로 테이블을 impdp시킬때 사용

     ex) impdp system/oracle directory=datapump dumpfile=scott.dmp remap_tablespace ='users1':'users2' schemas=scott;


     ex) impdp system/oracle directory=datapump dumpfile=scott.dmp remap_tablespace =users1_data:users2_data, users1_index:users2_index schemas=scott;


     ex) impdp system/oracle directory=datapump dumpfile=scott.dmp schemas=scott remap_schema=scott:scotttest remap_tablespace=users1_data:users2_data include=table:"in ('EMP','DEPT','SAL')" logfile=scott_impdp.log


     ex) impdp system/oracle directory=datapump dumpfile=scott.dmp schemas=scott remap_schema=scott:scotttest remap_tablespace=users1_data:users2_data include=table:\"in \(\'EMP\',\'DEPT\',\'SAL\'\)\" logfile=scott_impdp.log


     ps : 테이블명 대문자~~


- network_link



출처: https://cofs.tistory.com/72 [CofS]

반응형


[출처] Oracle DataBase 문자셋과 언어셋 확인 및 변경하기|작성자 시골사람


A db에서 export 한 것을 B db로 import 하려니 한글이 들어있는 칼럼의 경우에 사이즈가 맞지 않다고 나온다.
디비에 대해서 전혀 고려하지 않고 내리고 올리려고 했던터라 혹시나해서 보니 역시나 디비의 캐릭터가 다르더라.

그나저나 이 경우에는 기존에 데이터가 없어서 그냥 바꿔도 괜찮더라.

잘 정리된 글을 보고 따라했기에 그 글을 올린다.

Oracle DataBase 문자셋과 언어셋 확인 및 변경하기Oracle DataBase 문자셋과 언어셋 확인하기

 
[ 문자셋 확인 ]
SELECT name, value$
FROM sys.props$
WHERE name = 'NLS_CHARACTERSET';

SELECT name, value$
FROM sys.props$
WHERE name = 'NLS_NCHAR_CHARACTERSET';

[ 언어셋 확인 ]
SELECT name, value$
FROM sys.props$
WHERE name = 'NLS_LANGUAGE';

Oracle DataBase 문자셋과 언어셋 변경하기

 
- 문자셋 변경 : Oracle DataBase 관리자로 접속하여 NLS_CHARACTERSET, NCHAR의 CHARACTERSET에 원하는 문자셋을 변경할 수 있다.
- 언어셋 변경 : 문자셋과 마찬가지로 오라클 데이터베이스 관리자로 접속하여 NLS_LANGUAGE에 원하는 언어셋을 변경할 수 있다.

[ 문자셋 변경 ]
UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]'
WHERE name = 'NLS_CHARACTERSET';

UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (KO16KSC5601, AL32UTF8 등)]'
WHERE name = 'NLS_NCHAR_CHARACTERSET';

[ 언어셋 변경 ]
UPDATE sys.props$
SET value$ = '[ 변경을 원하는 문자셋 (AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.AL32UTF8등)]'
WHERE name = 'NLS_LANGUAGE'';
Oracle Character set 변경 자세히...............
####################################################
#### .bash_profile 환경변수
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=$ORACLE_BASE/oracle/product/10.2.0/db_1
export ORACLE_SID=ora10
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
#export LD_ASSUME_KERNEL=2.4.19
export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG=KOREAN_KOREA.KO16KSC5601 #한글
export NLS_LANG=KOREAN_KOREA.KO16MSWIN949 #한글(추천:지원캐릭터가 더 많음 -뷃,숖..)
export NLS_LANG=AMERICAN_AMERICA.UTF8 #유니코드



####################################################
#### 캐릭터 셋 설정 확인

SELECT NAME,VALUE$ FROM PROPS$ WHERE NAME ='NLS_LANGUAGE' OR NAME ='NLS_TERRITORY' OR NAME ='NLS_CHARACTERSET';


####################################################
#### 오라클 캐릭터 셋 변경

update props$ set VALUE$='UTF-8' where name='NLS_CHARACTERSET';
update props$ set VALUE$='KO16MSWIN949' where name='NLS_CHARACTERSET';
update props$ set VALUE$='KO16KSC5601' where name='NLS_CHARACTERSET';

update props$ set VALUE$='KOREAN' where name='NLS_LANGUAGE';
update props$ set VALUE$='KOREA' where name='NLS_TERRITORY';



####################################################
#### 캐릭터 셋 변경후에 확인 사항(필수)

에러 유형 :
EXP-00008: ORACLE 오류 6552가 발생했습니다
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다


Problem description
===================
You receive the following error when (re)compiling or calling a piece of pl/sql:
ORA-06550: line <num>, column <num>: ....
or
ORA-06552: PL/SQL: Compilation unit analysis terminated
followed by
ORA-06553: PLS-553: character set name is not recognized
에러 원인 : character set 이 섞여있음.



캐릭터셋 확인 쿼리 :
select distinct(nls_charset_name(charsetid)) CHARACTERSET,
decode(type#, 1, decode(charsetform, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'),
9, decode(charsetform, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
96, decode(charsetform, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112, decode(charsetform, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
from sys.col$ where charsetform in (1,2) and type# in (1, 9, 96, 112);

캐릭터셋 확인 쿼리 결과(잘못된 경우): varchar2가 2개 의 캐릭터셋이 설정되어있음.
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
US7ASCII CHAR
US7ASCII VARCHAR2
WE8DEC VARCHAR2
US7ASCII CLOB


캐릭터셋 확인 쿼리 결과(정상인 경우): TYPES_USERD_IN 하나당 하나의 캐릭터셋
CHARACTERSET TYPES_USED_IN
-----------------------------------------------------
AL16UTF16 NCHAR
AL16UTF16 NVARCHAR2
AL16UTF16 NCLOB
AL32UTF8 CHAR
AL32UTF8 VARCHAR2
AL32UTF8 CLOB


해결 방법 : 

1. INIT.ORA 안에 있는 parallel_server parameter 가 false 거나 아예 세팅되어있지 않은지 확인.
SQL>show parameter parallel_server

2. sqlplus "/as sysdba"로 다음 쿼리 실행(기존 데이터 백업 필수)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

-- UTF8로 바꿀 경우(선택)
ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;

-- 한글로 바꿀 경우(선택)
ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;

-- oracle reboot 2번.
SHUTDOWN IMMEDIATE;
STARTUP;
SHUTDOWN IMMEDIATE;
STARTUP;

3. parallel_server parameter 수정한 경우 원복.




'SQL > Oracle' 카테고리의 다른 글

Oracle 관리시 유용한 쿼리  (1) 2019.02.13
오라클 데이터 백업 및 복원  (0) 2019.02.13
오라클 사용자 생성 및 권한주기  (0) 2018.08.27
반응형

출처: http://fordev.tistory.com/23 [개발자를 위하여...]


sql command line 접속시 sys 로그인 처리


connect sys/oracle as sysdba



1. 계정의 테이블 스페이스 생성

create tablespace [tablespace_name] 
datafile '/home/oracle/oradata/DANBEE/[file_name].dbf' size 500m;

예)
CREATE TABLESPACE ADMIN DATAFILE 'D:\ORACLE\ORADATA\XE\ADMIN.dbf' SIZE  500M ;


2. 오라클 유저 만들기

CREATE USER [user_name] 
IDENTIFIED BY [password]
DEFAULT TABLESPACE [tablespace_name]
TEMPORARY TABLESPACE TEMP;

예)
CREATE USER nextree IDENTIFIED BY nextree DEFAULT TABLESPACE NEXTREE TEMPORARY TABLESPACE TEMP;


3. 생성한 USER에 권한주기

GRANT connect, resource, dba TO [user_name];

예)
grant connect, dba, resource to 유저명; (모든 권한 주기)

GRANT CREATE SESSION TO 유저명         // 데이터베이스에 접근할 수 있는 권한
GRANT CREATE DATABASE LINK TO 유저명
GRANT CREATE MATERIALIZED VIEW TO 유저명
GRANT CREATE PROCEDURE TO 유저명
GRANT CREATE PUBLIC SYNONYM TO 유저명
GRANT CREATE ROLE TO 유저명
GRANT CREATE SEQUENCE TO 유저명
GRANT CREATE SYNONYM TO 유저명
GRANT CREATE TABLE TO 유저명             // 테이블을 생성할 수 있는 권한
GRANT DROP ANY TABLE TO 유저명         // 테이블을 제거할 수 있는 권한
GRANT CREATE TRIGGER TO 유저명 
GRANT CREATE TYPE TO 유저명 
GRANT CREATE VIEW TO 유저명

GRANT  
 CREATE SESSION
,CREATE TABLE
,CREATE SEQUENCE   
,CREATE VIEW
TO 유저명;

4. 생성한 USER로 ORACLE에 접속하기

sqlplus nextree/nextree[@db_sid]


5. 계정 삭제하기

drop user 사용자계정 cascade;

-- 테이블 스페이스 크기 확장해주는 쿼리문
alter database 
datafile 'D:\oracle\oradata\XE\ADMIN.DBF'  resize 900M;

--테이블 스페이스 정보 보는 쿼리문 
SELECT file_name, tablespace_name, bytes, status FROM  DBA_DATA_FILES;

--테이블 명시적 인덱스 생성
--1번째 방법
CREATE INDEX MSID_IDX1 ON TEST(MSID)
--2번째 방법
create index test1_test on test1(test) 
tablespace users 
storage 

initial 10k 
next     10k 
pctincrease 0) 
pctfree 10

--테이블 정보 보는 쿼리
select * from user_constraints-- where table_name = upper('test1');

--ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다 해결 방법 
select a.sid, a.serial# 
from v$session a, v$lock b, dba_objects c 
where a.sid=b.sid and 
b.id1=c.object_id and 
b.type='TM' and 
c.object_name='CAR_INFO';

alter system kill session '12, 27846';

-- CAR_INFO에는 있는 값을 DASH_BOARD에 넣기
INSERT INTO DASH_BOARD(CAR_LICEN_NUM)
SELECT CAR_LICEN_NUM FROM CAR_INFO
MINUS
SELECT CAR_LICEN_NUM FROM DASH_BOARD


SYSTEM 계정 패스워드 변경하기
사용자계정 : /as sysdba

alter user system identified by "암호";
일반 스트링은 관계없지만 특수문자가 있을경우 반드시 "" 따옴표로 감싸준다.


1. 전체 단위(오라클 DB 전체)


덤프(익스포트) |

C:\) exp userid=system/비밀번호 file='C:\파일명.dmp' full=y


임포트 |

C:\) imp userid=system/비밀번호 file='C:\파일명.dmp' full=y



2. 사용자 단위(특정 계정/사용자의 DB )


덤프(익스포트) |

C:\) exp userid=계정명/비밀번호 file='C:\파일명.dmp' 


임포트 |

C:\) imp userid=계정/비밀번호 file='C:\파일명.dmp' 



3. 테이블 단위(특정 계정의 특정 테이블만을 추출)


덤프(익스포트) |

C:\) exp userid=계정명/비밀번호 file='C:\파일명.dmp' tables=테이블명


임포트 |

C:\) imp userid=계정명/비밀번호 file='C:\파일명.dmp' 

+ Recent posts