사용자 도구

사이트 도구


database:oracle

Oracle Database

Docker Images

Docker 로 설치

  • 접속정보
    hostname: localhost
    port: 49161 # container port 1521
    sid: xe
    username: system
    password: oracle
  • APEX http://localhost:<dockerport>/apex/apex_admin 접속
    # container port 8080
    username: ADMIN
    password: admin
  • sqlplus
    docker exec -it -u oracle:dba oracle11gr2 /bin/bash
    # sqlplus 실행
    sqlplus "SYS/oracle" AS SYSDBA

Table Space와 사용자 추가

-- Table Sapace 추가
CREATE TABLESPACE <tablespace_name> 
    DATAFILE '<tablespace_name>.dbf' 
    SIZE 100M 
    AUTOEXTEND ON NEXT 10M;
 
CREATE USER <username> IDENTIFIED BY <password>
    DEFAULT TABLESPACE <tablespace_name>
    QUOTA UNLIMITED ON <tablespace_name>
    TEMPORARY TABLESPACE TEMP;
 
 
GRANT CONNECT, RESOURCE TO <username>;
  • 이제 <username> 사용자로 접속해서 작업한다.
  • 가급적 system 계정으로는 작업하지 말 것.

Version 확인

SELECT * FROM V$VERSION;
SELECT version FROM V$INSTANCE;

charset / characterset

  • 확인
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%'; 
-- NLS_CHARACTERSET : AL32UTF8
-- NLS_NCHAR_CHARACTERSET : AL16UTF16
 
SELECT VALUE$ FROM sys.props$ WHERE name='NLS_LANGUAGE';
SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_LANGUAGE'
-- AMERICAN
  • SQL을 이용한 변경 - 아래는 KO16MSWIN949로 변경하는 예인데, 되도록 AL32UTF8 사용할 것.
UPDATE props$ SET VALUE$='KO16MSWIN949' WHERE name='NLS_CHARACTERSET';
UPDATE props$ SET VALUE$='AL16UTF16' WHERE name='NLS_NCHAR_CHARACTERSET';
UPDATE sys.props$ SET VALUE$='KOREAN_KOREA.UTF8' WHERE name='NLS_LANGUAGE';
commit;
 
-- 모든 데이터베이스에 일괄 적용. 아래 작업을 안하면 오류 발생했음.
-- ORA-06552: PL/SQL: Compilation unit analysis terminated
-- ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다
-- ORA-06553: PLS-553: character set name is not recognized
 
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
 
ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
 
-- 재시작
shutdown IMMEDIATE
startup

TIMEZONE

권한 Grant

기본 Role

  • CONNECT : DB 접속 권한
  • RESOURCE : 객체(생성, 수정, 삭제), 데이터(입력, 수정, 조회, 삭제) 권한
  • DBA : 절대 권력?

Table 단위 권한 부여

-- 부여
GRANT SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] TO [USER];

-- 해제
REVOKE SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] FROM [USER];

Identifier too long

  • ORA-00972: identifier is too long(Oracle 데이터베이스 오류 972: ORA-00972: 식별자가 너무 깁니다)
  • 컬럼명, 테이블명 등의 식별자 길이는 30byte로 제한돼 있다.
  • 한글 컬럼명 등의 경우 인코딩에따라 UTF-8은 한 글자가 3byte 혹은 CP949 일 경우에는 2byte를 차지하기 때문에 생각보다 길어지게 된다.
  • JPA/Hibernate 에서 발생한다면 Hibernate Dialect alias 참조
database/oracle.txt · 마지막으로 수정됨: 2020/08/21 14:01 저자 kwon37xi